| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using SWRIS.Enums;
- using System;
- using System.Collections.Generic;
- namespace SWRIS.Models
- {
- public class FaultDataModel
- {
- /// <summary>
- /// 故障类型
- /// </summary>
- public FaultType FaultType { get; set; }
- /// <summary>
- /// 故障代码
- /// </summary>
- public int FaultCode { get; set; }
- /// <summary>
- /// 在用传感器编号列表
- /// </summary>
- public int[] WorkingSensors => GetWorkingSensors(FaultCode);
- /// <summary>
- /// 故障传感器编号列表
- /// </summary>
- 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)}]路传感器故障";
- }
- }
- /// <summary>
- /// 根据故障码,返回无故障的传感器编号数组
- /// </summary>
- /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
- /// <returns>无故障的传感器编号数组,如 [1,2,3,4] 表示全正常</returns>
- private static int[] GetWorkingSensors(int faultCode)
- {
- var workingList = new List<int>();
- // 检查每一位,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();
- }
- /// <summary>
- /// 根据故障码,返回故障的传感器编号数组
- /// </summary>
- /// <param name="faultCode">故障码 (0/1/2/4/8 或它们的组合)</param>
- /// <returns>故障的传感器编号数组,如 [] 表示全正常,[4] 表示第4路故障</returns>
- private static int[] GetFaultySensors(int faultCode)
- {
- var faultyList = new List<int>();
- 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();
- }
- }
- }
|