From 95a46ac9ea4a7dc3d9503f08cc95a7034eb60019 Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Wed, 26 Apr 2017 16:31:54 +0800 Subject: [PATCH] 2017-04-26 update 2 TaskManager data function call change. --- Modbus.Net/src/Base.Common/BaseMachine.cs | 24 +++++++++++++++-------- Modbus.Net/src/Base.Common/TaskManager.cs | 6 ++++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Modbus.Net/src/Base.Common/BaseMachine.cs b/Modbus.Net/src/Base.Common/BaseMachine.cs index f3c5ec2..2a3a208 100644 --- a/Modbus.Net/src/Base.Common/BaseMachine.cs +++ b/Modbus.Net/src/Base.Common/BaseMachine.cs @@ -868,18 +868,26 @@ namespace Modbus.Net bool KeepConnect { get; set; } /// - /// 读取数据 + /// 调用Machine中的方法 /// - /// 从设备读取的数据 - Task> GetDatasAsync(MachineGetDataType getDataType); + /// Machine实现的接口名称 + /// 返回值的类型 + /// 方法的名称 + /// 方法的参数 + /// + TReturnType InvokeMachineMethod(string methodName, + params object[] parameters) where TMachineMethod : IMachineMethod; /// - /// 写入数据 + /// 调用Utility中的方法 /// - /// 写入类型 - /// 需要写入的数据字典,当写入类型为Address时,键为需要写入的地址,当写入类型为CommunicationTag时,键为需要写入的单元的描述 - /// 是否写入成功 - Task SetDatasAsync(MachineSetDataType setDataType, Dictionary values); + /// Utility实现的接口名称 + /// 返回值的类型 + /// 方法的名称 + /// 方法的参数 + /// + TReturnType InvokeUtilityMethod(string methodName, + params object[] parameters) where TUtilityMethod : IUtilityMethod; /// /// 连接设备 diff --git a/Modbus.Net/src/Base.Common/TaskManager.cs b/Modbus.Net/src/Base.Common/TaskManager.cs index 387ff71..cd73294 100644 --- a/Modbus.Net/src/Base.Common/TaskManager.cs +++ b/Modbus.Net/src/Base.Common/TaskManager.cs @@ -725,7 +725,7 @@ namespace Modbus.Net machine = _machines.FirstOrDefault(p => p.ConnectionToken == connectionToken); } if (machine == null) return false; - return await machine.SetDatasAsync(SetDataType, values); + return await machine.InvokeMachineMethod>("SetDatasAsync", SetDataType, values); } /// @@ -798,7 +798,9 @@ namespace Modbus.Net //超时后取消任务 cts.CancelAfter(TimeSpan.FromSeconds(_getCycle)); //读取数据 - var ans = await machine.GetDatasAsync(GetDataType).WithCancellation(cts.Token); + var ans = + await machine.InvokeMachineMethod>>("GetDatasAsync", + GetDataType).WithCancellation(cts.Token); if (!machine.IsConnected) { MoveMachineToUnlinked(machine.Id);