forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-28 6b0d1f644233b2984d2a87553de598879cf05caf
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½øÐжÔÓ¦µÄ¹Ø·§´¦Àí
@@ -9,7 +11,7 @@
.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_UNION_T valve_ctl_bytes_g = {.valve_ctrl_bytes = {
@@ -125,6 +127,11 @@
         }
         break;
      }
      if(count_i > 200) //ÔÝʱ»¹Ã»ÓÐ200¸ö±¨¾¯
      {
         break;
      }
   }
   return RESET;
}
@@ -161,6 +168,10 @@
//¼Ç¼µÄÉϴιط§Ô­ÒòÐèÒªÓÐÓÅÏȼ¶¸²¸Ç»úÖÆ£¬ Ç¿ÖÆÐԹط§¸²¸Ç·ÇÇ¿ÖÆÐԹط§£¬ ·ÇÓà¶îÔì³ÉµÄÇ¿ÖÆÐԹط§¸²¸ÇÓà¶îÔì³ÉµÄ¡£
void SysAlarmCtrlPro(void)
{
   uint16_t count_i;
   uint16_t   close_valve_ID;
   uint8_t  close_valve_flag;
   EveryDayClearAlarmCnt(sys_clockBCD_g); //ÿÌìÇå³ý±¨¾¯´ÎÊý
   
   /*±¨¾¯´¥·¢Éϱ¨*/
@@ -170,6 +181,51 @@
   }
   /*±¨¾¯´¥·¢·§¿Ø*/
   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;
   }