Files
CCU621M/app/flowctrl/flowctrl模块说明.md
T

87 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# flowctrl 模块说明
> 路径:`app/flowctrl/`
> 返回主说明:[README](../../README.md)
## 1. 模块职责
- 实现充电流程控制主逻辑与状态机;
- 提供流程对外数据接口与控制接口;
- 处理流程关键保护与异常停机条件。
## 2. 关键文件
- `flowctrl_task.c/h`
- `flow_interface.c/h`
- `insulation_ctrl.c/h`
- `mdu_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](../../README.md)