oyq28 6 bulan lalu
induk
melakukan
9fa59ba3e9

+ 19 - 0
IMCS_CCS/Dto/Rfid.cs

@@ -0,0 +1,19 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace IMCS.CCS.Entitys.Dto
+{
+ 
+    public class Rfid
+    {
+
+        public string trayNo { get; set; }
+
+        public string uniqueCode { get; set; }
+
+        
+    }
+
+  
+}

+ 2 - 1
IMCS_CCS/Model/RedisKeyEnum.cs

@@ -18,6 +18,7 @@ namespace IMCS_CCS.Model
         //监控设备状态key
         MonitorEquipmentStatusJob,
         //字典key
-        DictKeyList
+        DictKeyList,
+        Flag
     }
 }

+ 119 - 0
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -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) )