Add Comments
This commit is contained in:
@@ -102,8 +102,16 @@ namespace Modbus.Net.Siemens
|
|||||||
OtherAccess = 0x04
|
OtherAccess = 0x04
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 西门子协议
|
||||||
|
/// </summary>
|
||||||
public abstract class SiemensProtocal : BaseProtocal
|
public abstract class SiemensProtocal : BaseProtocal
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="slaveAddress">从站号</param>
|
||||||
|
/// <param name="masterAddress">主站号</param>
|
||||||
protected SiemensProtocal(byte slaveAddress, byte masterAddress)
|
protected SiemensProtocal(byte slaveAddress, byte masterAddress)
|
||||||
: base(slaveAddress, masterAddress, Endian.BigEndianLsb)
|
: base(slaveAddress, masterAddress, Endian.BigEndianLsb)
|
||||||
{
|
{
|
||||||
@@ -187,9 +195,9 @@ namespace Modbus.Net.Siemens
|
|||||||
TsapDst = dstTsap;
|
TsapDst = dstTsap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte TdpuSize { get; private set; }
|
public byte TdpuSize { get; }
|
||||||
public ushort TsapSrc { get; private set; }
|
public ushort TsapSrc { get; }
|
||||||
public ushort TsapDst { get; private set; }
|
public ushort TsapDst { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class CreateReferenceSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit
|
internal class CreateReferenceSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit
|
||||||
@@ -248,30 +256,63 @@ namespace Modbus.Net.Siemens
|
|||||||
|
|
||||||
#region 串口消息确认
|
#region 串口消息确认
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 串口消息确认输入
|
||||||
|
/// </summary>
|
||||||
public class ComConfirmMessageSiemensInputStruct : IInputStruct
|
public class ComConfirmMessageSiemensInputStruct : IInputStruct
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="slaveAddress">从站号</param>
|
||||||
|
/// <param name="masterAddress">主站号</param>
|
||||||
public ComConfirmMessageSiemensInputStruct(byte slaveAddress, byte masterAddress)
|
public ComConfirmMessageSiemensInputStruct(byte slaveAddress, byte masterAddress)
|
||||||
{
|
{
|
||||||
SlaveAddress = slaveAddress;
|
SlaveAddress = slaveAddress;
|
||||||
MasterAddress = masterAddress;
|
MasterAddress = masterAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从站号
|
||||||
|
/// </summary>
|
||||||
public byte SlaveAddress { get; set; }
|
public byte SlaveAddress { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 主站号
|
||||||
|
/// </summary>
|
||||||
public byte MasterAddress { get; set; }
|
public byte MasterAddress { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 串口消息确认输出
|
||||||
|
/// </summary>
|
||||||
public class ComConfirmMessageSiemensOutputStruct : IOutputStruct
|
public class ComConfirmMessageSiemensOutputStruct : IOutputStruct
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="confirmByte">确认字节</param>
|
||||||
public ComConfirmMessageSiemensOutputStruct(byte confirmByte)
|
public ComConfirmMessageSiemensOutputStruct(byte confirmByte)
|
||||||
{
|
{
|
||||||
ConfirmByte = confirmByte;
|
ConfirmByte = confirmByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 确认字节
|
||||||
|
/// </summary>
|
||||||
public byte ConfirmByte { get; set; }
|
public byte ConfirmByte { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 串口消息确认协议
|
||||||
|
/// </summary>
|
||||||
public class ComConfirmMessageSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit
|
public class ComConfirmMessageSiemensProtocal : ProtocalUnit, ISpecialProtocalUnit
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 格式化
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">输入参数</param>
|
||||||
|
/// <returns>格式化数据</returns>
|
||||||
public override byte[] Format(IInputStruct message)
|
public override byte[] Format(IInputStruct message)
|
||||||
{
|
{
|
||||||
var r_message = (ComConfirmMessageSiemensInputStruct) message;
|
var r_message = (ComConfirmMessageSiemensInputStruct) message;
|
||||||
@@ -280,6 +321,12 @@ namespace Modbus.Net.Siemens
|
|||||||
(byte) 0x16);
|
(byte) 0x16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 反格式化
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="messageBytes">设备返回的数据</param>
|
||||||
|
/// <param name="pos">当前反格式化的位置</param>
|
||||||
|
/// <returns>输出数据</returns>
|
||||||
public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
|
public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
|
||||||
{
|
{
|
||||||
var confirmByte = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos);
|
var confirmByte = BigEndianValueHelper.Instance.GetByte(messageBytes, ref pos);
|
||||||
@@ -309,7 +356,8 @@ namespace Modbus.Net.Siemens
|
|||||||
|
|
||||||
internal class EstablishAssociationSiemensOutputStruct : IOutputStruct
|
internal class EstablishAssociationSiemensOutputStruct : IOutputStruct
|
||||||
{
|
{
|
||||||
public EstablishAssociationSiemensOutputStruct(ushort pduRef, ushort maxCalling, ushort maxCalled, ushort maxPdu)
|
public EstablishAssociationSiemensOutputStruct(ushort pduRef, ushort maxCalling, ushort maxCalled,
|
||||||
|
ushort maxPdu)
|
||||||
{
|
{
|
||||||
PduRef = pduRef;
|
PduRef = pduRef;
|
||||||
MaxCalling = maxCalling;
|
MaxCalling = maxCalling;
|
||||||
@@ -317,10 +365,10 @@ namespace Modbus.Net.Siemens
|
|||||||
MaxPdu = maxPdu;
|
MaxPdu = maxPdu;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ushort PduRef { get; private set; }
|
public ushort PduRef { get; }
|
||||||
public ushort MaxCalling { get; private set; }
|
public ushort MaxCalling { get; }
|
||||||
public ushort MaxCalled { get; private set; }
|
public ushort MaxCalled { get; }
|
||||||
public ushort MaxPdu { get; private set; }
|
public ushort MaxPdu { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class EstablishAssociationSiemensProtocal : ProtocalUnit
|
internal class EstablishAssociationSiemensProtocal : ProtocalUnit
|
||||||
@@ -359,8 +407,21 @@ namespace Modbus.Net.Siemens
|
|||||||
|
|
||||||
#region 读数据请求
|
#region 读数据请求
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 读数据输入
|
||||||
|
/// </summary>
|
||||||
public class ReadRequestSiemensInputStruct : IInputStruct
|
public class ReadRequestSiemensInputStruct : IInputStruct
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="slaveAddress">从站号</param>
|
||||||
|
/// <param name="masterAddress">主站号</param>
|
||||||
|
/// <param name="pduRef">报文索引</param>
|
||||||
|
/// <param name="getType">获取数据类型</param>
|
||||||
|
/// <param name="startAddress">开始地址</param>
|
||||||
|
/// <param name="getCount">获取个数</param>
|
||||||
|
/// <param name="addressTranslator">地址转换器</param>
|
||||||
public ReadRequestSiemensInputStruct(byte slaveAddress, byte masterAddress, ushort pduRef,
|
public ReadRequestSiemensInputStruct(byte slaveAddress, byte masterAddress, ushort pduRef,
|
||||||
SiemensTypeCode getType, string startAddress, ushort getCount, AddressTranslator addressTranslator)
|
SiemensTypeCode getType, string startAddress, ushort getCount, AddressTranslator addressTranslator)
|
||||||
{
|
{
|
||||||
@@ -376,18 +437,60 @@ namespace Modbus.Net.Siemens
|
|||||||
NumberOfElements = getCount;
|
NumberOfElements = getCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从站号
|
||||||
|
/// </summary>
|
||||||
public byte SlaveAddress { get; set; }
|
public byte SlaveAddress { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 主站号
|
||||||
|
/// </summary>
|
||||||
public byte MasterAddress { get; set; }
|
public byte MasterAddress { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 报文索引
|
||||||
|
/// </summary>
|
||||||
public ushort PduRef { get; }
|
public ushort PduRef { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 地址类型
|
||||||
|
/// </summary>
|
||||||
public byte TypeCode { get; }
|
public byte TypeCode { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 读取的个数
|
||||||
|
/// </summary>
|
||||||
public ushort NumberOfElements { get; }
|
public ushort NumberOfElements { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DB块
|
||||||
|
/// </summary>
|
||||||
public ushort DbBlock { get; }
|
public ushort DbBlock { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 区域
|
||||||
|
/// </summary>
|
||||||
public byte Area { get; }
|
public byte Area { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 起始偏移量
|
||||||
|
/// </summary>
|
||||||
public int Offset { get; }
|
public int Offset { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 读数据输出
|
||||||
|
/// </summary>
|
||||||
public class ReadRequestSiemensOutputStruct : IOutputStruct
|
public class ReadRequestSiemensOutputStruct : IOutputStruct
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pduRef">报文索引</param>
|
||||||
|
/// <param name="accessResult">访问结果</param>
|
||||||
|
/// <param name="dataType">数据类型</param>
|
||||||
|
/// <param name="getLength">获取个数</param>
|
||||||
|
/// <param name="value">读取值</param>
|
||||||
public ReadRequestSiemensOutputStruct(ushort pduRef, SiemensAccessResult accessResult, SiemensDataType dataType,
|
public ReadRequestSiemensOutputStruct(ushort pduRef, SiemensAccessResult accessResult, SiemensDataType dataType,
|
||||||
ushort getLength, byte[] value)
|
ushort getLength, byte[] value)
|
||||||
{
|
{
|
||||||
@@ -398,15 +501,42 @@ namespace Modbus.Net.Siemens
|
|||||||
GetValue = value;
|
GetValue = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ushort PduRef { get; private set; }
|
/// <summary>
|
||||||
public SiemensAccessResult AccessResult { get; private set; }
|
/// 报文索引
|
||||||
public SiemensDataType DataType { get; private set; }
|
/// </summary>
|
||||||
public ushort GetLength { get; private set; }
|
public ushort PduRef { get; }
|
||||||
public byte[] GetValue { get; private set; }
|
|
||||||
|
/// <summary>
|
||||||
|
/// 访问结果
|
||||||
|
/// </summary>
|
||||||
|
public SiemensAccessResult AccessResult { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 数据类型
|
||||||
|
/// </summary>
|
||||||
|
public SiemensDataType DataType { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取个数
|
||||||
|
/// </summary>
|
||||||
|
public ushort GetLength { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 读取值
|
||||||
|
/// </summary>
|
||||||
|
public byte[] GetValue { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 读数据协议
|
||||||
|
/// </summary>
|
||||||
public class ReadRequestSiemensProtocal : ProtocalUnit
|
public class ReadRequestSiemensProtocal : ProtocalUnit
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 格式化
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">输入参数</param>
|
||||||
|
/// <returns>格式化数据</returns>
|
||||||
public override byte[] Format(IInputStruct message)
|
public override byte[] Format(IInputStruct message)
|
||||||
{
|
{
|
||||||
var r_message = (ReadRequestSiemensInputStruct) message;
|
var r_message = (ReadRequestSiemensInputStruct) message;
|
||||||
@@ -435,6 +565,12 @@ namespace Modbus.Net.Siemens
|
|||||||
offsetBitBytes.Skip(1).ToArray());
|
offsetBitBytes.Skip(1).ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 反格式化
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="messageBytes">设备返回的数据</param>
|
||||||
|
/// <param name="pos">当前反格式化的位置</param>
|
||||||
|
/// <returns>输出数据</returns>
|
||||||
public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
|
public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
|
||||||
{
|
{
|
||||||
pos = 4;
|
pos = 4;
|
||||||
@@ -455,8 +591,20 @@ namespace Modbus.Net.Siemens
|
|||||||
|
|
||||||
#region 写数据请求
|
#region 写数据请求
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 写数据输入
|
||||||
|
/// </summary>
|
||||||
public class WriteRequestSiemensInputStruct : IInputStruct
|
public class WriteRequestSiemensInputStruct : IInputStruct
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="slaveAddress">从站地址</param>
|
||||||
|
/// <param name="masterAddress">主站地址</param>
|
||||||
|
/// <param name="pduRef">报文索引</param>
|
||||||
|
/// <param name="startAddress">开始地址</param>
|
||||||
|
/// <param name="writeValue">写入值</param>
|
||||||
|
/// <param name="addressTranslator">地址转换器</param>
|
||||||
public WriteRequestSiemensInputStruct(byte slaveAddress, byte masterAddress, ushort pduRef, string startAddress,
|
public WriteRequestSiemensInputStruct(byte slaveAddress, byte masterAddress, ushort pduRef, string startAddress,
|
||||||
object[] writeValue, AddressTranslator addressTranslator)
|
object[] writeValue, AddressTranslator addressTranslator)
|
||||||
{
|
{
|
||||||
@@ -471,29 +619,79 @@ namespace Modbus.Net.Siemens
|
|||||||
WriteValue = writeValue;
|
WriteValue = writeValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从站地址
|
||||||
|
/// </summary>
|
||||||
public byte SlaveAddress { get; set; }
|
public byte SlaveAddress { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 主站地址
|
||||||
|
/// </summary>
|
||||||
public byte MasterAddress { get; set; }
|
public byte MasterAddress { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 报文索引
|
||||||
|
/// </summary>
|
||||||
public ushort PduRef { get; }
|
public ushort PduRef { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DB块
|
||||||
|
/// </summary>
|
||||||
public ushort DbBlock { get; }
|
public ushort DbBlock { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 区域
|
||||||
|
/// </summary>
|
||||||
public byte Area { get; }
|
public byte Area { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 写入偏移量
|
||||||
|
/// </summary>
|
||||||
public int Offset { get; }
|
public int Offset { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 写入值
|
||||||
|
/// </summary>
|
||||||
public object[] WriteValue { get; }
|
public object[] WriteValue { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 写数据输出
|
||||||
|
/// </summary>
|
||||||
public class WriteRequestSiemensOutputStruct : IOutputStruct
|
public class WriteRequestSiemensOutputStruct : IOutputStruct
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pduRef">报文索引</param>
|
||||||
|
/// <param name="accessResult">访问结果</param>
|
||||||
public WriteRequestSiemensOutputStruct(ushort pduRef, SiemensAccessResult accessResult)
|
public WriteRequestSiemensOutputStruct(ushort pduRef, SiemensAccessResult accessResult)
|
||||||
{
|
{
|
||||||
PduRef = pduRef;
|
PduRef = pduRef;
|
||||||
AccessResult = accessResult;
|
AccessResult = accessResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ushort PduRef { get; private set; }
|
/// <summary>
|
||||||
public SiemensAccessResult AccessResult { get; private set; }
|
/// 报文索引
|
||||||
|
/// </summary>
|
||||||
|
public ushort PduRef { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 访问结果
|
||||||
|
/// </summary>
|
||||||
|
public SiemensAccessResult AccessResult { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 写数据协议
|
||||||
|
/// </summary>
|
||||||
public class WriteRequestSiemensProtocal : ProtocalUnit
|
public class WriteRequestSiemensProtocal : ProtocalUnit
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 格式化
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">输入参数</param>
|
||||||
|
/// <returns>格式化数据</returns>
|
||||||
public override byte[] Format(IInputStruct message)
|
public override byte[] Format(IInputStruct message)
|
||||||
{
|
{
|
||||||
var r_message = (WriteRequestSiemensInputStruct) message;
|
var r_message = (WriteRequestSiemensInputStruct) message;
|
||||||
@@ -526,6 +724,12 @@ namespace Modbus.Net.Siemens
|
|||||||
offsetBitBytes.Skip(1).ToArray(), reserved, type, numberOfWriteBits, valueBytes);
|
offsetBitBytes.Skip(1).ToArray(), reserved, type, numberOfWriteBits, valueBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 反格式化
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="messageBytes">设备返回的数据</param>
|
||||||
|
/// <param name="pos">当前反格式化的位置</param>
|
||||||
|
/// <returns>输出数据</returns>
|
||||||
public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
|
public override IOutputStruct Unformat(byte[] messageBytes, ref int pos)
|
||||||
{
|
{
|
||||||
if (messageBytes.Length == 1)
|
if (messageBytes.Length == 1)
|
||||||
@@ -653,6 +857,11 @@ namespace Modbus.Net.Siemens
|
|||||||
{0xEF, "Layer 2 specific error"}
|
{0xEF, "Layer 2 specific error"}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 构造函数
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="errCls">错误分类</param>
|
||||||
|
/// <param name="errCod">错误码</param>
|
||||||
public SiemensProtocalErrorException(int errCls, int errCod)
|
public SiemensProtocalErrorException(int errCls, int errCod)
|
||||||
: base(ProtocalErrorDictionary[errCls] + " : " + errCod)
|
: base(ProtocalErrorDictionary[errCls] + " : " + errCod)
|
||||||
{
|
{
|
||||||
@@ -660,7 +869,14 @@ namespace Modbus.Net.Siemens
|
|||||||
ErrorCode = errCod;
|
ErrorCode = errCod;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int ErrorClass { get; private set; }
|
/// <summary>
|
||||||
public int ErrorCode { get; private set; }
|
/// 错误分类
|
||||||
|
/// </summary>
|
||||||
|
public int ErrorClass { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 错误码
|
||||||
|
/// </summary>
|
||||||
|
public int ErrorCode { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user