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

📄 alarm.c

📁 cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表
💻 C
字号:
/**********************************************
公司名称:
文 件 名:Alarm.c
版 本 号:
程序设计:
说    明:
完成日期:
修改日期:
功能摘要:	
***********************************************/
#define  _Alarm
#include "includes.h"

uint8	fH_Alarm;
uint8   fL_Alarm;
static  uint16	    LagVal; //报警回滞量:额定值的5%

WAIT_TIME_STRUCT	SwitchOutDelay = {0,_1S};

void  WatchDataTask(void);
void  CountLag(void);


void  WatchDataTask(void)
{
  static uint8	H_Alarm_step = 0;
  static uint8	L_Alarm_step  = 0;
  uint16        Display_V = Ps/1000;		
		
  if ((Rest5460A_Time == 0) && (SwitchOutDelay.fGetTime)) 
   {
	 SwitchOutDelay.fGetTime = 0;
	 SwitchOutDelay.WaitTime = _1S;		
	 if((H_Alarm<L_Alarm)||(AlarmSwitch & 0x01))
	{
	     IO_HighAlarm = ON;
	     fH_Alarm = OFF;
	     IO_LowAlarm = ON;
  	     fL_Alarm = OFF;
		 return;
	 }	
	

	     switch(H_Alarm_step) 
		   {
			  case 0:
				 if (Display_V > H_Alarm)
				 	{	H_Alarm_step++; }
					break;
					
			  case 1:
				 if (Display_V  > H_Alarm)	
					 {  H_Alarm_step++;	} 			
				 else 
				     {	H_Alarm_step = 0;	}
					 break;
					
			  case 2:
				 if (Display_V  > H_Alarm)
				     {	
						H_Alarm_step++;
						IO_HighAlarm = OFF;
						fH_Alarm = ON;		//报警
					 } 
				  else 
				     {  H_Alarm_step = 0;}
				 	 break;
				 	
			  case 3:
				 if ((Display_V +LagVal) < H_Alarm ) 	  //此处存在问题,数值设置太小时会出错
				    {	H_Alarm_step++;   }
				 	break;
				 	
			  case 4:
				 if ((Display_V +LagVal) < H_Alarm )
				    {	H_Alarm_step++;   }				
				 else 
				    {   H_Alarm_step = 3; }	
				 	break;
				 	
			  case 5:
				 if ((Display_V +LagVal) < H_Alarm )
				    {
						H_Alarm_step = 0;	
						IO_HighAlarm = ON;
						fH_Alarm = OFF;  //取消高报警
					 }
				 else 
				    {   H_Alarm_step = 3;	}
				 	break;
				 	
			   default:
			   break;					
			 }
//---------------------------
		switch(L_Alarm_step) 
		  { 
			  case 0:
				 if (Display_V < L_Alarm) 
				    {	L_Alarm_step++;	}
					break;
					
			  case 1:
				 if (Display_V  < L_Alarm) 
				    {	L_Alarm_step++;	}			//延时,防抖动
				 else
				    {	L_Alarm_step = 0;  }
					break;
					
			  case 2:
				 if (Display_V  < L_Alarm) 
				    {
						IO_LowAlarm = OFF;
			 			fL_Alarm = ON;
						L_Alarm_step++;
					 } 
				 else 
				    {	L_Alarm_step = 0; }
				 	break;
				 	
			  case 3:
				 if (Display_V >(L_Alarm+LagVal )) 
				    {	L_Alarm_step++;   }
				 	break;
				 	
			  case 4:
				 if (Display_V >(L_Alarm+LagVal )) 
				    {	L_Alarm_step++;   }				//延时,防抖动
				 else 
				    {   L_Alarm_step = 3; }
				 	break;
				 	
			  case 5:
				 if (Display_V >(L_Alarm+LagVal )) 
				    {							
						L_Alarm_step = 0;	
						IO_LowAlarm = ON;
						fL_Alarm = OFF;  //取消低报警
					} 
				  else 
				   {	L_Alarm_step = 3; }
				 break;
				 	
			  default:
			  break;					
		   } 
	}
}	

//---------------------------------------------------
void		CountLag(void)
{
		LagVal = (uint32) PtVal * 5;		 //回滞量是额定值的5%
}
//---------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -