Initial commit: CCU621_M firmware project with BLE debug link support.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user