📄 alarm.c
字号:
if ((AlarmModule.uchAlarmStatus[uchChannel - 1] & b) != 0 )
{
return;
}
if (0x2 == b )
{
if (AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1] == 0)
{
AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1] = AlarmModule.uiCurrentHeartbeat;
}
else
{
if (AlarmModule.uiCurrentHeartbeat >= AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1])
{
elapsed = AlarmModule.uiCurrentHeartbeat - AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1];
}
else
{
elapsed = 65536 - AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1] + AlarmModule.uiCurrentHeartbeat;
}
if ( elapsed > AlarmModule.uiAlertDelay[uchChannel - 1] * 100)
{
AlarmModule.uchAlarmStatus[uchChannel - 1] |= b;
AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1] = 0;
}
}
}
if ( 0x4 == b)
{
if (AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1] == 0)
{
AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1] = AlarmModule.uiCurrentHeartbeat;
}
else
{
if (AlarmModule.uiCurrentHeartbeat >= AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1])
{
elapsed = AlarmModule.uiCurrentHeartbeat - AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1];
}
else
{
elapsed = 65536 + AlarmModule.uiCurrentHeartbeat - AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1];
}
if ( elapsed > AlarmModule.uiAlertDelay[uchChannel - 1] * 100)
{
AlarmModule.uchAlarmStatus[uchChannel - 1] |= b;
AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1] = 0;
}
}
}
if (0x1 == b )
{
if (AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1] == 0)
{
AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1] = AlarmModule.uiCurrentHeartbeat;
}
else
{
if (AlarmModule.uiCurrentHeartbeat >= AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1])
{
elapsed = AlarmModule.uiCurrentHeartbeat - AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1];
}
else
{
elapsed = 65536 + AlarmModule.uiCurrentHeartbeat - AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1];
}
if ( elapsed > AlarmModule.uiDangerDelay[uchChannel - 1] * 100)
{
AlarmModule.uchAlarmStatus[uchChannel - 1] |= b;
AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1] =0;
}
}
}
if ( 0x8 == b)
{
if (AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1] == 0)
{
AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1] = AlarmModule.uiCurrentHeartbeat;
}
else
{
if (AlarmModule.uiCurrentHeartbeat >= AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1])
{
elapsed = AlarmModule.uiCurrentHeartbeat - AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1];
}
else
{
elapsed = 65536 + AlarmModule.uiCurrentHeartbeat - AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1];
}
if ( elapsed > AlarmModule.uiDangerDelay[uchChannel - 1] * 100)
{
AlarmModule.uchAlarmStatus[uchChannel - 1] |= b;
AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1] =0;
}
}
}
FeedDog();
}
}
//--------------------------------------------------------------------------------------------------
//函数名称:void ClearFlagBit(unsigned char uchChannel,unsigned char b)
//功 能:清除通道报警位
//输入参数:通道号 ,报警位
//返 回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void ClearFlagBit(unsigned char uchChannel,unsigned char b)
{
switch (AlarmModule.uchChannelType[uchChannel - 1])
{
case 13: //加速度输入 加速度输出
case 14: //加速度输入 速度输出
case 15: //加速度输入 位移输出
case 16: //速度输入 速度输出
case 17: //速度输入 位移输出
case 18: //位移输入 位移输出
case 21: //涡流+速度 复合式振动输出
case 22: //HHH
case 28:
break;
default:
break;
}
if ((b & 0x2) !=0 )
{
AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1] = 0;
}
if ((b & 0x4) !=0 )
{
AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1] = 0;
}
if ((b & 0x1) !=0 )
{
AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1] =0;
}
if ((b & 0x8) !=0 )
{
AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1] =0;
}
if ((AlarmModule.uchLatch[uchChannel - 1] == 1) && (AlarmModule.uchResetStatus[uchChannel - 1] == 0))
{
return;
}
else
{
AlarmModule.uchAlarmStatus[uchChannel - 1] &= ~b;
}
}
//--------------------------------------------------------------------------------------------------
//函数名称:void JudgeAlarmStatus(unsigned char uchChannel)
//功 能:检测通道的报警状态并判断报警标志
//输入参数:通道号
//返 回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void JudgeAlarmStatus(unsigned char uchChannel) //程序可以省略前面的计算部分,把它放到初始化中
{
int idata iAlertLimitLow,iAlertLimitHigh,iDangerLimitLow,iDangerLimitHigh;
int idata iAlertLimitLowFall,iAlertLimitHighFall,iDangerLimitLowFall,iDangerLimitHighFall;
switch (AlarmModule.uchChannelType[uchChannel - 1])
{
case 13: //加速度输入 加速度输出
case 14: //加速度输入 速度输出
case 15: //加速度输入 位移输出
case 16: //速度输入 速度输出
case 17: //速度输入 位移输出
case 18: //位移输入 位移输出
case 21: //涡流+速度 复合式振动输出
case 22: //LVDT输入 机壳膨胀输出
case 28: //HHH
if ((AlarmModule.uchEnable[uchChannel - 1] == 1) && (AlarmModule.uchOKStatus[uchChannel - 1] == 0))
{
if (AlarmModule.uchTriple[uchChannel - 1] != 0)
{
iAlertLimitLow = AlarmModule.uchTriple[uchChannel - 1]* AlarmModule.iAlertLow[uchChannel - 1];
iAlertLimitHigh = AlarmModule.uchTriple[uchChannel - 1]* AlarmModule.iAlertHigh[uchChannel - 1];
iDangerLimitLow = AlarmModule.uchTriple[uchChannel - 1]* AlarmModule.iDangerLow[uchChannel - 1];
iDangerLimitHigh = AlarmModule.uchTriple[uchChannel - 1]* AlarmModule.iDangerHigh[uchChannel - 1];
}
else
{
iAlertLimitLow = AlarmModule.iAlertLow[uchChannel - 1];
iAlertLimitHigh = AlarmModule.iAlertHigh[uchChannel - 1];
iDangerLimitLow = AlarmModule.iDangerLow[uchChannel - 1];
iDangerLimitHigh = AlarmModule.iDangerHigh[uchChannel - 1];
}
iAlertLimitLowFall = iAlertLimitLow + AlarmModule.iFallingAlertL[uchChannel - 1];
iAlertLimitHighFall = iAlertLimitHigh - AlarmModule.iFallingAlertH[uchChannel - 1];
iDangerLimitLowFall = iDangerLimitLow + AlarmModule.iFallingDangerL[uchChannel - 1];
iDangerLimitHighFall = iDangerLimitHigh - AlarmModule.iFallingDangerH[uchChannel - 1];
if ( AlarmModule.iCurrentValue[uchChannel - 1] > iDangerLimitHigh )
{
SetFlagBit(uchChannel, 0x8);
}
else
{
if (AlarmModule.iCurrentValue[uchChannel - 1] < iDangerLimitHighFall)
{
ClearFlagBit(uchChannel, 0x8);
}
}
if ( AlarmModule.iCurrentValue[uchChannel - 1] < iDangerLimitLow )
{
SetFlagBit(uchChannel, 0x1);
}
else
{
if (AlarmModule.iCurrentValue[uchChannel - 1] > iDangerLimitLowFall)
{
ClearFlagBit(uchChannel, 0x1);
}
}
if (AlarmModule.uchAlertTypeStatus[uchChannel - 1] == 1 ) //Alert
{
if ( AlarmModule.iCurrentValue[uchChannel - 1] > iAlertLimitHigh )
{
SetFlagBit(uchChannel, 0x4);
}
else
{
if (AlarmModule.iCurrentValue[uchChannel - 1] < iAlertLimitHighFall)
{
ClearFlagBit(uchChannel, 0x4);
}
}
if ( AlarmModule.iCurrentValue[uchChannel - 1] < iAlertLimitLow )
{
SetFlagBit(uchChannel, 0x2);
}
else
{
if (AlarmModule.iCurrentValue[uchChannel - 1] > iAlertLimitLowFall)
{
ClearFlagBit(uchChannel, 0x2);
}
}
}
else if (AlarmModule.uchAlertTypeStatus[uchChannel - 1] == 2) //Gap
{
if((AlarmModule.uchAlarmStatus[uchChannel - 1] & 0x06) != 0 && AlarmModule.uchLatch[uchChannel - 1] == 1 )
{
if (AlarmModule.uchResetStatus[uchChannel - 1] == 1)
{
AlarmModule.uchAlarmStatus[uchChannel - 1] &= 0xF9;
}
return;
}
else
{
AlarmModule.uchAlarmStatus[uchChannel - 1] &= 0xF9;
}
}
}
else if ((AlarmModule.uchEnable[uchChannel - 1] == 1) && (AlarmModule.uchOKStatus[uchChannel - 1] != 0))
{
if(AlarmModule.uchAlertTypeStatus[uchChannel - 1] == 2) //Gap 报警
{
if(AlarmModule.uchOKStatus[uchChannel - 1] == 1) //GAP 低报警
{
AlarmModule.uchAlarmStatus[uchChannel - 1] |= 0x02;
}
else //GAP 高报警
{
AlarmModule.uchAlarmStatus[uchChannel - 1] |= 0x04;
}
if (AlarmModule.uchLatch[uchChannel - 1] == 1)
{
if (AlarmModule.uchResetStatus[uchChannel - 1] == 1)
{
AlarmModule.uchAlarmStatus[uchChannel - 1] &= 0xF6;
}
return;
}
else
{
AlarmModule.uchAlarmStatus[uchChannel - 1] &= 0x06;
}
}
else
{
if (AlarmModule.uchLatch[uchChannel - 1] == 1)
{
if (AlarmModule.uchResetStatus[uchChannel - 1] == 1)
{
AlarmModule.uchAlarmStatus[uchChannel - 1] = 0x00;
}
return;
}
else
{
AlarmModule.uchAlarmStatus[uchChannel - 1] = 0;
}
}
}
break;
default:
break;
}
}
//--------------------------------------------------------------------------------------
//函数名称:void JudgeBypassAlarmStatus(unsigned char uchChannel)
//功 能:判断旁路状态对报警状态的影响
//输入参数:通道号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -