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 bool HasFault => FaultCode != 0;
///
/// 在用传感器编号列表
///
public int[] WorkingSensors => GetWorkingSensors(FaultCode);
///
/// 故障传感器编号列表
///
public int[] FaultySensors => GetFaultySensors(FaultCode);
public override string ToString()
{
if (!HasFault)
return null;
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();
}
}
}