123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- using Edge.Core.Parser.BinaryParser.Attributes;
- using Edge.Core.Parser.BinaryParser.MessageEntity;
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace GroWattInverter.MessageEntity
- {
- public enum FunctionCodeEnum
- {
- /// <summary>
- /// 读保持寄存器
- /// </summary>
- 保持寄存器 = 0x03,
- /// <summary>
- /// 读输入寄存器
- /// 输入寄存器是一类read-only寄存器,比如运行时的实时信息(实时发电量)读取
- /// </summary>
- 只读寄存器 = 0x04,
- /// <summary>
- /// 对单个寄存器写入
- /// </summary>
- 命令码写入_对单个寄存器 = 0x06,
- /// <summary>
- /// 对1个或者多个寄存器写入
- /// </summary>
- 命令码写入_对单个或者多个寄存器 = 0x10,
- /// <summary>
- ///
- /// </summary>
- 预置多个寄存器 = 0x11,
- }
- public abstract class MessageBase : MessageTemplateBase
- {
- /// <summary>
- /// 目标设备的地址
- /// </summary>
- [Format(1, EncodingType.BIN, -9999)]
- [Range(1, 247, "SlaveAddress must be range from {1} to {2}, but actual is {0}")]
- public byte SlaveAddress { get; set; }
- /// <summary>
- /// 地址类型<br/>
- /// </summary>
- [Format(1, EncodingType.BIN, -9990)]
- public FunctionCodeEnum FunctionCode { get; set; }
- [EnumerableFormat(2, 1100)]
- public virtual List<byte> CRC16 { get; set; }
- }
- public class OutgoingQueryMessage : MessageBase
- {
- public OutgoingQueryMessage()
- {
- base.FunctionCode = FunctionCodeEnum.只读寄存器;
- }
- /// <summary>
- /// 支持 Modbus 错误码 02(地址错误)、04(设置失败)。
- /// 本协议所有寄存器地址在使用时需减 1 访问。如地址为 5000~5001,在程序中使用 4999~5000 访问。如“01 04 1387 00 02 + CRC”查询 5000~5001 地址数据。
- /// </summary>
- [Format(2, EncodingType.BIN, -9980)]
- [Range(0, 5999, "QueryStartAddress must be range from {1} to {2}, but actual is {0}")]
- public int StartingRegAddress { get; set; }
- [Format(2, EncodingType.BIN, -9970)]
- [Range(1, 50, "AddressRange must be range from {1} to {2}, but actual is {0}")]
- public byte NoOfRegAddress { get; set; }
- }
- public class IncomingQueryMessage : MessageBase
- {
- [Format(1, EncodingType.BIN, -9980)]
- public byte DataLength { get; set; }
- [EnumerableFormat("DataLength", -9970)]
- public List<byte> RawData { get; set; }
- //[EnumerableFormat(2, -9960)]
- //public List<byte> CRC16 { get; set; }
- }
- /// <summary>
- /// used for 设置单个或者多个寄存器数据
- /// </summary>
- public class OutgoingWriteToMultipleRegMessage : OutgoingQueryMessage
- {
- public OutgoingWriteToMultipleRegMessage()
- {
- base.FunctionCode = FunctionCodeEnum.命令码写入_对单个或者多个寄存器;
- }
- [Format(1, EncodingType.BIN, -9960)]
- public int DataLength { get; set; }
- [EnumerableFormat("DataLength", -9950)]
- public List<byte> RawData { get; set; }
- }
- /// <summary>
- /// used as a response for 设置单个或者多个寄存器数据
- /// </summary>
- public class IncomingWriteToMultipleRegMessage : OutgoingQueryMessage
- {
- }
- /// <summary>
- /// used for 设置单个寄存器数据
- /// </summary>
- public class OutgoingWriteToSingleRegMessage : MessageBase
- {
- public OutgoingWriteToSingleRegMessage()
- {
- this.FunctionCode = FunctionCodeEnum.命令码写入_对单个寄存器;
- }
- /// <summary>
- /// 支持 Modbus 错误码 02(地址错误)、04(设置失败)。
- /// 本协议所有寄存器地址在使用时需减 1 访问。如地址为 5000~5001,在程序中使用 4999~5000 访问。如“01 04 1387 00 02 + CRC”查询 5000~5001 地址数据。
- /// </summary>
- [Format(2, EncodingType.BIN, -9980)]
- [Range(3000, 5999, "QueryStartAddress must be range from {1} to {2}, but actual is {0}")]
- public int RegAddress { get; set; }
- [EnumerableFormat("DataLength", -9950)]
- public virtual List<byte> RawData { get; set; }
- //[EnumerableFormat(2, 1100)]
- //public virtual List<byte> CRC16 { get; set; }
- }
- /// <summary>
- /// used as a response for 设置单个寄存器数据
- /// </summary>
- public class IncomingWriteToSingleRegMessage : OutgoingWriteToSingleRegMessage
- {
- [EnumerableFormat(2, -9950)]
- public override List<byte> RawData { get; set; }
- }
- }
|