You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
2.0 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ModbusDemo.ErrorCode
  7. {
  8. public class ErrorCode
  9. {
  10. // 静态列表:存储所有错误码
  11. public static readonly List<ErrorCode> AllErrors = new List<ErrorCode>();
  12. // 错误码值
  13. public byte Code { get; }
  14. // 错误描述
  15. public string Description { get; }
  16. // 私有构造函数,只能通过静态方法创建错误码
  17. private ErrorCode(byte code, string description)
  18. {
  19. Code = code;
  20. Description = description;
  21. // 自动添加到错误码列表
  22. AllErrors.Add(this);
  23. }
  24. // 重写 ToString 方法
  25. public override string ToString() => $"Error 0x{Code:X2}: {Description}";
  26. // 根据错误码值查找错误码
  27. public static ErrorCode FromByte(byte code) => AllErrors.FirstOrDefault(e => e.Code == code);
  28. // 定义所有错误码
  29. public static readonly ErrorCode FunctionCodeError = new ErrorCode(0x01, "功能码错误");
  30. public static readonly ErrorCode DomainStartAddressError = new ErrorCode(0x02, "域数据首地址错误");
  31. public static readonly ErrorCode DataContentError = new ErrorCode(0x03, "数据内容错误");
  32. public static readonly ErrorCode DataTypeError = new ErrorCode(0x10, "数据类型错误");
  33. public static readonly ErrorCode DomainDataCountError = new ErrorCode(0x11, "域数据个数错误");
  34. public static readonly ErrorCode DataCountMismatch = new ErrorCode(0x12, "数据个数与内部区域数据个数不符");
  35. public static readonly ErrorCode WriteOperationDenied = new ErrorCode(0x13, "不能进行写操作");
  36. public static readonly ErrorCode CrcCheckError = new ErrorCode(0x14, "CRC校验错误");
  37. public static readonly ErrorCode DatabaseException = new ErrorCode(0x15, "数据库异常");
  38. }
  39. }