Parcourir la source

fix:rfid逻辑修改

wang.sq@aliyun.com il y a 6 mois
Parent
commit
1b0aaf985f
1 fichiers modifiés avec 48 ajouts et 18 suppressions
  1. 48 18
      IMCS_CCS/Service/Impl/TaskJobService.cs

+ 48 - 18
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -406,16 +406,14 @@ namespace IMCS.CCS.Service.Impl
 
             // 获取读写状态
             string plcRead = plcS7.ReadInt16("DB1.18").Content.ToString();
+            Console.WriteLine("====================================状态 DB1.18:" + plcRead);
+
 
             // 判断读写状态,DB1.DBB18 
             if (plcRead == "1")
             { //下发读指令
-                string imcsRFIDRead = _redisService.Database.StringGetAsync(RFID + task.TaskNodeId+"_1").Result;
-                if (imcsRFIDRead.IsNullOrEmpty())
-                {
-                    await _redisService.Database.StringSetAsync(RFID + task.TaskNodeId + "_1","1");
-                    plcS7.Write("DB2.12", Convert.ToInt16("1"));
-                }
+       
+                plcS7.Write("DB2.12", Convert.ToInt16("1"));
                 Log.Instance.WriteLogAdd("RFID逻辑块==》rfid读命令已下发,执行的任务:" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
                 plcS7.ConnectClose();
                 rfid.success = false;
@@ -431,8 +429,9 @@ namespace IMCS.CCS.Service.Impl
                 imcsRfid.trayNo = strings[0];
                 imcsRfid.uniqueCode = strings[1];
 
-                //读取RFID的托盘编码
+                //读取PLC中的RFID的托盘编码
                 string readResult = ToolUtils.ReturnStringByBytes(plcS7.Read("DB1.20", 39).Content).Replace(" ","");
+                Console.WriteLine("====================================数据 DB1.20:" + readResult);
                 if (imcsRfid.trayNo != readResult)
                 {
                     //TODO 可能要往PLC中写入一个值,表示校验错误
@@ -490,14 +489,15 @@ namespace IMCS.CCS.Service.Impl
 
             }
             else if (plcRead == "5")
-            { // 重新写入rfid成功,读写模式归零
-                plcS7.Write("DB2.12", Convert.ToInt16("0"));
-                plcS7.ConnectClose();
-
-                Log.Instance.WriteLogAdd("RFID逻辑块==》校验重新写入的RFID校验正确:" , LOG_TITLE_CALLBACK);
+            {
+                await _redisService.Database.StringSetAsync(RFID + task.TaskId + task.TaskNodeId, "2");
 
-                rfid.success = true;
-                rfid.msg = task.Id + "校验重新写入的RFID校验正确";
+                // 二次下发读的命令
+                plcS7.Write("DB2.12", Convert.ToInt16("1"));
+                Log.Instance.WriteLogAdd("RFID逻辑块==》rfid已写入,二次下发读,执行的任务:" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
+                plcS7.ConnectClose();
+                rfid.success = false;
+                rfid.msg = "RFID二次读命令已下发";
                 return rfid;
             }
             else {
@@ -557,9 +557,33 @@ namespace IMCS.CCS.Service.Impl
                     }
 
                     // RFID ============= 比对开始
-                    Rfid aa = await this.CheckRFid(task);
-                    if (aa.success == false) { 
-                        return aa.msg;
+                    string rfidFlag = _redisService.Database.StringGetAsync(RFID+ task.TaskId + task.TaskNodeId).Result;
+
+                    if (rfidFlag.IsNullOrEmpty()) {
+                        Rfid aa = await this.CheckRFid(task);
+                        if (aa.success == false) {
+                            return aa.msg;
+                        }
+                    } else if (rfidFlag == "2") {
+
+                        // 获取读写状态
+                        SiemensS7Net plcS7 = DevicePlcS7.SiemensS7(task.IP);
+                        string plcRead = plcS7.ReadInt16("DB1.18").Content.ToString();
+                        Console.WriteLine("====================================第二次状态 DB1.18:" + plcRead);
+                        if (plcRead == "3")
+                        { //下发归零任务
+                            await _redisService.Database.StringSetAsync(RFID + task.TaskId + task.TaskNodeId, "3");
+                            string readResult = ToolUtils.ReturnStringByBytes(plcS7.Read("DB1.20", 39).Content).Replace(" ", "");
+                            Console.WriteLine("====================================第二次读完成写的数据:" + readResult);
+                            plcS7.Write("DB2.12", Convert.ToInt16("0"));
+                            plcS7.ConnectClose();
+                        }
+                        else {
+                            // 二次下发读的命令
+                            Log.Instance.WriteLogAdd("等待二次读命令完成RFID读命令已下发:" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
+                            plcS7.ConnectClose();
+                            return "等待二次读命令完成RFID读命令已下发";
+                        }
                     }
                     // RFID ============= 比对结束
 
@@ -567,8 +591,13 @@ namespace IMCS.CCS.Service.Impl
 
                      if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue) )
                      {
+
+                        // 任务执行完毕,删除临时存储的缓存数据
+                        Console.WriteLine("任务执行完成,删除临时校验的缓存数据,任务状态"+task.CallbackValue+"==taskID:"+ task.TaskId+"==taskNodeID:"+ task.TaskNodeId);
+                        await _redisService.Database.KeyDeleteAsync(RFID + task.TaskId + task.TaskNodeId);
+
                         //执行位清零
-                        SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
+                      SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
                         HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
                         if (ConnectionResult.IsSuccess)
                         {
@@ -1635,6 +1664,7 @@ namespace IMCS.CCS.Service.Impl
             }
             return deviceList;
         }
+
         /// <summary>
         /// 心跳任务
         /// </summary>