Add Comments

This commit is contained in:
parallelbgls
2017-05-17 19:05:19 +08:00
parent ba56c5be1b
commit 7ab457bf9a

View File

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