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,15 +1,11 @@
using Microsoft.Extensions.Configuration; namespace Modbus.Net.Modbus
using System;
using System.IO;
namespace Modbus.Net.Modbus
{ {
/// <summary> /// <summary>
/// Modbus/Rtu协议 /// Modbus/Rtu协议
/// </summary> /// </summary>
public class ModbusRtuProtocol : ModbusProtocol public class ModbusRtuProtocol : ModbusProtocol
{ {
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
/// </summary> /// </summary>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>

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

@@ -416,7 +416,7 @@ namespace Modbus.Net.Modbus
IsSuccess = outputStruct?.WriteValue.ToString() == setContent.ToString(), IsSuccess = outputStruct?.WriteValue.ToString() == setContent.ToString(),
ErrorCode = outputStruct?.WriteValue.ToString() == setContent.ToString() ? 0 : -2, ErrorCode = outputStruct?.WriteValue.ToString() == setContent.ToString() ? 0 : -2,
ErrorMsg = outputStruct?.WriteValue.ToString() == setContent.ToString() ? "" : "Data length mismatch" ErrorMsg = outputStruct?.WriteValue.ToString() == setContent.ToString() ? "" : "Data length mismatch"
}; };
} }
catch (ModbusProtocolErrorException e) catch (ModbusProtocolErrorException e)
{ {

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

@@ -202,9 +202,9 @@ namespace Modbus.Net.Siemens
} }
//MPI //MPI
//case SiemensType.Mpi: //case SiemensType.Mpi:
//{ //{
//throw new NotImplementedException(); //throw new NotImplementedException();
//} //}
//Ethenet //Ethenet
case SiemensType.Tcp: case SiemensType.Tcp:
{ {
@@ -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
{ {
@@ -28,7 +25,7 @@ namespace Modbus.Net
/// <param name="key">元素的键</param> /// <param name="key">元素的键</param>
/// <returns>元素的值</returns> /// <returns>元素的值</returns>
public static string? GetValue(string path, string key) public static string? GetValue(string path, string key)
{ {
var split = path.Split(":"); var split = path.Split(":");
string? ans = null; string? ans = null;
while (split.Length > 0) while (split.Length > 0)
@@ -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

@@ -6,58 +6,58 @@ using System.Threading.Tasks;
namespace Modbus.Net namespace Modbus.Net
{ {
/// <summary> /// <summary>
/// 多设备任务调度器 /// 多设备任务调度器
/// </summary> /// </summary>
public sealed class MultipleMachinesJobScheduler public sealed class MultipleMachinesJobScheduler
{ {
private static int _machineCount = 0; private static int _machineCount = 0;
/// <summary> /// <summary>
/// 创建设备调度器 /// 创建设备调度器
/// </summary> /// </summary>
/// <param name="machines">设备的集合</param> /// <param name="machines">设备的集合</param>
/// <param name="machineJobTemplate">设备的运行模板</param> /// <param name="machineJobTemplate">设备的运行模板</param>
/// <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) =>
{ {
Task.Factory.StartNew(async () => Task.Factory.StartNew(async () =>
{ {
Thread.Sleep((int)(intervalSecond * 1000.0 / _machineCount * index)); Thread.Sleep((int)(intervalSecond * 1000.0 / _machineCount * index));
var getJobScheduler = await MachineJobSchedulerCreator.CreateScheduler("Trigger" + index, count, intervalSecond); var getJobScheduler = await MachineJobSchedulerCreator.CreateScheduler("Trigger" + index, count, intervalSecond);
await machineJobTemplate(machine, getJobScheduler); await machineJobTemplate(machine, getJobScheduler);
}); });
}); });
} }
/// <summary> /// <summary>
/// 创建设备调度器 /// 创建设备调度器
/// </summary> /// </summary>
/// <param name="machines">设备的集合</param> /// <param name="machines">设备的集合</param>
/// <param name="machineJobTemplate">设备的运行模板</param> /// <param name="machineJobTemplate">设备的运行模板</param>
/// <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(IEnumerable<IMachine<string>> machines, Func<IMachine<string>, MachineGetJobScheduler, Task> machineJobTemplate, int count = 0, int intervalSecond = 1) public static ParallelLoopResult RunScheduler(IEnumerable<IMachine<string>> machines, Func<IMachine<string>, MachineGetJobScheduler, Task> machineJobTemplate, int count = 0, int intervalSecond = 1)
{ {
return RunScheduler<string>(machines, machineJobTemplate, count, intervalSecond); return RunScheduler<string>(machines, machineJobTemplate, count, intervalSecond);
} }
/// <summary> /// <summary>
/// 取消任务 /// 取消任务
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public static ParallelLoopResult CancelJob() public static ParallelLoopResult CancelJob()
{ {
return Parallel.For(0, _machineCount, async index => return Parallel.For(0, _machineCount, async index =>
{ {
await MachineJobSchedulerCreator.CancelJob("Trigger" + index); await MachineJobSchedulerCreator.CancelJob("Trigger" + 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
@@ -22,9 +20,9 @@ namespace Modbus.Net
/// <param name="slaveAddress">从站地址</param> /// <param name="slaveAddress">从站地址</param>
/// <param name="isFullDuplex">是否为全双工</param> /// <param name="isFullDuplex">是否为全双工</param>
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

@@ -212,8 +212,9 @@ namespace Modbus.Net
if (!BaseUtility.IsConnected) if (!BaseUtility.IsConnected)
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,11 +494,11 @@ 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[
communicateAddress.DataType.FullName])) communicateAddress.DataType.FullName]))
return new ReturnStruct<bool>() return new ReturnStruct<bool>()
{ {
Datas = false, Datas = false,

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,51 +67,55 @@ 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;
foreach (var value in values) if (dataReturnDef.ReturnValues.IsSuccess)
{ {
_logger.LogInformation(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue); foreach (var value in values)
}
try
{
using (var context = new DatabaseWriteContext())
{ {
context.DatabaseWrites.Add(new DatabaseWriteEntity _logger.LogInformation(dataReturnDef.MachineId + " " + value.Key + " " + value.Value.DeviceValue);
{
Value1 = values["Test1"].DeviceValue,
Value2 = values["Test2"].DeviceValue,
Value3 = values["Test3"].DeviceValue,
Value4 = values["Test4"].DeviceValue,
Value5 = values["Test5"].DeviceValue,
Value6 = values["Test6"].DeviceValue,
Value7 = values["Test7"].DeviceValue,
Value8 = values["Test8"].DeviceValue,
Value9 = values["Test9"].DeviceValue,
Value10 = values["Test10"].DeviceValue,
UpdateTime = DateTime.Now,
});
context.SaveChanges();
} }
}
catch
{
//ignore
}
Random r = new Random(); try
foreach (var value in values) {
{ using (var context = new DatabaseWriteContext())
value.Value.DeviceValue = r.Next(65536) - 32768; {
} context.DatabaseWrites.Add(new DatabaseWriteEntity
{
Value1 = values["Test1"].DeviceValue,
Value2 = values["Test2"].DeviceValue,
Value3 = values["Test3"].DeviceValue,
Value4 = values["Test4"].DeviceValue,
Value5 = values["Test5"].DeviceValue,
Value6 = values["Test6"].DeviceValue,
Value7 = values["Test7"].DeviceValue,
Value8 = values["Test8"].DeviceValue,
Value9 = values["Test9"].DeviceValue,
Value10 = values["Test10"].DeviceValue,
UpdateTime = DateTime.Now,
});
context.SaveChanges();
}
}
catch
{
//ignore
}
return values.MapGetValuesToSetValues(); Random r = new Random();
foreach (var value in values)
{
value.Value.DeviceValue = r.Next(65536) - 32768;
}
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": {