using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ModbusDemo.ErrorCode { public class ErrorCode { // 静态列表:存储所有错误码 public static readonly List AllErrors = new List(); // 错误码值 public byte Code { get; } // 错误描述 public string Description { get; } // 私有构造函数,只能通过静态方法创建错误码 private ErrorCode(byte code, string description) { Code = code; Description = description; // 自动添加到错误码列表 AllErrors.Add(this); } // 重写 ToString 方法 public override string ToString() => $"Error 0x{Code:X2}: {Description}"; // 隐式转换为 byte public static implicit operator byte(ErrorCode error) => error.Code; // 根据错误码值查找错误码 public static ErrorCode FromByte(byte code) => AllErrors.FirstOrDefault(e => e.Code == code); // 定义所有错误码 public static readonly ErrorCode FunctionCodeError = new ErrorCode(0x01, "功能码错误"); public static readonly ErrorCode DomainStartAddressError = new ErrorCode(0x02, "域数据首地址错误"); public static readonly ErrorCode DataContentError = new ErrorCode(0x03, "数据内容错误"); public static readonly ErrorCode DataTypeError = new ErrorCode(0x10, "数据类型错误"); public static readonly ErrorCode DomainDataCountError = new ErrorCode(0x11, "域数据个数错误"); public static readonly ErrorCode DataCountMismatch = new ErrorCode(0x12, "数据个数与内部区域数据个数不符"); public static readonly ErrorCode WriteOperationDenied = new ErrorCode(0x13, "不能进行写操作"); public static readonly ErrorCode CrcCheckError = new ErrorCode(0x14, "CRC校验错误"); public static readonly ErrorCode DatabaseException = new ErrorCode(0x15, "数据库异常"); } }