From 511434d18ae0d5d4bd58d492819849952f39e082 Mon Sep 17 00:00:00 2001 From: luosheng Date: Fri, 8 Sep 2023 09:45:16 +0800 Subject: [PATCH] Fix --- .../Modbus.Net.Modbus/ModbusController.cs | 93 +++++++++++++++++-- Modbus.Net/Modbus.Net.Opc/OpcConnector.cs | 12 +-- .../Modbus.Net/Configuration/MachineReader.cs | 5 +- Samples/MachineJob/Worker.cs | 9 +- 4 files changed, 101 insertions(+), 18 deletions(-) diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs index 9a5887b..32677cd 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusController.cs @@ -23,9 +23,9 @@ namespace Modbus.Net.Modbus }; /// - /// Modbus Rtu协议长度计算 + /// Modbus Rtu接收协议长度计算 /// - public static Func ModbusRtuLengthCalc => content => + public static Func ModbusRtuResponseLengthCalc => (content) => { if (content[1] > 128) return 5; else if (content[1] == 5 || content[1] == 6 || content[1] == 8 || content[1] == 11 || content[1] == 15 || content[1] == 16) return 8; @@ -33,6 +33,20 @@ namespace Modbus.Net.Modbus else if (content[1] == 22) return 10; else return DuplicateWithCount.GetDuplcateFunc(new List { 2 }, 5).Invoke(content); }; + + /// + /// Modbus Rtu发送协议长度计算 + /// + public static Func ModbusRtuRequestLengthCalc => (content) => + { + if (content[1] == 1 || content[1] == 2 || content[1] == 3 || content[1] == 4 || content[1] == 5 || content[1] == 6 || content[1] == 8) return 8; + else if (content[1] == 7 || content[1] == 11 || content[1] == 12 || content[1] == 17) return 4; + else if (content[1] == 15 || content[1] == 16) { return DuplicateWithCount.GetDuplcateFunc(new List { 6 }, 9).Invoke(content); } + else if (content[1] == 22) return 10; + else if (content[1] == 23) return 19; + else if (content[1] == 24) return 6; + else return DuplicateWithCount.GetDuplcateFunc(new List { 2 }, 5).Invoke(content); + }; } /// @@ -97,7 +111,7 @@ namespace Modbus.Net.Modbus } /// - /// Modbus Rtu协议控制器 + /// Modbus Rtu发送协议控制器 /// public class ModbusRtuController : FifoController { @@ -108,7 +122,7 @@ namespace Modbus.Net.Modbus /// 从站号 public ModbusRtuController(string com, int slaveAddress) : base( int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")), - lengthCalc: ModbusLengthCalc.ModbusRtuLengthCalc, + lengthCalc: ModbusLengthCalc.ModbusRtuResponseLengthCalc, checkRightFunc: ContentCheck.Crc16CheckRight, waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) : @@ -118,7 +132,28 @@ namespace Modbus.Net.Modbus } /// - /// Modbus Rtu in Tcp协议控制器 + /// Modbus Rtu接收协议控制器 + /// + public class ModbusRtuResponseController : FifoController + { + /// + /// 构造函数 + /// + /// 串口 + /// 从站号 + public ModbusRtuResponseController(string com, int slaveAddress) : base( + int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")), + lengthCalc: ModbusLengthCalc.ModbusRtuRequestLengthCalc, + checkRightFunc: ContentCheck.Crc16CheckRight, + waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ? + int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) : + null + ) + { } + } + + /// + /// Modbus Rtu in Tcp发送协议控制器 /// public class ModbusRtuInTcpController : FifoController { @@ -129,7 +164,7 @@ namespace Modbus.Net.Modbus /// 端口号 public ModbusRtuInTcpController(string ip, int port) : base( int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")), - lengthCalc: ModbusLengthCalc.ModbusRtuLengthCalc, + lengthCalc: ModbusLengthCalc.ModbusRtuResponseLengthCalc, checkRightFunc: ContentCheck.Crc16CheckRight, waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) : @@ -139,7 +174,28 @@ namespace Modbus.Net.Modbus } /// - /// Modbus Rtu in Udp协议控制器 + /// Modbus Rtu in Tcp接收协议控制器 + /// + public class ModbusRtuInTcpResponseController : FifoController + { + /// + /// 构造函数 + /// + /// ip地址 + /// 端口号 + public ModbusRtuInTcpResponseController(string ip, int port) : base( + int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime")), + lengthCalc: ModbusLengthCalc.ModbusRtuRequestLengthCalc, + checkRightFunc: ContentCheck.Crc16CheckRight, + waitingListMaxCount: ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount") != null ? + int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "WaitingListCount")) : + null + ) + { } + } + + /// + /// Modbus Rtu in Udp发送协议控制器 /// public class ModbusRtuInUdpController : FifoController { @@ -150,7 +206,28 @@ namespace Modbus.Net.Modbus /// 端口号 public ModbusRtuInUdpController(string ip, int port) : base( int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")), - lengthCalc: ModbusLengthCalc.ModbusRtuLengthCalc, + lengthCalc: ModbusLengthCalc.ModbusRtuResponseLengthCalc, + checkRightFunc: ContentCheck.Crc16CheckRight, + waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ? + int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) : + null + ) + { } + } + + /// + /// Modbus Rtu in Udp接收协议控制器 + /// + public class ModbusRtuInUdpResponseController : FifoController + { + /// + /// 构造函数 + /// + /// ip地址 + /// 端口号 + public ModbusRtuInUdpResponseController(string ip, int port) : base( + int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "FetchSleepTime")), + lengthCalc: ModbusLengthCalc.ModbusRtuRequestLengthCalc, checkRightFunc: ContentCheck.Crc16CheckRight, waitingListMaxCount: ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount") != null ? int.Parse(ConfigurationReader.GetValue("UDP:" + ip + ":" + port, "WaitingListCount")) : diff --git a/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs b/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs index 8c2f1c8..ae57556 100644 --- a/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs +++ b/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs @@ -118,7 +118,7 @@ namespace Modbus.Net.Opc Value = Encoding.ASCII.GetBytes("NoData") }; } - logger.LogInformation($"Opc Machine {ConnectionToken} Read Opc tag {tag} for value {result.Value} {result.Value.GetType().FullName}"); + logger.LogDebug($"Opc Machine {ConnectionToken} Read Opc tag {tag} for value {result.Value} {result.Value.GetType().FullName} {result.Quality}"); return new OpcParamOut { Success = true, @@ -142,11 +142,11 @@ namespace Modbus.Net.Opc try { await Client.WriteAsync(tag, value); - logger.LogInformation($"Opc Machine {ConnectionToken} Write Opc tag {tag} for value {value}"); + logger.LogDebug($"Opc Machine {ConnectionToken} Write Opc tag {tag} for value {value}"); } catch (Exception e) { - logger.LogError(e, "Opc client {ConnectionToken} write exception", ConnectionToken); + logger.LogError(e, $"Opc client {ConnectionToken} write exception"); return new OpcParamOut { Success = false @@ -165,7 +165,7 @@ namespace Modbus.Net.Opc } catch (Exception e) { - logger.LogError(e, "Opc client {ConnectionToken} read exception", ConnectionToken); + logger.LogError(e, $"Opc client {ConnectionToken} read exception"); Disconnect(); return new OpcParamOut { @@ -181,12 +181,12 @@ namespace Modbus.Net.Opc { Client.Connect(); _connect = true; - logger.LogInformation("Opc client {ConnectionToken} connect success", ConnectionToken); + logger.LogInformation($"Opc client {ConnectionToken} connect success"); return true; } catch (Exception ex) { - logger.LogError(ex, "Opc client {ConnectionToken} connected failed", ConnectionToken); + logger.LogError(ex, $"Opc client {ConnectionToken} connected failed"); _connect = false; return false; } diff --git a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs index 34004ea..b931527 100644 --- a/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs +++ b/Modbus.Net/Modbus.Net/Configuration/MachineReader.cs @@ -22,11 +22,12 @@ namespace Modbus.Net /// /// 读取设备列表 /// + /// 读取设备的块名 /// 设备的列表 - public static List> ReadMachines() + public static List> ReadMachines(string machineSection = "Machine") { var ans = new List>(); - var root = configuration.GetSection("Modbus.Net").GetSection("Machine").GetChildren(); + var root = configuration.GetSection("Modbus.Net").GetSection(machineSection).GetChildren(); foreach (var machine in root) { List> kv = new List>(); diff --git a/Samples/MachineJob/Worker.cs b/Samples/MachineJob/Worker.cs index 07c2cf2..3eca9c2 100644 --- a/Samples/MachineJob/Worker.cs +++ b/Samples/MachineJob/Worker.cs @@ -97,7 +97,7 @@ namespace MachineJob.Service { foreach (var value in values) { - _logger.LogInformation(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue); + _logger.LogDebug(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue); } /* @@ -148,7 +148,12 @@ namespace MachineJob.Service return ans; } - return null; + else + { + _logger.LogError(dataReturnDef.MachineId + " Return Error."); + return null; + } + } } } \ No newline at end of file