This commit is contained in:
罗圣
2016-08-25 14:56:52 +08:00
parent f5cc2ee601
commit c4e2116192
5 changed files with 46 additions and 10 deletions

View File

@@ -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,

View File

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

View File

@@ -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,

View File

@@ -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;
} }
} }

View File

@@ -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>