#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_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 200) //ÔÝʱ»¹Ã»ÓÐ200¸ö±¨¾¯ { break; } } return RESET; } void AlarmCntClearAll(void) { uint16_t count_i; for(count_i = 0;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 >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; } }