From a1810b89e66f184c62a0588ae7d57c91d0c376e8 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Thu, 30 May 2024 20:06:09 +0800
Subject: [PATCH] 继续测试修改

---
 Soft/sizhu_ctrl_word.c |  218 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 214 insertions(+), 4 deletions(-)

diff --git a/Soft/sizhu_ctrl_word.c b/Soft/sizhu_ctrl_word.c
index 0ea3159..2b380dc 100644
--- a/Soft/sizhu_ctrl_word.c
+++ b/Soft/sizhu_ctrl_word.c
@@ -1,14 +1,20 @@
 #include "sizhu_ctrl_word.h"
+#include "system_run_fun.h"
+#include "valve_control.h"
+#include "system_mem_para.h"
+
+FlagStatus	AlarmTriggerWrcFlag = RESET;
+uint8_t   	AlarmTriggerCLoseValveNum = 0; //�����ط����������������ڴ������л�ȡ����ID���ж�Ӧ�Ĺط�����
 
 SYSTEM_STATUS_WORD_T           system_status_word_g;
 SYSTEM_FUNCTION_CTRL_WORD_T    system_function_ctrl_word_g = {        \
 .fun_ctrl_word.billing_type = 0x02,													\
 };
 SYSTEM_ALARM_WORD_T            system_alarm_word_g; //�����ϱ����ϱ������
-SYSTEM_ALARM_WORD_T            system_alarm_word_for_valve_g; //���ڷ��أ��ϱ������
+SYSTEM_ALARM_WORD_T            system_alarm_word_for_valve_g; //���ڷ��أ��ж��귧��֮������
 SYSTEM_ALARM_CTRL_WORD_T       system_alarm_ctrl_word_g;
 SYSTEM_ALARM_REPORT_CTRL_WORD_T     system_alarm_report_ctrl_word_g;
-VALVE_CTL_BYTES_T valve_ctl_bytes_g = {
+VALVE_CTL_BYTES_UNION_T valve_ctl_bytes_g = {.valve_ctrl_bytes = {
 {0},
 {0},
 {0},
@@ -19,5 +25,209 @@
 {0},
 {0},
 {0},
-{0},
-};
\ No newline at end of file
+{0},}
+};
+
+
+#define	alarm_ctrl_para_array_g_NUM	(sizeof(alarm_ctrl_para_array_g) /sizeof(ALARM_CTRL_PARA_T)	)
+
+
+//�������Ʋ������У�ÿ����һ���������ݣ��˴���Ҫ����,��Щ����û�ж�Ӧ�ط��֣����縴λ��ô����  ��Ҫ��Ӧ������
+ALARM_CTRL_PARA_T	alarm_ctrl_para_array_g[] = {
+	{ALARM_ID_SYSTEM_START ,					  					16*0+8 , 16*10+6 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_EX_POWER_STATUS_CHANGE ,  					16*0+9 , 16*0+4 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_COVER_OPEN , 												16*0+11 , 16*0+8 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_MAINBOARD_REMOVAL , 								16*0+12 , 16*0+10 , DAY_ALARM_TIMES , 0},
+//	{ALARM_ID_GPRS_FAILED , 											16*2+8 , 16*10+14 , DAY_ALARM_TIMES , 0}, //����Զ��ʧ�ܽ���ʾ�����ط��������������Դ˴���Ҫ��
+  {ALARM_ID_LCD_NUMBER_OVERRUN , 								16*5+1 , 16*9+2 , DAY_ALARM_TIMES , 0},
+	
+  {ALARM_ID_LITH_BAT_LOW , 											16*2+0 , 16*3+0 , DAY_ALARM_TIMES,0},
+  {ALARM_ID_LITH_BAT_DOWN , 										16*2+1 , 16*3+2 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_LITH_BAT_REMOVAL , 									16*2+2 , 16*3+4 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_ALKA_BAT_LOW , 											16*2+3 , 16*3+6 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_ALKA_BAT_DOWN , 										16*2+4 , 16*3+8 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_ALKA_BAT_REMOVAL , 									16*2+5 , 16*3+10 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_VALVE_BAT_LOW , 										16*2+12 , 16*4+10 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_VALVE_BAT_DOWN , 										16*2+13 , 16*4+12 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_RTC_BAT_LOW , 											16*2+14 , 16*4+14 , DAY_ALARM_TIMES , 0},
+	
+  {ALARM_ID_TEM_TRANSMITTER_FAILURE , 					16*3+0 , 16*6+0 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_TEM_EXCEED_UP_LIMIT , 							16*3+1 , 16*5+0 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_TEM_EXCEED_UP_UP_LIMIT , 						16*3+2 , 16*5+2 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_TEM_EXCEED_LOW_LIMIT , 							16*3+3 , 16*5+4 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_TEM_EXCEED_LOW_LOW_LIMIT , 					16*3+4 , 16*5+6 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_PRE_TRANSMITTER_FAILURE , 					16*3+8 , 16*6+2 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_PRE_EXCEED_UP_LIMIT , 							16*3+9 , 16*5+8 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_PRE_EXCEED_UP_UP_LIMIT , 						16*3+10 , 16*5+10 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_PRE_EXCEED_LOW_LIMIT , 							16*3+11 , 16*5+12 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_PRE_EXCEED_LOW_LOW_LIMIT , 					16*3+12 , 16*5+14 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_AMBIENT_TEM_EXCEED_UP_LIMIT , 			16*3+5 , 16*6+4 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_AMBIENT_TEM_EXCEED_LOW_LIMIT , 			16*3+6 , 16*6+6 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_AMBIENT_TEM_SUDDEN_CHANGE , 				16*3+7 , 16*6+8 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_LCD_AMBIENT_TEM_EXCEED_LOW_LIMIT , 	16*5+2 , 16*9+4 , DAY_ALARM_TIMES , 0},
+
+  {ALARM_ID_MEASURE_SONIC_SENSOR_LOSS , 				16*4+7 , 16*7+14 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEASURE_FLOW_VELOCITY_ABNORMAL , 		16*4+0 , 16*7+0 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEASURE_TIME_DIFF_ABNORMAL , 				16*4+1 , 16*7+2 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEASURE_SOUND_VELOCITY_ABNORMAL ,		16*4+2 , 16*7+4 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEASURE_SNR_ABNORMAL , 							16*4+3 , 16*7+6 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEASURE_SIHNAL_OVERFLOW_ABNORMAL , 	16*4+4 , 16*7+8 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEASURE_THRESHOLD_ABNORMAL , 				16*4+5 , 16*7+10 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEASURE_GAIN_ABNORMAL , 						16*4+6 , 16*7+12 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_MEDIUM_WATER , 											16*4+8 , 16*8+0 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_MEDIUM_ABNORMAL , 									16*4+9 , 16*8+2 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_DISMANTLE_METER_ABNORMAL , 					16*4+10 , 16*8+4 , DAY_ALARM_TIMES , 0}, 
+  {ALARM_ID_METERING_UNIT_ABNORMAL , 						16*4+11 , 16*8+6 , DAY_ALARM_TIMES , 0}, 
+	{ALARM_ID_MEASURE_CHANNEL_REMOVAL , 					16*4+12 , 16*8+8 , DAY_ALARM_TIMES , 0},
+	
+	{ALARM_ID_FLOW_EXCEED_UP_LIMIT , 							16*5+3 , 16*9+6 , DAY_ALARM_TIMES , 0}, 
+	{ALARM_ID_FLOW_EXCEED_UP_UP_LIMIT , 					16*5+4 , 16*9+8 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_FLOW_EXCEED_UP_UP_LIMIT2 , 					16*5+5 , 16*9+10 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_FLOW_BIDIRECTIONAL , 								16*0+5 , 16*0+2 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_FLOW_CONSTANT , 										16*5+7 , 16*9+14 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_FLOW_SMALL , 												16*5+6 , 16*9+12 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_GAS_LEAK , 													16*5+0 , 16*9+0 , DAY_ALARM_TIMES , 0},
+	
+	{ALARM_ID_VALVE_ABNORMAL , 										16*1+0 , 16*1+0 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_VALVE_CLOSE_GAS_RUNNING_ABNORMAL , 	16*5+8 , 16*10+0 , DAY_ALARM_TIMES , 0},
+	
+	{ALARM_ID_FLOW_BAT_LOW , 											16*2+6 , 16*4+0 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_FLOW_BAT_DOWN , 										16*2+7 , 16*4+2 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_BROKEN_LINE , 											16*2+11 , 16*4+8 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_E2P_W_ABNORMAL , 										16*5+9 , 16*10+2 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_E2P_R_ABNORMAL , 										16*5+10 , 16*10+4 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_READ_485_ABNORMAL , 								16*2+9 , 16*4+4 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_485_READING_SMALLER_ABNORMAL , 			16*2+10 , 16*4+6 , DAY_ALARM_TIMES , 0},
+	{ALARM_ID_EX_TRIGGER_CLOSE_VALVE , 						16*2+15 , 16*3+14 , DAY_ALARM_TIMES , 0},
+	
+	{ALARM_ID_BALANCE_SMALLER1 , 									16*1+11 , 16*1+2 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_BALANCE_SMALLER2 , 									16*1+12 , 16*1+4 , DAY_ALARM_TIMES , 0}, 
+  {ALARM_ID_BALANCE_SMALLER3 , 									16*1+13 , 16*1+6 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_BALANCE_SMALLER4 , 									16*1+14 , 16*1+8 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_BALANCE_SMALLER5 , 									16*1+15 , 16*1+10 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_CUMULATIVE_GAS_ARRIVE , 						16*1+4 , 16*2+0 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_N_DAYS_NO_GAS_ARRIVE , 							16*1+5 , 16*2+2 , DAY_ALARM_TIMES , 0},
+  {ALARM_ID_N_DAYS_NO_REPORT_ARRIVE , 					16*1+6 , 16*2+4 , DAY_ALARM_TIMES , 0}
+};
+
+
+//��������++,  ����SET�������û�дﵽ���ޣ����Դ����ϱ�
+FlagStatus	AlarmCntIncrease(SYS_ALARM_VALVE_T alarm_id)
+{
+	uint16_t count_i;
+	
+	if(alarm_id == ALARM_ID_NORMAL ) //��Բ����޸ı����ȣ�û�ж�Ӧ�ı���ID�������ƴ���
+	{
+		return	SET;
+	}
+	for(count_i = 0;count_i <alarm_ctrl_para_array_g_NUM;count_i++ ){
+		if(alarm_ctrl_para_array_g[count_i].alarm_id == alarm_id){
+			if((alarm_ctrl_para_array_g[count_i].day_cnt ++ ) < alarm_ctrl_para_array_g[count_i].day_times){
+				return	SET;
+			}
+			break;
+		}
+		
+		if(count_i > 200) //��ʱ��û��200������
+		{
+			break;
+		}
+	}
+	return RESET;
+}
+
+void	AlarmCntClearAll(void)
+{
+	uint16_t count_i;
+	for(count_i = 0;count_i <alarm_ctrl_para_array_g_NUM;count_i++ ){
+		alarm_ctrl_para_array_g[count_i].day_cnt  = 0;
+		
+		if(count_i > 200) //��ʱ��û��200������
+		{
+			break;
+		}
+	}
+}
+
+void	EveryDayClearAlarmCnt(const sClockBCD sys_clockBCD_in )
+{
+	if((sys_clockBCD_in.hour == 0x06)&&(sys_clockBCD_in.min == 0x10)&&(sys_clockBCD_in.sec == 0x05))
+	{
+		AlarmCntClearAll();
+		
+	}
+	
+}
+
+//ϵͳ��������
+//��ʼ״̬��⣬��while֮ǰ�ͼ�������ʼ״̬���������λ����״̬�֣����б�������Ҫ������ʾ��������Ҫ��Ҫ�����ϱ���Ҫ���ǣ�
+//�ڸ�������ģ�鴦��ʱ�����б������ܱ��������ֿ��ƣ�����������Ӧ��״̬����λ�������ϱ��ı�������λ���ܱ����ϱ������ֿ��ƣ������ڷ��صı�������λ��ͬʱ������ʾ�������������������Ҫ����ͬʱɾ����ʾ������
+//�����ϱ��ı����ַǿգ������ϱ�������ϱ������У����ظ������� �������ϱ��ɹ�֮����գ�
+//���ڷ��صı�����ֻ����һ�Σ�����޶������������ñ����֣������Ҫ����������Ӧ���Ʒ��ţ������Ѿ��ر�״̬�����ڹ�ʱ����账������״̬������֮�󱨾��������  �ж��������ͬʱ���ڵģ�Ҫ�����жϣ���Ϊ�����ִ����Ĺط����Ͳ�һ�£�ǿ���Թط������ȼ����ߡ�
+//��������״̬Ҫ���Զ��������ƣ����������ֵ���ֱ�ӿ��ص��������֮ǰ�����ط���ԭ���������ɵ�ǿ���Թط�������������֮���Զ�����������Ƿ������ɵ�ǿ���Թط��������Զ������������Ҫ��¼֮ǰ����ǿ���Թط���ԭ��
+//��¼���ϴιط�ԭ����Ҫ�����ȼ����ǻ��ƣ� ǿ���Թط����Ƿ�ǿ���Թط��� �������ɵ�ǿ���Թط����������ɵġ�
+void SysAlarmCtrlPro(void)
+{
+	uint16_t count_i;
+	uint16_t	close_valve_ID;
+	uint8_t  close_valve_flag;
+	
+	EveryDayClearAlarmCnt(sys_clockBCD_g); //ÿ�������������
+	
+	/*���������ϱ�*/
+	if(AlarmTriggerWrcFlag ==SET){
+		AlarmTriggerWrcFlag = RESET;
+		start_wrc_g = WRC_MEANS_ALARM;//���ڱ���  
+	}
+
+	/*������������*/
+	for(count_i = 0;count_i <alarm_ctrl_para_array_g_NUM;count_i++ ){
+		if(((system_alarm_word_for_valve_g.alarm_word_union[alarm_ctrl_para_array_g[count_i].alarm_word_offset_bit >>4 ] >>(alarm_ctrl_para_array_g[count_i].alarm_word_offset_bit & 0x0f)) & 0x01) == 0x01){
+			close_valve_flag = valve_ctl_bytes_g.valve_ctrl_bytes_union [alarm_ctrl_para_array_g[count_i].close_valve_word_offset_bit >>4 ]>>(alarm_ctrl_para_array_g[count_i].close_valve_word_offset_bit & 0x0f);
+			close_valve_flag = close_valve_flag & 0x03;
+			if(close_valve_flag == VALVE_CTRL_FLAG_LOCK_AND_CLSOSE){
+				//��������������ɣ�����ִ����Ҫһ��ʱ��
+				if(save_valve_para_g.valve_lock_state != VL_UNLOCK){
+					ValveCtrlOrder(VC_LOCK);
+					//?�洢
+				}
+				system_status_word_g.status_word.valve_lock = (save_valve_para_g.valve_lock_state == VL_LOCK)?1:0;
+				ValveCtrlOrder(VC_CLOSE);
+				
+				//����ط�ԭ��ID������Ѿ���ǿ���Թط�������Ҫ�ж����ȼ����������Ա����ǣ����಻�ܱ����ǣ������ж��Ƿ����������ɵģ��������ɵ��ڳ�ֵ֮�����ֱ�ӿ���
+				if((save_valve_para_g.valve_close_ID & 0x8000)==0x8000){
+					close_valve_ID = save_valve_para_g.valve_close_ID & ~0x8000;
+					if((close_valve_ID ==ALARM_ID_BALANCE_SMALLER1)&&(close_valve_ID ==ALARM_ID_BALANCE_SMALLER2)&&(close_valve_ID ==ALARM_ID_BALANCE_SMALLER3)&&(close_valve_ID ==ALARM_ID_BALANCE_SMALLER4)&&(close_valve_ID ==ALARM_ID_BALANCE_SMALLER5)){
+						save_valve_para_g.valve_close_ID = alarm_ctrl_para_array_g[count_i].alarm_id | 0x8000 ; //�ط�ԭ��ID��ͬ�ڱ���ID��
+					}
+				}else{
+					save_valve_para_g.valve_close_ID = alarm_ctrl_para_array_g[count_i].alarm_id | 0x8000; //�ط�ԭ��ID��ͬ�ڱ���ID��
+				}
+				
+			}else if(close_valve_flag == VALVE_CTRL_FLAG_ONLY_CLSOSE){
+				ValveCtrlOrder(VC_CLOSE);
+				//����ط�ԭ��ID������Ѿ���ǿ���Թط������ٸ���
+				if((save_valve_para_g.valve_close_ID & 0x8000)==0x8000){
+
+				}else{
+					save_valve_para_g.valve_close_ID = alarm_ctrl_para_array_g[count_i].alarm_id ; //�ط�ԭ��ID��ͬ�ڱ���ID��
+				}
+				
+			}else{}
+			
+		}
+		
+		if(count_i > 200) //��ʱ��û��200������
+		{
+			break;
+		}
+	}
+	//���ڹط��ı���������
+	for(count_i = 0;count_i <(SYSTEM_ALARM_WORD_INF_LENGTH >> 1);count_i++ ){
+		system_alarm_word_for_valve_g.alarm_word_union[count_i] = 0;
+	}
+	
+	
+	
+}
+

--
Gitblit v1.9.3