Wrong COM default settings fix.

This commit is contained in:
luosheng
2023-03-21 16:08:13 +08:00
parent c89869086b
commit 94fdb61f38
37 changed files with 150 additions and 244 deletions

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Ascii码协议Tcp透传 /// Modbus/Ascii码协议Tcp透传

View File

@@ -1,7 +1,4 @@
using Microsoft.Extensions.Configuration; using System.Text;
using System;
using System.IO;
using System.Text;
namespace Modbus.Net.Modbus namespace Modbus.Net.Modbus
{ {

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Ascii码协议Udp透传 /// Modbus/Ascii码协议Udp透传
@@ -15,7 +11,7 @@ namespace Modbus.Net.Modbus
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param> /// <param name="masterAddress">主站号</param>
public ModbusAsciiInUdpProtocol(byte slaveAddress, byte masterAddress) public ModbusAsciiInUdpProtocol(byte slaveAddress, byte masterAddress)
: this(ConfigurationReader.GetValueDirect("UDP:Modbus","IP"), slaveAddress, masterAddress) : this(ConfigurationReader.GetValueDirect("UDP:Modbus", "IP"), slaveAddress, masterAddress)
{ {
} }

View File

@@ -1,7 +1,4 @@
using Microsoft.Extensions.Configuration; using System.Text;
using System;
using System.IO;
using System.Text;
namespace Modbus.Net.Modbus namespace Modbus.Net.Modbus
{ {

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Ascii码协议 /// Modbus/Ascii码协议

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Text; using System.Text;
namespace Modbus.Net.Modbus namespace Modbus.Net.Modbus

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Rtu协议tcp透传 /// Modbus/Rtu协议tcp透传

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Rtu协议连接器Tcp透传 /// Modbus/Rtu协议连接器Tcp透传

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Rtu协议udp透传 /// Modbus/Rtu协议udp透传

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Rtu协议连接器Udp透传 /// Modbus/Rtu协议连接器Udp透传

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Rtu协议 /// Modbus/Rtu协议

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
namespace Modbus.Net.Modbus namespace Modbus.Net.Modbus
{ {

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Tcp协议 /// Modbus/Tcp协议

View File

@@ -1,9 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.Collections.Generic;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Tcp协议连接器 /// Modbus/Tcp协议连接器

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Udp协议 /// Modbus/Udp协议

View File

@@ -1,9 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.Collections.Generic;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Udp协议连接器 /// Modbus/Udp协议连接器

View File

@@ -1,7 +1,4 @@
using Microsoft.Extensions.Configuration; using Nito.AsyncEx;
using Nito.AsyncEx;
using System;
using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Modbus.Net.Siemens namespace Modbus.Net.Siemens

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; using System.Threading;
using System;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;

View File

@@ -1,7 +1,4 @@
using Microsoft.Extensions.Configuration; using Nito.AsyncEx;
using Nito.AsyncEx;
using System;
using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Modbus.Net.Siemens namespace Modbus.Net.Siemens

View File

@@ -1,7 +1,5 @@
using Microsoft.Extensions.Configuration; using System;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
namespace Modbus.Net.Siemens namespace Modbus.Net.Siemens
{ {

View File

@@ -306,7 +306,8 @@ namespace Modbus.Net.Siemens
Wrapper.SendReceiveAsync<WriteRequestSiemensOutputStruct>( Wrapper.SendReceiveAsync<WriteRequestSiemensOutputStruct>(
Wrapper[typeof(WriteRequestSiemensProtocol)], Wrapper[typeof(WriteRequestSiemensProtocol)],
writeRequestSiemensInputStruct); writeRequestSiemensInputStruct);
return new ReturnStruct<bool> { return new ReturnStruct<bool>
{
Datas = writeRequestSiemensOutputStruct?.AccessResult == SiemensAccessResult.NoError, Datas = writeRequestSiemensOutputStruct?.AccessResult == SiemensAccessResult.NoError,
IsSuccess = writeRequestSiemensOutputStruct?.AccessResult == SiemensAccessResult.NoError, IsSuccess = writeRequestSiemensOutputStruct?.AccessResult == SiemensAccessResult.NoError,
ErrorCode = writeRequestSiemensOutputStruct?.AccessResult == SiemensAccessResult.NoError ? 0 : (int)writeRequestSiemensOutputStruct?.AccessResult, ErrorCode = writeRequestSiemensOutputStruct?.AccessResult == SiemensAccessResult.NoError ? 0 : (int)writeRequestSiemensOutputStruct?.AccessResult,

View File

@@ -1,10 +1,7 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Modbus.Net namespace Modbus.Net
{ {
@@ -56,7 +53,7 @@ namespace Modbus.Net
var firstColon = path.IndexOf(":"); var firstColon = path.IndexOf(":");
while (firstColon != -1) while (firstColon != -1)
{ {
root = root?.GetSection(path.Substring(0,firstColon)); root = root?.GetSection(path.Substring(0, firstColon));
path = path.Substring(firstColon + 1); path = path.Substring(firstColon + 1);
firstColon = path.IndexOf(":"); firstColon = path.IndexOf(":");
} }

View File

@@ -1,8 +1,6 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging;
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;
@@ -38,7 +36,7 @@ namespace Modbus.Net
public FifoController(int acquireTime, bool activateSema = true, Func<byte[], ICollection<byte[]>> duplicateFunc = null, int? waitingListMaxCount = null) public FifoController(int acquireTime, bool activateSema = true, Func<byte[], ICollection<byte[]>> duplicateFunc = null, int? waitingListMaxCount = null)
: base(duplicateFunc) : base(duplicateFunc)
{ {
_waitingListMaxCount = int.Parse(waitingListMaxCount != null ? waitingListMaxCount.ToString() : null ?? ConfigurationReader.GetValueDirect("Controller","WaitingListCount")); _waitingListMaxCount = int.Parse(waitingListMaxCount != null ? waitingListMaxCount.ToString() : null ?? ConfigurationReader.GetValueDirect("Controller", "WaitingListCount"));
if (activateSema) if (activateSema)
{ {
_taskCycleSema = new Semaphore(0, _waitingListMaxCount); _taskCycleSema = new Semaphore(0, _waitingListMaxCount);

View File

@@ -21,7 +21,7 @@ namespace Modbus.Net
/// <param name="count">重复次数负数为无限循环0为执行一次</param> /// <param name="count">重复次数负数为无限循环0为执行一次</param>
/// <param name="intervalSecond">间隔秒数</param> /// <param name="intervalSecond">间隔秒数</param>
/// <returns></returns> /// <returns></returns>
public static ParallelLoopResult RunScheduler<TKey>(IEnumerable<IMachine<TKey>> machines, Func<IMachine<TKey>, MachineGetJobScheduler, Task> machineJobTemplate, int count = 0, int intervalSecond = 1) where TKey: IEquatable<TKey> public static ParallelLoopResult RunScheduler<TKey>(IEnumerable<IMachine<TKey>> machines, Func<IMachine<TKey>, MachineGetJobScheduler, Task> machineJobTemplate, int count = 0, int intervalSecond = 1) where TKey : IEquatable<TKey>
{ {
_machineCount = machines.Count(); _machineCount = machines.Count();
return Parallel.ForEach(machines, (machine, state, index) => return Parallel.ForEach(machines, (machine, state, index) =>

View File

@@ -1,6 +1,4 @@
using Microsoft.Extensions.Configuration; using System;
using System;
using System.IO;
using System.IO.Ports; using System.IO.Ports;
namespace Modbus.Net namespace Modbus.Net
@@ -24,7 +22,7 @@ namespace Modbus.Net
protected ComProtocolLinker(string com, int slaveAddress, int? baudRate = null, Parity? parity = null, StopBits? stopBits = null, int? dataBits = null, protected ComProtocolLinker(string com, int slaveAddress, int? baudRate = null, Parity? parity = null, StopBits? stopBits = null, int? dataBits = null,
int? connectionTimeout = null, bool? isFullDuplex = null) int? connectionTimeout = null, bool? isFullDuplex = null)
{ {
baudRate = int.Parse(baudRate != null ? baudRate.ToString() : null ?? ConfigurationReader.GetValue("COM:"+com, "BaudRate")); baudRate = int.Parse(baudRate != null ? baudRate.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "BaudRate"));
parity = Enum.Parse<Parity>(parity != null ? parity.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "Parity")); parity = Enum.Parse<Parity>(parity != null ? parity.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "Parity"));
stopBits = Enum.Parse<StopBits>(stopBits != null ? stopBits.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "StopBits")); stopBits = Enum.Parse<StopBits>(stopBits != null ? stopBits.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "StopBits"));
dataBits = int.Parse(dataBits != null ? dataBits.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "DataBits")); dataBits = int.Parse(dataBits != null ? dataBits.ToString() : null ?? ConfigurationReader.GetValue("COM:" + com, "DataBits"));

View File

@@ -1,9 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net
using System;
using System.Configuration;
using System.IO;
namespace Modbus.Net
{ {
/// <summary> /// <summary>
/// Tcp连接对象 /// Tcp连接对象
@@ -19,7 +14,7 @@ namespace Modbus.Net
/// <param name="isFullDuplex">是否为全双工</param> /// <param name="isFullDuplex">是否为全双工</param>
protected TcpProtocolLinker(string ip, int port, int? connectionTimeout = null, bool? isFullDuplex = null) protected TcpProtocolLinker(string ip, int port, int? connectionTimeout = null, bool? isFullDuplex = null)
{ {
connectionTimeout = int.Parse(connectionTimeout != null ? connectionTimeout.ToString() : null ?? ConfigurationReader.GetValue("TCP:"+ip+":"+port, "ConnectionTimeout")); connectionTimeout = int.Parse(connectionTimeout != null ? connectionTimeout.ToString() : null ?? ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "ConnectionTimeout"));
isFullDuplex = bool.Parse(isFullDuplex != null ? isFullDuplex.ToString() : null ?? ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FullDuplex")); isFullDuplex = bool.Parse(isFullDuplex != null ? isFullDuplex.ToString() : null ?? ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FullDuplex"));
//初始化连接对象 //初始化连接对象
BaseConnector = new TcpConnector(ip, port, connectionTimeout.Value, isFullDuplex.Value); BaseConnector = new TcpConnector(ip, port, connectionTimeout.Value, isFullDuplex.Value);

View File

@@ -1,8 +1,4 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net
using System;
using System.IO;
namespace Modbus.Net
{ {
/// <summary> /// <summary>
/// Udp连接对象 /// Udp连接对象

View File

@@ -213,7 +213,8 @@ namespace Modbus.Net
await BaseUtility.ConnectAsync(); await BaseUtility.ConnectAsync();
//如果无法连接,终止 //如果无法连接,终止
if (!BaseUtility.IsConnected) return if (!BaseUtility.IsConnected) return
new ReturnStruct<Dictionary<string, ReturnUnit>>() { new ReturnStruct<Dictionary<string, ReturnUnit>>()
{
Datas = null, Datas = null,
IsSuccess = false, IsSuccess = false,
ErrorCode = -1, ErrorCode = -1,
@@ -493,7 +494,7 @@ namespace Modbus.Net
ErrorMsg = datas.ErrorMsg ErrorMsg = datas.ErrorMsg
}; };
} }
else if(datas.Datas.Length < else if (datas.Datas.Length <
(int) (int)
Math.Ceiling(communicateAddress.GetCount * Math.Ceiling(communicateAddress.GetCount *
BigEndianValueHelper.Instance.ByteLength[ BigEndianValueHelper.Instance.ByteLength[

View File

@@ -1,10 +1,4 @@
using System; namespace Modbus.Net
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Modbus.Net
{ {
/// <summary> /// <summary>
/// 返回引用类型 /// 返回引用类型

View File

@@ -2,9 +2,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Security.Policy;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq;
/// <summary> /// <summary>
/// 端格式 /// 端格式

View File

@@ -26,8 +26,8 @@
"FetchSleepTime": "100", "FetchSleepTime": "100",
"ConnectionTimeout": "5000", "ConnectionTimeout": "5000",
"BaudRate": "9600", "BaudRate": "9600",
"Parity": "Parity.None", "Parity": "None",
"StopBits": "StopBits.One", "StopBits": "One",
"DataBits": "8", "DataBits": "8",
"FullDuplex": "False", "FullDuplex": "False",
"Modbus": { "Modbus": {

View File

@@ -26,8 +26,8 @@
"FetchSleepTime": "100", "FetchSleepTime": "100",
"ConnectionTimeout": "5000", "ConnectionTimeout": "5000",
"BaudRate": "9600", "BaudRate": "9600",
"Parity": "Parity.None", "Parity": "None",
"StopBits": "StopBits.One", "StopBits": "One",
"DataBits": "8", "DataBits": "8",
"FullDuplex": "False", "FullDuplex": "False",
"Modbus": { "Modbus": {

View File

@@ -26,8 +26,8 @@
"FetchSleepTime": "100", "FetchSleepTime": "100",
"ConnectionTimeout": "5000", "ConnectionTimeout": "5000",
"BaudRate": "9600", "BaudRate": "9600",
"Parity": "Parity.None", "Parity": "None",
"StopBits": "StopBits.One", "StopBits": "One",
"DataBits": "8", "DataBits": "8",
"FullDuplex": "False", "FullDuplex": "False",
"Modbus": { "Modbus": {

View File

@@ -46,8 +46,8 @@ namespace MachineJob.Service
IMachine<string> machine = new ModbusMachine<string, string>("ModbusMachine1", ModbusType.Tcp, null, _addresses, true, 1, 2, Endian.BigEndianLsb); IMachine<string> machine = new ModbusMachine<string, string>("ModbusMachine1", ModbusType.Tcp, null, _addresses, true, 1, 2, Endian.BigEndianLsb);
IMachine<string> machine2 = new SiemensMachine<string, string>("SiemensMachine1", SiemensType.Tcp, null, SiemensMachineModel.S7_1200, _addresses2, true, 1, 2); IMachine<string> machine2 = new SiemensMachine<string, string>("SiemensMachine1", SiemensType.Tcp, null, SiemensMachineModel.S7_1200, _addresses2, true, 1, 2);
IMachine<string> machine3 = new ModbusMachine<string, string>("ModbusMachine2", ModbusType.Rtu, "COM3", _addresses, true, 3, 2);
var machines = new List<IMachine<string>>() { machine, machine2 }; var machines = new List<IMachine<string>>() { machine, machine2, machine3 };
return Task.Run(() => MultipleMachinesJobScheduler.RunScheduler(machines, async (machine, scheduler) => return Task.Run(() => MultipleMachinesJobScheduler.RunScheduler(machines, async (machine, scheduler) =>
{ {
await scheduler.From(machine.Id, machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Deal(machine.Id + ".Deal", OnSuccess, OnFailure).Result.Run(); await scheduler.From(machine.Id, machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Deal(machine.Id + ".Deal", OnSuccess, OnFailure).Result.Run();
@@ -56,7 +56,7 @@ namespace MachineJob.Service
public override Task StopAsync(CancellationToken cancellationToken) public override Task StopAsync(CancellationToken cancellationToken)
{ {
return Task.Run(()=>MultipleMachinesJobScheduler.CancelJob()); return Task.Run(() => MultipleMachinesJobScheduler.CancelJob());
} }
public Task OnSuccess(string machineId) public Task OnSuccess(string machineId)
@@ -67,13 +67,15 @@ namespace MachineJob.Service
public Task OnFailure(string machineId, int errorCode, string errorMsg) public Task OnFailure(string machineId, int errorCode, string errorMsg)
{ {
_logger.LogError("Machine {0} set failure", machineId); _logger.LogError("Machine {0} set failure: {1}", machineId, errorMsg);
return Task.CompletedTask; return Task.CompletedTask;
} }
private Dictionary<string, double> QueryConsole(DataReturnDef dataReturnDef) private Dictionary<string, double>? QueryConsole(DataReturnDef dataReturnDef)
{ {
var values = dataReturnDef.ReturnValues.Datas; var values = dataReturnDef.ReturnValues.Datas;
if (dataReturnDef.ReturnValues.IsSuccess)
{
foreach (var value in values) foreach (var value in values)
{ {
_logger.LogInformation(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue); _logger.LogInformation(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue);
@@ -113,5 +115,7 @@ namespace MachineJob.Service
return values.MapGetValuesToSetValues(); return values.MapGetValuesToSetValues();
} }
return null;
}
} }
} }

View File

@@ -26,8 +26,8 @@
"FetchSleepTime": "100", "FetchSleepTime": "100",
"ConnectionTimeout": "5000", "ConnectionTimeout": "5000",
"BaudRate": "9600", "BaudRate": "9600",
"Parity": "Parity.None", "Parity": "None",
"StopBits": "StopBits.One", "StopBits": "One",
"DataBits": "8", "DataBits": "8",
"FullDuplex": "False", "FullDuplex": "False",
"Modbus": { "Modbus": {

View File

@@ -26,8 +26,8 @@
"FetchSleepTime": "100", "FetchSleepTime": "100",
"ConnectionTimeout": "5000", "ConnectionTimeout": "5000",
"BaudRate": "9600", "BaudRate": "9600",
"Parity": "Parity.None", "Parity": "None",
"StopBits": "StopBits.One", "StopBits": "One",
"DataBits": "8", "DataBits": "8",
"FullDuplex": "False", "FullDuplex": "False",
"Modbus": { "Modbus": {