zxx
2025-05-31 267ffc1263e9975adf0d3dcca9ccc5d7dbd239f6
HH.WCS.Mobox3/HH.WCS.Mobox3.JuShi/process/DeviceProcess.cs
@@ -9,6 +9,7 @@
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
{
@@ -17,57 +18,119 @@
    /// </summary>
    internal class DeviceProcess
    {
        public static string rgvSafeInteraction = null;
        internal static void Analysis(string data, string ip)
        {
            //收
            //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 != null)
            {
                //数据序号
                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 == "RGV库区").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);
                }
                //按钮盒
                //收
                //3A 00 01 00 01 05 73 00 02 01 01 B8
                //发
                //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)
                if (data.Substring(0, 2) == "3a")
                {
                    PlcHelper.SendHex(ip, returndata);
                    //数据序号
                    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<List<SafeInteraction>>(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<SafeInteraction>{new SafeInteraction { ip = ip, data = datastr }};
                        //    rgvSafeInteraction = JsonConvert.SerializeObject(safeInteractions);
                        //}
                        //LogHelper.Info($"RGV安全交互 存入内存参数{rgvSafeInteraction}");
                    //}
                }
            }