9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
3.4 KiB
3.4 KiB
flowctrl 模块说明
路径:
app/flowctrl/
返回主说明:README
1. 模块职责
- 实现充电流程控制主逻辑与状态机;
- 提供流程对外数据接口与控制接口;
- 处理流程关键保护与异常停机条件。
2. 关键文件
flowctrl_task.c/hflow_interface.c/hinsulation_ctrl.c/hmdu_swh_ctrl.c/h
3. 功能说明
- 管理充电开始、运行、停止、故障等流程状态切换;
- 对接故障模块、BMS、计量模块及外部控制命令;
- 对外提供流程运行数据和控制入口,供 UI/TCP 等模块调用。
4. 调度与对外接口
该模块由 FreeRTOS 任务 FlowCtrl 周期运行(单位:ms),周期来自 app/app_init/app_init.c:
FlowCtrl:20ms(任务入口:v_flowctrl_task(void *arg))
对外接口(来自 flowctrl_task.h):
void v_flowctrl_task_init(void):初始化流程状态机/内部缓存void v_flowctrl_task(void *arg):流程控制任务入口U8_T u8_flowctrl_get_gun_num(void):返回枪数量(供上层界面/通信使用)
5. 维护建议
- 流程状态跳转新增分支时需同步检查故障与恢复路径;
- 对外接口字段建议统一经
flow_interface暴露,减少模块耦合。
6. 绝缘检查步骤(详细)
绝缘检查主流程由 flowctrl_task.c 状态机调度,核心计算在 insulation_ctrl.c:
-
状态入口:
E_FLOW_INSUL_BEFORE(v_flow_ctrl_insul_before)- 条件:模块进入工作态,且绝缘电压到位(或欧标 15s 跳过电压到位检查);
- 动作:切到
E_FLOW_INSUL_RUNING,调用v_flow_gun_insulation_data_ctrl(gun,0)开始绝缘检测资源控制; - 典型日志:
INS V ok...或15s skip V chk...。
-
检测执行:
E_FLOW_INSUL_RUNING(v_flow_ctrl_insul_runing)- 调用:
s8_flow_gun_insulation()->s8_insulation_action()->v_insulation_Calculate(); - 返回:
-1检测中,0失败,1正常,2告警; - 完成后记录
u32_insul_Rx/Ry与u8_insul_ret,并切到E_FLOW_INSUL_OK; - 典型日志:
INS res=%d(0F,1OK,2WARN), R+=..., R-=...。
- 调用:
-
结果收尾:
E_FLOW_INSUL_OK(v_flow_ctrl_insul_ok)- 先等待模块停机/母线下降并执行泄放;
- 再根据
u8_insul_ret判定:0:失败,停机故障E_FAULT_13042(绝缘检测失败);2:告警,置E_FAULT_13043(绝缘告警)后允许继续;1:通过,进入后续预充/充电流程。
insulation_ctrl.c 内部两阶段计算要点:
-
阶段1(大地继电器闭合后):
- 采样
U+gnd与U-gnd; - 计算单侧绝缘电阻粗判,若小于阈值直接失败(结果码2);
- 阈值规则:
R_min = 100 * (U+gnd + U-gnd),R_max = 500 * (U+gnd + U-gnd)。
- 采样
-
阶段2(光耦继电器闭合后):
- 二次采样并按公式计算
R+gnd、R-gnd; - 判定规则:
- 任一
< R_min=> 失败(结果码3); - 任一
<= R_max=> 告警(结果码4); - 否则 => 正常(结果码5)。
- 任一
- 二次采样并按公式计算
调试建议(结合日志):
- 先看
Th: min/max是否与当时U+gnd + U-gnd一致; - 再看
R+gnd/R-gnd是否显著低于R_min(会触发13042); - 若经常走
15s skip V chk,优先排查模块电压到位与采样链路。
7. 关联文档
- 主索引:README