forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-04-29 c5be44e4c66ca59789e9ed8e63572929328e3976
Function/VALVE/valve_control.c
@@ -2,7 +2,7 @@
#include "gpio.h"
#include "system_mem_para.h"
__IO VALVE_CTRL_PARA_T   valve_ctrl_para_g;
void Motor_AB_GPIO_Init(void)
@@ -23,26 +23,43 @@
   CloseIO(Motor_OP_PORT,Motor_OP_PIN);
   CloseIO(Motor_CL_PORT,Motor_CL_PIN);
}
void Force_Open_GPIO_Init(void)
{
   InputtIO(VALVE_FORCE_OPEN_PORT,VALVE_FORCE_OPEN_PIN,IN_NORMAL);
}
void Force_Open_GPIO_Init_sleep_mode(void)
{
   CloseIO(VALVE_FORCE_OPEN_PORT,VALVE_FORCE_OPEN_PIN);
}
void ValveMotorOpenRun(void)
{
   Motor_AB_GPIO_Init();
   Motor_OP_CL_GPIO_Init();
   Motor_A_HIGH;
   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 ValveMotorCloseRun(void)
{
   Motor_AB_GPIO_Init();
   Motor_OP_CL_GPIO_Init();
   Motor_A_LOW;
   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 ValveMotorStop(void)
{
   Motor_AB_GPIO_Init();
   Motor_OP_CL_GPIO_Init_sleep_mode();
   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;
}
@@ -62,10 +79,10 @@
   if((Open_status==(uint8_t)Bit_RESET)&&(Close_status==(uint8_t)Bit_SET))
   {
      return VALVE_OP;
      return VALVE_OPEN;
   }else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_RESET))
   {
      return VALVE_CL;
      return VALVE_CLOSE;
   }else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_SET))
   {
      return VALVE_ERROR;
@@ -78,25 +95,205 @@
void  ValveRunParaInit(void)
void  ValveRunParaInit(VALVE_TYPE valve_type_in)
{
   VALVE_STATUS   valve_status;
   switch (save_valve_para_g.valve_status)
   {
//   VALVE_STATUS   valve_status;
   switch (valve_type_in){
      case VM_PENGSHENG: ;
      case VM_HADE:
         save_valve_para_g.valve_status = Read_OP_CL_VALVE_Status(0);
      break;
      
      default:break;
   }
   //ÆäËûÐèÒª³õʼ»¯µÄ²ÎÊý
}
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;
            }
}
void ValveCtrlHade(CALIBER_TYPE caliber_type_l)
{
   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;
         valve_ctrl_para_g.close_time_cnt = 0;
         valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
      }else{
         if(0){ //?Ô¶´«¡¢485²É¼¯µÈÇé¿öÏÂÑÓ³ÙÖ´Ðз§ÃŶ¯×÷
         }else{
            valve_ctrl_para_g.open_time_cnt = GetValveRunMaxTime(caliber_type_l);
            ValveMotorOpenRun();
            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();
         save_valve_para_g.valve_status = VALVE_CLOSE;
         valve_ctrl_para_g.open_time_cnt = 0;
         valve_ctrl_para_g.valve_ctrl_order = VC_NONE;
      }else{
         if(0){ //?Ô¶´«¡¢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;
         }
      }
   }else if(valve_ctrl_para_g.valve_ctrl_order == VC_LOCK){
      save_valve_para_g.valve_lock_state = VL_LOCK;
   }
   //?ÅжϿª¹Ø·§ÊÇ·ñµ½Î»
   if(save_valve_para_g.valve_status==VALVE_OPENING){
      if(valve_ctrl_para_g.open_time_cnt==0){
         //?³¬Ê±½áÊø
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_ERROR;
      }else{
         valve_ctrl_para_g.open_time_cnt--;
      }
      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){
         //?³¬Ê±½áÊø
         ValveMotorStop();
         save_valve_para_g.valve_status = VALVE_ERROR;
      }else{
         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);
      }
   }
   
}
//·§ÃŲÙ×÷º¯Êý
ErrorStatus ValveCtrlOrder(VALVE_CTEL_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;
            return PASS;
         }
      break;
      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;
            return PASS;
         }
      break;
      case VC_UNLOCK:
         save_valve_para_g.valve_lock_state = VL_UNLOCK;
         return PASS;
      break;
      case VC_LOCK:
         save_valve_para_g.valve_lock_state = VL_LOCK;
         return PASS;
      break;
      default: break;
   }
   return FAIL;
}
void ValveForceOpenSignalCheck(void)
{
   uint8_t force_open_io_status=(uint8_t)Bit_RESET;
   Force_Open_GPIO_Init();
   if(VALVE_FORCE_OPEN_IO_READ==Bit_SET){
      delay_ms(5);
      if(VALVE_FORCE_OPEN_IO_READ==Bit_SET)
         force_open_io_status=(uint8_t)Bit_SET;
   }
   if(force_open_io_status==(uint8_t)Bit_SET){
      if(valve_ctrl_para_g.force_open_status !=SET){
         valve_ctrl_para_g.force_open_status =SET;
         //¿ªÊ¼Æô¶¯Ç¿¿ª
      }
   }else{
      if(valve_ctrl_para_g.force_open_status ==SET){
         valve_ctrl_para_g.force_open_status =RESET;
         //¿ªÊ¼¹Ø±ÕÇ¿¿ª
      }
   }
   if((valve_ctrl_para_g.force_open_status ==SET)&&(Read_OP_CL_VALVE_Status(0)==VALVE_OPEN)){
      //?¼ì²âµ½Ç¿¿ª£¬µ«ÊÇ·§ÃÅ״̬¶ÁÈ¡ÒѾ­¿ªµ½Î»£¬ÌáÊ¾ÒÆ³ýÇ¿¿ªµçÔ´£¿
   }
}
void   valveCtrlPro(void) //?
void   valveCtrlPro(void) //?  Èç¹ûÒª²Ù×÷·§ÃÅÔòµ÷Óú¯ÊýValveCtrlOrder£¨VC_OPEN£©;Èë²Î´ú±í²Ù×÷ÄÚÈÝ
{
   
   ValveForceOpenSignalCheck();//?Ç¿¿ªÅжϴ¦Àí
   ValveCtrlHade(equipment_basic_inf_g.caliber_type);//¹þµÂ·§ÃŲÙ×÷´¦Àíº¯Êý
   
   
}