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