diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs
index 92c3697..06d3f29 100644
--- a/Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs
+++ b/Modbus.Net/Modbus.Net.Siemens/SiemensMachine.cs
@@ -12,6 +12,7 @@ namespace Modbus.Net.Siemens
///
/// 构造函数
///
+ /// 设备id号
/// 连接类型
/// 连接地址
/// 设备类型
@@ -19,11 +20,13 @@ namespace Modbus.Net.Siemens
/// 是否保持连接
/// 从站号
/// 主站号
+ /// 本机模块位,0到7,仅200使用,其它型号不要填写
+ /// PLC模块位,0到7,仅200使用,其它型号不要填写
public SiemensMachine(TKey id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
- IEnumerable> getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress)
+ IEnumerable> getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
: 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();
AddressCombiner = new AddressCombinerContinus(AddressTranslator, 100);
AddressCombinerSet = new AddressCombinerContinus(AddressTranslator, 100);
@@ -32,15 +35,18 @@ namespace Modbus.Net.Siemens
///
/// 构造函数
///
+ /// 设备id号
/// 连接类型
/// 连接地址
/// 设备类型
/// 读写的地址
/// 从站号
/// 主站号
+ /// 本机模块位,0到7,仅200使用,其它型号不要填写
+ /// PLC模块位,0到7,仅200使用,其它型号不要填写
public SiemensMachine(TKey id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
- IEnumerable> getAddresses, byte slaveAddress, byte masterAddress)
- : this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress)
+ IEnumerable> getAddresses, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
+ : this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress, src, dst)
{
}
}
@@ -53,6 +59,7 @@ namespace Modbus.Net.Siemens
///
/// 构造函数
///
+ /// 设备id号
/// 连接类型
/// 连接地址
/// 设备类型
@@ -60,11 +67,13 @@ namespace Modbus.Net.Siemens
/// 是否保持连接
/// 从站号
/// 主站号
+ /// 本机模块位,0到7,仅200使用,其它型号不要填写
+ /// PLC模块位,0到7,仅200使用,其它型号不要填写
public SiemensMachine(string id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
- IEnumerable getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress)
+ IEnumerable getAddresses, bool keepConnect, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
: 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();
AddressCombiner = new AddressCombinerContinus(AddressTranslator, 100);
AddressCombinerSet = new AddressCombinerContinus(AddressTranslator, 100);
@@ -73,15 +82,18 @@ namespace Modbus.Net.Siemens
///
/// 构造函数
///
+ /// 设备id号
/// 连接类型
/// 连接地址
/// 设备类型
/// 读写的地址
/// 从站号
/// 主站号
+ /// 本机模块位,0到7,仅200使用,其它型号不要填写
+ /// PLC模块位,0到7,仅200使用,其它型号不要填写
public SiemensMachine(string id, SiemensType connectionType, string connectionString, SiemensMachineModel model,
- IEnumerable getAddresses, byte slaveAddress, byte masterAddress)
- : this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress)
+ IEnumerable getAddresses, byte slaveAddress, byte masterAddress, byte src = 1, byte dst = 0)
+ : this(id, connectionType, connectionString, model, getAddresses, false, slaveAddress, masterAddress, src, dst)
{
}
}
diff --git a/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs b/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs
index b3762fa..b6a75a4 100644
--- a/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs
+++ b/Modbus.Net/Modbus.Net.Siemens/SiemensUtility.cs
@@ -66,6 +66,8 @@ namespace Modbus.Net.Siemens
private readonly byte _tdpuSize;
private readonly ushort _tsapDst;
+ private ushort _sendCount;
+
private SiemensType _siemensType;
///
@@ -76,8 +78,10 @@ namespace Modbus.Net.Siemens
/// 设备类型
/// 从站地址
/// 主站地址
+ /// 本机模块位,0到7,仅200使用,其它型号不要填写
+ /// PLC模块位,0到7,仅200使用,其它型号不要填写
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;
switch (model)
@@ -85,8 +89,8 @@ namespace Modbus.Net.Siemens
case SiemensMachineModel.S7_200:
{
_tdpuSize = 0x09;
- _taspSrc = 0x1001;
- _tsapDst = 0x1000;
+ _taspSrc = (ushort)(0x1000 + src);
+ _tsapDst = (ushort)(0x1000 + dst);
_maxCalling = 0x0001;
_maxCalled = 0x0001;
_maxPdu = 0x03c0;
@@ -131,6 +135,7 @@ namespace Modbus.Net.Siemens
}
ConnectionType = connectionType;
AddressTranslator = new AddressTranslatorSiemens();
+ _sendCount = 0;
}
///
@@ -231,8 +236,9 @@ namespace Modbus.Net.Siemens
{
try
{
+ _sendCount = (ushort)(_sendCount % 65535 + 1);
var readRequestSiemensInputStruct = new ReadRequestSiemensInputStruct(SlaveAddress, MasterAddress,
- 0xd3c7, SiemensTypeCode.Byte, startAddress, (ushort) getByteCount, AddressTranslator);
+ _sendCount, SiemensTypeCode.Byte, startAddress, (ushort) getByteCount, AddressTranslator);
var readRequestSiemensOutputStruct =
await
Wrapper.SendReceiveAsync(
@@ -257,8 +263,9 @@ namespace Modbus.Net.Siemens
{
try
{
+ _sendCount = (ushort)(_sendCount % 65535 + 1);
var writeRequestSiemensInputStruct = new WriteRequestSiemensInputStruct(SlaveAddress, MasterAddress,
- 0xd3c8, startAddress, setContents, AddressTranslator);
+ _sendCount, startAddress, setContents, AddressTranslator);
var writeRequestSiemensOutputStruct =
await
Wrapper.SendReceiveAsync(