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);