From a05cacad5239ab3f35ffb58f443356b484e6cc1b Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Tue, 21 May 2024 19:17:22 +0800
Subject: [PATCH] 继续完善远传

---
 Function/FLOW_METER_DATA_COLLECT/pulse_and_alarm_line.c |  368 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 360 insertions(+), 8 deletions(-)

diff --git a/Function/FLOW_METER_DATA_COLLECT/pulse_and_alarm_line.c b/Function/FLOW_METER_DATA_COLLECT/pulse_and_alarm_line.c
index ae8fbd2..8676d98 100644
--- a/Function/FLOW_METER_DATA_COLLECT/pulse_and_alarm_line.c
+++ b/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);
 	}
 	
 	
 	
-}
\ No newline at end of file
+	//���߱����� ��Ϊ�ܶ��߶����Ը��ö��ߣ����Զ��߷�������ж�
+	if(broken_line_cnt >= ALARM_LINE_CONTINUE_TIMES){
+		__SYS_STATUS_ALARM_BYTES_SET(broken_line,ALARM_ID_BROKEN_LINE);
+	}
+	
+	
+}
+
+
+
+
+

--
Gitblit v1.9.3