forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-14 d352b1982dc9b4fb2135c64cd909bb9cecc62139
Function/VALVE/valve_control.c
@@ -3,6 +3,8 @@
#include "system_mem_para.h"
#include "power_manage.h"
#include "linked_list.h"
#include "sizhu_alarm_record.h"
#include "sizhu_event_record.h"
__IO VALVE_CTRL_PARA_T   valve_ctrl_para_g;
@@ -59,12 +61,14 @@
void ValveMotorCloseRun(void)
{
   
   //ÅжÏÊÇ·ñÐèÒª½èµç¹Ø·§,ÎÞÍâµç£¬¼îµçµôµç»òÕßÒÆ³ý״̬Ͻèµã
   if(__SYS_STATUS_BYTES_GET(alka_remove) == SET && __SYS_STATUS_BYTES_GET(alka_down) == SET){
      if(__SYS_STATUS_BYTES_GET(power_state) == RESET){
         borrow_Pwr_GPIO_Clk_Init();
         BORROW_PWR_ON;
         delay_ms(1);
   //ÅжÏÊÇ·ñÐèÒª½èµç¹Ø·§,ÎÞÍâµç£¬¼îµçµôµç»òÕßÒÆ³ý״̬Ͻèµã£¬ï®µçÒªÇóÕý³£×´Ì¬
   if(__SYS_STATUS_BYTES_GET(alka_remove) == SET || __SYS_STATUS_BYTES_GET(alka_down) == SET){
      if(__SYS_STATUS_BYTES_GET(lith_low) == RESET && __SYS_STATUS_BYTES_GET(lith_down) == RESET && __SYS_STATUS_BYTES_GET(lith_remove) == RESET){
         if(__SYS_STATUS_BYTES_GET(power_state) == RESET){
            borrow_Pwr_GPIO_Clk_Init();
            BORROW_PWR_ON;
            delay_ms(1);
         }
      }
   }
   
@@ -172,6 +176,7 @@
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_OPEN;
         valve_ctrl_para_g.close_time_cnt = 0;
         sizhuValveActionLogHandle(valve_ctrl_para_g.valve_ctrl_source, valve_ctrl_para_g.valve_ctrl_order,ALARM_ID_NORMAL);
         valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
         
      }else{
@@ -183,17 +188,24 @@
            ValveMotorOpenRun();
            save_valve_para_g.valve_status = VALVE_OPENING;
            sizhuValveActionLogHandle(valve_ctrl_para_g.valve_ctrl_source, valve_ctrl_para_g.valve_ctrl_order,ALARM_ID_NORMAL);
            valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
            delay_ms(10);  //ÑÓºó´ò¿ªÖÕ¶Ë
            GPIO_EXTI_Init( Motor_OP_PORT, Motor_OP_PIN, EXTI_FALLING, ENABLE);
         }
      }
   }else if(valve_ctrl_para_g.valve_ctrl_order == VC_CLOSE){
   }else if((valve_ctrl_para_g.valve_ctrl_order == VC_CLOSE)||(valve_ctrl_para_g.valve_ctrl_order == VC_CLOSE_AND_LOCK )){
      if(Read_OP_CL_VALVE_Status(0) == VALVE_CLOSE){
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_CLOSE;
         valve_ctrl_para_g.open_time_cnt = 0;
         if((save_valve_para_g.valve_lock_state == VL_UNLOCK)&&(valve_ctrl_para_g.valve_ctrl_order == VC_CLOSE_AND_LOCK))
         {
            save_valve_para_g.valve_lock_state = VL_LOCK ;
         }
         sizhuValveActionLogHandle(valve_ctrl_para_g.valve_ctrl_source, valve_ctrl_para_g.valve_ctrl_order,save_valve_para_g.valve_close_ID);
         valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
         
      }else{
         if(sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag==SET||sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag==SET){ //?Ô¶´«¡¢485²É¼¯µÈÇé¿öÏÂÑÓ³ÙÖ´Ðз§ÃŶ¯×÷
@@ -204,11 +216,34 @@
            ValveMotorCloseRun();
            save_valve_para_g.valve_status = VALVE_CLOSING;
            if((save_valve_para_g.valve_lock_state == VL_UNLOCK)&&(valve_ctrl_para_g.valve_ctrl_order == VC_CLOSE_AND_LOCK))
            {
               save_valve_para_g.valve_lock_state = VL_LOCK ;
            }
            sizhuValveActionLogHandle(valve_ctrl_para_g.valve_ctrl_source, valve_ctrl_para_g.valve_ctrl_order,save_valve_para_g.valve_close_ID);
            valve_ctrl_para_g.valve_ctrl_order = VC_NONE;   
            delay_ms(10);  //ÑÓºó´ò¿ªÖÕ¶Ë
            GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, ENABLE);
         }
      }
   }else if(valve_ctrl_para_g.valve_ctrl_order == VC_LOCK){
      if(save_valve_para_g.valve_lock_state == VL_UNLOCK)
      {
         save_valve_para_g.valve_lock_state = VL_LOCK ;
         sizhuValveActionLogHandle(valve_ctrl_para_g.valve_ctrl_source, valve_ctrl_para_g.valve_ctrl_order,ALARM_ID_NORMAL);
      }
      valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
   }else if(valve_ctrl_para_g.valve_ctrl_order == VC_UNLOCK){
      if(save_valve_para_g.valve_lock_state == VL_LOCK)
      {
         save_valve_para_g.valve_lock_state =  VL_UNLOCK;
         sizhuValveActionLogHandle(valve_ctrl_para_g.valve_ctrl_source, valve_ctrl_para_g.valve_ctrl_order,ALARM_ID_NORMAL);
      }
      valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
   }else{
   }
@@ -281,11 +316,16 @@
//·§ÃŲÙ×÷º¯Êý£¬Èç¹û·§ÃÅÕý¿ª¹ý³ÌÖУ¬´¥·¢¹Ø·§£¬ÔòÐèҪֹͣ¿ª·§£¬×ª¶ø½øÐйط§
ErrorStatus ValveCtrlOrder(VALVE_CTRL_TYPE_T valve_ctrl_order_l)
ErrorStatus ValveCtrlOrder(VALVE_CTRL_TYPE_T valve_ctrl_order_l,VALVE_CTRL_SOURCE_T valve_ctrl_source)
{
   valve_ctrl_para_g.valve_ctrl_source = valve_ctrl_source;
   switch(valve_ctrl_order_l){
      case VC_NONE:break;
      case VC_OPEN:
         if((__SYS_STATUS_BYTES_GET(alka_remove) == SET || __SYS_STATUS_BYTES_GET(alka_down) == SET)&&(__SYS_STATUS_BYTES_GET(power_state) ==RESET)){
            return FAIL;//¼îµçûµçÇÒûÓÐÍâµç£¬²»ÔÊÐí¿ª·¢
         }
         if((save_valve_para_g.valve_status == VALVE_CLOSE)&&(valve_ctrl_para_g.force_open_status==RESET)){
            valve_ctrl_para_g.valve_ctrl_order = VC_OPEN;
            pwr_vol_g.alka_flag = AMS_VALVE_CTRL_BEFORE;
@@ -297,17 +337,25 @@
         if((save_valve_para_g.valve_status != VALVE_CLOSE)&&(save_valve_para_g.valve_status != VALVE_CLOSING)&&(valve_ctrl_para_g.force_open_status==RESET)){
            valve_ctrl_para_g.valve_ctrl_order = VC_CLOSE;
            pwr_vol_g.alka_flag = AMS_VALVE_CTRL_BEFORE;
            return PASS;
         }
      break;
         return PASS;
//      break;
      case VC_CLOSE_AND_LOCK:
            valve_ctrl_para_g.valve_ctrl_order = VC_LOCK; //ÏȽöËø¶¨£¬ÔÚÅжϷ§ÃÅ״̬¿´Ðè²»ÐèÒªÖ´Ðйط§
         if((save_valve_para_g.valve_status != VALVE_CLOSE)&&(save_valve_para_g.valve_status != VALVE_CLOSING)&&(valve_ctrl_para_g.force_open_status==RESET)){
            valve_ctrl_para_g.valve_ctrl_order = VC_CLOSE_AND_LOCK;
            pwr_vol_g.alka_flag = AMS_VALVE_CTRL_BEFORE;
         }
         return PASS;
      
      case VC_UNLOCK:
         save_valve_para_g.valve_lock_state = VL_UNLOCK;
         valve_ctrl_para_g.valve_ctrl_order = VC_UNLOCK;
         return PASS;
//      break;
      
      case VC_LOCK:
         save_valve_para_g.valve_lock_state = VL_LOCK;
         valve_ctrl_para_g.valve_ctrl_order = VC_LOCK;
         return PASS;
//      break;
      
@@ -332,7 +380,7 @@
      if(valve_ctrl_para_g.force_open_status !=SET){
         valve_ctrl_para_g.force_open_status =SET;
         //¿ªÊ¼Æô¶¯Ç¿¿ª
         sizhuValveActionLogHandle(VALVE_CTRL_FORCE_OPEN, VC_FORCE_OPEN,ALARM_ID_NORMAL);
      }