forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-03 71f8bdb7c63acc381d71105bb950411029f4250f
Function/VALVE/valve_control.c
@@ -2,6 +2,7 @@
#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;
@@ -53,18 +54,24 @@
   Motor_OP_CL_GPIO_Init();
   Motor_A_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_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);
}
void ValveMotorStop(void)
@@ -75,6 +82,10 @@
   GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, DISABLE);
   Motor_A_LOW;
   Motor_B_LOW;
   //½èµç¹Ø±Õ
   borrow_Pwr_GPIO_Clk_Init();
   BORROW_PWR_OFF;
}
@@ -144,7 +155,19 @@
void ValveCtrlHade(CALIBER_TYPE caliber_type_l,FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p)
{
   if(valve_ctrl_para_g.valve_ctrl_order == VC_OPEN){
   if(valve_ctrl_para_g.force_open_status ==SET){
      //Ç¿¿ªÓÅÏȼ¶¸ß£¬¼ì²âµ½Ç¿¿ª²»Ö´Ðз§ÃÅ¿ØÖÆ,¹Ø±ÕÖжϼì²â¡£  ¼ì²â·§ÃÅ״̬£¬Èç¹û¿ªµ½Î»£¬×´Ì¬±ä¸üΪ¿ª£¬·ñÔò״̬Ϊ¿ª·§ÖÐ
      GPIO_EXTI_Init( Motor_CL_PORT, Motor_CL_PIN, EXTI_FALLING, DISABLE);
      if(Read_OP_CL_VALVE_Status(0) !=VALVE_OPEN){
         save_valve_para_g.valve_status = VALVE_OPENING;
         ValveMotorStop();
      }else{
         save_valve_para_g.valve_status = VALVE_OPEN;
      }
      return ;  //Ç¿¿ªÐźÅÓÐЧʱ£¬Ö±½ÓÌø³öº¯Êý£¬²»ÅжϺóÐøÂß¼­
   }else if(valve_ctrl_para_g.valve_ctrl_order == VC_OPEN){
      if(Read_OP_CL_VALVE_Status(0) == VALVE_OPEN){
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_OPEN;
@@ -161,6 +184,8 @@
            save_valve_para_g.valve_status = VALVE_OPENING;
            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){
@@ -180,15 +205,20 @@
            save_valve_para_g.valve_status = VALVE_CLOSING;
            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){
      save_valve_para_g.valve_lock_state = VL_LOCK;
   }else{
   }
   
   //?ÅжϿª¹Ø·§ÊÇ·ñµ½Î»
   if(save_valve_para_g.valve_status==VALVE_OPENING){
      if(valve_ctrl_para_g.open_time_cnt==0){
      if(Read_OP_CL_VALVE_Status(0) ==VALVE_OPEN){
         ValveMotorStop();//¹Ø±ÕÇý¶¯
         save_valve_para_g.valve_status = VALVE_OPEN;
      }else if(valve_ctrl_para_g.open_time_cnt==0){
         //?³¬Ê±½áÊø
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_ERROR;
@@ -197,12 +227,15 @@
         valve_ctrl_para_g.open_time_cnt--;
      }
      
      if(valve_ctrl_para_g.force_open_status ==SET){
         //¿ª·§¹ý³ÌÖÐÓöµ½Ç¿¿ª£¬¹Ø±ÕÇý¶¯
         ValveMotorStop();
      }
//      if(valve_ctrl_para_g.force_open_status ==SET){
//         //¿ª·§¹ý³ÌÖÐÓöµ½Ç¿¿ª£¬¹Ø±ÕÇý¶¯
//         ValveMotorStop();
//      }
   }else if(save_valve_para_g.valve_status==VALVE_CLOSING){
      if(valve_ctrl_para_g.close_time_cnt==0){
      if(Read_OP_CL_VALVE_Status(0) ==VALVE_CLOSE){
         ValveMotorStop();//¹Ø±ÕÇý¶¯
         save_valve_para_g.valve_status = VALVE_CLOSE;
      }else if(valve_ctrl_para_g.close_time_cnt==0){
         //?³¬Ê±½áÊø
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_ERROR;
@@ -211,15 +244,15 @@
         valve_ctrl_para_g.close_time_cnt--;
      }
      
      if(valve_ctrl_para_g.force_open_status ==SET){
         //¹Ø·§¹ý³ÌÖÐÓöµ½Ç¿¿ª£¬¹Ø±ÕÇý¶¯£¬×´Ì¬¸Ä±ä³É¿ª·§ÖУ¬ÖØÖÿª·§¼ÆÊ±
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_OPENING;
         valve_ctrl_para_g.open_time_cnt = GetValveRunMaxTime(caliber_type_l);
      }
//      if(valve_ctrl_para_g.force_open_status ==SET){
//         //¹Ø·§¹ý³ÌÖÐÓöµ½Ç¿¿ª£¬¹Ø±ÕÇý¶¯£¬×´Ì¬¸Ä±ä³É¿ª·§ÖУ¬ÖØÖÿª·§¼ÆÊ±
//         ValveMotorStop();
//         save_valve_para_g.valve_status = VALVE_OPENING;
//         valve_ctrl_para_g.open_time_cnt = GetValveRunMaxTime(caliber_type_l);
//      }
   }
   
   //·§ÃŲÙ×÷½øÐÐÖÐ״̬ÖÃλ
   if((save_valve_para_g.valve_status==VALVE_OPENING)||(save_valve_para_g.valve_status==VALVE_CLOSING))
      sys_fun_run_ctrl_p->valve_ctrl_flag.running_flag = SET;
   else
@@ -236,7 +269,7 @@
      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, SET);
            __SYS_ALARM_BYTES_SET(valve_error, ALARM_ID_VALVE_ABNORMAL);
         
         system_alarm_word_for_valve_g.alarm_word.valve_error = SET; //¹Ø·§±¨¾¯×´Ì¬ÖÃλ
      }
@@ -253,6 +286,10 @@
   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;
@@ -261,7 +298,7 @@
      break;
      
      case VC_CLOSE:
         if((save_valve_para_g.valve_status != VALVE_CLOSE)&&(valve_ctrl_para_g.force_open_status==RESET)){
         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;
@@ -271,12 +308,12 @@
      case VC_UNLOCK:
         save_valve_para_g.valve_lock_state = VL_UNLOCK;
         return PASS;
      break;
//      break;
      
      case VC_LOCK:
         save_valve_para_g.valve_lock_state = VL_LOCK;
         return PASS;
      break;
//      break;
      
      default: break;
   }
@@ -306,7 +343,7 @@
   }else{
      if(valve_ctrl_para_g.force_open_status ==SET){
         valve_ctrl_para_g.force_open_status =RESET;
         //¿ªÊ¼¹Ø±ÕÇ¿¿ª
         //Ç¿¿ª½áÊø
      }
      
   }