forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-17 6ea1a42391f86e72f53042a966dae970a3fd77cb
Function/FLOW_METER_DATA_COLLECT/pulse_and_alarm_line.c
@@ -1,33 +1,40 @@
#include "pulse_and_alarm_line.h"
#include "system_mem_para.h"
#include "gpio.h"
#include "sizhu_ctrl_word.h"
#include "tim.h"
#include "linked_list.h"
__IO   int16_t pulse_count =0;  //Âö³å¼ÆÊý£¬À´Ò»¸öÂö³å+1,×îÖÕ½áËãµ½ÀÛ»ýÁ¿ÖÐ,½áËãÖ®ºóÇåÁã
__IO FlagStatus pulse_exti_flag = RESET;
__IO uint32_t pulse_check_delay_ms_cnt = 0;
void LP_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(LP_LOSE_CHECK_EN_PORT,LP_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   LP_LOSE_CHECK_DISENABLE;
   LP_LOSE_CHECK_DISABLE;
}
void LV_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(LV_LOSE_CHECK_EN_PORT,LV_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   LV_LOSE_CHECK_DISENABLE;
   LV_LOSE_CHECK_DISABLE;
}
void UV_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(UV_LOSE_CHECK_EN_PORT,UV_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   UV_LOSE_CHECK_DISENABLE;
   UV_LOSE_CHECK_DISABLE;
}
void CV_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(CV_LOSE_CHECK_EN_PORT,CV_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   CV_LOSE_CHECK_DISENABLE;
   CV_LOSE_CHECK_DISABLE;
}
void LF_PULSE_INT_GPIO_Clk_Init(void)
@@ -94,21 +101,366 @@
}
//Âö³åÏߺͱ¨¾¯Ïß³õʼ»¯
void PulseAndAlarmLineInit(void)
{
   /*Âö³åÏß*/
   if((flow_meter_para_g.broken_line_multiplex & BROKEN_LINE_MUTIPLEX_PULSE)==BROKEN_LINE_MUTIPLEX_PULSE){
      //ÓÅÏȸ´ÓÃ
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_Init();
      if(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET){
         LF_PULSE_INT_GPIO_Clk_Init();
         LP_LOSE_CHECK_ENABLE;
         delay_ms(1);
         if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,1,Bit_SET)==SET){
            __SYS_STATUS_BYTES_GET(broken_line) = SET ;
         }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
         }
      }else{
         LF_PULSE_INT_GPIO_Clk_sleep();
      }
      
      LP_LOSE_CHECK_DISABLE;
   }else if((flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_PULSE)||(flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_RS485_AND_PULSE)){
      //Èç¹û¿ªÆôÁËÂö³å
   }else{
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_Init();
      LP_LOSE_CHECK_ENABLE;
      
      //Èç¹ûû¿ªÆôÆäËû¶ÏÏ߸´Óã¬ÔòÓÃÂö³åÐźÅÖ±½ÓÅж϶ÏÏß״̬
      if((flow_meter_para_g.broken_line_multiplex& 0xf0) ==BROKEN_LINE_MUTIPLEX_NONE){
         if((flow_meter_para_g.flow_meter_code !=ASMODBUS)&&(flow_meter_para_g.flow_meter_code !=AS100MODBUS)&&(flow_meter_para_g.flow_meter_code !=SIARGO_MODBUS)){
            if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,501,Bit_RESET)==SET){
               __SYS_STATUS_BYTES_GET(broken_line) = SET ;
            }else{
               __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
            }
         }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
         }
      }
      BasicTimer16_Init(BT1,240,PULSE_CHECK_DELAY_MS*(SYSCLOCK_U/240/1000)); //PULSE_CHECK_DELAY_MS ¶¨Ê±£¬ÓÃÓÚÂö³åµÄÑÓʱ¼ì²â£¬Âö³å³ÖÐø³¬¹ýPULSE_CHECK_DELAY_MSÓÐЧ£¬È¥¶¶
   }else{
      //²»ÓÃÂö³åÏß
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_sleep();
      LP_LOSE_CHECK_DISABLE;
   }
   /*Ƿѹ±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_DOWN_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_SET)==SET){
         __SYS_STATUS_BYTES_GET(broken_line) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_under_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_RESET)==SET){
         __SYS_STATUS_BYTES_GET(flow_meter_under_pwr) = SET ;
      }else{
         __SYS_STATUS_BYTES_GET(flow_meter_under_pwr) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_sleep();
      UV_LOSE_CHECK_DISABLE;
   }
   /*µÍµç±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_LOW_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_SET)==SET){
         __SYS_STATUS_BYTES_GET(broken_line) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
      }
      LV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_low_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_RESET)==SET){
         __SYS_STATUS_BYTES_GET(flow_meter_low_pwr) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(flow_meter_low_pwr) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_sleep();
      LV_LOSE_CHECK_DISABLE;
   }
   /*¹Ø·§±¨¾¯Ïß*/
   //ÒòΪÐèÒª´¥·¢¹Ø·§£¬½ö¸´ÓöÏÏß¹¦ÄÜÔÚÕâÀïÅжϣ¬±¾Éí¹Ø·§¹¦ÄÜÔÚÖ÷Ñ­»·ÀïÃæ´¦Àí
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_CLOSE_VALVE)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      CV_lose_check_GPIO_Clk_Init();
      Close_Valve_Alarm_Line_GPIO_Clk_Init();
      CV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(CV_ALM_A_PORT,CV_ALM_A_PIN,1,Bit_SET)==SET){
         __SYS_STATUS_BYTES_GET(broken_line) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
      }
      CV_LOSE_CHECK_DISABLE;
   }else{
      CV_lose_check_GPIO_Clk_Init();
      Close_Valve_Alarm_Line_GPIO_Clk_sleep();
      CV_LOSE_CHECK_DISABLE;
   }
}
#define ALARM_LINE_CONTINUE_TIMES  3       //²»Äܳ¬¹ý250£¬±¨¾¯Ïß״̬³ÖÐøALARM_LINE_CONTINUE_TIMESÃëʱ¼äΪÓÐЧ
void PulseAndAlarmLineCheck(void)
{
   static   uint8_t broken_line_cnt=0;
   static   uint8_t low_pwr_line_cnt=0;
   static   uint8_t under_pwr_line_cnt=0;
   static   uint8_t close_valve_line_cnt=0;
   /*Âö³åÏß*/
   if((flow_meter_para_g.broken_line_multiplex & BROKEN_LINE_MUTIPLEX_PULSE)==BROKEN_LINE_MUTIPLEX_PULSE){
      //ÓÅÏȸ´ÓÃ
      LP_lose_check_GPIO_Clk_Init();
      if(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET){
         LF_PULSE_INT_GPIO_Clk_Init();
         LP_LOSE_CHECK_ENABLE;
         delay_ms(1);
         if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,1,Bit_SET)==SET){
            if(broken_line_cnt < 250) broken_line_cnt ++  ;
         }else{
            broken_line_cnt = 0 ;
         }
      }else{
         LF_PULSE_INT_GPIO_Clk_sleep();
      }
      LP_LOSE_CHECK_DISABLE;
   }else if((flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_PULSE)||(flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_RS485_AND_PULSE)){
      //Èç¹û¿ªÆôÁËÂö³å
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_Init();
      LP_LOSE_CHECK_ENABLE;
      //Èç¹ûû¿ªÆôÆäËû¶ÏÏ߸´Óã¬ÔòÓÃÂö³åÐźÅÖ±½ÓÅж϶ÏÏß״̬
      if((flow_meter_para_g.broken_line_multiplex& 0xf0) ==BROKEN_LINE_MUTIPLEX_NONE){
         if((flow_meter_para_g.flow_meter_code !=ASMODBUS)&&(flow_meter_para_g.flow_meter_code !=AS100MODBUS)&&(flow_meter_para_g.flow_meter_code !=SIARGO_MODBUS)){
            if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,1,Bit_RESET)==SET){
               if(broken_line_cnt < 250) broken_line_cnt ++  ;
            }else{
               broken_line_cnt = 0 ;
            }
         }else{
            broken_line_cnt = 0 ;
         }
      }
   }else{
      //²»ÓÃÂö³åÏß
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_sleep();
      LP_LOSE_CHECK_DISABLE;
   }
   /*Ƿѹ±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_DOWN_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_SET)==SET){
         if(broken_line_cnt < 250) broken_line_cnt ++  ;
      }else{
         broken_line_cnt = 0 ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_under_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_RESET)==SET){
         if(under_pwr_line_cnt < 250) under_pwr_line_cnt ++;
      }else{
         under_pwr_line_cnt = 0;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_sleep();
      UV_LOSE_CHECK_DISABLE;
   }
   //Ƿѹ±¨¾¯´¦Àí
   if(under_pwr_line_cnt >= ALARM_LINE_CONTINUE_TIMES){
      __SYS_STATUS_ALARM_BYTES_SET(flow_meter_under_pwr,ALARM_ID_FLOW_BAT_DOWN);
   }
   /*µÍµç±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_LOW_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_SET)==SET){
         if(broken_line_cnt < 250) broken_line_cnt ++  ;
      }else{
         broken_line_cnt = 0 ;
      }
      LV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_low_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_RESET)==SET){
         if(low_pwr_line_cnt < 250) low_pwr_line_cnt ++;
      }else{
         low_pwr_line_cnt = 0;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_sleep();
      LV_LOSE_CHECK_DISABLE;
   }
   //µÍµç±¨¾¯´¦Àí
   if(low_pwr_line_cnt >= ALARM_LINE_CONTINUE_TIMES){
      __SYS_STATUS_ALARM_BYTES_SET(flow_meter_low_pwr,ALARM_ID_FLOW_BAT_LOW);
   }
   /*¹Ø·§±¨¾¯Ïß*/
   //ÒòΪÐèÒª´¥·¢¹Ø·§£¬³õʼ¿ÉÒÔ²»ÓÃÅжϣ¬ÔÚÖ÷Ñ­»·ÀïÃæ´¦Àí
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_CLOSE_VALVE)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      CV_lose_check_GPIO_Clk_Init();
      Close_Valve_Alarm_Line_GPIO_Clk_Init();
      CV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(CV_ALM_A_PORT,CV_ALM_A_PIN,1,Bit_SET)==SET){
         if(broken_line_cnt < 250) broken_line_cnt ++  ;
      }else{
         broken_line_cnt = 0 ;
      }
      CV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(ex_trigger_close_valve) == SET){
      CV_lose_check_GPIO_Clk_Init();
      Close_Valve_Alarm_Line_GPIO_Clk_Init();
      CV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(CV_ALM_A_PORT,CV_ALM_A_PIN,1,Bit_RESET)==SET){
         if(close_valve_line_cnt < 250) close_valve_line_cnt ++  ;
      }else{
         close_valve_line_cnt = 0 ;
      }
      CV_LOSE_CHECK_DISABLE;
   }else{
      CV_lose_check_GPIO_Clk_Init();
      Close_Valve_Alarm_Line_GPIO_Clk_sleep();
      CV_LOSE_CHECK_DISABLE;
   }
   //Íⲿ´¥·¢¹Ø·§±¨¾¯´¦Àí
   if(close_valve_line_cnt >= ALARM_LINE_CONTINUE_TIMES){
      __SYS_STATUS_ALARM_BYTES_SET(ex_trigger_close_valve,ALARM_ID_EX_TRIGGER_CLOSE_VALVE);
   }
   
   
   
}
   //¶ÏÏß±¨¾¯£¬ ÒòΪºÜ¶àÏß¶¼¿ÉÒÔ¸´ÓöÏÏߣ¬ËùÒÔ¶ÏÏß·ÅÔÚ×îºóÅжÏ
   if(broken_line_cnt >= ALARM_LINE_CONTINUE_TIMES){
      __SYS_STATUS_ALARM_BYTES_SET(broken_line,ALARM_ID_BROKEN_LINE);
   }
}