394 lines
10 KiB
C
394 lines
10 KiB
C
/*******************************************************************************
|
|
* @Copyright (c) :(C)2016, Qingdao ieslab Co., Ltd
|
|
* @FileName :GP22Gas_valve_app.c
|
|
* @Author :Kv-L
|
|
* @Version :V1.0
|
|
* @Date :2016年5月25日 13:54:51
|
|
* @Description :the function of the entity of GP22Gas_valve_app.c
|
|
*******************************************************************************/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "UWater_valve_app.h"
|
|
#include "UWater_valve_driver.h"
|
|
#include "UWater_rtcc_app.h"
|
|
#include "UWater_gp22_app.h"
|
|
#include "SOE.h"
|
|
#if defined(VALVE)
|
|
static u8 valve_rcv_order = 0; //启动阀控的命令
|
|
static u8 valve_rcv_order_backup = 0; //防止旧命令被冲,记录上次收到的命令
|
|
static u8 valve_deal_state = VALVE_DEAL_S0; //阀门
|
|
static DateTime sys_rtcc_time_valve; //用于获取系统当前时间
|
|
static Fram_To_Float valve_tmp_float;
|
|
static u8 s_valapp_upload_state = 0;//关阀上报控制
|
|
|
|
static u8 ValveCheckOrder(void)
|
|
{
|
|
u8 result_return = FALSE;
|
|
//EE中状态
|
|
switch(Sys_data_object.P1.ies_valve_paras.valve_state)
|
|
{
|
|
case VALVE_STATE_OPEN:
|
|
{
|
|
/*普通开阀状态下:
|
|
(1)收到普关、应急关、权限关,保存阀门状态并关阀动作
|
|
*/
|
|
switch(valve_rcv_order_backup)
|
|
{
|
|
case VALVE_STATE_OPEN:
|
|
case VALVE_STATE_OPEN_EMERGENCY:
|
|
{
|
|
ValveStartTask(VALVE_TO_OPEN); //0208
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE:
|
|
case VALVE_STATE_CLOSE_EMERGENCY:
|
|
case VALVE_STATE_CLOSE_LOCK:
|
|
{
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
ValveStartTask(VALVE_TO_CLOSE);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case VALVE_STATE_OPEN_EMERGENCY:
|
|
{
|
|
/*应急开阀状态下:
|
|
(1)收到普关、应急关、权限关,保存阀门状态并关阀动作
|
|
(2)可以切换到普通开阀状态(普通开阀状态不限制用水量)
|
|
*/
|
|
switch(valve_rcv_order_backup)
|
|
{
|
|
case VALVE_STATE_OPEN_EMERGENCY:
|
|
{
|
|
ValveStartTask(VALVE_TO_OPEN); //0208
|
|
}
|
|
break;
|
|
case VALVE_STATE_OPEN:
|
|
{
|
|
ValveStartTask(VALVE_TO_OPEN); //0208
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
|
|
case VALVE_STATE_CLOSE:
|
|
case VALVE_STATE_CLOSE_EMERGENCY:
|
|
case VALVE_STATE_CLOSE_LOCK:
|
|
{
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
ValveStartTask(VALVE_TO_CLOSE);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case VALVE_STATE_CLOSE:
|
|
{
|
|
/*普通关阀状态下:
|
|
(1)可以切换到应急关、权限关
|
|
(2)可以普通开阀、应急开阀
|
|
*/
|
|
switch(valve_rcv_order_backup)
|
|
{
|
|
case VALVE_STATE_OPEN:
|
|
case VALVE_STATE_OPEN_EMERGENCY:
|
|
{
|
|
ValveStoreRcvState(VALVE_STATE_OPEN);//普通关阀状态下的任何开阀,都设为普通开阀(不限制用水量)
|
|
ValveStartTask(VALVE_TO_OPEN);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE:
|
|
{
|
|
ValveStartTask(VALVE_TO_CLOSE); //0208
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE_EMERGENCY:
|
|
case VALVE_STATE_CLOSE_LOCK:
|
|
{
|
|
ValveStartTask(VALVE_TO_CLOSE); //0208
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE_EMERGENCY:
|
|
{
|
|
/*应急关阀状态下:
|
|
(1)可以切换到应急开,记录应急开阀是用水量,等达到应急用水量时切换为权限关阀
|
|
(2)可以普通开阀,普通开阀状态不限制用水量
|
|
(3)可以切换到普通关阀\权限关阀
|
|
*/
|
|
switch(valve_rcv_order_backup)
|
|
{
|
|
case VALVE_STATE_OPEN_EMERGENCY:
|
|
{
|
|
valve_tmp_float.gp22_u32 = Gp30CheckDataApp(2);
|
|
//应到达用水量 L
|
|
Sys_data_object.P1.ies_pulse_remain.datas = (u32)(valve_tmp_float.gp22_float) + Sys_data_object.P1.ies_pulse_emergency.datas*100;
|
|
FrameSetMsgApp(MsgValve_EmergencyFlowStore);
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
ValveStartTask(VALVE_TO_OPEN);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
case VALVE_STATE_OPEN:
|
|
{
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
ValveStartTask(VALVE_TO_OPEN);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE:
|
|
case VALVE_STATE_CLOSE_LOCK:
|
|
{
|
|
ValveStartTask(VALVE_TO_CLOSE); //0208
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE_EMERGENCY:
|
|
{
|
|
ValveStartTask(VALVE_TO_CLOSE); //0208
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case VALVE_STATE_CLOSE_LOCK:
|
|
{
|
|
/*权限关阀状态下:
|
|
(1)可以普通开阀
|
|
(2)可以普通开阀,普通开阀状态不限制用水量
|
|
(3)可以切换到普通关阀\应急关阀
|
|
*/
|
|
switch(valve_rcv_order_backup)
|
|
{
|
|
case VALVE_STATE_OPEN:
|
|
{
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
ValveStartTask(VALVE_TO_OPEN);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
|
|
case VALVE_STATE_CLOSE:
|
|
case VALVE_STATE_CLOSE_EMERGENCY:
|
|
{
|
|
ValveStartTask(VALVE_TO_CLOSE); //0208
|
|
ValveStoreRcvState(valve_rcv_order_backup);
|
|
result_return = TRUE;
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE_LOCK:
|
|
{
|
|
ValveStartTask(VALVE_TO_CLOSE); //0208
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
}
|
|
break;
|
|
}
|
|
return result_return;
|
|
}
|
|
|
|
//阀控模块的系统处理
|
|
void ValveDealAppMachine(void)
|
|
{
|
|
if(VALVE_STATE_OPEN_EMERGENCY == Sys_data_object.P1.ies_valve_paras.valve_state)
|
|
{
|
|
valve_tmp_float.gp22_u32 = Gp30CheckDataApp(2);
|
|
if(valve_tmp_float.gp22_float > Sys_data_object.P1.ies_pulse_remain.datas)//用水超过设定紧急用水量
|
|
{
|
|
ValveDealAppStart(VALVE_STATE_CLOSE_LOCK);//权限关阀
|
|
}
|
|
}
|
|
else if(FrameCheckMsgApp(Msg_ValveOpenEmergency))
|
|
{
|
|
FrameClearMsgApp(Msg_ValveOpenEmergency);
|
|
if((VALVE_STATE_CLOSE_EMERGENCY == Sys_data_object.P1.ies_valve_paras.valve_state)||(VALVE_STATE_CLOSE == Sys_data_object.P1.ies_valve_paras.valve_state))
|
|
{
|
|
ValveDealAppStart(VALVE_STATE_OPEN_EMERGENCY);
|
|
}
|
|
}
|
|
switch(valve_deal_state)
|
|
{
|
|
case (VALVE_DEAL_S0):
|
|
{
|
|
if(valve_rcv_order) //控阀命令非零
|
|
{
|
|
valve_rcv_order_backup = valve_rcv_order; //备份控阀命令,防止新的控阀指令将其覆盖
|
|
valve_rcv_order = 0;
|
|
valve_deal_state = VALVE_DEAL_COMMON;
|
|
}
|
|
else if(RtccCheckMsgApp(RtccMsg_ValveActive)) //定时活动阀门消息,每月1号23点0分
|
|
{
|
|
RtccClearMsgApp(RtccMsg_ValveActive);
|
|
RtccGetDateTime(&sys_rtcc_time_valve);
|
|
if((0x01 == sys_rtcc_time_valve.s.day) &&
|
|
(0x23 == sys_rtcc_time_valve.s.hour) &&
|
|
(0x00 == sys_rtcc_time_valve.s.minute) &&
|
|
(VALVE_AUTO_CHECK_OPEN == Sys_data_object.P1.ies_valve_up_times.valve_auto_check))
|
|
{
|
|
//当前阀门状态为开启,检测硬件电路
|
|
if((VALVE_STATE_OPEN == Sys_data_object.P1.ies_valve_paras.valve_state) ||
|
|
(VALVE_STATE_OPEN_EMERGENCY == Sys_data_object.P1.ies_valve_paras.valve_state)) //当前阀门状态为开启
|
|
{
|
|
valve_deal_state = VALVE_DEAL_ACTIVE_HALF;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case (VALVE_DEAL_COMMON): //其他控阀
|
|
{
|
|
if (ValveIfIdle())
|
|
{
|
|
if(ValveCheckOrder()) //判断是否需要更新EE状态及控阀操作
|
|
{
|
|
switch(valve_rcv_order_backup) //存SOE
|
|
{
|
|
case VALVE_STATE_OPEN:
|
|
{
|
|
SaveNewSoe(SOE_VALVE_OPEN,SOE_REMARK_NOR);
|
|
}
|
|
break;
|
|
case VALVE_STATE_OPEN_EMERGENCY:
|
|
{
|
|
SaveNewSoe(SOE_VALVE_OPEN_EMERGENCY,SOE_REMARK_NOR);
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE:
|
|
{
|
|
SaveNewSoe(SOE_VALVE_CLOSE,SOE_REMARK_NOR);
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE_EMERGENCY:
|
|
{
|
|
SaveNewSoe(SOE_VALVE_CLOSE_EMERGENCY,SOE_REMARK_NOR);
|
|
}
|
|
break;
|
|
case VALVE_STATE_CLOSE_LOCK:
|
|
{
|
|
SaveNewSoe(SOE_VALVE_CLOSE_LOCK,SOE_REMARK_NOR);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
valve_deal_state = VALVE_DEAL_S0;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case (VALVE_DEAL_ACTIVE_HALF): //定期活动阀门---半开
|
|
{
|
|
if (ValveIfIdle())
|
|
{
|
|
ValveStartTask(VALVE_TO_HALF_OPEN);
|
|
valve_deal_state = VALVE_DEAL_ACTIVE_OPEN;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case (VALVE_DEAL_ACTIVE_OPEN): //定期活动阀门---全开
|
|
{
|
|
if (ValveIfIdle())
|
|
{
|
|
ValveStartTask(VALVE_TO_OPEN);
|
|
valve_deal_state = VALVE_DEAL_S0;
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
valve_rcv_order = 0;
|
|
valve_rcv_order_backup = 0;
|
|
valve_deal_state = VALVE_DEAL_S0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
/*******************************************************************************
|
|
* @fun_name: ValveGetUploadStateApp
|
|
* @brief : 阀控app 查询是否在关阀上报期间内
|
|
* @param[in] : None
|
|
* @param[out] :None
|
|
* @retval :None
|
|
* @other :
|
|
******************************************************************************/
|
|
u8 ValveGetUploadStateApp(void)
|
|
{
|
|
if(s_valapp_upload_state == 1)
|
|
{
|
|
return VALVE_CLOSE_UPLOAD_TIME;
|
|
}
|
|
return NO_VALVE_CLOSE_UPLOAD_TIME;
|
|
}
|
|
|
|
//启动阀控
|
|
void ValveDealAppStart(u8 valve_order)
|
|
{
|
|
valve_rcv_order = valve_order;
|
|
}
|
|
|
|
//判空闲
|
|
u8 ValveDealAppMachineIfIdle(void)
|
|
{
|
|
if(VALVE_DEAL_S0 == valve_deal_state)
|
|
{
|
|
return TASK_IDLE;
|
|
}
|
|
else
|
|
{
|
|
return TASK_BUSY;
|
|
}
|
|
}
|
|
/*******************************************************************************
|
|
* @fun_name: ValveGetStateApp
|
|
* @brief : 阀控app state查询
|
|
* @param[in] : None
|
|
* @param[out] :None
|
|
* @retval :None
|
|
* @other :
|
|
******************************************************************************/
|
|
u8 ValveGetStateApp(void)
|
|
{
|
|
return ValveGetState();
|
|
}
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/***************************************************************END OF FILE****/
|
|
|