forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-28 6b0d1f644233b2984d2a87553de598879cf05caf
Function/VALVE/valve_control.c
@@ -1,6 +1,8 @@
#include "valve_control.h"
#include "gpio.h"
#include "system_mem_para.h"
#include "power_manage.h"
#include "linked_list.h"
__IO VALVE_CTRL_PARA_T   valve_ctrl_para_g;
@@ -33,23 +35,45 @@
   CloseIO(VALVE_FORCE_OPEN_PORT,VALVE_FORCE_OPEN_PIN);
}
void Valve_CTRL_GPIO_Init(void)
{
   Motor_AB_GPIO_Init();
   Motor_A_LOW;
   Motor_B_LOW;
   Motor_OP_CL_GPIO_Init_sleep_mode();
}
void ValveMotorOpenRun(void)
{
   Motor_AB_GPIO_Init();
   Motor_OP_CL_GPIO_Init();
   Motor_A_HIGH;
   Motor_B_HIGH;
   Motor_B_LOW;
   GPIO_EXTI_Init( Motor_OP_PORT, Motor_OP_PIN, EXTI_FALLING, ENABLE);
   GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, ENABLE);
}
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);
      }
   }
   Motor_AB_GPIO_Init();
   Motor_OP_CL_GPIO_Init();
   Motor_A_LOW;
   Motor_B_LOW;
   Motor_B_HIGH;
   GPIO_EXTI_Init( Motor_OP_PORT, Motor_OP_PIN, EXTI_FALLING, ENABLE);
   GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, ENABLE);
}
@@ -61,7 +85,11 @@
   GPIO_EXTI_Init( Motor_OP_PORT, Motor_OP_PIN, EXTI_FALLING, DISABLE);
   GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, DISABLE);
   Motor_A_LOW;
   Motor_B_HIGH;
   Motor_B_LOW;
   //½èµç¹Ø±Õ
   borrow_Pwr_GPIO_Clk_Init();
   BORROW_PWR_OFF;
}
@@ -116,15 +144,15 @@
uint16_t GetValveRunMaxTime(CALIBER_TYPE caliber_type_l)
{
   switch (caliber_type_l){         
                  case DN25_TYPE: return VALVE_HADE_RUN_TIME_DN25 ;break;
                  case DN32_TYPE: return VALVE_HADE_RUN_TIME_DN32 ;break;
                  case DN40_TYPE: return VALVE_HADE_RUN_TIME_DN40 ;break;
                  case DN50_TYPE:   return VALVE_HADE_RUN_TIME_DN50 ;break;
                  case DN80_TYPE:   return VALVE_HADE_RUN_TIME_DN80 ;break;
                  case DN100_TYPE:   return VALVE_HADE_RUN_TIME_DN100 ;break;
                  case DN150_TYPE:   return VALVE_HADE_RUN_TIME_DN150 ;break;
                  case DN200_TYPE:   return VALVE_HADE_RUN_TIME_DN200 ;break;
                  default:   return VALVE_HADE_RUN_TIME_DN200 ;break;
                  case DN25_TYPE: return VALVE_HADE_RUN_TIME_DN25 ;
                  case DN32_TYPE: return VALVE_HADE_RUN_TIME_DN32 ;
                  case DN40_TYPE: return VALVE_HADE_RUN_TIME_DN40 ;
                  case DN50_TYPE:   return VALVE_HADE_RUN_TIME_DN50 ;
                  case DN80_TYPE:   return VALVE_HADE_RUN_TIME_DN80 ;
                  case DN100_TYPE:   return VALVE_HADE_RUN_TIME_DN100 ;
                  case DN150_TYPE:   return VALVE_HADE_RUN_TIME_DN150 ;
                  case DN200_TYPE:   return VALVE_HADE_RUN_TIME_DN200 ;
                  default:   return VALVE_HADE_RUN_TIME_DN200 ;
            }
}
@@ -139,8 +167,8 @@
         valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
         
      }else{
         if(0){ //?Ô¶´«¡¢485²É¼¯µÈÇé¿öÏÂÑÓ³ÙÖ´Ðз§ÃŶ¯×÷
         if(sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag==SET||sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag==SET){ //?Ô¶´«¡¢485²É¼¯µÈÇé¿öÏÂÑÓ³ÙÖ´Ðз§ÃŶ¯×÷
            ;
         }else{
            valve_ctrl_para_g.open_time_cnt = GetValveRunMaxTime(caliber_type_l);
      
@@ -148,12 +176,8 @@
            save_valve_para_g.valve_status = VALVE_OPENING;
            valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
         }
      }
   }else if(valve_ctrl_para_g.valve_ctrl_order == VC_CLOSE){
      if(Read_OP_CL_VALVE_Status(0) == VALVE_CLOSE){
         ValveMotorStop();
@@ -162,24 +186,20 @@
         valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
         
      }else{
         if(0){ //?Ô¶´«¡¢485²É¼¯µÈÇé¿öÏÂÑÓ³ÙÖ´Ðз§ÃŶ¯×÷
         if(sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag==SET||sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag==SET){ //?Ô¶´«¡¢485²É¼¯µÈÇé¿öÏÂÑÓ³ÙÖ´Ðз§ÃŶ¯×÷
            ;
         }else{
            
            valve_ctrl_para_g.close_time_cnt = GetValveRunMaxTime(caliber_type_l);
            ValveMotorCloseRun();
            save_valve_para_g.valve_status = VALVE_CLOSING;
            valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
            valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
         }
      }
   }else if(valve_ctrl_para_g.valve_ctrl_order == VC_LOCK){
      save_valve_para_g.valve_lock_state = VL_LOCK;
      save_valve_para_g.valve_lock_state = VL_LOCK;
   }
   
   //?ÅжϿª¹Ø·§ÊÇ·ñµ½Î»
   if(save_valve_para_g.valve_status==VALVE_OPENING){
@@ -196,9 +216,6 @@
         //¿ª·§¹ý³ÌÖÐÓöµ½Ç¿¿ª£¬¹Ø±ÕÇý¶¯
         ValveMotorStop();
      }
   }else if(save_valve_para_g.valve_status==VALVE_CLOSING){
      if(valve_ctrl_para_g.close_time_cnt==0){
         //?³¬Ê±½áÊø
@@ -223,17 +240,37 @@
   else
      sys_fun_run_ctrl_p->valve_ctrl_flag.running_flag = RESET;
   
   //״̬×Ö´¦Àí
   if(save_valve_para_g.valve_lock_state == VL_UNLOCK)
      system_status_word_g.status_word.valve_lock = RESET;
   else
      system_status_word_g.status_word.valve_lock = SET;
   if(save_valve_para_g.valve_status == VALVE_ERROR){
      if(system_status_word_g.status_word.valve_state != VALVE_ERROR){
         //´¥·¢·§ÃÅÒì³£±¨¾¯
         if(__SYS_ALARM_REPORT_CTL_BYTES_GET(valve_error) == SET)
            __SYS_ALARM_BYTES_SET(valve_error, ALARM_ID_VALVE_ABNORMAL);
         system_alarm_word_for_valve_g.alarm_word.valve_error = SET; //¹Ø·§±¨¾¯×´Ì¬ÖÃλ
      }
   }else{
      system_status_word_g.status_word.valve_state = save_valve_para_g.valve_status;
   }
}
//·§ÃŲÙ×÷º¯Êý£¬Èç¹û·§ÃÅÕý¿ª¹ý³ÌÖУ¬´¥·¢¹Ø·§£¬ÔòÐèҪֹͣ¿ª·§£¬×ª¶ø½øÐйط§
ErrorStatus ValveCtrlOrder(VALVE_CTEL_TYPE_T valve_ctrl_order_l)
ErrorStatus ValveCtrlOrder(VALVE_CTRL_TYPE_T valve_ctrl_order_l)
{
   switch(valve_ctrl_order_l){
      case VC_NONE:break;
      case VC_OPEN:
         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;
            return PASS;
         }
      break;
@@ -241,6 +278,7 @@
      case VC_CLOSE:
         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_CLOSE;
            pwr_vol_g.alka_flag = AMS_VALVE_CTRL_BEFORE;
            return PASS;
         }
      break;
@@ -276,6 +314,7 @@
      if(valve_ctrl_para_g.force_open_status !=SET){
         valve_ctrl_para_g.force_open_status =SET;
         //¿ªÊ¼Æô¶¯Ç¿¿ª
      }
         
      
@@ -290,6 +329,9 @@
   
   if((valve_ctrl_para_g.force_open_status ==SET)&&(Read_OP_CL_VALVE_Status(0)==VALVE_OPEN)){
      //?¼ì²âµ½Ç¿¿ª£¬µ«ÊÇ·§ÃÅ״̬¶ÁÈ¡ÒѾ­¿ªµ½Î»£¬ÌáÊ¾ÒÆ³ýÇ¿¿ªµçÔ´£¿
      //
   }
   
}