#include "1ValveControl.h" #include "para.h" #include "e2p.h" #include "1gprs.h" #include "devicegpioinit.h" #include "systaskinit.h" u8 Bat_Lith_status =0; //0µç³ØÕý³££¬1µç³Ø¹ýµÍ£¬ u8 Bat_Alka_status=0; //0µç³ØÕý³££¬2µç³Ø¹ýµÍ unsigned char OpenValveFLAG =0; //¿ª·¢±êÖ¾£¬Óпª·§ÔòÔÚÖ÷Ñ­»·Öпª·§£¬ÈçÓжÁÈ¡ºÍÉÏ·¢ÈÎÎñ£¬Ôò¶ÁÈ¡ÉÏ·¢½áÊøºó¿ª·§£¬Èô°´¼ü¿ª·§ÔÚÏÈ£¬ÔòÏÈ¿ª·§µ½Î»Ôٲɼ¯ÉÏ·¢¡£ unsigned char OpenValveAuthorizeFLAG ; //ƽ̨¿ª·§ÊÚȨ±êÖ¾£¬ËùÓпª·§¶¯×÷ÐèҪƽ̨ÊÚȨ¡£0x00:ûÓпª·§ÊÚȨ 0x01:ÆÕͨ¿ª·§ÊÚȨ 0x11:Ç¿ÖÆ¿ª·§ÊÚȨ1Ìì±êÖ¾ 0x21 u32 OpenValveAuthorizeTimeCnt; //Æ½Ì¨Ç¿ÖÆ¿ª·§ÊÚȨʱ¼ä¡£ ÆÕͨ¿ª·§Ö»ÊÚȨһ´Î£¬²¢ÇÒÔÚÎÞÒ쳣״̬Ï¿ɿª·§£¬Ç¿ÖÆ¿ª·§ÊÚȨÓÐnÌì¿É¿ªÆôʱЧ£¬ÔÚʱ¼äÄÚÈÎÒ⿪·§£¬ÇÒ²»ÊÜÒ쳣״̬ӰÏ죬Ò쳣״̬Ҳ²»»áµ¼Ö¹ط§ VALVE_CONTROL_PARM Valve_control_parm; u16 ValveOpenTimes,ValveCloseTimes; u16 Valve_Force_Open_Flag; 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; if(Valve_control_parm.Valve_Type == SZV102_VALVE) { if((Bat_Alka_status==0)||(HWID0_READ==0)) { if(regDevSerialNum.EquipmentCaliberAndModel==0x01) //25 { Time_For_valve_open = 16 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x02) //32 { Time_For_valve_open = 27 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x03) //40 { Time_For_valve_open = 27 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x04) //50 { Time_For_valve_open = 28 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x05)//80 { Time_For_valve_open = 30; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x06)//100 { Time_For_valve_open = 40; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x07) //150 { Time_For_valve_open = 60; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x08) //200 { Time_For_valve_open = 70; } else { Time_For_valve_open = 70; } Motor_GPIO_Init(); EX_Motor_op_cl_config(); delay_ms(2); if(OpenValveFLAG==1) { Motor_A_EN_H; Motor_B_EN_L; Valve_control_parm.OpenValveTime = 0; }else if(OpenValveFLAG==2) { Motor_A_EN_L; Motor_B_EN_H; Valve_control_parm.CloseValveTime = 0; } Valve_control_parm.CurrentState0Time = 0; } else { OpenValveFLAG = 0; } } else if(Valve_control_parm.Valve_Type == SZV103_VALVE) { if((Bat_Alka_status==0)||(HWID0_READ==0)) { if(OpenValveFLAG==1) { Open_status = Motor_OP_PIN_READ;//PCin(10); Close_status = Motor_CL_PIN_READ;//PCin(11); if((Open_status==0)&&(Close_status==1)) { Motor_A_EN_L; Motor_B_EN_L; gprs_protocol_header.Valve_Status = 1; Valve_control_parm.ValveHaveClosedTime = 0; OpenValveFLAG = 0; } else { if(regDevSerialNum.EquipmentCaliberAndModel==0x01) //25 { Time_For_valve_open = 105 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x02) //32 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x03) //40 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x04) //50 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x05)//80 { Time_For_valve_open = 285; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x06)//100 { Time_For_valve_open = 445; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x07) //150 { Time_For_valve_open = 490; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x08) //200 { Time_For_valve_open = 520; } else { Time_For_valve_open = 520; } Motor_A_EN_H; Motor_B_EN_L; Valve_control_parm.OpenValveTime=0; Valve_control_parm.CurrentState0Time=0; } } else if(OpenValveFLAG==2) { Open_status = Motor_OP_PIN_READ;//PCin(10); Close_status = Motor_CL_PIN_READ;//PCin(11); if((Open_status==1)&&(Close_status==0)) { Motor_A_EN_L; Motor_B_EN_L; gprs_protocol_header.Valve_Status = 2; Valve_control_parm.ValveHaveClosedTime = 1; OpenValveFLAG = 0; } else { if(regDevSerialNum.EquipmentCaliberAndModel==0x01) //25 { Time_For_valve_open = 105 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x02) //32 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x03) //40 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x04) //50 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x05)//80 { Time_For_valve_open = 285; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x06)//100 { Time_For_valve_open = 445; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x07) //150 { Time_For_valve_open = 490; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x08) //200 { Time_For_valve_open = 520; } else { Time_For_valve_open = 520; } delay_ms(3); Motor_A_EN_L; Motor_B_EN_H; Valve_control_parm.CloseValveTime=0; Valve_control_parm.CurrentState0Time=0; } } } else { OpenValveFLAG = 0; } } else { if((Bat_Alka_status==0)||(HWID0_READ==0)) { Open_status = Motor_OP_PIN_READ;//PCin(10); Close_status = Motor_CL_PIN_READ;//PCin(11); if((Open_status==0)&&(Close_status==1)) { Motor_A_EN_L; Motor_B_EN_L; gprs_protocol_header.Valve_Status = 1; Valve_control_parm.ValveHaveClosedTime = 0; OpenValveFLAG = 0; } else { if(regDevSerialNum.EquipmentCaliberAndModel==0x01) //25 { Time_For_valve_open = 360 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x02) //32 { Time_For_valve_open = 410 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x03) //40 { Time_For_valve_open = 410 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x04) //50 { Time_For_valve_open = 420 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x05)//80 { Time_For_valve_open = 580; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x06)//100 { Time_For_valve_open = 720; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x07) //150 { Time_For_valve_open = 720; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x08) //200 { Time_For_valve_open = 720; } else { Time_For_valve_open = 720; } Motor_A_EN_H; Motor_B_EN_L; } } else { OpenValveFLAG = 0; } } } u8 Valve_open(void) //·µ»Ø0 ³É¹¦ ·µ»Ø1 ʧ°Ü { if(gprs_protocol_header.Valve_Status==2) { if(OpenValveFLAG==0) { OpenValveFLAG = 1; Valve_OpenTimesRecord(); return 0; }else { return 1; } }else { return 1; } } u8 Valve_close(void)//·µ»Ø0 ³É¹¦ ·µ»Ø1 ʧ°Ü { uint8_t Open_status,Close_status; if((Valve_control_parm.Valve_Type == SZV102_VALVE)||(Valve_control_parm.Valve_Type == SZV103_VALVE)) { if(gprs_protocol_header.Valve_Status!=2) { if(OpenValveFLAG==0) { OpenValveFLAG = 2; Valve_CloseTimesRecord(); return 0; }else { return 1; } }else { return 1; } }else { if(gprs_protocol_header.Valve_Status == 2) { gprs_protocol_header.Valve_Status = 2; Valve_control_parm.ValveHaveClosedTime = 1; OpenValveFLAG = 0; return 0; } else { Valve_CloseTimesRecord(); Motor_A_EN_L; Motor_B_EN_L; delay_ms(50); Motor_A_EN_L; Motor_B_EN_H; delay_ms(1000); Open_status = Motor_OP_PIN_READ ;//PCin(10); Close_status = Motor_CL_PIN_READ;//PCin(11); if((Open_status==0)&&(Close_status==1)) { delay_ms(1000); ///jlcÔÝʱ¹Ø·§¾ÍÖ»ÓÐ500msÑÓʱ£¬ËùÓпھ¶£¬Óдý²âÊÔ } Open_status = Motor_OP_PIN_READ ;//PCin(10); Close_status = Motor_CL_PIN_READ;//PCin(11); if((Open_status==0)&&(Close_status==1)) { delay_ms(1000); ///jlcÔÝʱ¹Ø·§¾ÍÖ»ÓÐ500msÑÓʱ£¬ËùÓпھ¶£¬Óдý²âÊÔ } Open_status = Motor_OP_PIN_READ ;//PCin(10); Close_status = Motor_CL_PIN_READ;//PCin(11); if((Open_status==1)&&(Close_status==0)) { Motor_A_EN_L; Motor_B_EN_L; OpenValveFLAG = 0; //Èç¹û¿ª·§µ½Ò»°ëÖ´Ðйط§£¬Ôò¿ª·§µÈ´ý²»¼ÌÐø £¬Ö±½ÓÖ´Ðйط§£¬Í˳ö¿ª·§¹ý³Ì¡£ gprs_protocol_header.Valve_Status = 2; Valve_control_parm.ValveHaveClosedTime = 1; system_alarm.alarm_Valve_close = 1;///jlc·§ÃÅ¿ª¹ØÏȲ»±¨¾¯ valve_abnormal_para_g.valveCloseFirstCum =0; valve_abnormal_para_g.valveCloseFirstFlag = 0; valve_abnormal_para_g.valveCloseNextCum =0; valve_abnormal_para_g.valveCloseNextFlag = 0; //101µÄ ·§ÃŹØÉÏÒԺ󣬰ÑÕâЩ±äÁ¿ÇåÁã } else { Motor_A_EN_L; Motor_B_EN_L; OpenValveFLAG = 0; gprs_protocol_header.Valve_Status = 0x03; system_alarm.alarm_Valve_Abnormal_time ++; if(system_alarm.alarm_Valve_Abnormal_time>=250) { system_alarm.alarm_Valve_Abnormal_time = 250; } if(system_alarm.alarm_Valve_Abnormal_time<=2) //ÿÌìÖ»±¨2´Î¡£ { system_alarm.alarm_Valve_Abnormal = 1; } } } return 0; } } void Valve_Control_Fun(void) { u16 ii_index = 0; u16 Time_out_valve=0; if(Valve_control_parm.Valve_Type == SZV102_VALVE) { Time_out_valve = 100; } else if(Valve_control_parm.Valve_Type == SZV103_VALVE) { Time_out_valve = 550; } else { Time_out_valve = 800; } if((OpenValveFLAG != 0)&&((Bat_Alka_status==0)||(HWID0_READ==0))) //¿ª·§Á÷³Ì£¬Èç¹ûÓжÁÈ¡ºÍÉÏ·¢ÈÎÎñ£¬¶¼»áÔÚÏàÓ¦ÈÎÎñµÄwhileÑ­»·ÖУ¬²»»áÖ´Ðе½¿ª·§£¬Í¬Àí£¬Èç¹ûÓпª·§Ò²»áwhileÑ­»·µÈ´ý£¬²»»áÖ´ÐÐÆäËûÈÎÎñ¡£ { ii_index =0; Valve_Control(); while(OpenValveFLAG) //Óпª·§Ö¸ÁîÔòÖ´Ðпª·§£¬Ñ­»·µÈ´ý£¬Èç¹û¿ª·§µ½Î»£¬ÖÃ0Í˳ö£¬Èç¹û¿ª·§Ã»µ½Î»£¬Ôò¼ÆÊýVALVE_OPEN_TIME_LIMIT+290Ç¿ÐÐÍ˳ö¡£Èç¹û¿ª·§Í¼ÖÐÔÙÀ´Ò»´Î¿ª·§£¬ { ii_index++; IWDT_Clr(); delay_ms(1000); if(ii_index>Time_out_valve) //Ŀǰ×î´ó¿Ú¾¶×¿ªÊ¼Ê±¼äΪ600Ãë×óÓÒ { OpenValveFLAG = 0; break; } } if(Valve_control_parm.Valve_Type == SZV102_VALVE) { Motor_GPIO_Init_sleep_mode(); EX_Motor_op_cl_disable(); } else { } } else if((Bat_Alka_status==1)&&(HWID0_READ==1)) //¼îµç³ØÇ·Ñ¹£¬¿ª·§Ö±½ÓÎÞЧ£¬±ÜÃâ»»µç³ØÊÇ»¹±£Áô×Å¿ª·§Ö¸Áî { OpenValveFLAG = 0; } else if((Bat_Lith_status==1)&&(HWID0_READ==1)) //ï®µç³ØÃ»µçͬÉÏ { OpenValveFLAG = 0; } } void Valve_OpenTimesRecord(void) { ValveOpenTimes++; if(ValveOpenTimes>=65530) ValveOpenTimes=65530; FM25V02_data_write_uint16(VALVE_OPEN_TIMES_ADDR,ValveOpenTimes); } void Valve_CloseTimesRecord(void) { ValveCloseTimes++; if(ValveCloseTimes>=65530) ValveCloseTimes=65530; FM25V02_data_write_uint16(VALVE_CLOSE_TIMES_ADDR,ValveCloseTimes); } void Valve_Force_Open_Time_Judge(void) { if(Valve_control_parm.Valve_Type == SZV102_VALVE) { if(regDevSerialNum.EquipmentCaliberAndModel==0x01) //25 { Time_For_valve_open = 16 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x02) //32 { Time_For_valve_open = 27 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x03) //40 { Time_For_valve_open = 27 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x04) //50 { Time_For_valve_open = 28 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x05)//80 { Time_For_valve_open = 30; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x06)//100 { Time_For_valve_open = 40; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x07) //150 { Time_For_valve_open = 60; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x08) //200 { Time_For_valve_open = 70; } else { Time_For_valve_open = 70; } } else if(Valve_control_parm.Valve_Type == SZV103_VALVE) { if(regDevSerialNum.EquipmentCaliberAndModel==0x01) //25 { Time_For_valve_open = 105 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x02) //32 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x03) //40 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x04) //50 { Time_For_valve_open = 155 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x05)//80 { Time_For_valve_open = 285; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x06)//100 { Time_For_valve_open = 445; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x07) //150 { Time_For_valve_open = 490; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x08) //200 { Time_For_valve_open = 520; } else { Time_For_valve_open = 520; } } else { if(regDevSerialNum.EquipmentCaliberAndModel==0x01) //25 { Time_For_valve_open = 360 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x02) //32 { Time_For_valve_open = 410 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x03) //40 { Time_For_valve_open = 410 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x04) //50 { Time_For_valve_open = 420 ; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x05)//80 { Time_For_valve_open = 580; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x06)//100 { Time_For_valve_open = 720; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x07) //150 { Time_For_valve_open = 720; } else if(regDevSerialNum.EquipmentCaliberAndModel==0x08) //200 { Time_For_valve_open = 720; } else { Time_For_valve_open = 720; } } // Time_For_valve_open = Time_For_valve_open * 0.33; }