fix
This commit is contained in:
@@ -10,6 +10,7 @@ namespace Modbus.Net.Modbus
|
|||||||
BaseUtility = new ModbusUtility(connectionType, connectionString);
|
BaseUtility = new ModbusUtility(connectionType, connectionString);
|
||||||
AddressFormater = new AddressFormaterModbus();
|
AddressFormater = new AddressFormaterModbus();
|
||||||
AddressCombiner = new AddressCombinerContinus();
|
AddressCombiner = new AddressCombinerContinus();
|
||||||
|
AddressCombinerSet = new AddressCombinerContinus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModbusMachine(ModbusType connectionType, string connectionString,
|
public ModbusMachine(ModbusType connectionType, string connectionString,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ namespace Modbus.Net.OPC
|
|||||||
{
|
{
|
||||||
BaseUtility = new OpcDaUtility(connectionString);
|
BaseUtility = new OpcDaUtility(connectionString);
|
||||||
AddressCombiner = new AddressCombinerSingle();
|
AddressCombiner = new AddressCombinerSingle();
|
||||||
|
AddressCombinerSet = new AddressCombinerSingle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public OpcDaMachine(string connectionString, IEnumerable<AddressUnit> getAddresses)
|
public OpcDaMachine(string connectionString, IEnumerable<AddressUnit> getAddresses)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace Modbus.Net.Siemens
|
|||||||
BaseUtility = new SiemensUtility(connectionType, connectionString, model);
|
BaseUtility = new SiemensUtility(connectionType, connectionString, model);
|
||||||
AddressFormater = new AddressFormaterSiemens();
|
AddressFormater = new AddressFormaterSiemens();
|
||||||
AddressCombiner = new AddressCombinerContinus();
|
AddressCombiner = new AddressCombinerContinus();
|
||||||
|
AddressCombinerSet = new AddressCombinerContinus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SiemensMachine(SiemensType connectionType, string connectionString, SiemensMachineModel model,
|
public SiemensMachine(SiemensType connectionType, string connectionString, SiemensMachineModel model,
|
||||||
|
|||||||
@@ -71,10 +71,15 @@ namespace Modbus.Net
|
|||||||
public AddressFormater AddressFormater { get; set; }
|
public AddressFormater AddressFormater { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 地址解码器
|
/// 获取地址组合器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public AddressCombiner AddressCombiner { get; set; }
|
public AddressCombiner AddressCombiner { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 写入地址组合器
|
||||||
|
/// </summary>
|
||||||
|
public AddressCombiner AddressCombinerSet { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 地址转换器
|
/// 地址转换器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -329,7 +334,7 @@ namespace Modbus.Net
|
|||||||
addresses.Add(address);
|
addresses.Add(address);
|
||||||
}
|
}
|
||||||
//将地址编码成与实际设备通讯的地址,注意这个地址必须是连续的
|
//将地址编码成与实际设备通讯的地址,注意这个地址必须是连续的
|
||||||
var communcationUnits = new AddressCombinerContinus().Combine(addresses);
|
var communcationUnits = AddressCombinerSet.Combine(addresses);
|
||||||
//遍历每条通讯的连续地址
|
//遍历每条通讯的连续地址
|
||||||
foreach (var communicateAddress in communcationUnits)
|
foreach (var communicateAddress in communcationUnits)
|
||||||
{
|
{
|
||||||
@@ -366,13 +371,13 @@ namespace Modbus.Net
|
|||||||
//获取要写入的值
|
//获取要写入的值
|
||||||
var value = values.SingleOrDefault(p => p.Key == address);
|
var value = values.SingleOrDefault(p => p.Key == address);
|
||||||
//将要写入的值加入队列
|
//将要写入的值加入队列
|
||||||
datasList.Add(Convert.ChangeType(value.Value, dataType));
|
datasList.Add(Convert.ChangeType(value.Value / addressUnit.Zoom, dataType));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MachineSetDataType.CommunicationTag:
|
case MachineSetDataType.CommunicationTag:
|
||||||
{
|
{
|
||||||
var value = values.SingleOrDefault(p => p.Key == addressUnit.CommunicationTag);
|
var value = values.SingleOrDefault(p => p.Key == addressUnit.CommunicationTag);
|
||||||
datasList.Add(Convert.ChangeType(value.Value, dataType));
|
datasList.Add(Convert.ChangeType(value.Value / addressUnit.Zoom, dataType));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,14 @@ using System.Linq;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
namespace Modbus.Net
|
namespace Modbus.Net
|
||||||
{
|
{
|
||||||
|
public enum MachineDataType
|
||||||
|
{
|
||||||
|
Address,
|
||||||
|
CommunicationTag,
|
||||||
|
}
|
||||||
|
|
||||||
public class TaskReturnDef
|
public class TaskReturnDef
|
||||||
{
|
{
|
||||||
public string MachineId { get; set; }
|
public string MachineId { get; set; }
|
||||||
@@ -279,7 +284,30 @@ 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public MachineGetDataType GetDataType { get; set; }
|
public MachineGetDataType GetDataType { get; set; }
|
||||||
|
public MachineSetDataType SetDataType { get; set; }
|
||||||
|
|
||||||
/*public int MaxRunningTasks
|
/*public int MaxRunningTasks
|
||||||
{
|
{
|
||||||
@@ -297,14 +325,15 @@ namespace Modbus.Net
|
|||||||
/// <param name="maxRunningTask">同时可以运行的任务数</param>
|
/// <param name="maxRunningTask">同时可以运行的任务数</param>
|
||||||
/// <param name="getCycle">读取数据的时间间隔(秒)</param>
|
/// <param name="getCycle">读取数据的时间间隔(秒)</param>
|
||||||
/// <param name="keepConnect">读取数据后是否保持连接</param>
|
/// <param name="keepConnect">读取数据后是否保持连接</param>
|
||||||
public TaskManager(/*int maxRunningTask,*/ int getCycle, bool keepConnect, MachineGetDataType getDataType = MachineGetDataType.CommunicationTag)
|
/// <param name="dataType">获取与设置数据的方式</param>
|
||||||
|
public TaskManager(/*int maxRunningTask,*/ int getCycle, bool keepConnect, MachineDataType dataType = MachineDataType.CommunicationTag)
|
||||||
{
|
{
|
||||||
//_scheduler = new LimitedConcurrencyLevelTaskScheduler(maxRunningTask);
|
//_scheduler = new LimitedConcurrencyLevelTaskScheduler(maxRunningTask);
|
||||||
_machines = new HashSet<BaseMachine>(new BaseMachineEqualityComparer());
|
_machines = new HashSet<BaseMachine>(new BaseMachineEqualityComparer());
|
||||||
_unlinkedMachines = new HashSet<BaseMachine>(new BaseMachineEqualityComparer());
|
_unlinkedMachines = new HashSet<BaseMachine>(new BaseMachineEqualityComparer());
|
||||||
_getCycle = getCycle;
|
_getCycle = getCycle;
|
||||||
KeepConnect = keepConnect;
|
KeepConnect = keepConnect;
|
||||||
GetDataType = getDataType;
|
MachineDataType = dataType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -494,10 +523,9 @@ namespace Modbus.Net
|
|||||||
/// 设置数据
|
/// 设置数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="connectionToken">设备的连接标识</param>
|
/// <param name="connectionToken">设备的连接标识</param>
|
||||||
/// <param name="setDataType">设置类型</param>
|
|
||||||
/// <param name="values">需要设置的数据</param>
|
/// <param name="values">需要设置的数据</param>
|
||||||
/// <returns>是否设置成功</returns>
|
/// <returns>是否设置成功</returns>
|
||||||
public async Task<bool> SetDatasAsync(string connectionToken, MachineSetDataType setDataType,
|
public async Task<bool> SetDatasAsync(string connectionToken,
|
||||||
Dictionary<string, double> values)
|
Dictionary<string, double> values)
|
||||||
{
|
{
|
||||||
BaseMachine machine = null;
|
BaseMachine machine = null;
|
||||||
@@ -506,7 +534,7 @@ namespace Modbus.Net
|
|||||||
machine = _machines.FirstOrDefault(p => p.ConnectionToken == connectionToken);
|
machine = _machines.FirstOrDefault(p => p.ConnectionToken == connectionToken);
|
||||||
}
|
}
|
||||||
if (machine == null) return false;
|
if (machine == null) return false;
|
||||||
return await machine.SetDatasAsync(setDataType, values);
|
return await machine.SetDatasAsync(SetDataType, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user