FaultDataModel.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using SWRIS.Enums;
  2. using System;
  3. using System.Collections.Generic;
  4. namespace SWRIS.Models
  5. {
  6. public class FaultDataModel
  7. {
  8. /// <summary>
  9. /// 故障类型
  10. /// </summary>
  11. public FaultType FaultType { get; set; }
  12. /// <summary>
  13. /// 故障代码
  14. /// </summary>
  15. public int FaultCode { get; set; }
  16. /// <summary>
  17. /// 在用传感器编号列表
  18. /// </summary>
  19. public int[] WorkingSensors => GetWorkingSensors(FaultCode);
  20. /// <summary>
  21. /// 故障传感器编号列表
  22. /// </summary>
  23. public int[] FaultySensors => GetFaultySensors(FaultCode);
  24. public override string ToString()
  25. {
  26. if (FaultType == FaultType.Encoder)
  27. {
  28. return $"编码器故障";
  29. }
  30. else
  31. {
  32. return $"第[{string.Join(",",FaultySensors)}]路传感器故障";
  33. }
  34. }
  35. /// <summary>
  36. /// 根据故障码,返回无故障的传感器编号数组
  37. /// </summary>
  38. /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
  39. /// <returns>无故障的传感器编号数组,如 [1,2,3,4] 表示全正常</returns>
  40. private static int[] GetWorkingSensors(int faultCode)
  41. {
  42. var workingList = new List<int>();
  43. // 检查每一位,1 左移 (i-1) 位
  44. for (int i = 1; i <= 4; i++)
  45. {
  46. int bitMask = 1 << (i - 1); // 第i路对应的位掩码:1,2,4,8
  47. if ((faultCode & bitMask) == 0)
  48. {
  49. workingList.Add(i); // 该位为0,表示无故障
  50. }
  51. }
  52. return workingList.ToArray();
  53. }
  54. /// <summary>
  55. /// 根据故障码,返回故障的传感器编号数组
  56. /// </summary>
  57. /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
  58. /// <returns>故障的传感器编号数组,如 [] 表示全正常,[4] 表示第4路故障</returns>
  59. private static int[] GetFaultySensors(int faultCode)
  60. {
  61. var faultyList = new List<int>();
  62. for (int i = 1; i <= 4; i++)
  63. {
  64. int bitMask = 1 << (i - 1); // 第i路对应的位掩码:1,2,4,8
  65. if ((faultCode & bitMask) != 0) // 这里改为 != 0
  66. {
  67. faultyList.Add(i); // 该位为1,表示有故障
  68. }
  69. }
  70. return faultyList.ToArray();
  71. }
  72. }
  73. }