#include "valve_control.h" #include "gpio.h" #include "system_mem_para.h" __IO VALVE_CTRL_PARA_T valve_ctrl_para_g; void Motor_AB_GPIO_Init(void) { OutputIO(Motor_A_PORT,Motor_A_PIN,OUT_PUSHPULL); OutputIO(Motor_B_PORT,Motor_B_PIN,OUT_PUSHPULL); } void Motor_OP_CL_GPIO_Init(void) { InputtIO(Motor_OP_PORT,Motor_OP_PIN,IN_NORMAL); InputtIO(Motor_CL_PORT,Motor_CL_PIN,IN_NORMAL); } void Motor_OP_CL_GPIO_Init_sleep_mode(void) { 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; } VALVE_STATUS Read_OP_CL_VALVE_Status(u16 delay_time_ms) { uint8_t Open_status,Close_status; Motor_OP_CL_GPIO_Init(); if((delay_time_ms > 0)&&(delay_time_ms <101 )) //´Ë´¦´ý¶¨£¬Ä¿Ç°²»ÐèÒªÑÓ³Ù£¬ÑÓ³Ùʱ¼ä¸ø0¾ÍÐÐ { delay_ms(delay_time_ms); } Open_status = Motor_OP_IO_READ; Close_status = Motor_CL_IO_READ; if((Open_status==(uint8_t)Bit_RESET)&&(Close_status==(uint8_t)Bit_SET)) { return VALVE_OPEN; }else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_RESET)) { return VALVE_CLOSE; }else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_SET)) { return VALVE_ERROR; }else { return VALVE_ERROR; } } void ValveRunParaInit(void) { // VALVE_STATUS valve_status; switch (save_valve_para_g.valve_type){ 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) //? Èç¹ûÒª²Ù×÷·§ÃÅÔòµ÷Óú¯ÊýValveCtrlOrder£¨VC_OPEN£©;Èë²Î´ú±í²Ù×÷ÄÚÈÝ { ValveForceOpenSignalCheck();//?Ç¿¿ªÅжϴ¦Àí ValveCtrlHade(equipment_basic_inf_g.caliber_type);//¹þµÂ·§ÃŲÙ×÷´¦Àíº¯Êý }