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