FaultDataModel.cs 2.7 KB

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