This commit is contained in:
parallelbgls
2024-07-26 17:34:07 +08:00
parent e38c16e899
commit 21c8e34934

View File

@@ -11,7 +11,7 @@ namespace Modbus.Net.Modbus
{ {
public class ModbusRtuDataReceiver public class ModbusRtuDataReceiver
{ {
private ModbusRtuProtocolReceiver _receiver; private List<ModbusRtuProtocolReceiver> _receivers;
private readonly IConfigurationRoot configuration = new ConfigurationBuilder() private readonly IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) .SetBasePath(Directory.GetCurrentDirectory())
@@ -59,10 +59,14 @@ namespace Modbus.Net.Modbus
public ModbusRtuDataReceiver(MachineDataType dataType) public ModbusRtuDataReceiver(MachineDataType dataType)
{ {
_receiver = new ModbusRtuProtocolReceiver(ConfigurationReader.GetValue("Receiver", "d:connectionString"), int.Parse(ConfigurationReader.GetValue("Receiver", "g:slaveAddress"))); _receivers = new List<ModbusRtuProtocolReceiver>();
var machineName = ConfigurationReader.GetValue("Receiver", "a:id"); var receiversDef = configuration.GetSection("Modbus.Net").GetSection("Receiver").GetChildren();
var addressMapName = ConfigurationReader.GetValue("Receiver", "e:addressMap"); foreach (var receiverDef in receiversDef)
var endian = ValueHelper.GetInstance(Endian.Parse(ConfigurationReader.GetValue("Receiver", "i:endian"))); {
var _receiver = new ModbusRtuProtocolReceiver(receiverDef.GetValue<string>("d:connectionString"), receiverDef.GetValue<int>("g:slaveAddress"));
var machineName = receiverDef.GetValue<string>("a:id");
var addressMapName = receiverDef.GetValue<string>("e:addressMap");
var endian = ValueHelper.GetInstance(Endian.Parse(receiverDef.GetValue<string>("i:endian")));
_receiver.DataProcess = receiveContent => _receiver.DataProcess = receiveContent =>
{ {
var returnTime = DateTime.Now; var returnTime = DateTime.Now;
@@ -190,11 +194,19 @@ namespace Modbus.Net.Modbus
if (returnBytes != null) return returnBytes; if (returnBytes != null) return returnBytes;
else return null; else return null;
}; };
_receivers.Add(_receiver);
}
} }
public async Task<bool> ConnectAsync() public async Task<bool> ConnectAsync()
{ {
return await _receiver.ConnectAsync(); var result = await Task.FromResult(Parallel.ForEach(_receivers, async _receiver =>
{
await _receiver.ConnectAsync();
}));
return result.IsCompleted;
} }
} }
} }