2017-12-22 Update 2 Siemens Add Counter
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>(
|
||||||
|
|||||||
Reference in New Issue
Block a user