using HH.WCS.JuShi.api; using HH.WCS.JuShi.device; using HH.WCS.JuShi.dispatch; using HH.WCS.JuShi.util; using HH.WCS.JuShi.wms; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using static HH.WCS.JuShi.LISTA.process.HttpModel; using static HH.WCS.JuShi.util.Settings; namespace HH.WCS.JuShi.process { /// /// 设备信号处理,主要是tcp信号,我们做server被动接收信号来处理,根据项目定制的 /// internal class DeviceProcess { public static string rgvSafeInteraction = null; internal static void Analysis(string data, string ip) { if (data != null) { //按钮盒 //收 //3A 00 01 00 01 05 73 00 02 01 01 B8 //发 //2A 00 01 00 01 05 73 00 02 01 01 A8 if (data.Substring(0, 2) == "3a") { //数据序号 data = data.Substring(16, 2); //根据ip找到起点/终点货位 var plc = Settings.deviceInfos.Where(a => a.address == ip).FirstOrDefault(); var loc = plc.TN_Location; //1入库2常规送检3紧急送检4三寸空托5六寸空托 bool result = false; if (data.Equals("01")) { var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "立库入库区").FirstOrDefault(); result = TaskProcess.tcpOffline(loc, reservoirs.areaCode); } else if (data.Equals("02")) { var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "常规送检区").FirstOrDefault(); result = TaskProcess.tcpOffline(loc, reservoirs.areaCode); } else if (data.Equals("03")) { var reservoirs = Settings.ReservoirAreas.Where(s => s.areaName == "紧急送检区").FirstOrDefault(); result = TaskProcess.tcpOffline(loc, reservoirs.areaCode); } else if (data.Equals("04")) { var reservoirs = Settings.linePlcInfos.Where(s => s.code == "拆托机1").FirstOrDefault(); result = TaskProcess.tcpEmptyTray(reservoirs.outLoca, loc); } else if (data.Equals("05")) { var reservoirs = Settings.linePlcInfos.Where(s => s.code == "拆托机2").FirstOrDefault(); result = TaskProcess.tcpEmptyTray(reservoirs.outLoca, loc); } //2A 00 01 00 01 05 73 00 02 01 01 A8 // 输入的十六进制字符串数组 string[] hexValues = { "2a", "00", "01", "00", "01", "05", "73", "00", "02", data, "01" }; // 计算总和 int sum = hexValues.Sum(hex => Convert.ToInt32(hex, 16)); string returndata = hexValues.ToString() + sum; if (result) { PlcHelper.SendHex(ip, returndata); } } //rgv安全交互 else if (data.Substring(0, 4) == "3f00") { ////无信号不管 //if (data.Trim() != "3f001020304050600d0a") //{ LogHelper.Info($"RGV安全交互接收信号{data}"); rgvSafeInteraction = data.Substring(4,12); //var reservoirs = Settings.SafeInteractions.Where(s => s.ip == ip).FirstOrDefault(); ////1允许卸货 2卸货完成确认 //string datastr = ""; //switch (reservoirs.pointCode) //{ // case "RGV1": // datastr = data.Substring(5, 1); // break; // case "RGV2": // datastr = data.Substring(7, 1); // break; // case "RGV3": // datastr = data.Substring(9, 1); // break; // case "RGV4": // datastr = data.Substring(11, 1); // break; // case "RGV5": // datastr = data.Substring(13, 1); // break; // case "RGV6": // datastr = data.Substring(15, 1); // break; //} ////接受信号存到内存 //if (rgvSafeInteraction != null) //{ // //string转成list // var jsonList = JsonConvert.DeserializeObject>(rgvSafeInteraction); // var list = jsonList.Where(s => s.ip == ip).First(); // if (list != null) // { // //不为空就先删再加上 // jsonList.Remove(list); // } // jsonList.Add(new SafeInteraction { ip = ip, data = datastr }); // rgvSafeInteraction = JsonConvert.SerializeObject(jsonList); //} //else //{ // //第一次进 // var safeInteractions = new List{new SafeInteraction { ip = ip, data = datastr }}; // rgvSafeInteraction = JsonConvert.SerializeObject(safeInteractions); //} //LogHelper.Info($"RGV安全交互 存入内存参数{rgvSafeInteraction}"); //} } } // //if (data.Length >= 6) //{ // //去掉消息头3F 00 // data = data.Substring(4); // //Console.WriteLine($"{ip}-{data}"); // var plc = Settings.deviceInfos.Where(a => a.address == ip && a.enable == 1).FirstOrDefault(); // if (plc != null) // { // if (plc.deviceType == 1) // { // if (data == "") // { // Traystacker(plc); // } // } // } // else // { // Console.WriteLine($"TCP信号处理:未查询到IP为{ip}的数据,请检查deviceInfo配置中心是否存在该IP的数据!"); // } //} } internal static void Traffic(string forkliftNo, string lockNo, bool v) { } } }