Files
VX4-DiaphragmPump_WeiDaL/排气流程迁移方案.md
T
2026-08-27 10:28:31 +08:00

191 lines
7.0 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/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。
测试验证:在实际设备上测试正常排气、中断恢复、回收槽联动、喷墨行为。