代码暂存 添加特定条件触发开关阀后数据通过蓝牙上报功能
This commit is contained in:
parent
de383dc573
commit
2bd3e50c94
|
@ -69,6 +69,8 @@ typedef enum
|
|||
kValveCmdDelayClose, // 延时关阀
|
||||
kValveCmdManualClose, // 手动关阀
|
||||
kValveCmdTimeResp, // 设置定时关阀时间响应
|
||||
kValveCmdLowBatClose, // 低电量关阀
|
||||
kValveCmdManualOpen, // 手动开阀
|
||||
} TeFrameCmd;
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
|
@ -143,6 +145,9 @@ void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd,
|
|||
|
||||
void BSP_VALVE_Generate_UploadData(TsRawFrameData *pRawData);
|
||||
|
||||
uint8_t BSP_VALVE_Close(TeFrameCmd close_reason);
|
||||
uint8_t BSP_VALVE_Open(TeFrameCmd open_reason);
|
||||
|
||||
static uint8_t BSP_VALVE_SetTimerClose(uint32_t minutes);
|
||||
static uint8_t BSP_VALVE_CancelTimerClose(void);
|
||||
static uint32_t BSP_VALVE_GetRemainingMinutes(void);
|
||||
|
|
|
@ -62,9 +62,6 @@ typedef struct
|
|||
// 微泄漏相关
|
||||
uint8_t micro_leak_count; // 微泄漏检测计数
|
||||
uint8_t micro_leak_flag; // 微泄漏标志
|
||||
|
||||
// 超温相关
|
||||
uint8_t over_temp_flag; // 超温标志
|
||||
|
||||
// 延时关阀相关
|
||||
uint8_t auto_close_enabled; // 延时关阀功能是否启用
|
||||
|
@ -964,24 +961,22 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
logError("超压关阀");
|
||||
logDebug("in_press = %d; over_press = %d", ValveRawData.in_press, ValveInfo.over_press);
|
||||
|
||||
VALVE_CLOSE();
|
||||
BSP_VALVE_Close(kValveCmdOverPressure); // 使用超压关阀原因
|
||||
fault_state = 1;
|
||||
// 超压关阀时停止延时关阀功能
|
||||
stopAutoCloseTimer();
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
}
|
||||
// 欠压检测
|
||||
// else if (ValveRawData.in_press <= ValveInfo.low_press)
|
||||
// {
|
||||
// VALVE_CLOSE();
|
||||
else if (ValveRawData.in_press <= ValveInfo.low_press)
|
||||
{
|
||||
BSP_VALVE_Close(kValveCmdUnderPressure); // 使用欠压关阀原因
|
||||
|
||||
// fault_state = 2;
|
||||
// // 欠压关阀时停止延时关阀功能
|
||||
// stopAutoCloseTimer();
|
||||
// tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
// logError("******************************");
|
||||
// logError("欠压关阀");
|
||||
// }
|
||||
fault_state = 2;
|
||||
// 欠压关阀时停止延时关阀功能
|
||||
stopAutoCloseTimer();
|
||||
logError("******************************");
|
||||
logError("欠压关阀");
|
||||
}
|
||||
#if 1
|
||||
// 1、过流自动关闭:
|
||||
// 进气端压力2kpa时,额定流量调到0.9
|
||||
|
@ -1009,11 +1004,10 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
else
|
||||
{
|
||||
keydown_time = 0;
|
||||
VALVE_CLOSE();
|
||||
BSP_VALVE_Close(kValveCmdOverCurrent); // 使用过流关阀原因
|
||||
logError("******************************");
|
||||
|
||||
fault_state = 3;
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
logDebug("Over current status !");
|
||||
}
|
||||
}
|
||||
|
@ -1038,8 +1032,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
{
|
||||
logDebug("[%d]: in_press = %d; out_press = %d; in_out_press_diff = %d", i, ValveRawData_buffer[i].in_press, ValveRawData_buffer[i].out_press, ValveRawData_buffer[i].in_out_press_diff);
|
||||
}
|
||||
VALVE_OPEN();
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
BSP_VALVE_Open(kValveCmdOpenWithStove); // 使用点火开阀原因
|
||||
}
|
||||
// else
|
||||
// {
|
||||
|
@ -1053,7 +1046,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
}
|
||||
|
||||
// 超温关阀功能:检测至少两个传感器的温度超过阈值
|
||||
if (!valve_safety.over_temp_flag && gValveData.switch_status == kOpened)
|
||||
if (gValveData.switch_status == kOpened)
|
||||
{
|
||||
// 计算超过阈值的传感器数量
|
||||
uint8_t over_temp_count = 0;
|
||||
|
@ -1067,8 +1060,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
if (over_temp_count >= 2)
|
||||
{
|
||||
logDebug("Over temperature detected! T1=%d, T2=%d, T3=%d", T[0], T[1], T[2]);
|
||||
valve_safety.over_temp_flag = 1;
|
||||
motor_flag = 2; // 触发关阀
|
||||
BSP_VALVE_Close(kValveCmdOverTemperature);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1079,33 +1071,21 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
{
|
||||
motor_flag = 0;
|
||||
LED_VALVE_OPEN;
|
||||
VALVE_OPEN();
|
||||
BSP_VALVE_Open(kValveCmdManualOpen); // 使用普通开阀命令
|
||||
keydown_flag = 1;
|
||||
IotFlag_t.Valve_Open_flag = 1;
|
||||
fault_state = 0;
|
||||
logDebug("motor/LED open!!!");
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
}
|
||||
else if (motor_flag == 2)
|
||||
{
|
||||
motor_flag = 0;
|
||||
LED_VALVE_CLOSE;
|
||||
VALVE_CLOSE();
|
||||
// fault_state = 4;
|
||||
// 微泄漏关阀后重置标志
|
||||
if (valve_safety.micro_leak_flag)
|
||||
{
|
||||
valve_safety.micro_leak_flag = 0;
|
||||
logDebug("Micro leak protection activated");
|
||||
}
|
||||
// 超温关阀后重置标志
|
||||
if (valve_safety.over_temp_flag)
|
||||
{
|
||||
valve_safety.over_temp_flag = 0;
|
||||
logDebug("Over temperature protection activated");
|
||||
}
|
||||
|
||||
// 直接使用普通关阀命令
|
||||
BSP_VALVE_Close(kValveCmdManualClose);
|
||||
// fault_state = 4;
|
||||
logDebug("motor/LED close!!!");
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
}
|
||||
else if (motor_flag == 3)
|
||||
{
|
||||
|
@ -1160,7 +1140,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
logError("6次检测均确认无流量,总耗时: %d ms", BSP_Get_Tick() - valve_safety.auto_close_start_time);
|
||||
|
||||
// 执行关阀动作
|
||||
motor_flag = 2; // 触发关阀
|
||||
BSP_VALVE_Close(kValveCmdDelayClose); // 使用延时关阀原因
|
||||
|
||||
// 停止延时关阀功能
|
||||
stopAutoCloseTimer();
|
||||
|
@ -1195,7 +1175,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
logError("延时关阀:超时保护,强制关闭阀门");
|
||||
|
||||
// 强制执行关阀动作
|
||||
motor_flag = 2; // 触发关阀
|
||||
BSP_VALVE_Close(kValveCmdDelayClose); // 使用延时关阀原因
|
||||
|
||||
// 停止延时关阀功能
|
||||
stopAutoCloseTimer();
|
||||
|
|
|
@ -31,6 +31,7 @@ TsValveData gValveData = {0};
|
|||
TsRawFrameData RelyData;
|
||||
TsTimerCloseState gTimerCloseState = {0};
|
||||
static TeFrameCmd gValveCloseReason = kCmdCloseVavle; // 默认为普通关阀命令
|
||||
static TeFrameCmd gValveOpenReason = kCmdOpenVavle; // 默认为普通开阀命令
|
||||
|
||||
tmosTaskID vavle_task_id = INVALID_TASK_ID;
|
||||
|
||||
|
@ -191,13 +192,12 @@ static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) // 处理TMOS消息函
|
|||
break;
|
||||
case kCmdCloseVavle: // 关阀命令
|
||||
logDebug("kCmdCloseVavle");
|
||||
gValveCloseReason = kCmdCloseVavle; // 确保使用普通关阀命令
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
BSP_VALVE_Close(kCmdCloseVavle); // 使用普通关阀命令
|
||||
break;
|
||||
|
||||
case kCmdOpenVavle: // 开阀命令
|
||||
logDebug("kCmdOpenVavle");
|
||||
tmos_set_event(vavle_task_id, VAVLE_OPEN_START_EVT);
|
||||
BSP_VALVE_Open(kCmdOpenVavle); // 使用普通开阀命令
|
||||
break;
|
||||
case kValveCmdTimer: // 设置定时关阀命令
|
||||
{
|
||||
|
@ -363,8 +363,15 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
|
|||
VALVE_STOP();
|
||||
LED_ALL_CLOSE;
|
||||
|
||||
// 更新阀门状态
|
||||
gValveData.switch_status = kOpened;
|
||||
|
||||
// 生成响应
|
||||
tmos_memset(&RelyData, 0, sizeof(RelyData));
|
||||
BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdOpenVavle, 1);
|
||||
BSP_VALVE_Generate_ValveResponse(&RelyData, gValveOpenReason, 1);
|
||||
|
||||
// 重置为默认值
|
||||
gValveOpenReason = kCmdOpenVavle;
|
||||
|
||||
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
BSP_RequestSleep();
|
||||
|
@ -385,8 +392,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
|
|||
logDebug("gValveData.switch_status %d",gValveData.switch_status);
|
||||
if(gValveData.switch_status != kClosed)
|
||||
{
|
||||
gValveCloseReason = kValveCmdUnderPressure; // 设置为欠压关阀
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
BSP_VALVE_Close(kValveCmdLowBatClose); // 低电量关阀命令
|
||||
}
|
||||
}
|
||||
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
|
||||
|
@ -436,11 +442,8 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
|
|||
gTimerCloseState.is_active = 0;
|
||||
gTimerCloseState.timer_minutes = 0;
|
||||
|
||||
// 设置关阀原因为定时关阀
|
||||
gValveCloseReason = kValveCmdTimer;
|
||||
|
||||
// 触发关阀动作
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
// 使用统一接口关阀
|
||||
BSP_VALVE_Close(kValveCmdTimer);
|
||||
|
||||
// 发送定时关阀完成通知
|
||||
uint8_t notification = 1; // 定时关阀完成
|
||||
|
@ -546,4 +549,46 @@ static uint32_t BSP_VALVE_GetRemainingMinutes(void)
|
|||
return (remaining_ms / 60000) + 1; // 向上取整到分钟
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 统一的关阀接口函数
|
||||
* @param close_reason 关阀原因,使用TeFrameCmd中定义的枚举值
|
||||
* @return 操作结果
|
||||
*/
|
||||
uint8_t BSP_VALVE_Close(TeFrameCmd close_reason)
|
||||
{
|
||||
// 如果阀门已经关闭,则不重复操作
|
||||
if(gValveData.switch_status == kClosed) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 设置关阀原因
|
||||
gValveCloseReason = close_reason;
|
||||
|
||||
// 触发关阀事件
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 统一的开阀接口函数
|
||||
* @param open_reason 开阀原因,使用TeFrameCmd中定义的枚举值
|
||||
* @return 操作结果
|
||||
*/
|
||||
uint8_t BSP_VALVE_Open(TeFrameCmd open_reason)
|
||||
{
|
||||
// 如果阀门已经打开,则不重复操作
|
||||
if(gValveData.switch_status == kOpened) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 记录开阀原因
|
||||
gValveOpenReason = open_reason;
|
||||
|
||||
// 触发开阀事件
|
||||
tmos_set_event(vavle_task_id, VAVLE_OPEN_START_EVT);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue