191 lines
7.0 KiB
Markdown
191 lines
7.0 KiB
Markdown
排气流程迁移方案
|
||
一、背景概述
|
||
将 latest/mainwindow.cpp(新项目)中的排气流程逻辑迁移到当前项目 mainwindow.cpp(旧项目)的 airPushingProcess() 函数中。
|
||
|
||
项目 文件位置 行号
|
||
源(新项目) latest/mainwindow.cpp L2354-2387
|
||
目标(旧项目) mainwindow.cpp L2456-2530
|
||
二、新旧流程对比分析
|
||
2.1 计时器累加方式
|
||
维度 旧流程 新流程
|
||
累加方式 ++airPushingOnTime(计 tick 数) airPushingOnTime += 100(计毫秒)
|
||
1 tick 含义 100ms 100ms
|
||
迁移动作:将 ++ 改为 += 100,所有时间阈值需同步换算。
|
||
|
||
2.2 排气时长控制
|
||
维度 旧流程 新流程
|
||
时长控制 硬编码(~11s 总时长) 可配置参数 airPushDurationSec
|
||
参数定义 无 SysPara.h para 结构体中 int airPushDurationSec
|
||
默认值 无 4 秒
|
||
取值范围 无 1~30 秒
|
||
UI 配置 无 SystemSetting 中 spinBoxAirPushDuration
|
||
迁移动作:
|
||
|
||
在 SysPara.h 的 para 结构体中添加 int airPushDurationSec;
|
||
在 SysPara.cpp 初始化中设置默认值 4
|
||
在 SystemSetting 中添加排气时长 UI 控件
|
||
在 airPushingProcess() 中添加参数合法性校验
|
||
2.3 排气阶段划分
|
||
旧流程(3 阶段):
|
||
|
||
text
|
||
|
||
|
||
|
||
阶段1(0~4.9s,tick 0~49):
|
||
├── 循环阀:每 500ms 交替开关
|
||
└── 主墨泵:5 状态状态机循环
|
||
|
||
阶段2(5.0~10.9s,tick 50~109):
|
||
├── static delayCount 累加
|
||
├── m_2sFlag = true(前 40 tick),后 false
|
||
└── delayCount >= 60 时 → 结束排气
|
||
|
||
阶段3(tick >= 110):停止 timer,关粘度泵,开回收槽
|
||
新流程(2 阶段):
|
||
|
||
text
|
||
|
||
|
||
|
||
阶段1(0 ~ airPushDurationSec 秒):
|
||
└── 循环阀保持 ON,主墨泵保持 ON(触发入口设置)
|
||
|
||
阶段2-子阶段A(>= airPushDurationSec 秒):
|
||
├── 关粘度泵、关循环阀
|
||
└── 开回收泵
|
||
|
||
阶段2-子阶段B(>= airPushDurationSec + 0.5 秒):
|
||
├── 开回收槽 reclaimTanOpen()
|
||
└── 标记完成,停止 timer
|
||
迁移动作:用新流程的 2 阶段替换旧流程的 3 阶段。
|
||
|
||
2.4 循环阀控制
|
||
维度 旧流程 新流程
|
||
排气期间 每 500ms 交替开关 保持 ON
|
||
排气结束 不处理 显式关闭
|
||
迁移动作:删除 toggle 逻辑,排气时间到时显式关闭循环阀。
|
||
|
||
2.5 主墨泵控制(mainInkPumpCtrl 状态机)
|
||
旧流程:airPushingProcess() 内有 5 状态循环开关主墨泵
|
||
新流程:已移除,主墨泵由触发入口保持 ON
|
||
迁移动作:从 airPushingProcess() 中删除整个 mainInkPumpCtrl 状态机
|
||
⚠️ 旧项目 SystemManage.cpp 的 autoCleanTimerHandler() (L885-946) 也有一套 mainInkPumpCtrl 逻辑,用于 pushButtonPushAir 独立排气流程。如果该功能需保留,则不应删除那套逻辑。
|
||
|
||
2.6 m_2sFlag 标志
|
||
旧流程:在排气延迟阶段设置,影响 InkJetPrinter.cpp 喷墨行为
|
||
新流程:未使用
|
||
迁移动作:删除相关设置逻辑
|
||
⚠️ InkJetPrinter.cpp L1723、L2729 仍引用 m_2sFlag,需确认是否改用 airPushing 状态直接判断。
|
||
|
||
2.7 粘度泵控制
|
||
维度 旧流程 新流程
|
||
触发入口 controlViscosityPump(false) 关 controlViscosityPump(true) 开
|
||
迁移动作:将 on_pushButtonReclaimTanOpen_pressed() 中的粘度泵控制改为 true。
|
||
|
||
2.8 static 变量
|
||
变量 旧流程 新流程
|
||
static int delayCount 函数内 无
|
||
static int mainInkPumpCtrlStatus/Cnt 文件级,使用中 文件级,已废弃
|
||
三、数据结构变更
|
||
3.1 SysPara.h — 在 para 结构体中新增:
|
||
cpp
|
||
|
||
|
||
|
||
int airPushDurationSec; // 排气时间,单位 秒
|
||
3.2 SysPara.cpp — 初始化默认值:
|
||
cpp
|
||
|
||
|
||
|
||
para.airPushDurationSec = 4;
|
||
if(para.airPushDurationSec == 0)
|
||
para.airPushDurationSec = 4;
|
||
3.3 SystemSetting — 添加 UI 控件 spinBoxAirPushDuration(范围 1~30,默认 4)
|
||
四、迁移步骤
|
||
步骤 1:数据结构准备
|
||
序号 文件 修改内容
|
||
1.1 SysPara.h 添加 int airPushDurationSec;
|
||
1.2 SysPara.cpp 初始化默认值 4
|
||
1.3 SysPara.cpp 添加零值保护
|
||
1.4 SystemSetting 添加 UI 配置控件
|
||
步骤 2:修改触发入口
|
||
序号 文件 修改内容
|
||
2.1 mainwindow.cpp controlViscosityPump(false) → true
|
||
步骤 3:替换 airPushingProcess() 核心逻辑
|
||
序号 修改内容
|
||
3.1 ++airPushingOnTime → airPushingOnTime += 100
|
||
3.2 添加 airPushDurationSec 参数校验
|
||
3.3 删除循环阀 toggle 逻辑
|
||
3.4 删除 mainInkPumpCtrl 状态机
|
||
3.5 删除 delayCount 和 m_2sFlag 逻辑
|
||
3.6 替换为新的两阶段结束逻辑
|
||
步骤 4:清理
|
||
序号 修改内容
|
||
4.1 删除文件级 static int mainInkPumpCtrlStatus/Cnt(如不再需要)
|
||
4.2 删除 static int delayCount
|
||
五、新 airPushingProcess() 代码
|
||
cpp
|
||
|
||
|
||
|
||
void MainWindow::airPushingProcess()
|
||
{
|
||
if(sysPara){
|
||
if (sysPara->status.airPushing) {
|
||
setRunStatus(tr("正在排气 ..............."));
|
||
sysPara->status.airPushingOnTime += 100;
|
||
|
||
if(sysPara->para.airPushDurationSec <= 0 || sysPara->para.airPushDurationSec > 30) {
|
||
sysPara->para.airPushDurationSec = 4;
|
||
sysPara->saveParaToFile();
|
||
}
|
||
|
||
// 延迟 500ms 后才开回收槽,正式结束排气阶段
|
||
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 500){
|
||
reclaimTanOpen();
|
||
sysPara->status.airPushingDone = 1;
|
||
sysPara->status.airPushing = 0;
|
||
sysPara->status.airPushingOnTime = 0;
|
||
airPushTimer->stop();
|
||
return;
|
||
}
|
||
|
||
// 排气时间到:关粘度泵、关循环阀、开回收泵
|
||
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){
|
||
sysPara->devOp->controlViscosityPump(false);
|
||
sysPara->devOp->controlCycleValve(false);
|
||
|
||
if(!sysPara->devOp->isReclaimPumpOpen())
|
||
sysPara->devOp->controlReclaimPump(true, false);
|
||
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
六、风险评估
|
||
高风险
|
||
风险 说明 缓解措施
|
||
m_2sFlag 移除 InkJetPrinter.cpp L1723/L2729 依赖此标志 改用 airPushing 状态判断
|
||
SystemManage 双入口 SystemManage::pushButtonPushAir 是另一套排气流程 (90ms timer) 确认两套是否需要统一
|
||
中风险
|
||
风险 说明 缓解措施
|
||
mainInkPumpCtrl 移除 主墨泵从状态机→常开 确认新管路硬件是否支持
|
||
循环阀 toggle 移除 循环阀从交替→常开 确认新管路硬件是否支持
|
||
粘度泵策略变化 OFF→ON 确认硬件管路版本
|
||
低风险
|
||
风险 说明
|
||
计时单位 tick→ms 检查所有引用 airPushingOnTime 的地方
|
||
排气时长可配置 需同步更新 UI
|
||
七、建议
|
||
优先确认硬件管路版本:新旧流程粘度泵、循环阀、主墨泵的策略差异取决于硬件管路设计,需与硬件工程师确认。
|
||
|
||
统一排气入口:建议评估 SystemManage::on_pushButtonPushAir_pressed() 和 MainWindow::on_pushButtonReclaimTanOpen_pressed() 是否可以合并为一套流程。
|
||
|
||
分步迁移:先迁移核心 airPushingProcess(),再处理 SystemManage,最后统一 UI。
|
||
|
||
测试验证:在实际设备上测试正常排气、中断恢复、回收槽联动、喷墨行为。
|
||
|