From e4424eb6b50d0300583c422dfb71d58e040f4b9e Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Tue, 11 Jun 2024 19:54:37 +0800
Subject: [PATCH] 继续测试优化
---
Soft/sizhu_ctrl_word.c | 302 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 285 insertions(+), 17 deletions(-)
diff --git a/Soft/sizhu_ctrl_word.c b/Soft/sizhu_ctrl_word.c
index a62d3e1..a05239f 100644
--- a/Soft/sizhu_ctrl_word.c
+++ b/Soft/sizhu_ctrl_word.c
@@ -1,21 +1,289 @@
#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;
+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_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 = {
-{0},
-{0},
-{0},
-{1,0,1,1,1,1,0,0,0,0,0,0,0,0},
-{0,0,0,1,1},
-{0},
-{0},
-{0},
-{0},
-{0},
-{0},
-};
\ No newline at end of file
+
+SYSTEM_ALARM_WORD_T system_alarm_word_for_valve_g; //���ڷ��أ��ж��귧��֮������
+
+
+SYSTEM_ALARM_CTRL_WORD_T system_alarm_ctrl_word_g= {.alarm_ctl_word={
+ .system_start = 1,
+ .power_state = 1,
+ .valve_error = 1,
+ .valve_state_change = 1,
+ .set_cumulate_up_to = 1,
+ .no_use_gas_date_up_to = 1,
+ .no_gprs_date_up_to = 1,
+ .balance_small_3 = 1,
+ .lith_low = 1,
+ .lith_down = 1,
+ .lith_remove = 1,
+ .alka_low = 1,
+ .alka_down = 1,
+ .alka_remove = 1,
+ .gprs_status = 1, //Զ��ʧ��ֻ���������ϱ�
+ .RS485_err = 1,
+ .RS485_lessen = 1,
+ .broken_line = 1,
+ .temp_err = 1,
+ .cpu_temp_up = 1,
+ .cpu_temp_down = 1,
+ .press_err = 1,
+ .lcd_up = 1,
+ .cl_have_flow = 1,
+ }
+};
+SYSTEM_ALARM_CTRL_WORD_T system_alarm_report_ctrl_word_g= {.alarm_ctl_word={
+ .system_start = 1,
+ .power_state = 1,
+ .valve_error = 1,
+ .valve_state_change = 1,
+ .set_cumulate_up_to = 1,
+ .no_use_gas_date_up_to = 1,
+ .no_gprs_date_up_to = 1,
+ .balance_small_3 = 1,
+ .lith_low = 1,
+ .lith_down = 1,
+ .lith_remove = 1,
+ .alka_low = 1,
+ .alka_down = 1,
+ .alka_remove = 1,
+ //.gprs_status = 1, //Զ��ʧ��ֻ���������ϱ�
+ .RS485_err = 1,
+ .RS485_lessen = 1,
+ .broken_line = 1,
+ .temp_err = 1,
+ .cpu_temp_up = 1,
+ .cpu_temp_down = 1,
+ .press_err = 1,
+ .lcd_up = 1,
+ .cl_have_flow = 1,
+ }
+};
+
+
+VALVE_CTL_BYTES_UNION_T valve_ctl_bytes_g = {.valve_ctrl_bytes = {
+ {0},
+ {0},
+ {0},
+ {.lith_down_need_close_valve_flag =1,.lith_down_close_valve_type = 1,.lith_remove_need_close_valve_flag =1,.lith_remove_close_valve_type =1,
+ //.alka_down_need_close_valve_flag= 1,.alka_down_close_valve_type = 1,.alka_remove_need_close_valve_flag =1,.alka_remove_close_valve_type =1,
+ },
+ {0},
+ {0},
+ {0},
+ {0},
+ {0},
+ {0},
+ {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){
+ //��������������ɣ�����ִ����Ҫһ��ʱ��
+ ValveCtrlOrder(VC_CLOSE_AND_LOCK,VALVE_CTRL_SOURCE_AUTO);
+
+
+ //����ط�ԭ��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,VALVE_CTRL_SOURCE_AUTO);
+ //����ط�ԭ��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