diff --git a/Modbus.Net/src/Base.Common/BaseMachine.cs b/Modbus.Net/src/Base.Common/BaseMachine.cs
index ee97b51..e247760 100644
--- a/Modbus.Net/src/Base.Common/BaseMachine.cs
+++ b/Modbus.Net/src/Base.Common/BaseMachine.cs
@@ -304,24 +304,36 @@ namespace Modbus.Net
}
}
- //如果没有数据返回空
- if (datas.Length == 0)
- ans.Add(key, new ReturnUnit
- {
- PlcValue = null,
- UnitExtend = address.UnitExtend
- });
- else
- ans.Add(key,
- new ReturnUnit
+ try
+ {
+ //如果没有数据返回空
+ if (datas.Length == 0)
+ ans.Add(key, new ReturnUnit
{
- PlcValue =
- Convert.ToDouble(
- ValueHelper.GetInstance(BaseUtility.Endian)
- .GetValue(datas, ref localMainPos, ref localSubPos,
- address.DataType)) * address.Zoom,
+ PlcValue = null,
UnitExtend = address.UnitExtend
});
+ else
+ ans.Add(key,
+ new ReturnUnit
+ {
+ PlcValue =
+ Convert.ToDouble(
+ ValueHelper.GetInstance(BaseUtility.Endian)
+ .GetValue(datas, ref localMainPos, ref localSubPos,
+ address.DataType)) * address.Zoom,
+ UnitExtend = address.UnitExtend
+ });
+ }
+ catch (Exception e)
+ {
+ ErrorCount++;
+ Log.Error(e, $"BaseMachine -> GetDatas, Id:{Id} Connection:{ConnectionToken} key {key} existing. ErrorCount {ErrorCount}.");
+
+ if (ErrorCount >= _maxErrorCount)
+ Disconnect();
+ return null;
+ }
}
}
//如果不保持连接,断开连接
diff --git a/Modbus.Net/src/Base.Common/TaskManager.cs b/Modbus.Net/src/Base.Common/TaskManager.cs
index c7dbe25..0e876b1 100644
--- a/Modbus.Net/src/Base.Common/TaskManager.cs
+++ b/Modbus.Net/src/Base.Common/TaskManager.cs
@@ -408,9 +408,10 @@ namespace Modbus.Net
/// 构造函数
///
/// 返回值的处理函数
+ /// 返回值的键类型
/// 循环间隔(毫秒)
/// 设备离线时的循环间隔(毫秒)
- public TaskItemGetData(Action returnFunc, int getCycle, int sleepCycle)
+ public TaskItemGetData(Action returnFunc, MachineGetDataType getDataType, int getCycle, int sleepCycle)
{
Name = "GetDatas";
Invoke = async (machine, tasks, parameters) =>
@@ -421,7 +422,7 @@ namespace Modbus.Net
await tasks.StartNew(
async () => await machine.InvokeMachineMethod>>("GetDatasAsync",
- MachineGetDataType.CommunicationTag).WithCancellation(cts.Token)).Unwrap();
+ getDataType).WithCancellation(cts.Token)).Unwrap();
return new DataReturnDef
{
MachineId = machine.GetMachineIdString(),
@@ -444,8 +445,9 @@ namespace Modbus.Net
/// 构造函数
///
/// 写入的值
+ /// 写入值的键类型
/// 返回值的处理函数
- public TaskItemSetData(Dictionary values, Action returnFunc = null)
+ public TaskItemSetData(Dictionary values, MachineSetDataType setDataType, Action returnFunc = null)
{
Name = "SetDatas";
Invoke = Invoke = async (machine, tasks, parameters) =>
@@ -456,7 +458,7 @@ namespace Modbus.Net
await tasks.StartNew(
async () => await machine.InvokeMachineMethod>("SetDatasAsync", parameters[0],
- MachineSetDataType.CommunicationTag).WithCancellation(cts.Token)).Unwrap();
+ setDataType).WithCancellation(cts.Token)).Unwrap();
return ans;
};
Params = new object[] {values};
@@ -641,10 +643,8 @@ namespace Modbus.Net
///
/// 同时可以运行的任务数
/// 读取数据后是否保持连接
- /// 获取与设置数据的方式
- public TaskManager(int maxRunningTask, bool keepConnect,
- MachineDataType dataType = MachineDataType.CommunicationTag)
- : base(maxRunningTask, keepConnect, dataType)
+ public TaskManager(int maxRunningTask, bool keepConnect)
+ : base(maxRunningTask, keepConnect)
{
}
@@ -723,15 +723,12 @@ namespace Modbus.Net
///
/// 同时可以运行的任务数
/// 读取数据后是否保持连接
- /// 获取与设置数据的方式
- public TaskManager(int maxRunningTask, bool keepConnect,
- MachineDataType dataType = MachineDataType.CommunicationTag)
+ public TaskManager(int maxRunningTask, bool keepConnect)
{
_scheduler = new LimitedConcurrencyLevelTaskScheduler(maxRunningTask);
_machines =
new HashSet>(new TaskMachineEqualityComparer());
KeepConnect = keepConnect;
- MachineDataType = dataType;
_cts = new CancellationTokenSource();
_tasks = new TaskFactory(_cts.Token, TaskCreationOptions.None, TaskContinuationOptions.None, _scheduler);
}
@@ -755,53 +752,6 @@ namespace Modbus.Net
}
}
- ///
- /// 设备读写设备的关键字
- ///
- public MachineDataType MachineDataType
- {
- set
- {
- switch (value)
- {
- case MachineDataType.Address:
- {
- GetDataType = MachineGetDataType.Address;
- SetDataType = MachineSetDataType.Address;
- break;
- }
- case MachineDataType.CommunicationTag:
- {
- GetDataType = MachineGetDataType.CommunicationTag;
- SetDataType = MachineSetDataType.CommunicationTag;
- break;
- }
- case MachineDataType.Name:
- {
- GetDataType = MachineGetDataType.Name;
- SetDataType = MachineSetDataType.Name;
- break;
- }
- case MachineDataType.Id:
- {
- GetDataType = MachineGetDataType.Id;
- SetDataType = MachineSetDataType.Id;
- break;
- }
- }
- }
- }
-
- ///
- /// 设备读数据的关键字
- ///
- public MachineGetDataType GetDataType { get; set; }
-
- ///
- /// 设备写数据的关键字
- ///
- public MachineSetDataType SetDataType { get; set; }
-
///
/// 最大可执行任务数
///