Files
VX4-DiaphragmPump_WeiDaL/压力调节算法迁移.md
T
2026-08-25 10:37:57 +08:00

67 lines
3.7 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.
# 压力调节算法迁移方案
## 概要
将 `latest` 目录中更新后的 `InkJetPrinter` 的压力调节算法(包括改进的 PID/闭环逻辑、软启动、滑动平均与限速保护等)迁移到当前工作分支的 `InkJetPrinter.cpp`,保持行为一致并减少对现有模块的破坏。
## 迁移范围
- 源:`latest/InkJetPrinter.cpp` 中的以下实现段
- 新的/改进的 `pressureAdj()` 实现
- `PID_realize2()`(若存在)与 `PID_realize()` 的改进版本
- 相关静态/成员变量(滑动平均缓冲、状态标志、计数器等)
- 目标:当前工作区的 `InkJetPrinter.cpp` / `InkJetPrinter.h`
## 详细迁移步骤
1. 分析对比
- 在 `latest` 与当前文件中逐段对比 `pressureAdj()`、PID 函数及相关变量,记录差异点(参数边界、默认值、节拍周期、限幅等)。
2. 提取实现
- 从 `latest/InkJetPrinter.cpp` 中拷贝完整的 `pressureAdj()` 函数体与所依赖的辅助函数(例如 `PID_realize2()`、改进版 `PID_realize()`),并保留原始注释以便审查。
3. 更新头文件
- 比对 `InkJetPrinter.h`,若 `latest` 新实现引入了新的成员变量(如滑动平均缓冲 m_pressureBuf、m_bufIdx、m_bufValidCount、m_rampDone、m_adjSkip、m_lastAvgPressure 等),将这些成员同步到当前 `InkJetPrinter.h`(注意初始化与默认值)。
4. 备份与集成
- 在修改目标文件前,先创建 `InkJetPrinter.cpp.bak`(或使用 VCS 提交快照)。
- 将提取的实现合并入当前 `InkJetPrinter.cpp`:
- 保持现有函数签名不变
- 用条件编译或注释标注替换点,便于回滚
5. 修正依赖与宏
- 确认 `#ifdef`/`#define` 宏一致(例如 `__DAC_ADJ_FUNCTION__`、`SYS_LINUX` 等),修正配置差异或添加兼容分支。
6. 编译与静态检查
- 在本地构建项目(或运行 `make`/IDE 编译),修复因函数声明/类型或命名冲突导致的编译错误。
7. 功能验证
- 在测试环境下运行(或使用连接到硬件的板子)验证:
- 软启动流程(m_rampDone 行为)
- 压力超限的硬保护与限速
- 回收泵模式下限速与 maxValue 行为
- 滑动平均对短期噪声的耐受性
- 记录测试数据(压力曲线、gearPumpValue 变化)以便对照。
8. 记录与回滚
- 将变更写入变更日志并提交到分支。
- 若出现问题,使用备份或 VCS 回滚,并记录原因与修复建议。
## 关键代码位置(建议)
- 源文件(最新实现参考):`latest/InkJetPrinter.cpp` (检查 `pressureAdj`、PID 相关实现)
- 目标文件:`InkJetPrinter.cpp`、`InkJetPrinter.h`
## 验证要点
- 功能:压力能稳定在目标值附近(±0.5 至 ±5,基于阈值)
- 稳定性:避免震荡与超调(观察步长、delta 限幅 maxDelta)
- 安全:在速度报警或 gearPumpRunStopFlag 时,必须能把 `gearPumpValue` 置 0
- 性能:软启动和闭环节拍(800ms / 200ms)符合预期
## 风险与缓解
- 风险:新版算法可能依赖 `sysPara` 中的字段初始化或外部状态变化导致行为差异。
- 缓解:逐步合并并在每步运行单元测试或人工观测点(打印日志)
- 风险:硬件差异导致限速参数不合适
- 缓解:在 `InkJetPrinter.h` 中保留可调参数并提供运行时调整入口
## 预估时间
- 分析对比:1–2 小时
- 代码合并与头文件更新:1–3 小时
- 编译修复:0.5–2 小时(视错误数量)
- 测试与验证:2–4 小时(含硬件运行)
---
如需,我可以:
- 立即开始第 1 步(分析差异并生成差异清单);
- 或直接把 `latest` 中的 `pressureAdj()` 与相关函数合并到当前 `InkJetPrinter.cpp`(我会在修改前备份)。