Add serial port baud rate param

This commit is contained in:
luosheng
2023-03-18 15:00:51 +08:00
parent bde800984c
commit b3035d14a9
8 changed files with 40 additions and 21 deletions

View File

@@ -24,7 +24,7 @@ namespace Modbus.Net.Modbus
/// <param name="com">串口地址</param> /// <param name="com">串口地址</param>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
public ModbusAsciiProtocolLinker(string com, int slaveAddress) 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"))); ((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")));
} }

View File

@@ -23,7 +23,7 @@ namespace Modbus.Net.Modbus
/// <param name="com">串口地址</param> /// <param name="com">串口地址</param>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
public ModbusRtuProtocolLinker(string com, int slaveAddress) 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"))); ((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")));
} }

View File

@@ -25,7 +25,7 @@ namespace Modbus.Net.Siemens
/// <param name="com">串口地址</param> /// <param name="com">串口地址</param>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
public SiemensPpiProtocolLinker(string com, int slaveAddress) 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)); ((BaseConnector)BaseConnector).AddController(new FifoController(int.Parse(configuration.GetSection("Modbus.Net")["FetchSleepTime"] ?? "0"), true, null, 100));
} }

View File

@@ -1,6 +1,8 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@@ -11,6 +13,12 @@ namespace Modbus.Net
/// </summary> /// </summary>
public class FifoController : BaseController 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<FifoController> logger = LogProvider.CreateLogger<FifoController>(); private static readonly ILogger<FifoController> logger = LogProvider.CreateLogger<FifoController>();
private MessageWaitingDef _currentSendingPos; private MessageWaitingDef _currentSendingPos;
@@ -33,10 +41,10 @@ namespace Modbus.Net
/// <param name="activateSema">是否开启信号量</param> /// <param name="activateSema">是否开启信号量</param>
/// <param name="duplicateFunc">包切分函数</param> /// <param name="duplicateFunc">包切分函数</param>
/// <param name="waitingListMaxCount">包等待队列长度</param> /// <param name="waitingListMaxCount">包等待队列长度</param>
public FifoController(int acquireTime, bool activateSema = true, Func<byte[], ICollection<byte[]>> duplicateFunc = null, int waitingListMaxCount = 1) public FifoController(int acquireTime, bool activateSema = true, Func<byte[], ICollection<byte[]>> duplicateFunc = null, int waitingListMaxCount = 100)
: base(duplicateFunc) : base(duplicateFunc)
{ {
_waitingListMaxCount = waitingListMaxCount; _waitingListMaxCount = int.Parse(configuration.GetSection("Modbus.Net")["WaitingListCount"] ?? waitingListMaxCount.ToString());
if (activateSema) if (activateSema)
{ {
_taskCycleSema = new Semaphore(0, _waitingListMaxCount); _taskCycleSema = new Semaphore(0, _waitingListMaxCount);

View File

@@ -23,7 +23,7 @@ namespace Modbus.Net
/// <param name="duplicateFunc">包切分函数</param> /// <param name="duplicateFunc">包切分函数</param>
/// <param name="waitingListMaxCount">包等待队列长度</param> /// <param name="waitingListMaxCount">包等待队列长度</param>
public MatchController(ICollection<(int, int)>[] keyMatches, int acquireTime, bool activateSema = true, public MatchController(ICollection<(int, int)>[] keyMatches, int acquireTime, bool activateSema = true,
Func<byte[], ICollection<byte[]>> duplicateFunc = null, int waitingListMaxCount = 1) : base(acquireTime, activateSema, duplicateFunc, waitingListMaxCount) Func<byte[], ICollection<byte[]>> duplicateFunc = null, int waitingListMaxCount = 100) : base(acquireTime, activateSema, duplicateFunc, waitingListMaxCount)
{ {
KeyMatches = keyMatches; KeyMatches = keyMatches;
} }

View File

@@ -10,7 +10,7 @@ namespace Modbus.Net
{ {
/// <inheritdoc /> /// <inheritdoc />
public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches, public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches,
Func<byte[], ICollection<byte[]>> duplicateFunc = null, int waitingListMaxCount = 1) : base(keyMatches, Func<byte[], ICollection<byte[]>> duplicateFunc = null, int waitingListMaxCount = 100) : base(keyMatches,
0, false, duplicateFunc, waitingListMaxCount) 0, false, duplicateFunc, waitingListMaxCount)
{ {
} }

View File

@@ -19,13 +19,19 @@ namespace Modbus.Net
/// <summary> /// <summary>
/// 构造器 /// 构造器
/// </summary> /// </summary>
/// <param name="baudRate">波特率</param>
/// <param name="parity">校验位</param>
/// <param name="stopBits">停止位</param>
/// <param name="dataBits">数据位</param>
/// <param name="slaveAddress">从站地址</param> /// <param name="slaveAddress">从站地址</param>
protected ComProtocolLinker(int baudRate, Parity parity, StopBits stopBits, int dataBits, int slaveAddress) protected ComProtocolLinker(int slaveAddress)
: this(configuration.GetSection("Modbus.Net")["COM"], baudRate, parity, stopBits, dataBits, slaveAddress) : this(configuration.GetSection("Modbus.Net")["COM"] ?? "COM1", slaveAddress)
{
}
/// <summary>
/// 构造器
/// </summary>
/// <param name="com">串口端口号</param>
/// <param name="slaveAddress">从站地址</param>
protected ComProtocolLinker(string com, int slaveAddress)
: this(com, slaveAddress, int.Parse(configuration.GetSection("Modbus.Net")["ComBaudRate"] ?? "9600"), Enum.Parse<Parity>(configuration.GetSection("Modbus.Net")["ComParity"] ?? "Parity.None"), Enum.Parse<StopBits>(configuration.GetSection("Modbus.Net")["ComStopBits"] ?? "StopBits.One"), int.Parse(configuration.GetSection("Modbus.Net")["ComDataBits"] ?? "8"))
{ {
} }
@@ -39,11 +45,11 @@ namespace Modbus.Net
/// <param name="dataBits">数据位</param> /// <param name="dataBits">数据位</param>
/// <param name="slaveAddress">从站地址</param> /// <param name="slaveAddress">从站地址</param>
/// <param name="isFullDuplex">是否为全双工</param> /// <param name="isFullDuplex">是否为全双工</param>
protected ComProtocolLinker(string com, int baudRate, Parity parity, StopBits stopBits, int dataBits, protected ComProtocolLinker(string com, int slaveAddress, int baudRate, Parity parity, StopBits stopBits, int dataBits,
int slaveAddress, bool isFullDuplex = false) bool isFullDuplex = false)
: this( : this(
com, baudRate, parity, stopBits, dataBits, com, slaveAddress, baudRate, parity, stopBits, dataBits,
int.Parse(configuration.GetSection("Modbus.Net")["ComConnectionTimeout"] ?? "-1"), slaveAddress, isFullDuplex) int.Parse(configuration.GetSection("Modbus.Net")["ComConnectionTimeout"] ?? "-1"), isFullDuplex)
{ {
} }
@@ -58,8 +64,8 @@ namespace Modbus.Net
/// <param name="connectionTimeout">超时时间</param> /// <param name="connectionTimeout">超时时间</param>
/// <param name="slaveAddress">从站地址</param> /// <param name="slaveAddress">从站地址</param>
/// <param name="isFullDuplex">是否为全双工</param> /// <param name="isFullDuplex">是否为全双工</param>
protected ComProtocolLinker(string com, int baudRate, Parity parity, StopBits stopBits, int dataBits, protected ComProtocolLinker(string com, int slaveAddress, int baudRate, Parity parity, StopBits stopBits, int dataBits,
int connectionTimeout, int slaveAddress, bool isFullDuplex = false) int connectionTimeout, bool isFullDuplex = false)
{ {
if (connectionTimeout == -1) if (connectionTimeout == -1)
{ {

View File

@@ -3,9 +3,14 @@
"COM": "COM1", "COM": "COM1",
"IP": "192.168.1.1", "IP": "192.168.1.1",
"ComConnectionTimeout": "3000", "ComConnectionTimeout": "3000",
"ComBaudRate": "9600",
"ComParity": "Parity.None",
"ComStopBits": "StopBits.One",
"ComDataBits": "8",
"IPConnectionTimeout": "5000", "IPConnectionTimeout": "5000",
"ModbusPort": "502", "ModbusPort": "502",
"SiemensPort": "102", "SiemensPort": "102",
"FetchSleepTime": "100" "FetchSleepTime": "100",
"WaitingListCount": "100"
} }
} }