using System.Linq;
using UIShare.UIViewModel;
namespace UIShare.GlobalVariable
{
///
/// 值限制报警检查辅助类:供各广播器在采样到信号值时统一判断是否超限。
///
public static class ValueLimitAlarmHelper
{
///
/// 根据指定作用域的 ValueLimitList 检查当前值是否超限,并更新报警状态。
///
/// 作用域名称
/// 硬件指纹
/// 方法名/信号标识
/// 当前采样值
/// 全局信息
public static void CheckAlarm(string scope, string fingerprint, string methodName, double value, GlobalInfo globalInfo)
{
if (globalInfo?.ConfigDic == null) return;
if (!globalInfo.ConfigDic.TryGetValue(scope, out var systemConfig)) return;
if (systemConfig.ValueLimitList == null) return;
var limit = systemConfig.ValueLimitList.FirstOrDefault(x =>
x.Fingerprint == fingerprint && x.MethodName == methodName);
if (limit == null) return;
if (value > limit.Upper)
{
limit.IsAlarm = true;
limit.AlarmSatus = AlarmStatus.超上限;
}
else if (value < limit.Lower)
{
limit.IsAlarm = true;
limit.AlarmSatus = AlarmStatus.超下限;
}
else if(value > limit.UpperExtreme)
{
limit.IsAlarm = true;
limit.AlarmSatus = AlarmStatus.超上极限;
}
else if (value < limit.LowerExtreme)
{
limit.IsAlarm = true;
limit.AlarmSatus = AlarmStatus.超下极限;
}
else
{
limit.IsAlarm = false;
limit.AlarmSatus = AlarmStatus.未报警;
}
}
}
}