using SWRIS.Enums; using System; using System.Collections.Generic; namespace SWRIS.Models { public class FaultDataModel { /// /// 故障类型 /// public FaultType FaultType { get; set; } /// /// 故障代码 /// public int FaultCode { get; set; } /// /// 在用传感器编号列表 /// public int[] WorkingSensors => GetWorkingSensors(FaultCode); /// /// 故障传感器编号列表 /// public int[] FaultySensors => GetFaultySensors(FaultCode); public override string ToString() { if (FaultType == FaultType.Encoder) { return $"编码器故障"; } else { if (FaultySensors.Length == 0) return null; else return $"第[{string.Join(",", FaultySensors)}]路传感器故障"; } } /// /// 根据故障码,返回无故障的传感器编号数组 /// /// 故障码 (0/1/2/4/8 或它们的组合) /// 无故障的传感器编号数组,如 [1,2,3,4] 表示全正常 private static int[] GetWorkingSensors(int faultCode) { var workingList = new List(); // 检查每一位,1 左移 (i-1) 位 for (int i = 1; i <= 4; i++) { int bitMask = 1 << (i - 1); // 第i路对应的位掩码:1,2,4,8 if ((faultCode & bitMask) == 0) { workingList.Add(i); // 该位为0,表示无故障 } } return workingList.ToArray(); } /// /// 根据故障码,返回故障的传感器编号数组 /// /// 故障码 (0/1/2/4/8 或它们的组合) /// 故障的传感器编号数组,如 [] 表示全正常,[4] 表示第4路故障 private static int[] GetFaultySensors(int faultCode) { var faultyList = new List(); for (int i = 1; i <= 4; i++) { int bitMask = 1 << (i - 1); // 第i路对应的位掩码:1,2,4,8 if ((faultCode & bitMask) != 0) // 这里改为 != 0 { faultyList.Add(i); // 该位为1,表示有故障 } } return faultyList.ToArray(); } } }