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="slaveAddress">从站号</param>
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")));
}

View File

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

View File

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

View File

@@ -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
/// </summary>
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 MessageWaitingDef _currentSendingPos;
@@ -33,10 +41,10 @@ namespace Modbus.Net
/// <param name="activateSema">是否开启信号量</param>
/// <param name="duplicateFunc">包切分函数</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)
{
_waitingListMaxCount = waitingListMaxCount;
_waitingListMaxCount = int.Parse(configuration.GetSection("Modbus.Net")["WaitingListCount"] ?? waitingListMaxCount.ToString());
if (activateSema)
{
_taskCycleSema = new Semaphore(0, _waitingListMaxCount);

View File

@@ -23,7 +23,7 @@ namespace Modbus.Net
/// <param name="duplicateFunc">包切分函数</param>
/// <param name="waitingListMaxCount">包等待队列长度</param>
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;
}

View File

@@ -10,7 +10,7 @@ namespace Modbus.Net
{
/// <inheritdoc />
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)
{
}

View File

@@ -19,13 +19,19 @@ namespace Modbus.Net
/// <summary>
/// 构造器
/// </summary>
/// <param name="baudRate">波特率</param>
/// <param name="parity">校验位</param>
/// <param name="stopBits">停止位</param>
/// <param name="dataBits">数据位</param>
/// <param name="slaveAddress">从站地址</param>
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)
{
}
/// <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="slaveAddress">从站地址</param>
/// <param name="isFullDuplex">是否为全双工</param>
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
/// <param name="connectionTimeout">超时时间</param>
/// <param name="slaveAddress">从站地址</param>
/// <param name="isFullDuplex">是否为全双工</param>
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)
{

View File

@@ -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"
}
}