|
@@ -21,6 +21,8 @@ using IMCS_CCS.Model;
|
|
|
using MySqlX.XDevAPI.Common;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Org.BouncyCastle.Ocsp;
|
|
|
+using System.Text;
|
|
|
+using IMCS.CCS.Entitys.Dto;
|
|
|
|
|
|
namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
@@ -79,8 +81,13 @@ namespace IMCS.CCS.Service.Impl
|
|
|
|
|
|
private string imcs_redis_key = "IMCS_CCS:";
|
|
|
|
|
|
+ private string RFID = "RFID:";
|
|
|
+
|
|
|
private string LOG_RESOURCE_STATE = "设备状态";
|
|
|
|
|
|
+ private static List<string> sList = new List<string>();
|
|
|
+
|
|
|
+ private static List<string> jList = new List<string>();
|
|
|
public IConfiguration Configuration { get; }
|
|
|
|
|
|
|
|
@@ -116,6 +123,17 @@ namespace IMCS.CCS.Service.Impl
|
|
|
syncStatusMap.Add("在线", 1);
|
|
|
syncStatusMap.Add("掉线", -1);
|
|
|
|
|
|
+ if(sList.Count == 0)
|
|
|
+ {
|
|
|
+ sList.Add("201");
|
|
|
+ sList.Add("202");
|
|
|
+ }
|
|
|
+ if (jList.Count == 0)
|
|
|
+ {
|
|
|
+ jList.Add("1");
|
|
|
+ jList.Add("2");
|
|
|
+ jList.Add("3");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -376,6 +394,107 @@ namespace IMCS.CCS.Service.Impl
|
|
|
return "当前操作模式非自动并运行";
|
|
|
}
|
|
|
|
|
|
+ // start---------------RFID
|
|
|
+
|
|
|
+ //获取imcs存储的托盘编码和零件编码
|
|
|
+ var trayAndProduct = await _redisService.Database.StringGetAsync(RFID + task.TaskNodeId);
|
|
|
+ var rfidFlag = await _redisService.Database.StringGetAsync(RFID + RedisKeyEnum.Flag);
|
|
|
+ Boolean flag = true;
|
|
|
+ if (rfidFlag.HasValue)
|
|
|
+ {
|
|
|
+ flag = (Boolean)rfidFlag;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (flag && trayAndProduct.HasValue)
|
|
|
+ {
|
|
|
+ var taskId = await _redisService.Database.StringGetAsync(RFID + task.Id);
|
|
|
+ if (taskId.HasValue)
|
|
|
+ {
|
|
|
+ return task.Id + ":已经执行过了";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await _redisService.Database.StringSetAsync(RFID + task.Id, task.TaskNodeId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ SiemensS7Net plcS7 = DevicePlcS7.SiemensS7(task.IP);
|
|
|
+ HslCommunication.OperateResult plcConnectionResult = plcS7.ConnectServer();
|
|
|
+ if (plcConnectionResult.IsSuccess)
|
|
|
+ {
|
|
|
+ //获取任务执行结果 2表示取完成,开始下发读指令
|
|
|
+ string plcResult = plcS7.ReadInt16("DB1.16").Content.ToString();
|
|
|
+
|
|
|
+ //读 源位置 是上下料站还是机床
|
|
|
+ string up = plcS7.ReadInt16("DB1.12").Content.ToString();
|
|
|
+ if (plcResult == "2")//取完成
|
|
|
+ {
|
|
|
+ //只要是取完成,先下发读指令
|
|
|
+ //下发读指令
|
|
|
+ plcS7.Write("DB2.12", Convert.ToInt16("1"));
|
|
|
+
|
|
|
+ Thread.Sleep(200);
|
|
|
+
|
|
|
+ //读取RFID的托盘编码
|
|
|
+ string readResult = ToolUtils.ReturnStringByBytes(plcS7.Read("DB1.20", 39).Content);
|
|
|
+
|
|
|
+ //读取RFID的零件编码
|
|
|
+ //string readResult = ToolUtils.ReturnStringByBytes(plcS7.Read("DB1.62", 39).Content);
|
|
|
+
|
|
|
+
|
|
|
+ //比较托盘编码是否一致
|
|
|
+ //读取redis数据
|
|
|
+ Rfid imcsRfid = JsonConvert.DeserializeObject<Rfid>(trayAndProduct);
|
|
|
+ if(imcsRfid.trayNo != readResult)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("RFID校验托盘失败:" + "读取imcs_redis数据_"+JsonConvert.SerializeObject(imcsRfid)+",读取RFID数据_"+ readResult.ToString(), LOG_TITLE_CALLBACK);
|
|
|
+ return task.Id + ":RFID托盘校验失败,imcs和RFID托盘信息不一致";
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO 如果想比零件是否一致,只需要在imcs redis uniqueCode有值并且 RDFID的零件编码也有值时对比以下
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //下发写指令
|
|
|
+ plcS7.Write("DB2.12", Convert.ToInt16("2"));
|
|
|
+ Thread.Sleep(200);
|
|
|
+
|
|
|
+ //如果是上下料站,往RFID中写state(1毛坯)和PID(零件编码)
|
|
|
+ if (sList.Contains(up))
|
|
|
+ {
|
|
|
+ if(imcsRfid.uniqueCode == null)
|
|
|
+ {
|
|
|
+ plcS7.Write("DB2.55", Convert.ToInt16("0"));
|
|
|
+ plcS7.Write("DB2.56", ToolUtils.ReturnBtyesWtitString("", 39));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ plcS7.Write("DB2.55", Convert.ToInt16("1"));
|
|
|
+ plcS7.Write("DB2.56", ToolUtils.ReturnBtyesWtitString(imcsRfid.uniqueCode, 39));
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果是机床,往RFID中写state(2 成品)和PID(零件编码)
|
|
|
+
|
|
|
+ if (jList.Contains(up))
|
|
|
+ {
|
|
|
+ plcS7.Write("DB2.55", Convert.ToInt16("2"));
|
|
|
+ }
|
|
|
+ plcS7.ConnectClose();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return task.Id + ":未取完成";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // end---------------RFID
|
|
|
+
|
|
|
+
|
|
|
CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
|
|
|
|
|
|
if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue) )
|