lss
2025-06-04 adbeeccfcddddbba49718136a1ebb3429ab3b7ae
HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/device/PlcHelper.cs
@@ -7,6 +7,7 @@
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace HH.WCS.JiaTong.device
{
@@ -36,40 +37,7 @@
            }
            return client;
        }
        /// <summary>
        /// 读保持寄存器
        /// </summary>
        /// <param name="address"></param>
        /// <param name="qty"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <returns></returns>
        internal int[] ReadHoldingRegisters(int address, int qty, string ip, int port = 502)
        {
            int[] res = new int[0];
            //   lock (ReadHoldingRegistersLock)
            //  {
            LogHelper.Info($"ReadHoldingRegisters:SendMsg:Addr:{address},Qty:{qty},Ip:{ip},Port:{port}", "ModBus");
            var client = GetClient(ip, port);
            if (client != null && client.Connected)
            {
                client.ConnectionTimeout = 5000;
                try
                {
                    res = client.ReadHoldingRegisters(address, qty);
                    client.Disconnect();
                }
                catch (Exception ex)
                {
                    //LogHelper.Error(ex.Message, ex);
                    LogHelper.Info($"ReadHoldingRegisters:Error:{ex.Message}");
                }
                // }
                LogHelper.Info($"ReadHoldingRegisters:ReqMsg:{JsonConvert.SerializeObject(res)},Addr:{address},Ip:{ip},Port:{port}", "ModBus");
            }
            return res;
        }
        internal static void Receive(string ip, string msg)
        {
            //处理设备信号
@@ -107,58 +75,9 @@
            return Encoding.ASCII.GetString(returnBytes);
        }
        /// <summary>
        /// 读保持寄存器
        /// </summary>
        /// <param name="address"></param>
        /// <param name="qty"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <returns></returns>
        internal static bool[] ReadInputRegistersRtu2(int address, int qty, string ip, int port = 502)
        {
            //01 02 00 01 00 01 E8 0A
            List<bool> res = new List<bool>();
            var hex = $"0102{address.ToString("X4")}{qty.ToString("X4")}";
            hex = hex + BitConverter.ToString(PlcHelper.CRC16LH(PlcHelper.Hex2Bytes(hex))).Replace("-", "").Replace(" ", "");
            LogHelper.Info($"电梯状态判断:{hex} ip:{ip},port{port} ", "电梯");
            var data = SendHexOnce(ip, port, hex);
            if (!string.IsNullOrEmpty(data))
            {
                string fh = data.Substring(6, 2);
                var xhw = Convert.ToString(Convert.ToInt32(fh, 16), 2);
                if (xhw.Length == 3)
                {
                    xhw = '0' + xhw;
                }
                else if (xhw.Length == 2)
                {
                    xhw = '0' + '0' + xhw;
                }
                else if (xhw.Length == 1)
                {
                    xhw = '0' + '0' + '0' + xhw;
                }
                foreach (var item in xhw)
                {
                    if (true)
                    {
                        if (item == '1')
                        {
                            res.Add(true);
                        }
                        else
                        {
                            res.Add(false);
                        }
                    }
                }
            }
            return res.ToArray();
        }
        internal static bool[] ReadInputRegistersRtu1(int address, int qty, string ip, int port = 502)
        {
            //01 02 00 01 00 01 E8 0A 
@@ -212,34 +131,7 @@
            return res.ToArray();
        }
        /// <summary>
        /// 写单个寄存器
        /// </summary>
        /// <param name="address"></param>
        /// <param name="value"></param>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        internal static bool WriteSingleRegisterRtuT(int address, int value, string ip, int port = 502)
        {
            //01 05 00 01 FF 00 DD FA
            var code = value == 1 ? "FF" : "00";
            var res = false;
            var hex = $"0105{address.ToString("X4")}{code}00";
            hex = hex + BitConverter.ToString(PlcHelper.CRC16LH(PlcHelper.Hex2Bytes(hex))).Replace("-", "").Replace(" ", "");
            //hex = hex + BitConverter.ToString(PlcHelper.CRC16LH(PlcHelper.Hex2Bytes(hex))).Replace("-", "").Replace(" ", "");
            var data = SendHexOnce(ip, port, hex);
            LogHelper.Info($"电梯请求:{hex} ip:{ip},port{port} ", "电梯");
            if (!string.IsNullOrEmpty(data))
            {
                if (data == hex)
                {
                    res = true;
                }
            }
            return res;
        }
        private static string SendHexOnce(string ip, int port, string hex)
        {
@@ -268,6 +160,7 @@
            client = null;
            return res;
        }
        #region 进制转换+CRC
        internal static bool CheckCRC(string hex)
        {