From b3035d14a9e2f4377a718be21162a881c133e74b Mon Sep 17 00:00:00 2001 From: luosheng Date: Sat, 18 Mar 2023 15:00:51 +0800 Subject: [PATCH] Add serial port baud rate param --- .../ModbusAsciiProtocolLinker.cs | 2 +- .../ModbusRtuProtocolLinker.cs | 2 +- .../SiemensPpiProtocolLinker.cs | 2 +- .../Modbus.Net/Controller/FifoController.cs | 14 +++++++-- .../Modbus.Net/Controller/MatchController.cs | 2 +- .../Controller/MatchDirectlySendController.cs | 2 +- .../Modbus.Net/Linker/ComProtocolLinker.cs | 30 +++++++++++-------- Modbus.Net/Modbus.Net/appsettings.json | 7 ++++- 8 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs index 8c80f7c..febb4ab 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusAsciiProtocolLinker.cs @@ -24,7 +24,7 @@ namespace Modbus.Net.Modbus /// 串口地址 /// 从站号 public ModbusAsciiProtocolLinker(string com, int slaveAddress) - : base(com, 9600, Parity.None, StopBits.One, 8, slaveAddress) + : base(com, slaveAddress) { ((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<(int, int)>[] { new List<(int, int)> { (1, 1), (2, 2) }, new List<(int, int)> { (3, 3), (4, 4) } }, int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"))); } diff --git a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs index 9e66d7b..0ecace2 100644 --- a/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Modbus/ModbusRtuProtocolLinker.cs @@ -23,7 +23,7 @@ namespace Modbus.Net.Modbus /// 串口地址 /// 从站号 public ModbusRtuProtocolLinker(string com, int slaveAddress) - : base(com, 9600, Parity.None, StopBits.One, 8, slaveAddress) + : base(com, slaveAddress) { ((BaseConnector)BaseConnector).AddController(new MatchController(new ICollection<(int, int)>[] { new List<(int, int)> { (0, 0) }, new List<(int, int)> { (1, 1) } }, int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"))); } diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs index 073922a..6ba290c 100644 --- a/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.Siemens/SiemensPpiProtocolLinker.cs @@ -25,7 +25,7 @@ namespace Modbus.Net.Siemens /// 串口地址 /// 从站号 public SiemensPpiProtocolLinker(string com, int slaveAddress) - : base(com, 9600, Parity.Even, StopBits.One, 8, slaveAddress) + : base(com, slaveAddress) { ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"), true, null, 100)); } diff --git a/Modbus.Net/Modbus.Net/Controller/FifoController.cs b/Modbus.Net/Modbus.Net/Controller/FifoController.cs index f69ccbc..c0b96c4 100644 --- a/Modbus.Net/Modbus.Net/Controller/FifoController.cs +++ b/Modbus.Net/Modbus.Net/Controller/FifoController.cs @@ -1,6 +1,8 @@ -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading; @@ -11,6 +13,12 @@ namespace Modbus.Net /// public class FifoController : BaseController { + private static readonly IConfigurationRoot configuration = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json") + .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true) + .Build(); + private static readonly ILogger logger = LogProvider.CreateLogger(); private MessageWaitingDef _currentSendingPos; @@ -33,10 +41,10 @@ namespace Modbus.Net /// 是否开启信号量 /// 包切分函数 /// 包等待队列长度 - public FifoController(int acquireTime, bool activateSema = true, Func> duplicateFunc = null, int waitingListMaxCount = 1) + public FifoController(int acquireTime, bool activateSema = true, Func> duplicateFunc = null, int waitingListMaxCount = 100) : base(duplicateFunc) { - _waitingListMaxCount = waitingListMaxCount; + _waitingListMaxCount = int.Parse(configuration.GetSection("Modbus.Net")["WaitingListCount"] ?? waitingListMaxCount.ToString()); if (activateSema) { _taskCycleSema = new Semaphore(0, _waitingListMaxCount); diff --git a/Modbus.Net/Modbus.Net/Controller/MatchController.cs b/Modbus.Net/Modbus.Net/Controller/MatchController.cs index 4ce239d..e9f9dc8 100644 --- a/Modbus.Net/Modbus.Net/Controller/MatchController.cs +++ b/Modbus.Net/Modbus.Net/Controller/MatchController.cs @@ -23,7 +23,7 @@ namespace Modbus.Net /// 包切分函数 /// 包等待队列长度 public MatchController(ICollection<(int, int)>[] keyMatches, int acquireTime, bool activateSema = true, - Func> duplicateFunc = null, int waitingListMaxCount = 1) : base(acquireTime, activateSema, duplicateFunc, waitingListMaxCount) + Func> duplicateFunc = null, int waitingListMaxCount = 100) : base(acquireTime, activateSema, duplicateFunc, waitingListMaxCount) { KeyMatches = keyMatches; } diff --git a/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs b/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs index 0bb44be..86ea490 100644 --- a/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs +++ b/Modbus.Net/Modbus.Net/Controller/MatchDirectlySendController.cs @@ -10,7 +10,7 @@ namespace Modbus.Net { /// public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches, - Func> duplicateFunc = null, int waitingListMaxCount = 1) : base(keyMatches, + Func> duplicateFunc = null, int waitingListMaxCount = 100) : base(keyMatches, 0, false, duplicateFunc, waitingListMaxCount) { } diff --git a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs index 29c6797..6ff6eb1 100644 --- a/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net/Linker/ComProtocolLinker.cs @@ -19,13 +19,19 @@ namespace Modbus.Net /// /// 构造器 /// - /// 波特率 - /// 校验位 - /// 停止位 - /// 数据位 /// 从站地址 - protected ComProtocolLinker(int baudRate, Parity parity, StopBits stopBits, int dataBits, int slaveAddress) - : this(configuration.GetSection("Modbus.Net")["COM"], baudRate, parity, stopBits, dataBits, slaveAddress) + protected ComProtocolLinker(int slaveAddress) + : this(configuration.GetSection("Modbus.Net")["COM"] ?? "COM1", slaveAddress) + { + } + + /// + /// 构造器 + /// + /// 串口端口号 + /// 从站地址 + protected ComProtocolLinker(string com, int slaveAddress) + : this(com, slaveAddress, int.Parse(configuration.GetSection("Modbus.Net")["ComBaudRate"] ?? "9600"), Enum.Parse(configuration.GetSection("Modbus.Net")["ComParity"] ?? "Parity.None"), Enum.Parse(configuration.GetSection("Modbus.Net")["ComStopBits"] ?? "StopBits.One"), int.Parse(configuration.GetSection("Modbus.Net")["ComDataBits"] ?? "8")) { } @@ -39,11 +45,11 @@ namespace Modbus.Net /// 数据位 /// 从站地址 /// 是否为全双工 - protected ComProtocolLinker(string com, int baudRate, Parity parity, StopBits stopBits, int dataBits, - int slaveAddress, bool isFullDuplex = false) + protected ComProtocolLinker(string com, int slaveAddress, int baudRate, Parity parity, StopBits stopBits, int dataBits, + bool isFullDuplex = false) : this( - com, baudRate, parity, stopBits, dataBits, - int.Parse(configuration.GetSection("Modbus.Net")["ComConnectionTimeout"] ?? "-1"), slaveAddress, isFullDuplex) + com, slaveAddress, baudRate, parity, stopBits, dataBits, + int.Parse(configuration.GetSection("Modbus.Net")["ComConnectionTimeout"] ?? "-1"), isFullDuplex) { } @@ -58,8 +64,8 @@ namespace Modbus.Net /// 超时时间 /// 从站地址 /// 是否为全双工 - protected ComProtocolLinker(string com, int baudRate, Parity parity, StopBits stopBits, int dataBits, - int connectionTimeout, int slaveAddress, bool isFullDuplex = false) + protected ComProtocolLinker(string com, int slaveAddress, int baudRate, Parity parity, StopBits stopBits, int dataBits, + int connectionTimeout, bool isFullDuplex = false) { if (connectionTimeout == -1) { diff --git a/Modbus.Net/Modbus.Net/appsettings.json b/Modbus.Net/Modbus.Net/appsettings.json index 0ad9944..be3471f 100644 --- a/Modbus.Net/Modbus.Net/appsettings.json +++ b/Modbus.Net/Modbus.Net/appsettings.json @@ -3,9 +3,14 @@ "COM": "COM1", "IP": "192.168.1.1", "ComConnectionTimeout": "3000", + "ComBaudRate": "9600", + "ComParity": "Parity.None", + "ComStopBits": "StopBits.One", + "ComDataBits": "8", "IPConnectionTimeout": "5000", "ModbusPort": "502", "SiemensPort": "102", - "FetchSleepTime": "100" + "FetchSleepTime": "100", + "WaitingListCount": "100" } } \ No newline at end of file