forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-03 71f8bdb7c63acc381d71105bb950411029f4250f
Soft/sizhu_ctrl_word.c
@@ -1,5 +1,7 @@
#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½øÐжÔÓ¦µÄ¹Ø·§´¦Àí
@@ -8,23 +10,83 @@
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_UNION_T valve_ctl_bytes_g = {.valve_ctrl_bytes = {
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},
{1,0,1,1,1,1,0,0,0,0,0,0,0,0},
{0,0,0,1,1},
{.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)   )
@@ -125,6 +187,11 @@
         }
         break;
      }
      if(count_i > 200) //ÔÝʱ»¹Ã»ÓÐ200¸ö±¨¾¯
      {
         break;
      }
   }
   return RESET;
}
@@ -161,15 +228,64 @@
//¼Ç¼µÄÉϴιط§Ô­ÒòÐèÒªÓÐÓÅÏȼ¶¸²¸Ç»úÖÆ£¬ Ç¿ÖÆÐԹط§¸²¸Ç·ÇÇ¿ÖÆÐԹط§£¬ ·ÇÓà¶îÔì³ÉµÄÇ¿ÖÆÐԹط§¸²¸ÇÓà¶îÔì³ÉµÄ¡£
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;//´æÔÚ±¨¾¯
//      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;
   }