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