kazelee
22 小时以前 f8d23dcf8d6501482db1a5180325194232afe96c
device/ModbusHelper.cs
@@ -10,7 +10,7 @@
    /// modbus tcp 用第三方的包
    /// </summary>
    public class ModbusHelper {
        // 内存,连接上的 Modbus 通讯对象
        // 内存,连接上的 Modbus 通讯对象
        private static Dictionary<string, ModbusClient> _ipPort_ModbusClient = new Dictionary<string, ModbusClient>();
        public ModbusHelper(string ip, int port = 502, byte slaveId = 1) {
@@ -25,7 +25,7 @@
            try {
                if (ip == null || ip.Trim() == "") {
                    // 读取配置信息失败
                    LogHelper.Info("Modbus:读取配置信息失败");
                    LogHelper.Info("Modbus:读取配置信息失败");
                    return;
                }
@@ -59,7 +59,7 @@
        }
        /// <summary>
        /// 连接 Modbus 下位机(私有,内部调用)
        /// 连接 Modbus 下位机 (私有,内部调用)
        /// </summary>
        /// <param name="modbusClient"></param>
        private static void Link(ModbusClient modbusClient) {
@@ -79,7 +79,7 @@
        }
        /// <summary>
        /// 读一个或多个线圈,返回一个bit真假数组
        /// 读一个或多个线圈,返回一个bit真假数组
        /// </summary>
        /// <param name="address"></param>
        /// <param name="qty"></param>
@@ -131,7 +131,7 @@
                    }
                }
                catch (Exception ex) {
                    LogHelper.InfoEx(ex);
                }
            }
            else {
@@ -162,7 +162,7 @@
                    }
                }
                catch (Exception ex) {
                    LogHelper.InfoEx(ex);
                }
            }
            else {
@@ -173,7 +173,7 @@
        }
        /// <summary>
        /// 批量读取或单独读取保持寄存器,返回的是32位int数组
        /// 批量读取或单独读取保持寄存器,返回的是32位int数组
        /// </summary>
        /// <param name="address">读取起始位</param>
        /// <param name="qty">读取的数量</param>
@@ -185,7 +185,7 @@
            var client = GetModbusClient(ip, port);
            if (client != null && client.Connected) {
                try {
                    //一个寄存器是16位,返回2个int类型
                    //一个寄存器是16位,返回2个int类型
                    res = client.ReadHoldingRegisters(address, qty);
                    if (res.Length != 0) {
                        //读取成功
@@ -195,7 +195,7 @@
                    }
                }
                catch (Exception ex) {
                    //如果请求数量超出保持寄存器的最大数据行数,会报错
                    //如果请求数量超出保持寄存器的最大数据行数,会报错
                    LogHelper.Info($"发生了异常:{ex.Message},IP:{ip},Port:{port}", "Error");
                }
            }
@@ -227,7 +227,7 @@
                    }
                }
                catch (Exception ex) {
                    LogHelper.InfoEx(ex);
                }
            }
            else {
@@ -270,7 +270,7 @@
        }
        /// <summary>
        /// 读一个或多个离散输入,返回一个bit真假数组
        /// 读一个或多个离散输入,返回一个bit真假数组
        /// </summary>
        /// <param name="address"></param>
        /// <param name="qty"></param>
@@ -291,7 +291,7 @@
                    }
                }
                catch (Exception ex) {
                    LogHelper.InfoEx(ex);
                }
            }
            else {
@@ -302,7 +302,7 @@
        }
        /// <summary>
        /// 读一个或多个输入寄存器,返回一个int32位数组
        /// 读一个或多个输入寄存器,返回一个int32位数组
        /// </summary>
        /// <param name="address"></param>
        /// <param name="qty"></param>
@@ -323,7 +323,7 @@
                    }
                }
                catch (Exception ex) {
                    LogHelper.InfoEx(ex);
                }
            }
            else {
@@ -338,7 +338,7 @@
        }
        #region Modbus 协议读写字符串
        // 将字符串转换为 Modbus 寄存器数组(int[] 形式,每个int存一个16位值)
        // 将字符串转换为 Modbus 寄存器数组 (int[] 形式,每个int存一个16位值)
        private static int[] StringToRegisters(string text) {
            // 填充为偶数长度
            if (text.Length % 2 != 0) {
@@ -349,7 +349,7 @@
            int[] registers = new int[bytes.Length / 2];
            for (int i = 0; i < registers.Length; i++) {
                // 大端序:高位字节在前
                // 大端序:高位字节在前
                registers[i] = (bytes[i * 2] << 8) | bytes[i * 2 + 1];
            }
@@ -361,7 +361,7 @@
            byte[] bytes = new byte[registers.Length * 2];
            for (int i = 0; i < registers.Length; i++) {
                // 提取低16位(忽略高16位)
                // 提取低16位 (忽略高16位)
                ushort registerValue = (ushort)(registers[i] & 0xFFFF);
                // 解析大端序
@@ -376,7 +376,7 @@
        #endregion
        /// <summary>
        /// 获取 Modbus 通讯对象(私有,内部调用)
        /// 获取 Modbus 通讯对象 (私有,内部调用)
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="port"></param>