#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);
|
}
|
}
|
}
|