| | |
| | | #include "valve_control.h" |
| | | #include "gpio.h" |
| | | #include "uart.h" |
| | | #include "lcd.h" |
| | | #include "gprs.h" |
| | | #include "low_pwr_test.h" |
| | | #include "tim.h" |
| | | #include "system_log.h" |
| | | #include "check_out.h" |
| | | #include "master_slave_inter.h" |
| | | #include "system_mem_para.h" |
| | | |
| | | VALVE_WORK_TYPE op_cl_valve_log_flag_g = VWT_NONE; // ¿ª/¹Ø·§ÈÕÖ¾±ê־루ÓÃÓÚÅжÏÊÇ·ñÐèÒªÈÕÖ¾´æ´¢²¢´¢´æ£© |
| | | |
| | | SYS_ALARM_VALVE_T op_cl_valve_cause_id = AV_NORMAL; // ¿ª¹Ø·§ÔÒòID£¨ÓÃÓÚÏÔʾ/¹Ø·§ÔÒòID´æ´¢£© |
| | | |
| | | FlagStatus valve_signal_complete_g = RESET; // ¿ª¹Ø·§µ½Î»ÐźŠ|
| | | |
| | | /*¹Ø·§×ÖĬÈÏÖµ*/ |
| | | TYPE_CHECK_SIZE(VALVE_CTL_BYTES_T,22);//ºË²é½á¹¹Ìå´óС |
| | | VALVE_CTL_BYTES_T __attribute__ ((aligned (2))) valve_ctl_bytes_g = { |
| | | {1, 1, 1, 0, 0, 0}, |
| | | {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0}, |
| | | {0, 0, 1, 0, 1, 0}, |
| | | {1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, |
| | | {0}, |
| | | {0}, |
| | | {0}, |
| | | {0}, |
| | | {0, 0, 0, 0, 1, 1, 1, 1}, |
| | | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, |
| | | {0}, |
| | | }; |
| | | |
| | | static const VALVE_CLOSE_FUNC_TABLE_DRV_T valve_close_tab_func[] = { |
| | | {V_GPRS_CMD_CL, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_1}, |
| | | {AV_FLOW_DIRECTION, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_1}, |
| | | /*{Íâµç±ä»¯¹Ø·§, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_1},*/ |
| | | {AV_UNCAP_1, 8, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_1}, |
| | | |
| | | {AV_VALVE_ERR, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_2}, |
| | | {AV_BALANCE_1, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_2}, |
| | | {AV_BALANCE_2, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_2}, |
| | | {AV_BALANCE_3, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_2}, |
| | | {AV_BALANCE_4, 8, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_2}, |
| | | {AV_BALANCE_5, 10, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_2}, |
| | | |
| | | {AV_SET_CUMULATE, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_3}, |
| | | {AV_NO_USE_GAS, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_3}, |
| | | {AV_NO_GPRS, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_3}, |
| | | /* {ÐÅÓüƷÑ, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_3},*/ |
| | | |
| | | {AV_LITH_LOW, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_4}, |
| | | {AV_LITH_UNDER, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_4}, |
| | | {AV_LITH_REMOVE, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_4}, |
| | | {AV_ALKA_LOW, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_4}, |
| | | {AV_ALKA_UNDER, 8, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_4}, |
| | | {AV_ALKA_REMOVE, 10, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_4}, |
| | | {AV_GPRS_FAIL, 12, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_4}, |
| | | |
| | | /* {ȫΪSV101µÄ²ÎÊý, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_5},*/ |
| | | |
| | | {AV_TEMP_UP, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | {AV_TEMP_UP_UP, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | {AV_TEMP_DOWN, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | {AV_TEMP_DOWN_DOWN, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | {AV_PRESS_UP, 8, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | {AV_PRESS_UP_UP, 10, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | {AV_PRESS_DOWN, 12, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | {AV_PRESS_DOWN_DOWN, 14, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_6}, |
| | | |
| | | {AV_TEMP_ERR, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_7}, |
| | | {AV_PRESS_ERR, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_7}, |
| | | {AV_CPU_TEMP_UP, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_7}, |
| | | {AV_CPU_TEMP_DOWN, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_7}, |
| | | {AV_CPU_TEMP_DRASTIC_CHANGE, 8, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_7}, |
| | | |
| | | {AV_FLOW_VEL_ERR, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | {AV_TOF_DIFF_ERR, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | {AV_SOUND_VEL_ERR, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | {AV_SNR_ERR, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | {AV_SIG_UP, 8, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | {AV_SIG_TH_ERR, 10, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | {AV_GAIN_ERR, 12, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | {AV_UT_LOSE, 14, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_8}, |
| | | |
| | | {AV_INPUT_WATER_ERR, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_9}, |
| | | {AV_MEDIA_ERR, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_9}, |
| | | {AV_DISMANTLE, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_9}, |
| | | {AV_MEASURE_ERR, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_9}, |
| | | |
| | | {AV_LEAKAGE, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | {AV_LCD_UP, 2, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | {AV_LCD_TEMP_LOW, 4, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | {AV_FLOW_UP_1, 6, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | {AV_FLOW_UP_2, 8, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | {AV_FLOW_UP_3, 10, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | {AV_CONSTANT_TINY_FLOW, 12, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | {AV_CONSTANT_FLOW, 14, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_10}, |
| | | |
| | | {AV_CL_HAVE_FLOW, 0, (uint16_t *)&valve_ctl_bytes_g.valve_ctr_11}, |
| | | }; |
| | | |
| | | void Valve_IO_Init(void) |
| | | void Motor_AB_GPIO_Init(void) |
| | | { |
| | | CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý |
| | | InputtIO( VALVE_FORCED_OPEN_PORT, VALVE_FORCED_OPEN_PIN, IN_NORMAL); |
| | | OutputIO( VALVE_CMD_A_PORT, VALVE_CMD_A_PIN, OUT_PUSHPULL); |
| | | OutputIO( VALVE_CMD_B_PORT, VALVE_CMD_B_PIN, OUT_PUSHPULL); |
| | | OutputIO( VALVE_CMD_C_PORT, VALVE_CMD_C_PIN, OUT_PUSHPULL); |
| | | |
| | | VALVE_SLEEP; |
| | | VALVE_PWR_OFF; |
| | | OutputIO(Motor_A_PORT,Motor_A_PIN,OUT_PUSHPULL); |
| | | OutputIO(Motor_B_PORT,Motor_B_PIN,OUT_PUSHPULL); |
| | | } |
| | | |
| | | #define VALVE_SWITCHING_G6_G10 1750U |
| | | #define VALVE_SWITCHING_G16_G25 2300U |
| | | void Valve_OpenCloseTimeInit(void) |
| | | void Motor_OP_CL_GPIO_Init(void) |
| | | { |
| | | if(check_cal_g.device_type == G6 || check_cal_g.device_type == G10) |
| | | BsTimer_Init(12000,VALVE_SWITCHING_G6_G10); // 1Khz = 1ms |
| | | else |
| | | BsTimer_Init(12000,VALVE_SWITCHING_G16_G25); // 1Khz = 1ms |
| | | BSTIM_EGR_UG_Setable(ENABLE); //ʹÄÜUG¼Ä´æÆ÷ÓÃÓÚ¸üÐÂARRºÍPSC |
| | | BSTIM_ISR_UIF_Clr(); |
| | | InputtIO(Motor_OP_PORT,Motor_OP_PIN,IN_NORMAL); |
| | | InputtIO(Motor_CL_PORT,Motor_CL_PIN,IN_NORMAL); |
| | | } |
| | | |
| | | |
| | | // ¿ª·§ |
| | | SYS_ALARM_VALVE_T Valve_Open(SYS_ALARM_VALVE_T op_cl_cause_id) |
| | | void Motor_OP_CL_GPIO_Init_sleep_mode(void) |
| | | { |
| | | if (__SYS_STATUS_BYTES_GET(valve_state) == VALVE_CL) // ·§ÃÅ¹Ø |
| | | { |
| | | Valve_Awaken_Init(); |
| | | ValveCtl_BsTimer_Clk_Init(); |
| | | /*¹©µç£¬¿ª·§*/ |
| | | SYS_BST_EN; |
| | | VALVE_PWR_ON; |
| | | VALVE_OPEN; |
| | | BSTIM_CR1_CEN_Setable(ENABLE);//Æô¶¯¶¨Ê±Æ÷TIM |
| | | __VALVE_WORK_TYPE_SET(VWT_OPEN); |
| | | __SYS_STATUS_BYTES_STATUS(valve_state, VALVE_OPENING, AV_NORMAL); |
| | | #ifdef RS232_PRINTF |
| | | printf("---> ¿ª·§ÖÐ <---\r\n"); |
| | | #endif |
| | | op_cl_valve_cause_id = op_cl_cause_id; |
| | | } |
| | | return AV_NORMAL; |
| | | } |
| | | |
| | | // ¹Ø·§ |
| | | SYS_ALARM_VALVE_T Valve_Close(SYS_ALARM_VALVE_T op_cl_cause_id) |
| | | { |
| | | if (__SYS_STATUS_BYTES_GET(valve_state) == VALVE_OP) // ·§ÃÅ¿ª |
| | | { |
| | | Valve_Awaken_Init(); |
| | | ValveCtl_BsTimer_Clk_Init(); |
| | | /*¹©µç£¬¹Ø·§*/ |
| | | SYS_BST_EN; |
| | | VALVE_PWR_ON; |
| | | VALVE_CLOSE; |
| | | BSTIM_CR1_CEN_Setable(ENABLE);//Æô¶¯¶¨Ê±Æ÷TIM |
| | | if (__SYS_STATUS_BYTES_GET(valve_lock) == SET) |
| | | __VALVE_WORK_TYPE_SET(VWT_FORCED_CLOSE); |
| | | else |
| | | __VALVE_WORK_TYPE_SET(VWT_NORMAL_CLOSE); |
| | | __SYS_STATUS_BYTES_STATUS(valve_state, VALVE_CLOSING, AV_NORMAL); |
| | | #ifdef RS232_PRINTF |
| | | printf("---> ¹Ø·§ÖÐ <---\r\n"); |
| | | #endif |
| | | #if GPRS_PROTOCOL_SELECT |
| | | gprs_protocol_head_tail_g.gprs_protocol_normal_data_head.valve_close_reason = op_cl_valve_cause_id = op_cl_cause_id; // ¸³ÓèÔ¶´«¹Ø·§ÔÒòID |
| | | #else |
| | | op_cl_valve_cause_id = op_cl_cause_id; // ¸³ÓèÔ¶´«¹Ø·§ÔÒòID |
| | | #endif |
| | | |
| | | } |
| | | return AV_NORMAL; |
| | | } |
| | | /*ÅжϿª¹Ø·§µ½Î»*/ |
| | | void Valve_StateSet(void) |
| | | { |
| | | if (__SYS_STATUS_BYTES_GET(valve_state) == VALVE_CLOSING || __SYS_STATUS_BYTES_GET(valve_state) == VALVE_OPENING) |
| | | { |
| | | IWDT_Clr(); |
| | | if (valve_signal_complete_g) // Óе½Î»ÐźŠ|
| | | { |
| | | valve_signal_complete_g = RESET; |
| | | if(zero_drift_valve_flag == 0) |
| | | __SYS_ALARM_BYTES_SET(valve_change,SET); |
| | | else |
| | | zero_drift_valve_flag = 0; |
| | | if (__SYS_STATUS_BYTES_GET(valve_state) == VALVE_CLOSING) // ¸Ä±ä״̬±ê־λ |
| | | __SYS_STATUS_BYTES_STATUS(valve_state, VALVE_CL, AV_NORMAL); |
| | | else if (__SYS_STATUS_BYTES_GET(valve_state) == VALVE_OPENING) |
| | | __SYS_STATUS_BYTES_STATUS(valve_state, VALVE_OP, AV_NORMAL); |
| | | #ifdef RS232_PRINTF |
| | | printf("---> ¿ª/¹Ø·§Íê³É <---\r\n"); |
| | | #endif |
| | | } |
| | | #ifdef RS232_PRINTF |
| | | printf("PE2 = %d,PE3 = %d,PE4 = %d\r\n", GPIO_ReadOutputDataBit(VALVE_CMD_A_PORT, VALVE_CMD_A_PIN), |
| | | GPIO_ReadOutputDataBit(VALVE_CMD_B_PORT, VALVE_CMD_B_PIN), |
| | | GPIO_ReadOutputDataBit(VALVE_CMD_C_PORT, VALVE_CMD_C_PIN)); |
| | | #endif |
| | | } |
| | | CloseIO(Motor_OP_PORT,Motor_OP_PIN); |
| | | CloseIO(Motor_CL_PORT,Motor_CL_PIN); |
| | | } |
| | | |
| | | |
| | | /*¿ª·§µÄÌØÊâÌõ¼þÅжÏ*/ |
| | | uint8_t Valve_Open_SpecialJudge(__IO SYS_STATUS_T *state_bytes_p) |
| | | { |
| | | /*Ïê¼û¡¶·§ºÍÈ¼Æø±íµÄ״̬×Ö¡¢±¨¾¯×ֵȹ²Óù¦ÄܵÄÊáÀí¡·*/ |
| | | uint8_t power_temp_press_status = state_bytes_p->lith_under | state_bytes_p->lith_low | state_bytes_p->lith_remove | |
| | | state_bytes_p->alka_under | state_bytes_p->alka_low | state_bytes_p->alka_remove | |
| | | state_bytes_p->temp_down | state_bytes_p->temp_down_down | state_bytes_p->temp_up | state_bytes_p->temp_up_up | |
| | | state_bytes_p->press_down | state_bytes_p->press_down_down | state_bytes_p->press_up | state_bytes_p->press_up_up; |
| | | |
| | | return !power_temp_press_status; |
| | | void ValveMotorOpenRun(void) |
| | | { |
| | | Motor_AB_GPIO_Init(); |
| | | Motor_A_HIGH; |
| | | Motor_B_HIGH; |
| | | } |
| | | |
| | | void Valve_Process(SYS_ALARM_VALVE_T * pOp_cl_cause) |
| | | void ValveMotorCloseRun(void) |
| | | { |
| | | if (LargeCurrent_LimitingProcess() & 1) |
| | | Motor_AB_GPIO_Init(); |
| | | Motor_A_LOW; |
| | | Motor_B_LOW; |
| | | } |
| | | |
| | | void ValveMotorStop(void) |
| | | { |
| | | /*Èç¹ûÐèÒª¹Ø·§*/ |
| | | if (*pOp_cl_cause != V_KEY_OP && *pOp_cl_cause != AV_NORMAL) |
| | | Motor_AB_GPIO_Init(); |
| | | Motor_A_LOW; |
| | | Motor_B_HIGH; |
| | | } |
| | | |
| | | |
| | | |
| | | VALVE_STATUS Read_OP_CL_VALVE_Status(u16 delay_time_ms) |
| | | { |
| | | uint8_t valve_ctl_temp = 0; |
| | | // °´¼ü¹Ø·§ |
| | | if (*pOp_cl_cause == V_KEY_CL) |
| | | uint8_t Open_status,Close_status; |
| | | Motor_OP_CL_GPIO_Init(); |
| | | if((delay_time_ms > 0)&&(delay_time_ms <101 )) //´Ë´¦´ý¶¨£¬Ä¿Ç°²»ÐèÒªÑÓ³Ù£¬ÑÓ³Ùʱ¼ä¸ø0¾ÍÐÐ |
| | | { |
| | | #ifdef RS232_PRINTF |
| | | printf("¾¯¸æÐԹط§\r\n"); |
| | | #endif |
| | | *pOp_cl_cause = Valve_Close(*pOp_cl_cause); |
| | | delay_ms(delay_time_ms); |
| | | } |
| | | else |
| | | 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)) |
| | | { |
| | | // ¹Ø·§×ÖÅжϹط§ |
| | | for (uint8_t i = 0; i < VALVE_CLOSE_FUNC_TABLE_NUM; i++) |
| | | return VALVE_OP; |
| | | }else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_RESET)) |
| | | { |
| | | // ²é±í |
| | | if (valve_close_tab_func[i].valve_close_flag == *pOp_cl_cause && valve_close_tab_func[i].valve_close_byte != NULL) |
| | | return VALVE_CL; |
| | | }else if((Open_status==(uint8_t)Bit_SET)&&(Close_status==(uint8_t)Bit_SET)) |
| | | { |
| | | valve_ctl_temp = (*valve_close_tab_func[i].valve_close_byte >> valve_close_tab_func[i].offset_bit) & 0x0003; |
| | | if (valve_ctl_temp & 0x01) // ÐèÒª¹Ø·§ |
| | | return VALVE_ERROR; |
| | | }else |
| | | { |
| | | if (valve_ctl_temp & 0x02) // Ç¿ÖÆÐԹط§ |
| | | return VALVE_ERROR; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | void ValveRunParaInit(void) |
| | | { |
| | | //ÒѾÓо¯¸æÐԹط§ºóÓÖ²úÉúÁËÇ¿ÖÆÐԹط§£¬ÐèÒª¸Ä±ä¹Ø·§ID£¬ÓÃÓÚ¸üÖ±¹ÛµÄÏÔʾ |
| | | if(__SYS_STATUS_BYTES_GET(valve_state) == VALVE_CL && __SYS_STATUS_BYTES_GET(valve_lock) == RESET) |
| | | VALVE_STATUS valve_status; |
| | | |
| | | switch (save_valve_para_g.valve_status) |
| | | { |
| | | __VALVE_WORK_TYPE_SET(VWT_LOCK); |
| | | op_cl_valve_cause_id = *pOp_cl_cause; |
| | | |
| | | } |
| | | __SYS_STATUS_BYTES_STATUS(valve_lock, SET, AV_NORMAL); // ÉÏËø |
| | | #ifdef RS232_PRINTF |
| | | printf("Ç¿ÖÆÐԹط§\r\n"); |
| | | #endif |
| | | |
| | | } |
| | | else // ¾¯¸æÐԹط§ |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | void valveCtrlPro(void) //? |
| | | { |
| | | #ifdef RS232_PRINTF |
| | | printf("¾¯¸æÐԹط§\r\n"); |
| | | #endif |
| | | |
| | | |
| | | |
| | | } |
| | | *pOp_cl_cause = Valve_Close(*pOp_cl_cause); |
| | | } |
| | | else |
| | | *pOp_cl_cause = AV_NORMAL; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else if (*pOp_cl_cause == V_KEY_OP) // ¿ª·§ |
| | | { |
| | | //¼ì¶¨Ä£Ê½ÏÂÇ¿ÖÆÐԹط§£¬×Ô¶¯¿ª·§ºó£¬ÐèÒª°ÑËø±ê־Ҳȥ³ý |
| | | if(__SYS_STATUS_BYTES_GET(valve_lock) == SET && sys_display_para_g.sys_and_display_mode == CALIB_MODE) |
| | | __SYS_STATUS_BYTES_STATUS(valve_lock, RESET, AV_NORMAL); |
| | | // ÅжÏijЩ״̬ÊÇ·ñ»Ö¸´Õý³££¨×´Ì¬×ÖÅжϣ©or ¼ì¶¨Ä£Ê½ |
| | | // if (Valve_Open_SpecialJudge(&sys_admin_g.sys_admin.state_bytes) || (sys_display_para_g.sys_and_display_mode == CALIB_MODE)) |
| | | // { |
| | | *pOp_cl_cause = Valve_Open(*pOp_cl_cause); |
| | | // } |
| | | } |
| | | } |
| | | Valve_StateSet(); |
| | | } |
| | | |
| | | |
| | | |