Bladeren bron

20250916001 修改Modbus读取方法,添加读取成功判断

向羽 孟 2 weken geleden
bovenliggende
commit
2986191b40
1 gewijzigde bestanden met toevoegingen van 34 en 18 verwijderingen
  1. 34 18
      MvvmScaffoldFrame48.DLL/CommunicationTools/ModbusTcpClient.cs

+ 34 - 18
MvvmScaffoldFrame48.DLL/CommunicationTools/ModbusTcpClient.cs

@@ -76,26 +76,31 @@ namespace MvvmScaffoldFrame48.DLL.CommunicationTools
         /// 读取线圈(功能码01)
         /// </summary>
         /// <param name="slaveId"></param>
-        /// <param name="startAddress"></param>
-        /// <param name="numRegisters"></param>
+        /// <param name="startAddress">读取开始地址</param>
+        /// <param name="numRegisters">读取长度</param>
+        /// <param name="ResultValue">读取的的结果</param>
         /// <returns></returns>
         /// <exception cref="InvalidOperationException"></exception>
-        public bool[] ReadCoilsRegister(byte slaveId, ushort startAddress, ushort numRegisters)
+        public bool ReadCoilsRegister(byte slaveId, ushort startAddress, ushort numRegisters,out bool[] ReturnValue)
         {
+            bool Result = false;
+            ReturnValue = null;
             if (_modbusMaster == null)
             {
                 Console.WriteLine($"ModbusTcpClient-ReadCoilsRegister failed:未连接到服务器");
-                return null;
+                return false;
             }
             try
             {
-                return _modbusMaster.ReadCoils(slaveId, startAddress, numRegisters);
+                ReturnValue = _modbusMaster.ReadCoils(slaveId, startAddress, numRegisters);
+                Result = true;
             }
             catch (Exception ex)
             {
                 Console.WriteLine($"读取线圈失败,ModbusTcpClient-ReadCoilsRegister failed: {ex.Message}");
-                return null;
+                Result = false;
             }
+            return Result;
         }
 
         /// <summary>
@@ -106,22 +111,25 @@ namespace MvvmScaffoldFrame48.DLL.CommunicationTools
         /// <param name="numRegisters"></param>
         /// <returns></returns>
         /// <exception cref="InvalidOperationException"></exception>
-        public ushort[] ReadHoldingRegisters(byte slaveId, ushort startAddress, ushort numRegisters)
+        public bool ReadHoldingRegisters(byte slaveId, ushort startAddress, ushort numRegisters,out ushort[] ReturnValue)
         {
+            bool Result = false;
+            ReturnValue = null;
             if (_modbusMaster == null)
             {
                 Console.WriteLine($"ModbusTcpClient-ReadHoldingRegistersAsReal failed:未连接到服务器");
-                return null;
+                return false;
             }
             try
             {
-                return _modbusMaster.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
+                ReturnValue = _modbusMaster.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
             }
             catch (Exception ex)
             {
                 Console.WriteLine($"读取保持寄存器失败,ModbusTcpClient-ReadHoldingRegisters failed: {ex.Message}");
-                return null;
+                Result = false;
             }
+            return Result;
         }
 
         /// <summary>
@@ -132,12 +140,14 @@ namespace MvvmScaffoldFrame48.DLL.CommunicationTools
         /// <param name="count">REAL值的数量</param>
         /// <param name="byteOrder">字节序 (ABCD, CDAB, BADC, DCBA)</param>
         /// <returns>REAL值数组</returns>
-        public float[] ReadHoldingRegistersAsReal(byte slaveId, ushort startAddress, ushort count, string byteOrder = "BADC")
+        public bool ReadHoldingRegistersAsReal(byte slaveId, ushort startAddress, ushort count, out float[] ReturnValue,string byteOrder = "BADC")
         {
+            bool Result = false;
+            ReturnValue = null;
             if (_modbusMaster == null)
             {
                 Console.WriteLine($"ModbusTcpClient-ReadHoldingRegistersAsReal failed:未连接到服务器");
-                return null;
+                return false;
             }
 
             try
@@ -155,13 +165,15 @@ namespace MvvmScaffoldFrame48.DLL.CommunicationTools
                     realValues[i] = BitConverter.ToSingle(bytes, 0);
                 }
 
-                return realValues;
+                ReturnValue = realValues;
+                Result = true;
             }
             catch (Exception ex)
             {
                 Console.WriteLine($"读取REAL值失败,ModbusTcpClient-ReadHoldingRegistersAsReal failed:{ex.Message}");
-                return null;
+                Result = false;
             }
+            return Result;
         }
 
         /// <summary>
@@ -171,12 +183,14 @@ namespace MvvmScaffoldFrame48.DLL.CommunicationTools
         /// <param name="startAddress">起始地址</param>
         /// <param name="count">REAL值的数量</param>
         /// <returns>REAL值数组</returns>
-        public UInt32[] ReadHoldingRegistersAsInt32(byte slaveId, ushort startAddress, ushort count, string byteOrder = "BADC")
+        public bool ReadHoldingRegistersAsInt32(byte slaveId, ushort startAddress, ushort count,out UInt32[] ReturnValue, string byteOrder = "BADC")
         {
+            bool Result = false;
+            ReturnValue = null;
             if (_modbusMaster == null)
             {
                 Console.WriteLine($"ModbusTcpClient-ReadHoldingRegistersAsInt32 failed:未连接到服务器");
-                return null;
+                return false;
             }
 
             try
@@ -198,13 +212,15 @@ namespace MvvmScaffoldFrame48.DLL.CommunicationTools
                     realValues[i] = (UInt32)BitConverter.ToInt32(bytes, 0);
                 }
 
-                return realValues;
+                ReturnValue = realValues;
+                Result = true;
             }
             catch (Exception ex)
             {
                 Console.WriteLine($"读取Int32值失败: {ex.Message}");
-                return null;
+                Result= false;
             }
+            return Result;
         }
         #endregion