⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alarm.c

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 C
📖 第 1 页 / 共 3 页
字号:
	  	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 + -