# 压力调节算法迁移方案 ## 概要 将 `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`(我会在修改前备份)。