#include "ValveControl.h" #include "mem_pro.h" #include "para.h" #include "delay.h" #include "fm25v02.h" #include "gprs.h" #include "third_telecom_manage.h" #include "state_fun_init.h" #include "calculate.h" uint16_t Time_For_valve_run = 0; unsigned char OpenValveFLAG =0; //¿ª·§±êÖ¾£¬Óпª·§ÔòÔÚÖ÷Ñ­»·Öпª·§£¬ÈçÓжÁÈ¡ºÍÉÏ·¢ÈÎÎñ£¬Ôò¶ÁÈ¡ÉÏ·¢½áÊøºó¿ª·§£¬Èô°´¼ü¿ª·§ÔÚÏÈ£¬ÔòÏÈ¿ª·§µ½Î»Ôٲɼ¯ÉÏ·¢¡£ u16 Valve_Force_Open_Flag; VALVE_CONTROL_PARM Valve_control_parm; void Motor_AB_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = Motor_A_PIN_NUM; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_A_PIN_GROUP, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = Motor_B_PIN_NUM; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_B_PIN_GROUP, &GPIO_InitStructure); Motor_A_EN = 0; Motor_B_EN = 1; } void Motor_OP_CL_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = Motor_OP_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_OP_PIN_GROUP, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = Motor_CL_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_CL_PIN_GROUP, &GPIO_InitStructure); } void Motor_OP_CL_GPIO_Init_sleep_mode(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = Motor_OP_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_OP_PIN_GROUP, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = Motor_CL_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_CL_PIN_GROUP, &GPIO_InitStructure); } void Motor_GPIO_Init(void) { Valve_Motor_Stop(); Motor_OP_CL_GPIO_Init(); } void Force_Open_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = FORCE_OPEN_INT_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(FORCE_OPEN_INT_PIN_GROUP, &GPIO_InitStructure); } void Force_Open_GPIO_Init_sleep_mode(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = FORCE_OPEN_INT_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(FORCE_OPEN_INT_PIN_GROUP, &GPIO_InitStructure); } void Valve_Alka_Low_A_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = VALVE_ALKA_LOW_A_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(VALVE_ALKA_LOW_A_PIN_GROUP, &GPIO_InitStructure); } void Valve_Alka_Low_A_GPIO_Init_sleep_mode(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = VALVE_ALKA_LOW_A_PIN_NUM ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(VALVE_ALKA_LOW_A_PIN_GROUP, &GPIO_InitStructure); } void Motor_GPIO_Init_sleep_mode(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = Motor_A_PIN_NUM; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_A_PIN_GROUP, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = Motor_B_PIN_NUM; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(Motor_B_PIN_GROUP, &GPIO_InitStructure); } void Valve_Motor_Open_Run(void) { Motor_AB_GPIO_Init(); Motor_A_EN = 1; Motor_B_EN = 1; } void Valve_Motor_Close_Run(void) { Motor_AB_GPIO_Init(); Motor_A_EN = 0; Motor_B_EN = 0; } void Valve_Motor_Stop(void) { Motor_AB_GPIO_Init(); Motor_A_EN = 0; Motor_B_EN = 1; } VALVE_STATE_T 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_PIN_READ; Close_status = Motor_CL_PIN_READ; Motor_OP_CL_GPIO_Init_sleep_mode(); if((Open_status==0)&&(Close_status==1)) { return VALVE_OP; }else if((Open_status==1)&&(Close_status==0)) { return VALVE_CL; }else if((Open_status==1)&&(Close_status==1)) { return VALVE_ERROR; }else { return VALVE_ERROR; } } void Valve_run_para_init(void) { VALVE_STATE_T Valve_status; switch (Valve_control_parm.Valve_Type) { case SZV101_VALVE: Valve_status = Read_OP_CL_VALVE_Status(20); switch (Valve_status) { case VALVE_OP : Valve_control_parm.Valve_Status = VALVE_OP;break; case VALVE_CL : Valve_control_parm.Valve_Status = VALVE_CL;break; case VALVE_ERROR : Valve_control_parm.Valve_Status = VALVE_ERROR;break; // case VALVE_MISSING : Valve_control_parm.Valve_Status = VALVE_MISSING;break; default : Valve_control_parm.Valve_Status = VALVE_ERROR;break; } break; case SZV102_VALVE: break; //102µÄ·§ÃÅ״̬ÊÇ´Ó´æ´¢ÀïÃæ¶ÁÈ¡µÄ£¬²ÎÊýÒѾ­¶ÁÈ¡¹ýÁË£¬ÕâÀïÎÞÐèÆäËû²Ù×÷ case SZV103_VALVE: Valve_status = Read_OP_CL_VALVE_Status(20); switch (Valve_status) { case VALVE_OP : Valve_control_parm.Valve_Status = VALVE_OP;break; case VALVE_CL : Valve_control_parm.Valve_Status = VALVE_CL;break; case VALVE_ERROR : Valve_control_parm.Valve_Status = VALVE_ERROR;break; // case VALVE_MISSING : Valve_control_parm.Valve_Status = VALVE_MISSING;break; default : Valve_control_parm.Valve_Status = VALVE_ERROR;break; } break; default:break; } // equipment_basic_inf_g.caliber_model = DN200_TYPE; } void Valve_Control_SZV101(void) { uint8_t Open_status,Close_status; // if(Valve_control_parm.Valve_Bat_status==0) if(1) { if(OpenValveFLAG==1) { if(Read_OP_CL_VALVE_Status(0) == VALVE_OP) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_OP; Valve_control_parm.ValveHaveClosedTime = 0; OpenValveFLAG = 0; } else { //ͨѶµÈ¸ß¹¦ºÄ´¦ÀíÖв»ÄÜ¿ª·§ if(gprs_send_inf_g.gprs_state!=0) { } else { switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 360 ;break; case DN32_TYPE: Time_For_valve_run = 410 ;break; case DN40_TYPE: Time_For_valve_run = 410 ;break; case DN50_TYPE: Time_For_valve_run = 420 ;break; case DN80_TYPE: Time_For_valve_run = 580 ;break; case DN100_TYPE: Time_For_valve_run = 720;break; case DN150_TYPE: Time_For_valve_run = 720;break; case DN200_TYPE: Time_For_valve_run = 720;break; default: Time_For_valve_run = 720;break; } Valve_Motor_Open_Run(); Valve_control_parm.OpenValveTime = 0; Valve_control_parm.CloseValveTime=0; Valve_control_parm.CurrentState0Time=0; Valve_control_parm.Valve_Status = VALVE_OPENING; OpenValveFLAG = 0; } } }else if(OpenValveFLAG==2) { if(Read_OP_CL_VALVE_Status(0) == VALVE_CL) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_CL; Valve_control_parm.ValveHaveClosedTime = 1; OpenValveFLAG = 0; } else { //·Ç½ô¼±Çé¿ö£¬Í¨Ñ¶µÈ¸ß¹¦ºÄ´¦ÀíÖв»Äܹط§ if((gprs_send_inf_g.gprs_state!=0)&&(Valve_control_parm.Emergency_close_valve_flag ==0)) { } else { switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 2 ;break; case DN32_TYPE: Time_For_valve_run = 2 ;break; case DN40_TYPE: Time_For_valve_run = 2 ;break; case DN50_TYPE: Time_For_valve_run = 2 ;break; case DN80_TYPE: Time_For_valve_run = 2 ;break; case DN100_TYPE: Time_For_valve_run = 4;break; case DN150_TYPE: Time_For_valve_run = 4;break; case DN200_TYPE: Time_For_valve_run = 4;break; default: Time_For_valve_run = 4;break; } // delay_ms(3); Valve_Motor_Close_Run(); Valve_control_parm.OpenValveTime = 0; Valve_control_parm.CloseValveTime=0; Valve_control_parm.CurrentState0Time=0; Valve_control_parm.Valve_Status = VALVE_CLOSING; OpenValveFLAG = 0; } } }else { OpenValveFLAG = 0; } } else { OpenValveFLAG = 0; } if(Valve_control_parm.Force_Open_Flag ==1) { Valve_control_parm.Force_Open_Flag = 0; switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 360 ;break; case DN32_TYPE: Time_For_valve_run = 410 ;break; case DN40_TYPE: Time_For_valve_run = 410 ;break; case DN50_TYPE: Time_For_valve_run = 420 ;break; case DN80_TYPE: Time_For_valve_run = 580 ;break; case DN100_TYPE: Time_For_valve_run = 720;break; case DN150_TYPE: Time_For_valve_run = 720;break; case DN200_TYPE: Time_For_valve_run = 720;break; default: Time_For_valve_run = 720;break; } Valve_control_parm.OpenValveTime = 0; Valve_control_parm.CloseValveTime=0; Valve_control_parm.CurrentState0Time=0; Valve_control_parm.Valve_Status = VALVE_OPENING; Valve_control_parm.ValveHaveClosedTime = 0; Valve_Motor_Stop(); ///jlcÓÐÇ¿¿ªÏÈÀ­µÍABÐźŠ} switch (Valve_control_parm.Valve_Status) { case VALVE_OPENING: //¼ì²âÊÇ·ñµ½Î»»òÕß³¬Ê±½áÊø if(Valve_control_parm.Force_Open_status ==1) { //´¦ÓÚÇ¿¿ª×´Ì¬ÎÞÐ賬ʱÅжϣ¬Ö»Òª¼ÆÊ±ÌáÐÑÓû§ÒƳýÇ¿¿ªµçÔ´¼´¿É if(Valve_control_parm.ForceOpenHighContinueTimes > Time_For_valve_run) { //Ç¿¿ª¹©µçʱ¼ä×ã¹»·§ÃÅ´ò¿ªÁË£¬ÐèÒªÌáÐÑÓû§£¬¿ÉÒÔ½µ·§ÃÅ״ֱ̬½Ó±äΪ¿ª£¬È»ºóµÈµçÔ´²å»ØÕý³£¿ÚÖ®ºóÔÙ¼ì²âÒ»´Î·§ÃÅ״̬£¬°´Êµ¼Ê·§ÃÅ״̬½øÐÐչʾ Valve_control_parm.Valve_Status = VALVE_OP; } } else { if(Valve_control_parm.OpenValveTime > 3)//ǰ¼¸Ãë²»¼ì²â { if(Read_OP_CL_VALVE_Status(0) == VALVE_OP) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_OP; Valve_control_parm.OpenValveTime = 0; //·§ÃÅ״̬±ä»¯ ǰ±ßÒѾ­ÓÐÁ˲Ù×÷¼Ç¼ ´Ë´¦Ö»±¨¾¯²»×ö±¨¾¯¼Ç¼ÁË if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_state_change == 1) { alarm_report_para_g.valve_status_change_flag = 1; } } } Valve_control_parm.OpenValveTime ++; if(Valve_control_parm.OpenValveTime > Time_For_valve_run) { Valve_Motor_Stop(); Valve_control_parm.OpenValveTime = 0; Valve_control_parm.Valve_Status = VALVE_ERROR; //·§ÃÅÒì³£ ±¨¾¯ + ¼Ç¼ system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; //·§ÃÅÒì³£ ±¨¾¯ + ¼Ç¼ system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); system_alarm_third_para_g.valve_abnormal_flag = 1; } } } break; case VALVE_CLOSING: //¼ì²âÊÇ·ñµ½Î»»òÕß³¬Ê±½áÊø if(Valve_control_parm.CloseValveTime > 0)//ǰ¼¸Ãë²»¼ì²â { if(Read_OP_CL_VALVE_Status(0) == VALVE_CL) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_CL; if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_state_change == 1) { alarm_report_para_g.valve_status_change_flag = 1; } } } Valve_control_parm.CloseValveTime ++; if(Valve_control_parm.CloseValveTime > Time_For_valve_run) { Valve_Motor_Stop(); Valve_control_parm.CloseValveTime = 0; Valve_control_parm.Valve_Status = VALVE_ERROR; system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; //·§ÃÅÒì³£ ±¨¾¯ + ¼Ç¼ system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); system_alarm_third_para_g.valve_abnormal_flag = 1; } } break; default:break; } } void Valve_Control_SZV102(void) { uint8_t Open_status,Close_status; // if(Valve_control_parm.Valve_Bat_status==0) if(1) { switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 16 ;break; case DN32_TYPE: Time_For_valve_run = 27 ;break; case DN40_TYPE: Time_For_valve_run = 27 ;break; case DN50_TYPE: Time_For_valve_run = 28 ;break; case DN80_TYPE: Time_For_valve_run = 30 ;break; case DN100_TYPE: Time_For_valve_run = 40;break; case DN150_TYPE: Time_For_valve_run = 60;break; case DN200_TYPE: Time_For_valve_run = 70;break; default: Time_For_valve_run = 70;break; } if(OpenValveFLAG==1) { //ͨѶµÈ¸ß¹¦ºÄ´¦ÀíÖв»ÄÜ¿ª·§ if(gprs_send_inf_g.gprs_state!=0) { } else { Valve_Motor_Open_Run(); Valve_control_parm.OpenValveTime = 0; Valve_control_parm.Valve_Status = VALVE_OPENING; OpenValveFLAG = 0; } }else if(OpenValveFLAG==2) { //·Ç½ô¼±Çé¿ö£¬Í¨Ñ¶µÈ¸ß¹¦ºÄ´¦ÀíÖв»Äܹط§ if((gprs_send_inf_g.gprs_state!=0)&&(Valve_control_parm.Emergency_close_valve_flag ==0)) { } else { Valve_Motor_Close_Run(); Valve_control_parm.CloseValveTime = 0; Valve_control_parm.Valve_Status = VALVE_CLOSING; OpenValveFLAG = 0; } }else { OpenValveFLAG = 0; } Valve_control_parm.CurrentState0Time = 0; } else { OpenValveFLAG = 0; } if(Valve_control_parm.Force_Open_Flag ==1) { Valve_control_parm.Force_Open_Flag = 0; switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 16 ;break; case DN32_TYPE: Time_For_valve_run = 27 ;break; case DN40_TYPE: Time_For_valve_run = 27 ;break; case DN50_TYPE: Time_For_valve_run = 28 ;break; case DN80_TYPE: Time_For_valve_run = 30 ;break; case DN100_TYPE: Time_For_valve_run = 40;break; case DN150_TYPE: Time_For_valve_run = 60;break; case DN200_TYPE: Time_For_valve_run = 70;break; default: Time_For_valve_run = 70;break; } Valve_control_parm.OpenValveTime = 0; Valve_control_parm.CloseValveTime=0; Valve_control_parm.CurrentState0Time=0; Valve_control_parm.Valve_Status = VALVE_OPENING; Valve_Motor_Stop(); ///jlcÓÐÇ¿¿ªÏÈÀ­µÍABÐźŠ} switch (Valve_control_parm.Valve_Status) { case VALVE_OPENING: if(Valve_control_parm.Force_Open_status ==1) { //´¦ÓÚÇ¿¿ª×´Ì¬ÎÞÐ賬ʱÅжϣ¬Ö»Òª¼ÆÊ±ÌáÐÑÓû§ÒƳýÇ¿¿ªµçÔ´¼´¿É if(Valve_control_parm.ForceOpenHighContinueTimes > Time_For_valve_run) { //Ç¿¿ª¹©µçʱ¼ä×ã¹»·§ÃÅ´ò¿ªÁË£¬ÐèÒªÌáÐÑÓû§£¬¿ÉÒÔ½µ·§ÃÅ״ֱ̬½Ó±äΪ¿ª£¬È»ºóµÈµçÔ´²å»ØÕý³£¿ÚÖ®ºóÔÙ¼ì²âÒ»´Î·§ÃÅ״̬£¬°´Êµ¼Ê·§ÃÅ״̬½øÐÐչʾ Valve_control_parm.Valve_Status = VALVE_OP; eeprom_data_write( Valve_control_parm.Valve_Status, VALVE_STATE_ADDR ); } } else { if(Valve_control_parm.OpenValveTime > 3)//ǰ¼¸Ãë²»¼ì²â { if(Read_OP_CL_VALVE_Status(0) == VALVE_OP) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_OP; eeprom_data_write( Valve_control_parm.Valve_Status, VALVE_STATE_ADDR ); Valve_control_parm.OpenValveTime = 0; if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; eeprom_data_write( Valve_control_parm.Valve_Status, VALVE_STATE_ADDR ); //·§ÃÅÒì³£ ±¨¾¯ + ¼Ç¼ system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); system_alarm_third_para_g.valve_abnormal_flag = 1; } } } Valve_control_parm.OpenValveTime ++; if(Valve_control_parm.OpenValveTime > Time_For_valve_run) { Valve_Motor_Stop(); Valve_control_parm.OpenValveTime = 0; Valve_control_parm.Valve_Status = VALVE_ERROR; eeprom_data_write( Valve_control_parm.Valve_Status, VALVE_STATE_ADDR ); system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); system_alarm_third_para_g.valve_abnormal_flag = 1; } } break; case VALVE_CLOSING: //¼ì²âÊÇ·ñµ½Î»»òÕß³¬Ê±½áÊø if(Valve_control_parm.CloseValveTime > 3)//ǰ¼¸Ãë²»¼ì²â { if(Read_OP_CL_VALVE_Status(0) == VALVE_CL) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_CL; eeprom_data_write( Valve_control_parm.Valve_Status, VALVE_STATE_ADDR ); if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; eeprom_data_write( Valve_control_parm.Valve_Status, VALVE_STATE_ADDR ); //·§ÃÅÒì³£ ±¨¾¯ + ¼Ç¼ system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); system_alarm_third_para_g.valve_abnormal_flag = 1; } } } Valve_control_parm.CloseValveTime ++; if(Valve_control_parm.CloseValveTime > Time_For_valve_run) { Valve_Motor_Stop(); Valve_control_parm.CloseValveTime = 0; Valve_control_parm.Valve_Status = VALVE_ERROR; eeprom_data_write( Valve_control_parm.Valve_Status, VALVE_STATE_ADDR ); system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); system_alarm_third_para_g.valve_abnormal_flag = 1; } break; default:break; } } void Valve_Control_SZV103(void) { uint8_t Open_status,Close_status; // if(Valve_control_parm.Valve_Bat_status==0) if(1) { if(OpenValveFLAG==1) { if(Read_OP_CL_VALVE_Status(0) == VALVE_OP) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_OP; Valve_control_parm.ValveHaveClosedTime = 0; OpenValveFLAG = 0; } else { //ͨѶµÈ¸ß¹¦ºÄ´¦ÀíÖв»ÄÜ¿ª·§ if(gprs_send_inf_g.gprs_state!=0) { } else { switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 105 ;break; case DN32_TYPE: Time_For_valve_run = 155 ;break; case DN40_TYPE: Time_For_valve_run = 155 ;break; case DN50_TYPE: Time_For_valve_run = 155 ;break; case DN80_TYPE: Time_For_valve_run = 285 ;break; case DN100_TYPE: Time_For_valve_run = 445;break; case DN150_TYPE: Time_For_valve_run = 490;break; case DN200_TYPE: Time_For_valve_run = 520;break; default: Time_For_valve_run = 520;break; } Valve_Motor_Open_Run(); Valve_control_parm.OpenValveTime=0; Valve_control_parm.CurrentState0Time=0; Valve_control_parm.Valve_Status = VALVE_OPENING; OpenValveFLAG = 0; } } } else if(OpenValveFLAG==2) { if(Read_OP_CL_VALVE_Status(0) == VALVE_CL) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_CL; Valve_control_parm.ValveHaveClosedTime = 1; OpenValveFLAG = 0; } else { //·Ç½ô¼±Çé¿ö£¬Í¨Ñ¶µÈ¸ß¹¦ºÄ´¦ÀíÖв»Äܹط§ if((gprs_send_inf_g.gprs_state!=0)&&(Valve_control_parm.Emergency_close_valve_flag ==0)) { } else { switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 105 ;break; case DN32_TYPE: Time_For_valve_run = 155 ;break; case DN40_TYPE: Time_For_valve_run = 155 ;break; case DN50_TYPE: Time_For_valve_run = 155 ;break; case DN80_TYPE: Time_For_valve_run = 285 ;break; case DN100_TYPE: Time_For_valve_run = 445;break; case DN150_TYPE: Time_For_valve_run = 490;break; case DN200_TYPE: Time_For_valve_run = 520;break; default: Time_For_valve_run = 520;break; } // delay_ms(3); Valve_Motor_Close_Run(); Valve_control_parm.CloseValveTime=0; Valve_control_parm.CurrentState0Time=0; Valve_control_parm.Valve_Status = VALVE_CLOSING; OpenValveFLAG = 0; } } } } else { OpenValveFLAG = 0; } if(Valve_control_parm.Force_Open_Flag ==1) { Valve_control_parm.Force_Open_Flag = 0; switch (equipment_basic_inf_g.caliber_model) { case DN25_TYPE: Time_For_valve_run = 105 ;break; case DN32_TYPE: Time_For_valve_run = 155 ;break; case DN40_TYPE: Time_For_valve_run = 155 ;break; case DN50_TYPE: Time_For_valve_run = 155 ;break; case DN80_TYPE: Time_For_valve_run = 285 ;break; case DN100_TYPE: Time_For_valve_run = 445 ;break; case DN150_TYPE: Time_For_valve_run = 490 ;break; case DN200_TYPE: Time_For_valve_run = 520 ;break; default: Time_For_valve_run = 520;break; } Valve_control_parm.OpenValveTime = 0; Valve_control_parm.CloseValveTime=0; Valve_control_parm.CurrentState0Time=0; Valve_control_parm.Valve_Status = VALVE_OPENING; Valve_control_parm.ValveHaveClosedTime = 0; Valve_Motor_Stop(); ///jlcÓÐÇ¿¿ªÏÈÀ­µÍABÐźŠ} switch (Valve_control_parm.Valve_Status) { case VALVE_OPENING: if(Valve_control_parm.Force_Open_status ==1) { //´¦ÓÚÇ¿¿ª×´Ì¬ÎÞÐ賬ʱÅжϣ¬Ö»Òª¼ÆÊ±ÌáÐÑÓû§ÒƳýÇ¿¿ªµçÔ´¼´¿É if(Valve_control_parm.ForceOpenHighContinueTimes > Time_For_valve_run) { //Ç¿¿ª¹©µçʱ¼ä×ã¹»·§ÃÅ´ò¿ªÁË£¬ÐèÒªÌáÐÑÓû§£¬¿ÉÒÔ½µ·§ÃÅ״ֱ̬½Ó±äΪ¿ª£¬È»ºóµÈµçÔ´²å»ØÕý³£¿ÚÖ®ºóÔÙ¼ì²âÒ»´Î·§ÃÅ״̬£¬°´Êµ¼Ê·§ÃÅ״̬½øÐÐչʾ Valve_control_parm.Valve_Status = VALVE_OP; } }else { if(Valve_control_parm.OpenValveTime > 3)//ǰ¼¸Ãë²»¼ì²â { if(Read_OP_CL_VALVE_Status(0) == VALVE_OP) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_OP; Valve_control_parm.OpenValveTime = 0; //·§ÃÅ״̬±ä»¯ ǰ±ßÒѾ­ÓÐÁ˲Ù×÷¼Ç¼ ´Ë´¦Ö»±¨¾¯²»×ö±¨¾¯¼Ç¼ÁË if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_state_change == 1) { alarm_report_para_g.valve_status_change_flag = 1; } } } Valve_control_parm.OpenValveTime ++; if(Valve_control_parm.OpenValveTime > Time_For_valve_run) { Valve_Motor_Stop(); Valve_control_parm.OpenValveTime = 0; //·§ÃÅÒì³£ ±¨¾¯ + ¼Ç¼ if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_error == 1) { if(alarm_report_para_g.valve_abnoamal_cnt < ALARM_EVERYDAY_TIMES*2) { alarm_report_para_g.valve_abnormal_flag = 1; } if(alarm_report_para_g.valve_abnoamal_cnt < 250) { alarm_report_para_g.valve_abnoamal_cnt++; } } } } } break; case VALVE_CLOSING: //¼ì²âÊÇ·ñµ½Î»»òÕß³¬Ê±½áÊø if(Valve_control_parm.CloseValveTime > 3)//ǰ¼¸Ãë²»¼ì²â { if(Read_OP_CL_VALVE_Status(0) == VALVE_CL) { Valve_Motor_Stop(); Valve_control_parm.Valve_Status = VALVE_CL; if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_state_change == 1) { alarm_report_para_g.valve_status_change_flag = 1; } } } Valve_control_parm.CloseValveTime ++; if(Valve_control_parm.CloseValveTime > Time_For_valve_run) { Valve_Motor_Stop(); Valve_control_parm.CloseValveTime = 0; if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_error == 1) { if(alarm_report_para_g.valve_abnoamal_cnt < ALARM_EVERYDAY_TIMES*2) { alarm_report_para_g.valve_abnormal_flag = 1; } if(alarm_report_para_g.valve_abnoamal_cnt < 250) { alarm_report_para_g.valve_abnoamal_cnt++; } } } } break; default:break; } } void Valve_Control(void) { //if Open_status =0,Close_status=1 means valve has been opened ,else meas valve is closed or not opened fully. uint8_t Open_status,Close_status; switch (Valve_control_parm.Valve_Type) { case SZV101_VALVE: Valve_Control_SZV101(); break; case SZV102_VALVE: Valve_Control_SZV102(); break; case SZV103_VALVE: Valve_Control_SZV103(); break; default:break; } if(Valve_control_parm.Valve_Status == VALVE_CL) { Valve_control_parm.ValveHaveClosedTime ++; } } u8 Valve_Open(void) //·µ»Ø0 ³É¹¦ ·µ»Ø1 ʧ°Ü { if(Valve_control_parm.Valve_Status==VALVE_CL) { if(OpenValveFLAG==0) { OpenValveFLAG = 1; Valve_OpenTimesRecord(); return 0; }else { return 1; } }else { return 1; } } u8 Valve_Close(void) { uint8_t Open_status,Close_status; if((Valve_control_parm.Valve_Status!=VALVE_CL)&&(Valve_control_parm.Valve_Status!=VALVE_CLOSING)) { if(OpenValveFLAG==0) { OpenValveFLAG = 2; Valve_CloseTimesRecord(); return 0; }else { return 1; } }else { return 1; } } void Valve_Power_First_Check(void) { Valve_Alka_Low_A_GPIO_Init(); if(VALVE_ALKA_LOW_A_PIN_READ ==1)//µÍµçƽ´ú±íµÍµçÁ¿ { delay_ms(10); if(VALVE_ALKA_LOW_A_PIN_READ ==1) { Valve_control_parm.Valve_Bat_status = 1;///jlcÏȲ»¼ì²â }else { Valve_control_parm.Valve_Bat_status = 0; } }else { Valve_control_parm.Valve_Bat_status = 0; } // Valve_Alka_Low_A_GPIO_Init_sleep_mode(); } #define VALVE_BAT_CHECK_STEP_NONE 0 #define VALVE_BAT_CHECK_STEP_1 1 #define VALVE_BAT_CHECK_STEP_2 2 #define VALVE_BAT_CHECK_STEP_3 3 #define VALVE_BAT_CHECK_STEP_4 4 #define VALVE_BAT_CHECK_STEP_5 5 #define VALVE_BAT_CHECK_STEP_98 98 #define VALVE_BAT_CHECK_STEP_END 99 //·§µçµÍµç¼ì²â£¬ Ö÷Òª·ÖÁ½ÖÖÇé¿ö£¬ ×ÔÈ»ºÄµçµ½5.17VÒÔϺÍת½Ó°åµôµç£¨°üÀ¨°Îµç³ØºÍת½Ó°å¹©µç¼«µÍÎÞ·¨¹¤×÷£© void Valve_Power_Check(void) { u8 Open_status = 0; u8 Close_status = 0; u8 valve_status = 0; if(calendar.sec % 20 == 0) { Valve_control_parm.Valve_Bat_down_IRQ_flag = 1; Valve_Alka_Low_A_GPIO_Init(); } if(Valve_control_parm.Valve_Bat_down_IRQ_flag ==1) { Valve_control_parm.Valve_Bat_down_IRQ_flag = 0; if(Valve_control_parm.Valve_Bat_down_check_step ==VALVE_BAT_CHECK_STEP_NONE) { Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_1; Valve_control_parm.PowerLowContinueTimes = 0; Valve_control_parm.PowerHighContinueTimes = 0; }else { //ÒѾ­ÔÚ·§µç¼ì²â²½ÖèÖÐÁË£¬Ôõô´¦Àí£¿ Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_1; Valve_control_parm.PowerLowContinueTimes = 0; Valve_control_parm.PowerHighContinueTimes = 0; } } if(Valve_control_parm.Valve_Bat_down_check_step !=VALVE_BAT_CHECK_STEP_NONE) { if((Valve_control_parm.Valve_Status != VALVE_OPENING)&&(Valve_control_parm.Valve_Status != VALVE_CLOSING)) { // Valve_Alka_Low_A_GPIO_Init(); Motor_OP_CL_GPIO_Init(); Open_status = Motor_OP_PIN_READ; Close_status = Motor_CL_PIN_READ; Motor_OP_CL_GPIO_Init_sleep_mode(); if(VALVE_ALKA_LOW_A_PIN_READ ==1 && (Open_status != 0 || Close_status != 0)) { Valve_control_parm.PowerLowContinueTimes = 0; Valve_control_parm.PowerHighContinueTimes++; if(Valve_control_parm.PowerHighContinueTimes >= 5) { if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_bat_low == 1 || system_alarm_ctrl_word_g.alarm_ctl_word.valve_bat_down == 1) { if(Valve_control_parm.Valve_Bat_status != 0) { Valve_control_parm.Valve_Bat_status = 0; system_alarm_log_data_handle(ALARM_CLASS_PRE, ALARM_END + ALARM_ID_VALVE_BAT_DOWN); alarm_report_para_g.valve_bat_down_flag =2; } }else { Valve_control_parm.Valve_Bat_status = 0; alarm_report_para_g.valve_bat_low_flag = 0; } Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_END;//³ÖÐø10ÃëµÍµçƽµ«ÊÇûÓмì²âµ½¶ÏÏߣ¬ÔòÅжÏΪÓеç } } else { //µçƽÀ­µÍ´ú±íµÍµçÁ¿ Valve_control_parm.PowerLowContinueTimes++; Valve_control_parm.PowerHighContinueTimes = 0; if(Valve_control_parm.PowerLowContinueTimes >= 5)//³ÖÐø¶à´Î { if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_bat_down == 1) { if(Valve_control_parm.Valve_Bat_status != 2) { Valve_control_parm.Valve_Bat_status = 2; system_alarm_log_data_handle(ALARM_CLASS_PRE, ALARM_HAPPEN + ALARM_ID_VALVE_BAT_DOWN); if(alarm_report_para_g.valve_bat_down_cnt < ALARM_EVERYDAY_TIMES) { alarm_report_para_g.valve_bat_down_flag =1; } if(alarm_report_para_g.valve_bat_down_cnt < 250) { alarm_report_para_g.valve_bat_down_cnt++; } } }else { Valve_control_parm.Valve_Bat_status = 0; alarm_report_para_g.valve_bat_down_flag = 0; alarm_report_para_g.valve_bat_down_cnt = 0; } //µôµç¿ÉÖ±½ÓÍ˳öµç³Ø¼ì²â»·½Ú Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_END; } } if(Read_OP_CL_VALVE_Status(0) == VALVE_ERROR) { if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_error == 1) { if(alarm_report_para_g.valve_abnoamal_cnt < ALARM_EVERYDAY_TIMES*2) { alarm_report_para_g.valve_abnormal_flag = 1; } if(alarm_report_para_g.valve_abnoamal_cnt < 250) { alarm_report_para_g.valve_abnoamal_cnt++; } } } } } if(Valve_control_parm.Valve_Bat_down_check_step !=VALVE_BAT_CHECK_STEP_END) { Valve_control_parm.Valve_Bat_down_check_step ++ ; if(Valve_control_parm.Valve_Bat_down_check_step > VALVE_BAT_CHECK_STEP_98) { Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_END; Valve_Alka_Low_A_GPIO_Init_sleep_mode(); } }else { Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_NONE; Valve_Alka_Low_A_GPIO_Init_sleep_mode(); } } // if(Valve_control_parm.Valve_Bat_down_check_step !=VALVE_BAT_CHECK_STEP_NONE) // { // if((Valve_control_parm.Valve_Status != VALVE_OPENING)&&(Valve_control_parm.Valve_Status != VALVE_CLOSING)) // { // Valve_Alka_Low_A_GPIO_Init(); // if(VALVE_ALKA_LOW_A_PIN_READ == 0) // { // //µçƽÀ­µÍ´ú±íµÍµçÁ¿ // Valve_control_parm.PowerLowContinueTimes++; // Valve_control_parm.PowerHighContinueTimes = 0; // // if(Valve_control_parm.PowerLowContinueTimes >= 6)//³ÖÐø¶à´Î // { // if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_bat_down == 1) // { // if(Valve_control_parm.Valve_Bat_status != 2) // { // Valve_control_parm.Valve_Bat_status = 2; // system_alarm_log_data_handle(ALARM_CLASS_PRE, ALARM_HAPPEN + ALARM_ID_VALVE_BAT_DOWN); // if(alarm_report_para_g.valve_bat_down_cnt < ALARM_EVERYDAY_TIMES) // { // alarm_report_para_g.valve_bat_down_flag =1; // } // if(alarm_report_para_g.valve_bat_down_cnt < 250) // { // alarm_report_para_g.valve_bat_down_cnt++; // } // } // }else // { // Valve_control_parm.Valve_Bat_status = 0; // alarm_report_para_g.valve_bat_down_flag = 0; // alarm_report_para_g.valve_bat_down_cnt = 0; // } // //µôµç¿ÉÖ±½ÓÍ˳öµç³Ø¼ì²â»·½Ú // Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_END; // } // }else // { // Valve_control_parm.PowerLowContinueTimes = 0; // Valve_control_parm.PowerHighContinueTimes++; // // if(Valve_control_parm.PowerHighContinueTimes >= 5) // { // if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_bat_low == 1 || system_alarm_ctrl_word_g.alarm_ctl_word.valve_bat_down == 1) // { // if(Valve_control_parm.Valve_Bat_status != 0) // { // Valve_control_parm.Valve_Bat_status = 0; // system_alarm_log_data_handle(ALARM_CLASS_PRE, ALARM_END + ALARM_ID_VALVE_BAT_DOWN); // alarm_report_para_g.valve_bat_down_flag =2; // } // }else // { // Valve_control_parm.Valve_Bat_status = 0; // alarm_report_para_g.valve_bat_low_flag = 0; // } // Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_END;//³ÖÐø10ÃëµÍµçƽµ«ÊÇûÓмì²âµ½¶ÏÏߣ¬ÔòÅжÏΪÓеç // } // // if(Read_OP_CL_VALVE_Status(0) == VALVE_ERROR) // { // if(Valve_control_parm.Valve_Status != VALVE_ERROR) // { // Valve_control_parm.Valve_Status = VALVE_ERROR; // system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); // if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_error == 1) // { // if(alarm_report_para_g.valve_abnoamal_cnt < ALARM_EVERYDAY_TIMES*2) // { // alarm_report_para_g.valve_abnormal_flag = 1; // } // // if(alarm_report_para_g.valve_abnoamal_cnt < 250) // { // alarm_report_para_g.valve_abnoamal_cnt++; // } // } // } // } // } //// Valve_Alka_Low_A_GPIO_Init_sleep_mode(); // // // // if(Valve_control_parm.Valve_Bat_down_check_step !=VALVE_BAT_CHECK_STEP_END) // { // Valve_control_parm.Valve_Bat_down_check_step ++ ; // if(Valve_control_parm.Valve_Bat_down_check_step > VALVE_BAT_CHECK_STEP_98) // { // Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_END; // } // }else // { // Valve_control_parm.Valve_Bat_down_check_step = VALVE_BAT_CHECK_STEP_NONE; // } // // } // } } void Force_Open_Signal_Check(void) { uint8_t Valve_status; Force_Open_GPIO_Init(); if(FORCE_OPEN_INT_READ ==1) { //¸ßµçƽ´ú±íÇ¿¿ª if(Valve_control_parm.ForceOpenHighContinueTimes < 65530) { Valve_control_parm.ForceOpenHighContinueTimes ++; } Valve_control_parm.ForceOpenLowContinueTimes = 0; if(Valve_control_parm.ForceOpenHighContinueTimes >=2) { //³ÖÐø¶à´Î if(Valve_control_parm.Force_Open_status != 1) { Valve_control_parm.Force_Open_status = 1; Valve_control_parm.Force_Open_Flag = 1; } } if(Valve_control_parm.Valve_Status == VALVE_CLOSING) ///jlc¹Ø·§ÖÐÁ¢Âí¹Ø±ÕABÇý¶¯£¬·ÀÖ¹¶Ì·ÉÕµç· { Valve_Motor_Stop(); } }else { Valve_control_parm.ForceOpenHighContinueTimes = 0; if(Valve_control_parm.ForceOpenLowContinueTimes < 65530) { Valve_control_parm.ForceOpenLowContinueTimes ++; } if(Valve_control_parm.ForceOpenLowContinueTimes >=2) { //³ÖÐø¶à´Î if(Valve_control_parm.Force_Open_status != 0) { Valve_control_parm.Force_Open_status = 0; Valve_control_parm.Trigger_check_valve_status_flag = 1;//Ç¿¿ªÖ®ºó¼ì²â·§ÃÅ״̬ÏÈÓÃÕâ¸ö¼ì²â°É if(Valve_control_parm.Valve_Status != VALVE_OP)//Ç¿¿ªÎ´µ½Î»¾Í°ÎµçÁË { if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_error == 1) { if(alarm_report_para_g.valve_abnoamal_cnt < ALARM_EVERYDAY_TIMES*2) { alarm_report_para_g.valve_abnormal_flag = 1; } if(alarm_report_para_g.valve_abnoamal_cnt < 250) { alarm_report_para_g.valve_abnoamal_cnt++; } } } if(Valve_control_parm.Valve_Type == SZV102_VALVE) { eeprom_data_write(Valve_control_parm.Valve_Status,VALVE_STATE_ADDR); } } } } } Force_Open_GPIO_Init_sleep_mode(); } /****************************************** * func: Trigger_check_valve_status * desc: ´¥·¢¼ì²â·§ÃÅ״̬ * input: *Trigger_flag ´¥·¢ÐźŠ* output: none * return: none *****************************************/ void Trigger_check_valve_status(u8 * Trigger_flag) { VALVE_STATE_T Valve_status; uint8_t Open_status,Close_status; if((*Trigger_flag ==1)||( Time_BCD_g.sec == 0x00)) { *Trigger_flag = 0; //¼ì²âOPºÍCLÐźÅ,ÒªÇó·§Ãŵ±Ç°ÎÞ¶¯×÷£»¼á³Öµç³Ø×´Ì¬ if((Valve_control_parm.Valve_Status != VALVE_OPENING)&&(Valve_control_parm.Valve_Status != VALVE_CLOSING)) { if(Valve_control_parm.Valve_Type != SZV102_VALVE) { Valve_status = Read_OP_CL_VALVE_Status(0); switch (Valve_status) { case VALVE_OP : Valve_control_parm.Valve_Status = VALVE_OP;break; case VALVE_CL : Valve_control_parm.Valve_Status = VALVE_CL;break; case VALVE_ERROR : if(Valve_control_parm.Valve_Status != VALVE_ERROR) { Valve_control_parm.Valve_Status = VALVE_ERROR; system_alarm_log_data_handle(ALARM_CLASS_SYSTEM_START,ALARM_HAPPEN+ALARM_ID_VALVE_ABNORMAL); if(system_alarm_ctrl_word_g.alarm_ctl_word.valve_error == 1) { if(alarm_report_para_g.valve_abnoamal_cnt < ALARM_EVERYDAY_TIMES*2) { alarm_report_para_g.valve_abnormal_flag = 1; } if(alarm_report_para_g.valve_abnoamal_cnt < 250) { alarm_report_para_g.valve_abnoamal_cnt++; } } } break; // case VALVE_MISSING : Valve_control_parm.Valve_Status = VALVE_MISSING;break; default : break; } } } } } void Valve_Control_Fun(void) { //¸ù¾Ý¹Ø·§IDÅжϷ§ÃŶ¯×÷ ValveActionJudge(); //·§ÃÅµç³ØÖжϴ¥·¢¼ì²â Valve_Power_Check(); //Ç¿¿ªÐźżì²â Force_Open_Signal_Check(); //·§ÃÅ¿ØÖÆ Valve_Control(); //´¥·¢¼ì²â·§ÃÅ״̬£¬ÔÚ·§ÃÅÎÞ¶¯×÷µÄʱºò£¬¶îÍâ¼ÓÈë´¥·¢¼ì²â£¬¼°Ê±¸üкͻñÈ¡·§ÃÅ״̬£¬±ÈÈçÏÖ³¡°´¼üһϿÉÒÔÁ¢¼´¸üз§Ãŵ±Ç°×´Ì¬£¬»¹¼ÓÈëÁËÿ·ÖÖӵļì²â Trigger_check_valve_status(&Valve_control_parm.Trigger_check_valve_status_flag); } void Valve_OpenTimesRecord(void) { Valve_control_parm.ValveOpenTimes++; if(Valve_control_parm.ValveOpenTimes>=65530) Valve_control_parm.ValveOpenTimes=65530; eeprom_data_write_uint16(Valve_control_parm.ValveOpenTimes,VALVE_OPEN_TIMES_ADDR); } void Valve_CloseTimesRecord(void) { Valve_control_parm.ValveCloseTimes++; if(Valve_control_parm.ValveCloseTimes>=65530) Valve_control_parm.ValveCloseTimes=65530; eeprom_data_write_uint16(Valve_control_parm.ValveCloseTimes,VALVE_CLOSE_TIMES_ADDR); } //valveclosetype 0 ¾¯¸æÐԹط§ 1Ç¿ÖÆÐԹط§ 2¿ª·§ void ValveCloseAuthorizeFlagSet(u16 valvecloseid,u8 valveclosetype) { if(valvecloseid == ALARM_ID_NORMAL) { if(valveclosetype == VALVE_ACTION_UNLOCK) { Valve_control_parm.OpenValveAuthorizeFLAG = 0x01; //¾¯¸æÐԹط§»òÕßÔ¶³ÌÊÚȨ¿ª·§ ¸øÒ»´ÎÊÚȨ eeprom_data_write(Valve_control_parm.OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); if(Valve_control_parm.ValveCloseForceFLAG != 0) { Valve_control_parm.ValveCloseForceFLAG = 0; eeprom_data_write(Valve_control_parm.ValveCloseForceFLAG,VALVE_CLOSE_FORCE_FLAG_ADDR); } } else if(valveclosetype == VALVE_ACTION_LOCK) { Valve_control_parm.OpenValveAuthorizeFLAG = 0x00; //¹Ø·§²¢È¡ÏûÊÚȨ eeprom_data_write(Valve_control_parm.OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); if(Valve_control_parm.ValveCloseForceFLAG != 2) { Valve_control_parm.ValveCloseForceFLAG = 2; eeprom_data_write(Valve_control_parm.ValveCloseForceFLAG,VALVE_CLOSE_FORCE_FLAG_ADDR); } } } else if(valvecloseid == ALARM_ID_OP_VALVE_CMD) { Valve_control_parm.OpenValveAuthorizeFLAG = 0x01; //¾¯¸æÐԹط§»òÕßÔ¶³ÌÊÚȨ¿ª·§ ¸øÒ»´ÎÊÚȨ eeprom_data_write(Valve_control_parm.OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); if(Valve_control_parm.ValveCloseForceFLAG != 0) { Valve_control_parm.ValveCloseForceFLAG = 0; eeprom_data_write(Valve_control_parm.ValveCloseForceFLAG,VALVE_CLOSE_FORCE_FLAG_ADDR); } } else if(valvecloseid == ALARM_ID_OP_VALVE_KEY) { if(system_function_ctrl_word_g.fun_ctrl_word.account_open == 1) { // Valve_control_parm.OpenValveAuthorizeFLAG = 0x00; //¿ª·§ÏûºÄÊÚȨ // eeprom_data_write(Valve_control_parm.OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); } } else { if(valveclosetype == VALVE_ACTION_CLOSE_LOCK) { Valve_control_parm.OpenValveAuthorizeFLAG = 0x00; //¹Ø·§²¢È¡ÏûÊÚȨ eeprom_data_write(Valve_control_parm.OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); switch(valvecloseid) { case ALARM_ID_BALANCE_SMALLER1: case ALARM_ID_BALANCE_SMALLER2: case ALARM_ID_BALANCE_SMALLER3: case ALARM_ID_BALANCE_SMALLER4: case ALARM_ID_BALANCE_SMALLER5: if(Valve_control_parm.ValveCloseForceFLAG == 0) { Valve_control_parm.ValveCloseForceFLAG = 1; eeprom_data_write(Valve_control_parm.ValveCloseForceFLAG,VALVE_CLOSE_FORCE_FLAG_ADDR); } break; default: if(Valve_control_parm.ValveCloseForceFLAG != 2) { Valve_control_parm.ValveCloseForceFLAG = 2; eeprom_data_write(Valve_control_parm.ValveCloseForceFLAG,VALVE_CLOSE_FORCE_FLAG_ADDR); } break; } } else { if(Valve_control_parm.ValveCloseForceFLAG == 0) { // Valve_control_parm.OpenValveAuthorizeFLAG = 0x01; //¾¯¸æÐԹط§»òÕßÔ¶³ÌÊÚȨ¿ª·§ ¸øÒ»´ÎÊÚȨ // eeprom_data_write(Valve_control_parm.OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR); } } } } void ValveCloseIdTypeSet(u16 valvecloseid,u8 valveclosetype)//valveclosetype 0 { if(valvecloseid == ALARM_ID_OP_VALVE_CMD || valvecloseid == ALARM_ID_NORMAL)//Ô¶³ÌÃüÁîµÄʱºò¿ª¹Ø·§¶¯×÷ÒѾ­½áÊø ID¿ÉÒÔËæ±ã¸Ä { Valve_control_parm.ValveCloseID = valvecloseid; eeprom_data_write_uint16(Valve_control_parm.ValveCloseID,VALVE_CLOSEID_ADDR); Valve_control_parm.ValveCloseType = valveclosetype; eeprom_data_write(Valve_control_parm.ValveCloseType,VALVE_CLOSE_TYPE_ADDR); } else if(valvecloseid == ALARM_ID_OP_VALVE_KEY)//°´¼ü¿ª·§µÄʱºò ¿ÉÄÜ·¢ÉúÁËÒì³£¹Ø·§µ«ÊÇ»¹Ã»Ö´Ðе½¹Ø·§ ÐÞ¸ÄIDµÄʱºòÒªÅжÏһϠ{ if(Valve_control_parm.ValveCloseID == ALARM_ID_NORMAL || Valve_control_parm.ValveCloseID == ALARM_ID_OP_VALVE_CMD) { // if(Valve_control_parm.OpenValveAuthorizeFLAG == 1) // { Valve_control_parm.ValveCloseID = valvecloseid; eeprom_data_write_uint16(Valve_control_parm.ValveCloseID,VALVE_CLOSEID_ADDR); Valve_control_parm.ValveCloseType = valveclosetype; eeprom_data_write(Valve_control_parm.ValveCloseType,VALVE_CLOSE_TYPE_ADDR); // } } } else { if(valveclosetype == VALVE_ACTION_CLOSE_LOCK)//Ç¿ÖÆÐԹط§ { if(Valve_control_parm.Valve_Status == VALVE_ERROR || Valve_control_parm.ValveCloseType != VALVE_ACTION_CLOSE_LOCK) { Valve_control_parm.ValveCloseID = valvecloseid; eeprom_data_write_uint16(Valve_control_parm.ValveCloseID,VALVE_CLOSEID_ADDR); Valve_control_parm.ValveCloseType = valveclosetype; eeprom_data_write(Valve_control_parm.ValveCloseType,VALVE_CLOSE_TYPE_ADDR); Valve_control_parm.ValveCloseClass = Valve_control_parm.ValveCloseID;//Òì³£¹Ø·§µÄʱºò¸üРeeprom_data_write_uint16(Valve_control_parm.ValveCloseClass,VALVE_ACTION_CLASS_ADDR); } } else if(valveclosetype == VALVE_ACTION_CLOSE_UNLOCK) { if(Valve_control_parm.Valve_Status == VALVE_ERROR || (Valve_control_parm.ValveCloseType != VALVE_ACTION_CLOSE_LOCK && Valve_control_parm.ValveCloseType != VALVE_ACTION_CLOSE_UNLOCK)) { Valve_control_parm.ValveCloseID = valvecloseid; eeprom_data_write_uint16(Valve_control_parm.ValveCloseID,VALVE_CLOSEID_ADDR); Valve_control_parm.ValveCloseType = valveclosetype; eeprom_data_write(Valve_control_parm.ValveCloseType,VALVE_CLOSE_TYPE_ADDR); Valve_control_parm.ValveCloseClass = Valve_control_parm.ValveCloseID;//Òì³£¹Ø·§µÄʱºò¸üРeeprom_data_write_uint16(Valve_control_parm.ValveCloseClass,VALVE_ACTION_CLASS_ADDR); } } } } void ValveActionJudge() { if(Valve_control_parm.ValveCloseID != ALARM_ID_NORMAL) { if((Valve_control_parm.Valve_Status != VALVE_OPENING) && (Valve_control_parm.Valve_Status != VALVE_CLOSING)) {//·¢Éúºó·§ÃÅÒѾ­ÔÚ¶¯×÷µÄ µÈ¶¯×÷Íê³ÉÔÙ½øÐÐÅÐ¶Ï switch(Valve_control_parm.ValveCloseID) { case ALARM_ID_OP_VALVE_CMD://¸Ã´¦ÀíµÄ¶¼ÔÚͨѶÖд¦ÀíÁË break; case ALARM_ID_OP_VALVE_KEY: if(Valve_control_parm.Valve_Status == VALVE_CL) { if(cal_gas_para_g.calibration_mode == 1) { Valve_Open(); Valve_control_parm.ValveCloseClass = 0;//Òì³£¹Ø·§µÄʱºò¸üРeeprom_data_write_uint16(Valve_control_parm.ValveCloseClass,VALVE_ACTION_CLASS_ADDR); ufg620_valve_action_log_data_handle(Valve_control_parm.ValveCloseID,Valve_control_parm.ValveCloseType); } else /*if(system_function_ctrl_word_g.fun_ctrl_word.account_open == 1) {*/ if(Valve_control_parm.OpenValveAuthorizeFLAG == 1) { ValveCloseAuthorizeFlagSet(Valve_control_parm.ValveCloseID,Valve_control_parm.ValveCloseType); Valve_Open(); Valve_control_parm.ValveCloseClass = 0;//Òì³£¹Ø·§µÄʱºò¸üРeeprom_data_write_uint16(Valve_control_parm.ValveCloseClass,VALVE_ACTION_CLASS_ADDR); ufg620_valve_action_log_data_handle(Valve_control_parm.ValveCloseID,Valve_control_parm.ValveCloseType); } // } // else // { // Valve_Open(); // ufg620_valve_action_log_data_handle(Valve_control_parm.ValveCloseID,Valve_control_parm.ValveCloseType); // } } break; case ALARM_ID_CL_VALVE_CMD://ÆäËûµÄÔÚͨѶÖд¦ÀíÁË ¿ª·§¹ý³ÌÖÐÏȲ»ÔÊÐí¹Ø·§ if(Valve_control_parm.Valve_Status != VALVE_CL) { Valve_Close(); } break; case ALARM_ID_CL_VALVE_KEY: if(Valve_control_parm.Valve_Status != VALVE_CL) { Valve_Close(); ufg620_valve_action_log_data_handle(Valve_control_parm.ValveCloseID,Valve_control_parm.ValveCloseType); } break; default://ÆäÓàËùÓзÇÈ˹¤²Ù×÷ÒýÆðµÄ¹Ø·§ // if(system_function_ctrl_word_g.fun_ctrl_word.account_open == 1) // { ValveCloseAuthorizeFlagSet(Valve_control_parm.ValveCloseID,Valve_control_parm.ValveCloseType); // } if(Valve_control_parm.Valve_Status != VALVE_CL) { Valve_Close(); ufg620_valve_action_log_data_handle(Valve_control_parm.ValveCloseID,Valve_control_parm.ValveCloseType); } break; } Valve_control_parm.ValveCloseID = ALARM_ID_NORMAL; eeprom_data_write_uint16(Valve_control_parm.ValveCloseID,VALVE_CLOSEID_ADDR); } } }