forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-04-26 07f9ac2234bbc367d7203f094233867f360671f5
Function/VALVE/valve_control.h
@@ -3,342 +3,79 @@
#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)
/**********************IOÅäÖÃ********************************/
#define   Motor_A_PIN               GPIO_Pin_10
#define   Motor_A_PORT               GPIOE
#define Motor_A_HIGH                   GPIO_SetBits(Motor_A_PORT,Motor_A_PIN)
#define Motor_A_LOW                   GPIO_ResetBits(Motor_A_PORT,Motor_A_PIN)
#define   Motor_B_PIN               GPIO_Pin_10
#define   Motor_B_PORT               GPIOE
#define Motor_B_HIGH                   GPIO_SetBits(Motor_A_PORT,Motor_A_PIN)
#define Motor_B_LOW                   GPIO_ResetBits(Motor_A_PORT,Motor_A_PIN)
#define   Motor_OP_PIN              GPIO_Pin_9
#define   Motor_OP_PORT              GPIOE
#define   Motor_OP_IO_READ               GPIO_ReadInputDataBit(Motor_OP_PORT,Motor_OP_PIN)
#define   Motor_CL_PIN              GPIO_Pin_9
#define   Motor_CL_PORT              GPIOE
#define   Motor_CL_IO_READ               GPIO_ReadInputDataBit(Motor_OP_PORT,Motor_OP_PIN)
#define __VALVE_CLOSE_BYTES_MODE_SET(__NUM__, __HANDLE__, __MODE_H__) \
  do                                                                  \
  {                                                                   \
    (&valve_ctl_bytes_g)->__NUM__.__HANDLE__ = __MODE_H__;            \
  } while (0)
/**********************¿ØÖƲÎÊýºê¶¨Òå********************************/
//¹þµÂ»ù·§¿ª¹ØÊ±¼ä,×î´óʱ¼ä£¬³¬¹ý´ú±í³¬Ê±
#define   VALVE_HADE_RUN_TIME_DN25      105U
#define   VALVE_HADE_RUN_TIME_DN32      155U
#define   VALVE_HADE_RUN_TIME_DN40      155U
#define   VALVE_HADE_RUN_TIME_DN50      155U
#define   VALVE_HADE_RUN_TIME_DN80      285U
#define   VALVE_HADE_RUN_TIME_DN100      445U
#define   VALVE_HADE_RUN_TIME_DN150      490U
#define   VALVE_HADE_RUN_TIME_DN200      520U
#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; // ·§²Ù×÷ÀàÐÍ
   VM_NONE   = 0U,
   VM_PENGSHENG,  //ÅôÊ¢·§Ìå
   VM_HADE,          //¹þµÂ·§Ìå
} VALVE_TYPE; // ·§ÃÅÐͺÅ
#pragma pack(1)
typedef struct
typedef enum
{
  uint16_t gprs_cmd_need_close_valve_flag : 1; // Ô¶´«ÃüÁî
  uint16_t gprs_cmd_close_valve_type : 1;
  VALVE_NONE = 0U,
  VALVE_OP,
  VALVE_CL,
  VALVE_OPENING,
  VALVE_CLOSING,
  VALVE_ERROR,
   VALVE_MISSING = 99U
} VALVE_STATUS; // ·§ÃÅ״̬ÀàÐÍ
  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
typedef enum
{
  uint16_t valve_error_need_close_valve_flag : 1; // ·§ÃÅÒì³£
  uint16_t valve_error_close_valve_type : 1;
  VL_UNLOCK = 0U,
   VL_LOCK
} VALVE_LOCK_STATE_T; // ·§ÃÅ״̬ÀàÐÍ
  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;
typedef struct{
  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;
   VALVE_STATUS   valve_status;
   uint16_t   open_time_cnt;
   uint16_t   close_time_cnt;
typedef struct
{
  uint16_t set_cumulate_need_close_valve_flag : 1; // ÉèÖõÄÀÛ»ýÆøÁ¿µ½
  uint16_t set_cumulate_close_valve_type : 1;
}VALVE_CTRL_PARA_T;
  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;
void   valveCtrlPro(void);
void  ValveRunParaInit(void);
  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