R2UWaterRS485UW500/app/UWater_valve_app.c

394 lines
10 KiB
C
Raw Permalink Normal View History

2024-06-03 15:49:39 +08:00
/*******************************************************************************
* @Copyright (c) :(C)2016, Qingdao ieslab Co., Ltd
* @FileName :GP22Gas_valve_app.c
* @Author :Kv-L
* @Version :V1.0
* @Date :2016<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>25<EFBFBD><EFBFBD> 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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
static u8 valve_rcv_order_backup = 0; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A3AC>¼<EFBFBD>ϴ<EFBFBD><CFB4>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static u8 valve_deal_state = VALVE_DEAL_S0; //<2F><><EFBFBD><EFBFBD>
static DateTime sys_rtcc_time_valve; //<2F><><EFBFBD>ڻ<EFBFBD>ȡϵͳ<CFB5><CDB3>ǰʱ<C7B0><CAB1>
static Fram_To_Float valve_tmp_float;
static u8 s_valapp_upload_state = 0;//<2F>ط<EFBFBD><D8B7>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
static u8 ValveCheckOrder(void)
{
u8 result_return = FALSE;
//EE<45><45>״̬
switch(Sys_data_object.P1.ies_valve_paras.valve_state)
{
case VALVE_STATE_OPEN:
{
/*<2A><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>:
(1)<EFBFBD>յ<EFBFBD><EFBFBD>չء<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD>Ȩ<EFBFBD>޹<EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
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:
{
/*Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>:
(1)<EFBFBD>յ<EFBFBD><EFBFBD>չء<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD>Ȩ<EFBFBD>޹<EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(2)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬(<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><EFBFBD>)
*/
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:
{
/*<2A><>ͨ<EFBFBD>ط<EFBFBD>״̬<D7B4><CCAC>:
(1)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD>Ȩ<EFBFBD>޹<EFBFBD>
(2)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
switch(valve_rcv_order_backup)
{
case VALVE_STATE_OPEN:
case VALVE_STATE_OPEN_EMERGENCY:
{
ValveStoreRcvState(VALVE_STATE_OPEN);//<2F><>ͨ<EFBFBD>ط<EFBFBD>״̬<D7B4>µ<EFBFBD><C2B5>κο<CEBA><CEBF><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>)
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:
{
/*Ӧ<><D3A6><EFBFBD>ط<EFBFBD>״̬<D7B4><CCAC>:
(1)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴӦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><EFBFBD>ʱ<EFBFBD>л<EFBFBD>ΪȨ<EFBFBD>޹ط<EFBFBD>
(2)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><EFBFBD>
(3)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>ط<EFBFBD>\Ȩ<EFBFBD>޹ط<EFBFBD>
*/
switch(valve_rcv_order_backup)
{
case VALVE_STATE_OPEN_EMERGENCY:
{
valve_tmp_float.gp22_u32 = Gp30CheckDataApp(2);
//Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE> 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:
{
/*Ȩ<>޹ط<DEB9>״̬<D7B4><CCAC>:
(1)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(2)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><EFBFBD>
(3)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>ط<EFBFBD>\Ӧ<EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
*/
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;
}
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
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)//<2F><>ˮ<EFBFBD><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>
{
ValveDealAppStart(VALVE_STATE_CLOSE_LOCK);//Ȩ<>޹ط<DEB9>
}
}
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) //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
valve_rcv_order_backup = valve_rcv_order; //<2F><><EFBFBD>ݿط<DDBF><D8B7><EFBFBD><EFBFBD><EFBFBD><EEA3AC>ֹ<EFBFBD>µĿط<C4BF>ָ<EFBFBD><EFBFBD><EFBFBD><E4B8B2>
valve_rcv_order = 0;
valve_deal_state = VALVE_DEAL_COMMON;
}
else if(RtccCheckMsgApp(RtccMsg_ValveActive)) //<2F><>ʱ<EFBFBD><EFBFBD><EEB6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ,ÿ<><C3BF>1<EFBFBD><31>23<32><33>0<EFBFBD><30>
{
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))
{
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>·
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)) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>
{
valve_deal_state = VALVE_DEAL_ACTIVE_HALF;
}
}
}
}
break;
case (VALVE_DEAL_COMMON): //<2F><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
{
if (ValveIfIdle())
{
if(ValveCheckOrder()) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>EE״̬<D7B4><CCAC><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
{
switch(valve_rcv_order_backup) //<2F><>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): //<2F><><EFBFBD>ڻ<DABB><EEB6AF><EFBFBD><EFBFBD>---<2D>
{
if (ValveIfIdle())
{
ValveStartTask(VALVE_TO_HALF_OPEN);
valve_deal_state = VALVE_DEAL_ACTIVE_OPEN;
}
}
break;
case (VALVE_DEAL_ACTIVE_OPEN): //<2F><><EFBFBD>ڻ<DABB><EEB6AF><EFBFBD><EFBFBD>---ȫ<><C8AB>
{
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 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>app <EFBFBD><EFBFBD>ѯ<EFBFBD>Ƿ<EFBFBD><EFBFBD>ڹط<EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>
* @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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ValveDealAppStart(u8 valve_order)
{
valve_rcv_order = valve_order;
}
//<2F>п<EFBFBD><D0BF><EFBFBD>
u8 ValveDealAppMachineIfIdle(void)
{
if(VALVE_DEAL_S0 == valve_deal_state)
{
return TASK_IDLE;
}
else
{
return TASK_BUSY;
}
}
/*******************************************************************************
* @fun_name: ValveGetStateApp
* @brief : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>app state<EFBFBD><EFBFBD>ѯ
* @param[in] : None
* @param[out] :None
* @retval :None
* @other :
******************************************************************************/
u8 ValveGetStateApp(void)
{
return ValveGetState();
}
#endif
#ifdef __cplusplus
}
#endif
/***************************************************************END OF FILE****/