diff --git a/Modbus.Net/Modbus.Net/BaseMachine.cs b/Modbus.Net/Modbus.Net/BaseMachine.cs index 27bd85d..3970885 100644 --- a/Modbus.Net/Modbus.Net/BaseMachine.cs +++ b/Modbus.Net/Modbus.Net/BaseMachine.cs @@ -5,6 +5,21 @@ using System.Threading.Tasks; namespace Modbus.Net { + /// + /// 获取设备值的方式 + /// + public enum MachineGetDataType + { + /// + /// 地址 + /// + Address, + /// + /// 通讯标识 + /// + CommunicationTag + } + /// /// 向设备设置值的方式 /// @@ -113,16 +128,18 @@ namespace Modbus.Net /// 读取数据 /// /// 从设备读取的数据 - public Dictionary GetDatas() + public Dictionary GetDatas(MachineGetDataType getDataType) { - return AsyncHelper.RunSync(GetDatasAsync); + return AsyncHelper.RunSync(()=>GetDatasAsync(getDataType)); } + + /// /// 读取数据 /// /// 从设备读取的数据 - public async Task> GetDatasAsync() + public async Task> GetDatasAsync(MachineGetDataType getDataType) { try { @@ -164,8 +181,28 @@ namespace Modbus.Net p => p.Area == communicateAddress.Area && p.Address == pos + communicateAddress.Address); if (address != null) { + string key; + switch (getDataType) + { + case MachineGetDataType.CommunicationTag: + { + key = address.CommunicationTag; + break; + } + case MachineGetDataType.Address: + { + key = AddressFormater.FormatAddress(address.Area, address.Address); + break; + } + default: + { + key = address.CommunicationTag; + break; + } + } + //将获取的数据和对应的通讯标识对应 - ans.Add(address.CommunicationTag, + ans.Add(key, new ReturnUnit { PlcValue = diff --git a/Modbus.Net/Modbus.Net/TaskManager.cs b/Modbus.Net/Modbus.Net/TaskManager.cs index 2ff3103..5bccfc3 100644 --- a/Modbus.Net/Modbus.Net/TaskManager.cs +++ b/Modbus.Net/Modbus.Net/TaskManager.cs @@ -279,6 +279,8 @@ namespace Modbus.Net } } + public MachineGetDataType GetDataType { get; set; } + /*public int MaxRunningTasks { get { return _scheduler.MaximumConcurrencyLevel; } @@ -295,13 +297,14 @@ namespace Modbus.Net /// 同时可以运行的任务数 /// 读取数据的时间间隔(秒) /// 读取数据后是否保持连接 - public TaskManager(/*int maxRunningTask,*/ int getCycle, bool keepConnect) + public TaskManager(/*int maxRunningTask,*/ int getCycle, bool keepConnect, MachineGetDataType getDataType = MachineGetDataType.CommunicationTag) { //_scheduler = new LimitedConcurrencyLevelTaskScheduler(maxRunningTask); _machines = new HashSet(new BaseMachineEqualityComparer()); _unlinkedMachines = new HashSet(new BaseMachineEqualityComparer()); _getCycle = getCycle; KeepConnect = keepConnect; + GetDataType = getDataType; } /// @@ -556,7 +559,7 @@ namespace Modbus.Net //超时后取消任务 cts.CancelAfter(TimeSpan.FromSeconds(_getCycle)); //读取数据 - var ans = await machine.GetDatasAsync().WithCancellation(cts.Token); + var ans = await machine.GetDatasAsync(GetDataType).WithCancellation(cts.Token); if (!machine.IsConnected) { MoveMachineToUnlinked(machine.Id);