报警检测方法如下代码所示:
/// <summary>
/// 报警值比较
/// </summary>
/// <param name="current">实时值</param>
/// <param name="set">设定值</param>
/// <param name="cache">缓存值</param>
/// <param name="isPositive">上升沿</param>
/// <returns>1:报警发生;-1报警消除;0 状态不变</returns>
public static AlarmState Compare(float current, float set, float cache, bool isPositive)
{
if (current is float.NaN || cache is float .NaN)//正常情况下,NaN一般是数据不正常.直接状态不变就行了
{
Debug.WriteLine($"报警比较方法:输入:{ current},缓存值:{cache}");
return AlarmState.Keep;
}
if (isPositive)
{
if (current >= set && cache < set)
{
return AlarmState.Occurs;//报警发生
}
if (current < set && cache >= set)
{
return AlarmState.Elimination;//报警消除
}
}
else
{
if (current <= set && cache > set)
{
return AlarmState.Occurs;//报警发生
}
if (current > set && cache <= set)
{
return AlarmState.Elimination;//报警消除
}
}
return AlarmState.Keep;
使用:
alarmState = Common.Compare(_currentValue,
alarmVariable.HiHiAlarmValue,
alarmVariable.CacheValue,
isPositive: true);
if (alarmState != AlarmState.Keep)
{
AlarmEvent?.Invoke(alarmVariable, new AlarmEventArgs
{
InsertTime = now,
AlarmName = alarmVariable.Name,
alarmInfo = alarmVariable.HiHiAlarmNote,
CurrentValue = _currentValue.ToString(),
SetValue = alarmVariable.HiHiAlarmValue.ToString(),
IsACK = (alarmState == AlarmState.Occurs)
});
}
在一般的设备报警里,主要分为如 下的三种情况: 情况一:bool 报警(通常 true 表示报警, false 表示正常) 情况二:int 报警 事实上,还有一种报警的情况非常的常见,在 PLC 里配置了一个字数据表示报警,比如值 0 表 示没有报警,值 1 表示报警 1,值 2 表示报警 2。 情况三:值范围报警 我们来看看一种特殊的报警,比如说一个温度数据,我们想控制范围,高于 100 报警,低于 80 报 警,那么我们就添加一个数值范围报警。