FaultDataModel.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 bool HasFault => FaultCode != 0;
  20. /// <summary>
  21. /// 在用传感器编号列表
  22. /// </summary>
  23. public int[] WorkingSensors => GetWorkingSensors(FaultCode);
  24. /// <summary>
  25. /// 故障传感器编号列表
  26. /// </summary>
  27. public int[] FaultySensors => GetFaultySensors(FaultCode);
  28. public override string ToString()
  29. {
  30. if (!HasFault)
  31. return null;
  32. if (FaultType == FaultType.Encoder)
  33. {
  34. return $"编码器故障";
  35. }
  36. else
  37. {
  38. if (FaultySensors.Length == 0)
  39. return null;
  40. else
  41. return $"第[{string.Join(",", FaultySensors)}]路传感器故障";
  42. }
  43. }
  44. /// <summary>
  45. /// 根据故障码,返回无故障的传感器编号数组
  46. /// </summary>
  47. /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
  48. /// <returns>无故障的传感器编号数组,如 [1,2,3,4] 表示全正常</returns>
  49. private static int[] GetWorkingSensors(int faultCode)
  50. {
  51. var workingList = new List<int>();
  52. // 检查每一位,1 左移 (i-1) 位
  53. for (int i = 1; i <= 4; i++)
  54. {
  55. int bitMask = 1 << (i - 1); // 第i路对应的位掩码:1,2,4,8
  56. if ((faultCode & bitMask) == 0)
  57. {
  58. workingList.Add(i); // 该位为0,表示无故障
  59. }
  60. }
  61. return workingList.ToArray();
  62. }
  63. /// <summary>
  64. /// 根据故障码,返回故障的传感器编号数组
  65. /// </summary>
  66. /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
  67. /// <returns>故障的传感器编号数组,如 [] 表示全正常,[4] 表示第4路故障</returns>
  68. private static int[] GetFaultySensors(int faultCode)
  69. {
  70. var faultyList = new List<int>();
  71. for (int i = 1; i <= 4; i++)
  72. {
  73. int bitMask = 1 << (i - 1); // 第i路对应的位掩码:1,2,4,8
  74. if ((faultCode & bitMask) != 0) // 这里改为 != 0
  75. {
  76. faultyList.Add(i); // 该位为1,表示有故障
  77. }
  78. }
  79. return faultyList.ToArray();
  80. }
  81. }
  82. }