2017-12-22 Update 2 Siemens Add Counter

This commit is contained in:
parallelbgls
2017-12-22 15:04:50 +08:00
parent 7d82d647d1
commit bc53f2cb37
2 changed files with 32 additions and 13 deletions

View File

@@ -12,6 +12,7 @@ namespace Modbus.Net.Siemens
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
/// </summary> /// </summary>
/// <param name="id">设备id号</param>
/// <param name="connectionType">连接类型</param> /// <param name="connectionType">连接类型</param>
/// <param name="connectionString">连接地址</param> /// <param name="connectionString">连接地址</param>
/// <param name="model">设备类型</param> /// <param name="model">设备类型</param>
@@ -19,11 +20,13 @@ namespace Modbus.Net.Siemens
/// <param name="keepConnect">是否保持连接</param> /// <param name="keepConnect">是否保持连接</param>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param> /// <param name="masterAddress">主站号</param>
/// <param name="src">本机模块位0到7仅200使用其它型号不要填写</param>
/// <param name="dst">PLC模块位0到7仅200使用其它型号不要填写</param>
public SiemensMachine(TKey id, SiemensType connectionType, string connectionString, SiemensMachineModel model, public SiemensMachine(TKey id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
IEnumerable<AddressUnit<TUnitKey>> getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress) IEnumerable<AddressUnit<TUnitKey>> getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
: base(id, getAddresses, keepConnect, slaveAddress, masterAddress) : base(id, getAddresses, keepConnect, slaveAddress, masterAddress)
{ {
BaseUtility = new SiemensUtility(connectionType, connectionString, model, slaveAddress, masterAddress); BaseUtility = new SiemensUtility(connectionType, connectionString, model, slaveAddress, masterAddress, src, dst);
AddressFormater = new AddressFormaterSiemens(); AddressFormater = new AddressFormaterSiemens();
AddressCombiner = new AddressCombinerContinus<TUnitKey>(AddressTranslator, 100); AddressCombiner = new AddressCombinerContinus<TUnitKey>(AddressTranslator, 100);
AddressCombinerSet = new AddressCombinerContinus<TUnitKey>(AddressTranslator, 100); AddressCombinerSet = new AddressCombinerContinus<TUnitKey>(AddressTranslator, 100);
@@ -32,15 +35,18 @@ namespace Modbus.Net.Siemens
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
/// </summary> /// </summary>
/// <param name="id">设备id号</param>
/// <param name="connectionType">连接类型</param> /// <param name="connectionType">连接类型</param>
/// <param name="connectionString">连接地址</param> /// <param name="connectionString">连接地址</param>
/// <param name="model">设备类型</param> /// <param name="model">设备类型</param>
/// <param name="getAddresses">读写的地址</param> /// <param name="getAddresses">读写的地址</param>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param> /// <param name="masterAddress">主站号</param>
/// <param name="src">本机模块位0到7仅200使用其它型号不要填写</param>
/// <param name="dst">PLC模块位0到7仅200使用其它型号不要填写</param>
public SiemensMachine(TKey id, SiemensType connectionType, string connectionString, SiemensMachineModel model, public SiemensMachine(TKey id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
IEnumerable<AddressUnit<TUnitKey>> getAddresses, byte slaveAddress, byte masterAddress) IEnumerable<AddressUnit<TUnitKey>> getAddresses, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
: this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress) : this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress, src, dst)
{ {
} }
} }
@@ -53,6 +59,7 @@ namespace Modbus.Net.Siemens
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
/// </summary> /// </summary>
/// <param name="id">设备id号</param>
/// <param name="connectionType">连接类型</param> /// <param name="connectionType">连接类型</param>
/// <param name="connectionString">连接地址</param> /// <param name="connectionString">连接地址</param>
/// <param name="model">设备类型</param> /// <param name="model">设备类型</param>
@@ -60,11 +67,13 @@ namespace Modbus.Net.Siemens
/// <param name="keepConnect">是否保持连接</param> /// <param name="keepConnect">是否保持连接</param>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param> /// <param name="masterAddress">主站号</param>
/// <param name="src">本机模块位0到7仅200使用其它型号不要填写</param>
/// <param name="dst">PLC模块位0到7仅200使用其它型号不要填写</param>
public SiemensMachine(string id, SiemensType connectionType, string connectionString, SiemensMachineModel model, public SiemensMachine(string id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
IEnumerable<AddressUnit> getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress) IEnumerable<AddressUnit> getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
: base(id, getAddresses, keepConnect, slaveAddress, masterAddress) : base(id, getAddresses, keepConnect, slaveAddress, masterAddress)
{ {
BaseUtility = new SiemensUtility(connectionType, connectionString, model, slaveAddress, masterAddress); BaseUtility = new SiemensUtility(connectionType, connectionString, model, slaveAddress, masterAddress, src, dst);
AddressFormater = new AddressFormaterSiemens(); AddressFormater = new AddressFormaterSiemens();
AddressCombiner = new AddressCombinerContinus(AddressTranslator, 100); AddressCombiner = new AddressCombinerContinus(AddressTranslator, 100);
AddressCombinerSet = new AddressCombinerContinus(AddressTranslator, 100); AddressCombinerSet = new AddressCombinerContinus(AddressTranslator, 100);
@@ -73,15 +82,18 @@ namespace Modbus.Net.Siemens
/// <summary> /// <summary>
/// 构造函数 /// 构造函数
/// </summary> /// </summary>
/// <param name="id">设备id号</param>
/// <param name="connectionType">连接类型</param> /// <param name="connectionType">连接类型</param>
/// <param name="connectionString">连接地址</param> /// <param name="connectionString">连接地址</param>
/// <param name="model">设备类型</param> /// <param name="model">设备类型</param>
/// <param name="getAddresses">读写的地址</param> /// <param name="getAddresses">读写的地址</param>
/// <param name="slaveAddress">从站号</param> /// <param name="slaveAddress">从站号</param>
/// <param name="masterAddress">主站号</param> /// <param name="masterAddress">主站号</param>
/// <param name="src">本机模块位0到7仅200使用其它型号不要填写</param>
/// <param name="dst">PLC模块位0到7仅200使用其它型号不要填写</param>
public SiemensMachine(string id, SiemensType connectionType, string connectionString, SiemensMachineModel model, public SiemensMachine(string id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
IEnumerable<AddressUnit> getAddresses, byte slaveAddress, byte masterAddress) IEnumerable<AddressUnit> getAddresses, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
: this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress) : this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress, src, dst)
{ {
} }
} }

View File

@@ -66,6 +66,8 @@ namespace Modbus.Net.Siemens
private readonly byte _tdpuSize; private readonly byte _tdpuSize;
private readonly ushort _tsapDst; private readonly ushort _tsapDst;
private ushort _sendCount;
private SiemensType _siemensType; private SiemensType _siemensType;
/// <summary> /// <summary>
@@ -76,8 +78,10 @@ namespace Modbus.Net.Siemens
/// <param name="model">设备类型</param> /// <param name="model">设备类型</param>
/// <param name="slaveAddress">从站地址</param> /// <param name="slaveAddress">从站地址</param>
/// <param name="masterAddress">主站地址</param> /// <param name="masterAddress">主站地址</param>
/// <param name="src">本机模块位0到7仅200使用其它型号不要填写</param>
/// <param name="dst">PLC模块位0到7仅200使用其它型号不要填写</param>
public SiemensUtility(SiemensType connectionType, string connectionString, SiemensMachineModel model, public SiemensUtility(SiemensType connectionType, string connectionString, SiemensMachineModel model,
byte slaveAddress, byte masterAddress) : base(slaveAddress, masterAddress) byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0) : base(slaveAddress, masterAddress)
{ {
ConnectionString = connectionString; ConnectionString = connectionString;
switch (model) switch (model)
@@ -85,8 +89,8 @@ namespace Modbus.Net.Siemens
case SiemensMachineModel.S7_200: case SiemensMachineModel.S7_200:
{ {
_tdpuSize = 0x09; _tdpuSize = 0x09;
_taspSrc = 0x1001; _taspSrc = (ushort)(0x1000 + src);
_tsapDst = 0x1000; _tsapDst = (ushort)(0x1000 + dst);
_maxCalling = 0x0001; _maxCalling = 0x0001;
_maxCalled = 0x0001; _maxCalled = 0x0001;
_maxPdu = 0x03c0; _maxPdu = 0x03c0;
@@ -131,6 +135,7 @@ namespace Modbus.Net.Siemens
} }
ConnectionType = connectionType; ConnectionType = connectionType;
AddressTranslator = new AddressTranslatorSiemens(); AddressTranslator = new AddressTranslatorSiemens();
_sendCount = 0;
} }
/// <summary> /// <summary>
@@ -231,8 +236,9 @@ namespace Modbus.Net.Siemens
{ {
try try
{ {
_sendCount = (ushort)(_sendCount % 65535 + 1);
var readRequestSiemensInputStruct = new ReadRequestSiemensInputStruct(SlaveAddress, MasterAddress, var readRequestSiemensInputStruct = new ReadRequestSiemensInputStruct(SlaveAddress, MasterAddress,
0xd3c7, SiemensTypeCode.Byte, startAddress, (ushort) getByteCount, AddressTranslator); _sendCount, SiemensTypeCode.Byte, startAddress, (ushort) getByteCount, AddressTranslator);
var readRequestSiemensOutputStruct = var readRequestSiemensOutputStruct =
await await
Wrapper.SendReceiveAsync<ReadRequestSiemensOutputStruct>( Wrapper.SendReceiveAsync<ReadRequestSiemensOutputStruct>(
@@ -257,8 +263,9 @@ namespace Modbus.Net.Siemens
{ {
try try
{ {
_sendCount = (ushort)(_sendCount % 65535 + 1);
var writeRequestSiemensInputStruct = new WriteRequestSiemensInputStruct(SlaveAddress, MasterAddress, var writeRequestSiemensInputStruct = new WriteRequestSiemensInputStruct(SlaveAddress, MasterAddress,
0xd3c8, startAddress, setContents, AddressTranslator); _sendCount, startAddress, setContents, AddressTranslator);
var writeRequestSiemensOutputStruct = var writeRequestSiemensOutputStruct =
await await
Wrapper.SendReceiveAsync<WriteRequestSiemensOutputStruct>( Wrapper.SendReceiveAsync<WriteRequestSiemensOutputStruct>(