#ifndef _VALVE_CONTROL_H_ #define _VALVE_CONTROL_H_ #include "define_all.h" // ·§²Ù×÷ÀàÐÍÉèÖã¨ÓÃÓÚÆô¶¯´æ´¢²¢´¢´æ£© #define __VALVE_WORK_TYPE_SET(__TYPE__) (op_cl_valve_log_flag_g = __TYPE__) #define __VALVE_CLOSE_BYTES_NEED_SET(__NUM__, __HANDLE__, __FLAG_L__) \ do \ { \ (&valve_ctl_bytes_g)->__NUM__.__HANDLE__ = __FLAG_L__; \ } while (0) #define __VALVE_CLOSE_BYTES_MODE_SET(__NUM__, __HANDLE__, __MODE_H__) \ do \ { \ (&valve_ctl_bytes_g)->__NUM__.__HANDLE__ = __MODE_H__; \ } while (0) #define __VALVE_CLOSE_BYTES_GET(__NUM__, __HANDLE__) ((&valve_ctl_bytes_g)->__NUM__.__HANDLE__) // Ç¿ÖÆ¿ª·§ #define VALVE_FORCED_OPEN_PORT GPIOA #define VALVE_FORCED_OPEN_PIN GPIO_Pin_1 // ·§¿ØA #define VALVE_CMD_A_PORT GPIOE #define VALVE_CMD_A_PIN GPIO_Pin_2 // ·§¿ØB #define VALVE_CMD_B_PORT GPIOE #define VALVE_CMD_B_PIN GPIO_Pin_3 // ·§¿ØC #define VALVE_CMD_C_PORT GPIOE #define VALVE_CMD_C_PIN GPIO_Pin_4 // ¶Á·§Ãŵ½Î»ÐźŠ//#define VALVE_SINGAL_READ HAL_GPIO_ReadPin(VALVE_SINGAL_GPIO_Port, VALVE_SINGAL_Pin) // ·§ÃŵçÔ´ #define VALVE_PWR_ON GPIO_SetBits(VALVE_CMD_A_PORT, VALVE_CMD_A_PIN) #define VALVE_PWR_OFF GPIO_ResetBits(VALVE_CMD_A_PORT, VALVE_CMD_A_PIN) // ÐÝÃß // ¿ª·§ #define VALVE_OPEN \ do \ { \ GPIO_SetBits(VALVE_CMD_B_PORT, VALVE_CMD_B_PIN); \ GPIO_ResetBits(VALVE_CMD_C_PORT, VALVE_CMD_C_PIN); \ } while (0) // ¹Ø·§ #define VALVE_CLOSE \ do \ { \ GPIO_ResetBits(VALVE_CMD_B_PORT, VALVE_CMD_B_PIN); \ GPIO_SetBits(VALVE_CMD_C_PORT, VALVE_CMD_C_PIN); \ } while (0) // ·§ÐÝÃß #define VALVE_SLEEP \ do \ { \ GPIO_ResetBits(VALVE_CMD_B_PORT, VALVE_CMD_B_PIN); \ GPIO_ResetBits(VALVE_CMD_C_PORT, VALVE_CMD_C_PIN); \ } while (0) // ¹Ø·§×Ö³¤¶È #define VALVE_CTL_LENGTH (sizeof(VALVE_STATUS_CHANGE_T) + sizeof(VALVE_BILLING_CHANGE_1_T) + sizeof(VALVE_BILLING_CHANGE_2_T) + \ sizeof(VALVE_VOLTAGE_CHANGE_1_T) + sizeof(VALVE_VOLTAGE_CHANGE_2_T) + sizeof(VALVE_TP_ERR_1_T) + \ sizeof(VALVE_TP_ERR_2_T) + sizeof(VALVE_MEASURE_ERR_1_T) + sizeof(VALVE_MEASURE_ERR_2_T) + \ sizeof(VALVE_OTHER_ERR_1_T) + sizeof(VALVE_OTHER_ERR_2_T)) #define VALVE_CTL_LEN sizeof(VALVE_CTL_BYTES_T) #define VALVE_CLOSE_FUNC_TABLE_NUM (sizeof(valve_close_tab_func) / sizeof(VALVE_CLOSE_FUNC_TABLE_DRV_T)) typedef enum { VWT_NONE = 0U, VWT_NORMAL_CLOSE, VWT_FORCED_CLOSE, VWT_OPEN, VWT_LOCK, VWT_UNLOCK } VALVE_WORK_TYPE; // ·§²Ù×÷ÀàÐÍ #pragma pack(1) typedef struct { uint16_t gprs_cmd_need_close_valve_flag : 1; // Ô¶´«ÃüÁî uint16_t gprs_cmd_close_valve_type : 1; uint16_t flow_direction_need_close_valve_flag : 1; // Á÷ÏòÒì³£ uint16_t flow_direction_close_valve_type : 1; uint16_t power_sta_need_close_valve_flag : 1; // Íâµç±ä»¯ uint16_t power_sta_close_valve_type : 1; uint16_t : 2; //Ô¤Áô uint16_t uncap_1_need_close_valve_flag : 1; // ¿ª¸Ç uint16_t uncap_1_close_valve_type : 1; uint16_t uncap_2_need_close_valve_flag : 1; // ²ðÖ÷°å uint16_t uncap_2_close_valve_type : 1; uint16_t : 4; //Ô¤Áô } VALVE_STATUS_CHANGE_T; typedef struct { uint16_t valve_error_need_close_valve_flag : 1; // ·§ÃÅÒì³£ uint16_t valve_error_close_valve_type : 1; uint16_t balance_1_need_close_valve_flag : 1; // Óà¶îÉÙ¶î1 uint16_t balance_1_close_valve_type : 1; uint16_t balance_2_need_close_valve_flag : 1; // Óà¶îÉÙ¶î2 uint16_t balance_2_close_valve_type : 1; uint16_t balance_3_need_close_valve_flag : 1; // Óà¶îÉÙ¶î3 uint16_t balance_3_close_valve_type : 1; uint16_t balance_4_need_close_valve_flag : 1; // Óà¶îÉÙ¶î4 uint16_t balance_4_close_valve_type : 1; uint16_t balance_5_need_close_valve_flag : 1; // Óà¶îÉÙ¶î5 uint16_t balance_5_close_valve_type : 1; uint16_t : 4; } VALVE_BILLING_CHANGE_1_T; typedef struct { uint16_t set_cumulate_need_close_valve_flag : 1; // ÉèÖõÄÀÛ»ýÆøÁ¿µ½ uint16_t set_cumulate_close_valve_type : 1; uint16_t no_use_gas_need_close_valve_flag : 1; // ÎÞÓÃÆøÌìÊýµ½ uint16_t no_use_gas_close_valve_type : 1; uint16_t no_gprs_need_close_valve_flag : 1; // ÎÞÉϱ¨ÌìÊý uint16_t no_gprs_close_valve_type : 1; uint16_t : 10; } VALVE_BILLING_CHANGE_2_T; typedef struct { uint16_t lith_low_need_close_valve_flag : 1; // ﮵çµÍµç uint16_t lith_low_close_valve_type : 1; uint16_t lith_down_need_close_valve_flag : 1; // ﮵çÇ·/µôµç uint16_t lith_down_close_valve_type : 1; uint16_t lith_remove_need_close_valve_flag : 1; // ﮵çÒÆ³ý uint16_t lith_remove_close_valve_type : 1; uint16_t alka_low_need_close_valve_flag : 1; // ¼îµçµÍµç uint16_t alka_low_close_valve_type : 1; uint16_t alka_down_need_close_valve_flag : 1; // ¼îµçÇ·/µôµç uint16_t alka_down_close_valve_type : 1; uint16_t alka_remove_need_close_valve_flag : 1; // ¼îµçÒÆ³ý uint16_t alka_remove_close_valve_type : 1; uint16_t gprs_fail_need_close_valve_flag : 1; // gprsʧ°Ü uint16_t gprs_fail_close_valve_type : 1; uint16_t : 2; } VALVE_VOLTAGE_CHANGE_1_T; typedef struct { uint16_t reserve : 16; // ¸ù¾ÝЭÒ飬»ù±¾É϶¼ÊÇSZV10XÏà¹ØµÄ²ÎÊý£¬È¼Æø±íÎÞÓà } VALVE_VOLTAGE_CHANGE_2_T; typedef struct { uint16_t temp_up_need_close_valve_flag : 1; // ζȳ¬ÉÏÏÞ uint16_t temp_up_close_valve_type : 1; uint16_t temp_up_up_need_close_valve_flag : 1; // ζȳ¬ÉÏÉÏÏÞ uint16_t temp_up_up_close_valve_type : 1; uint16_t temp_down_need_close_valve_flag : 1; // ζȳ¬ÏÂÏÞ uint16_t temp_down_close_valve_type : 1; uint16_t temp_down_down_need_close_valve_flag : 1; // ζȳ¬ÏÂÏÂÏÞ uint16_t temp_down_down_close_valve_type : 1; uint16_t press_up_need_close_valve_flag : 1; // ѹÁ¦³¬ÉÏÏÞ uint16_t press_up_close_valve_type : 1; uint16_t press_up_up_need_close_valve_flag : 1; // ѹÁ¦³¬ÉÏÉÏÏÞ uint16_t press_up_up_close_valve_type : 1; uint16_t press_down_need_close_valve_flag : 1; // ѹÁ¦³¬ÏÂÏÞ uint16_t press_down_close_valve_type : 1; uint16_t press_down_down_need_close_valve_flag : 1; // ѹÁ¦³¬ÏÂÏÂÏÞ uint16_t press_down_down_close_valve_type : 1; } VALVE_TP_ERR_1_T; typedef struct { uint16_t temp_err_need_close_valve_flag : 1; // ζȴíÎó uint16_t temp_err_close_valve_type : 1; uint16_t press_err_need_close_valve_flag : 1; // ѹÁ¦´íÎó uint16_t press_err_close_valve_type : 1; uint16_t cpu_temp_up_need_close_valve_flag : 1; // »·¾³Î¶ȳ¬ÉÏÏÞ uint16_t cpu_temp_up_close_valve_type : 1; uint16_t cpu_temp_down_need_close_valve_flag : 1; // »·¾³Î¶ȳ¬ÏÂÏÞ uint16_t cpu_temp_down_close_valve_type : 1; uint16_t cpu_temp_drastic_change_close_valve_flag : 1; // »·¾³Î¶Ⱦç±ä uint16_t cpu_temp_drastic_change_valve_type : 1; uint16_t : 6; } VALVE_TP_ERR_2_T; typedef struct { uint16_t flow_vel_err_need_close_valve_flag : 1; // Á÷ËÙÒì³£ uint16_t flow_vel_err_close_valve_type : 1; uint16_t tof_diff_err_need_close_valve_flag : 1; // ·ÉÐÐʱ¼ä²îÒì³£ uint16_t tof_diff_err_close_valve_type : 1; uint16_t sound_vel_err_need_close_valve_flag : 1; // ÉùËÙÒì³£ uint16_t sound_vel_err_close_valve_type : 1; uint16_t snr_err_need_close_valve_flag : 1; // ÐÅÔë±ÈÒì³££¨Signal to Noise Ratio£© uint16_t snr_err_close_valve_type : 1; uint16_t sig_up_need_close_valve_flag : 1; // ÐźÅÒç³ö uint16_t sig_up_close_valve_type : 1; uint16_t sig_th_err_need_close_valve_flag : 1; // ÐźÅãÐÖµÒì³££¨Threshold£© uint16_t sig_th_err_close_valve_type : 1; uint16_t gain_err_need_close_valve_flag : 1; // ÔöÒæÒì³£ uint16_t gain_err_close_valve_type : 1; uint16_t ut_lose_need_close_valve_flag : 1; // ̽ͷ¶ªÊ§£¨Ultrasonic Transducer£© uint16_t ut_lose_close_valve_type : 1; } VALVE_MEASURE_ERR_1_T; typedef struct { uint16_t input_water_err_need_close_valve_flag : 1; // ½øË® uint16_t input_water_err_close_valve_type : 1; uint16_t media_err_need_close_valve_flag : 1; // ½éÖÊÒì³£ uint16_t media_err_close_valve_type : 1; uint16_t dismantle_need_close_valve_flag : 1; // ²ð±í uint16_t dismantle_close_valve_type : 1; uint16_t measure_err_err_need_close_valve_flag : 1; // ¼ÆÁ¿µ¥Ôª¹ÊÕÏ uint16_t measure_err_err_close_valve_type : 1; uint16_t : 8; } VALVE_MEASURE_ERR_2_T; typedef struct { uint16_t leakage_need_close_valve_flag : 1; // ÆøÌåй©£¨½ÓÍⲿ±¨¾¯Æ÷Åжϣ© uint16_t leakage_close_valve_type : 1; uint16_t lcd_up_need_close_valve_flag : 1; // lcdÏÔʾ³¬ÏÞ uint16_t lcd_up_close_valve_type : 1; uint16_t lcd_temp_low_need_close_valve_flag : 1; // lcdµÍΠuint16_t lcd_temp_low_close_valve_type : 1; uint16_t flow_up_1_need_close_valve_flag : 1; // Á÷Á¿³¬ÏÞ1 uint16_t flow_up_1_close_valve_type : 1; uint16_t flow_up_2_need_close_valve_flag : 1; // Á÷Á¿³¬ÏÞ2 uint16_t flow_up_2_close_valve_type : 1; uint16_t flow_up_3_need_close_valve_flag : 1; // Á÷Á¿³¬ÏÞ3 uint16_t flow_up_3_close_valve_type : 1; uint16_t cl_constant_flow_need_close_valve_flag : 1; // ¹Ø·§ºãÁ÷£¨Î¢Ð¡Á÷Á¿Ð¹Â©£© uint16_t cl_constant_flow_valve_type : 1; uint16_t op_constant_flow_close_valve_flag : 1; // ¿ª·§ºãÁ÷ uint16_t op_constant_flow_valve_type : 1; } VALVE_OTHER_ERR_1_T; typedef struct { uint16_t cl_have_flow_need_close_valve_flag : 1; // ¹Ø·§×߯ø uint16_t cl_have_flow_valve_type : 1; uint16_t e2p_write_err_need_close_valve_flag : 1; // e2pдÒì³£ uint16_t e2p_write_err_flow_valve_type : 1; uint16_t e2p_read_err_need_close_valve_flag : 1; // e2p¶ÁÒì³£ uint16_t e2p_read_err_flow_valve_type : 1; uint16_t : 10; } VALVE_OTHER_ERR_2_T; typedef struct { VALVE_STATUS_CHANGE_T valve_ctr_1; VALVE_BILLING_CHANGE_1_T valve_ctr_2; VALVE_BILLING_CHANGE_2_T valve_ctr_3; VALVE_VOLTAGE_CHANGE_1_T valve_ctr_4; VALVE_VOLTAGE_CHANGE_2_T valve_ctr_5; VALVE_TP_ERR_1_T valve_ctr_6; VALVE_TP_ERR_2_T valve_ctr_7; VALVE_MEASURE_ERR_1_T valve_ctr_8; VALVE_MEASURE_ERR_2_T valve_ctr_9; VALVE_OTHER_ERR_1_T valve_ctr_10; VALVE_OTHER_ERR_2_T valve_ctr_11; } VALVE_CTL_BYTES_T; // ¹Ø·§¿ØÖÆ×Ö typedef struct { const uint16_t valve_close_flag; const uint8_t offset_bit; uint16_t * valve_close_byte; } VALVE_CLOSE_FUNC_TABLE_DRV_T; #pragma pack() extern SYS_ALARM_VALVE_T op_cl_valve_cause_id; extern VALVE_WORK_TYPE op_cl_valve_log_flag_g; extern FlagStatus valve_signal_complete_g; extern VALVE_CTL_BYTES_T valve_ctl_bytes_g; void Valve_IO_Init(void); void Valve_Process(SYS_ALARM_VALVE_T * pOp_cl_cause); void Valve_StateSet(void); void Valve_OpenCloseTimeInit(void); #endif