3.7 KiB
3.7 KiB
压力调节算法迁移方案
概要
将 latest 目录中更新后的 InkJetPrinter 的压力调节算法(包括改进的 PID/闭环逻辑、软启动、滑动平均与限速保护等)迁移到当前工作分支的 InkJetPrinter.cpp,保持行为一致并减少对现有模块的破坏。
迁移范围
- 源:
latest/InkJetPrinter.cpp中的以下实现段- 新的/改进的
pressureAdj()实现 PID_realize2()(若存在)与PID_realize()的改进版本- 相关静态/成员变量(滑动平均缓冲、状态标志、计数器等)
- 新的/改进的
- 目标:当前工作区的
InkJetPrinter.cpp/InkJetPrinter.h
详细迁移步骤
- 分析对比
- 在
latest与当前文件中逐段对比pressureAdj()、PID 函数及相关变量,记录差异点(参数边界、默认值、节拍周期、限幅等)。
- 在
- 提取实现
- 从
latest/InkJetPrinter.cpp中拷贝完整的pressureAdj()函数体与所依赖的辅助函数(例如PID_realize2()、改进版PID_realize()),并保留原始注释以便审查。
- 从
- 更新头文件
- 比对
InkJetPrinter.h,若latest新实现引入了新的成员变量(如滑动平均缓冲 m_pressureBuf、m_bufIdx、m_bufValidCount、m_rampDone、m_adjSkip、m_lastAvgPressure 等),将这些成员同步到当前InkJetPrinter.h(注意初始化与默认值)。
- 比对
- 备份与集成
- 在修改目标文件前,先创建
InkJetPrinter.cpp.bak(或使用 VCS 提交快照)。 - 将提取的实现合并入当前
InkJetPrinter.cpp:- 保持现有函数签名不变
- 用条件编译或注释标注替换点,便于回滚
- 在修改目标文件前,先创建
- 修正依赖与宏
- 确认
#ifdef/#define宏一致(例如__DAC_ADJ_FUNCTION__、SYS_LINUX等),修正配置差异或添加兼容分支。
- 确认
- 编译与静态检查
- 在本地构建项目(或运行
make/IDE 编译),修复因函数声明/类型或命名冲突导致的编译错误。
- 在本地构建项目(或运行
- 功能验证
- 在测试环境下运行(或使用连接到硬件的板子)验证:
- 软启动流程(m_rampDone 行为)
- 压力超限的硬保护与限速
- 回收泵模式下限速与 maxValue 行为
- 滑动平均对短期噪声的耐受性
- 记录测试数据(压力曲线、gearPumpValue 变化)以便对照。
- 在测试环境下运行(或使用连接到硬件的板子)验证:
- 记录与回滚
- 将变更写入变更日志并提交到分支。
- 若出现问题,使用备份或 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(我会在修改前备份)。