8.5 KiB
8.5 KiB
喷嘴逆清洗(Nozzle Reverse Cleaning)流程分析
本文档基于 SystemSetting::on_pushButtonCleanUP_pressed() 及相关函数(onCleanUPNow()、timerHandler2())的源码,梳理“喷嘴逆清洗”的完整流程,说明在各个阶段哪些泵/阀被打开或关闭、状态标志及定时器行为。
总体说明
- 入口:
on_pushButtonCleanUP_pressed()(由用户按下“清洗”按钮触发)。 - 流程依赖三个成员:
enCleanUpAppendFlag(状态机标志),timer2(阶段定时器),timerAuto(用于齿轮泵自动控制的定时器)。 - 清洗可由用户启动或停止(对话框确认)。
主要状态与定时器
enCleanUpAppendFlag含义(函数中使用的值):- 0:空闲
- 1:进入手动模式并开始准备(短时等待)
- 2:正在开启回收槽(等待位置到位)
- 3:真正开始清洗(清洗中)
- 4:清洗完成,开始关闭回收槽并恢复
- 5:停止清洗/强制收尾
- 6:特殊停止/恢复
timer2:用于阶段切换的定时器(不同阶段设置不同延时)。timerAuto:在齿轮泵(gearPump)情形下,用于短周期自动控制(间隔 100 ms)。
按下按钮后的流程(on_pushButtonCleanUP_pressed())
-
弹出对话框,提示“自动清洗时间约为一分钟,然后自动停止”,并显示“开始清洗 / 取消 / 停止清洗”选项。
-
若用户选择“开始清洗”执行以下动作:
- 保存当前
isPumpValveControledByHand状态到r_PumpValveControledByHand并将sysPara->status.isPumpValveControledByHand设为true(进入手动控制状态)。 - 将一系列泵与阀置为“清洗安全/准备”状态:
controlCompressPump(false);(关闭压缩泵)controlCycleValve(true);(开启循环阀)controlInkValve(false);(关闭墨阀)controlInkValvePWM(false);(禁用墨阀 PWM)controlMainInkPump(false);(关闭主墨泵)controlMixValve(false);(关闭混合阀)controlReclaimPump(true, true);(打开回收泵,第二参数true表示带某种模式/快速起动——与实现相关)controlViscosityPump(false);(关闭粘度泵)controlReleaseValve(false);(关闭释放阀)
- 如果启用了
gearPumpEnable且flagOfReclaimPumEnable为真(齿轮泵版本):controlCycleValve(true);controlViscosityPump(true);controlReclaimPump(true, false);(打开回收泵,第二参数false)- 将
para.gearPumpValue = 0;并调用WriteMoterPump()更新电机/泵设置 controlInkValvePWM(false);
- 将
enCleanUpAppendFlag = 1(进入准备阶段)。 - 调用
mainInkCtrl()(主控恢复/切换函数,进入手动控制后的一些主流程)。 - 启动
timer2->start(2000);(等待约 2 秒以便进入下一个阶段)。
- 保存当前
-
若用户选择“停止清洗”(对话框中为取消清洗按钮),会执行:
enCleanUpAppendFlag = 3;(直接跳转到完成/结束阶段处理)- 调用
timerHandler2()立刻处理结束逻辑并返回。
清洗的执行阶段(由 timer2 驱动,见 timerHandler2())
流程按 enCleanUpAppendFlag 值推进:
-
当
enCleanUpAppendFlag == 1(准备完成):- 停止
timer2。 - 将状态置为
2(准备开启回收槽并监测位置)。 - 根据回收槽当前位置
sysPara->status.currReclaimTankPos决定动作:- 若位置 < 45:调用
controlReclaimTankOpen(1);(开始打开回收槽,参数 1 表示动作/使能)。 - 若位置 > 55:调用
controlReclaimTankClose(1);(开始关闭回收槽)。
- 若位置 < 45:调用
- 启动
timer2->start(5500);(等待 ~5.5 秒让回收槽动作完成)。
- 停止
-
当
enCleanUpAppendFlag == 2(等待回收槽到位):- 停止
timer2。 - 将
enCleanUpAppendFlag = 3(准备开始真正的清洗)。 - 调用
controlReclaimTankOpen(0);(停止回收槽驱动/微调参数 0,表示结束开启命令)。 - 触发
onCleanUPNow():进入清洗动作。
- 停止
-
onCleanUPNow()(真正开始清洗):- 发出状态文本
正在喷嘴逆清洗......。 - 若非齿轮泵特例(即
!(gearPumpEnable && flagOfReclaimPumEnable))则执行:controlCycleValve(true);(确保循环阀打开)controlViscosityPump(true);(打开粘度泵)controlReclaimPump(true, false);(以普通模式打开回收泵)
- 启动
timer2->start(60000);(清洗计时约 60 秒,之后进入下一阶段)。
- 发出状态文本
-
当
enCleanUpAppendFlag == 3(清洗结束进入收尾):- 将
enCleanUpAppendFlag = 4。 - 执行收尾动作:
controlCycleValve(false);(关闭循环阀)controlViscosityPump(false);(关闭粘度泵)controlReclaimTankClose(1);(开始关闭回收槽)- 设置
sysPara->status.reclaimCloseCnt = 10;(用于稍后延迟/重试逻辑)
- 停止
timer2,并timer2->start(8300);(等待约 8.3 秒以完成回收槽关闭)。 - 若为齿轮泵情形,启动
timerAuto->start(100);(开始短周期自动泵控制,用于慢速回退/调节)。
- 将
-
当
enCleanUpAppendFlag == 4(最终完成/恢复):- 发出
清洗完成状态;若currReclaimTankPos == 0则:- 将
enCleanUpAppendFlag = 0(恢复空闲) - 停止
timer2,并调用controlReclaimTankClose(0);(结束回收槽关闭动作)
- 将
- 将
sysPara->status.isPumpValveControledByHand = false;(恢复手动控制标志) - 若
timerAuto活动则停止它。 - 调用
mainInkCtrl()恢复主控模式(回到自动/正常喷印控制)。
- 发出
-
当
enCleanUpAppendFlag == 5(用户中止或异常收尾):- 停止
timer2,将enCleanUpAppendFlag = 0,调用controlReclaimTankClose(0);,恢复isPumpValveControledByHand=false,并调用mainInkCtrl()。
- 停止
-
当
enCleanUpAppendFlag == 6(另一种强制结束):- 停止
timer2,将enCleanUpAppendFlag = 0,并将isPumpValveControledByHand=false。通常不触发mainInkCtrl()但恢复手动标志。
- 停止
其他相关逻辑
- 在
updateSysStatusToUI()中也会检测当前位置:如果回收槽位置在 45~55 且enCleanUpAppendFlag==2,会直接把enCleanUpAppendFlag置为 3 并调用onCleanUPNow()(避免超时等待)。 - 清洗过程会通过
emit setRunStatus(...)与LogInfo::setRunStatusText(...)报告当前步骤进度。
时序概览(近似)
- 用户点击“开始清洗” -> 进入手动(isPumpValveControledByHand = true),立即设置各泵阀为清洗准备状态,
enCleanUpAppendFlag=1。 - 等待 ~2s(
timer2)-> 切换到enCleanUpAppendFlag=2并根据位置controlReclaimTankOpen/Close(1)-> 等待 ~5.5s。 enCleanUpAppendFlag=2到位后 ->enCleanUpAppendFlag=3,停止回收槽驱动(controlReclaimTankOpen(0)),调用onCleanUPNow()。- 真正清洗阶段:打开循环阀/粘度泵/回收泵(齿轮泵情形会略有不同),计时 ~60s(
timer2)。 - 清洗结束 -> 关闭循环阀/粘度泵,关闭回收槽(
controlReclaimTankClose(1)),等待 ~8.3s。 - 最终恢复:复位手动控制标志,停止
timerAuto(如有),调用mainInkCtrl()恢复正常打印控制。
关键函数调用清单(按先后出现)
controlCompressPump(false)controlCycleValve(true/false)controlInkValve(false)controlInkValvePWM(false)controlMainInkPump(false)controlMixValve(false)controlReclaimPump(true, true/false)controlViscosityPump(true/false)controlReleaseValve(false)controlReclaimTankOpen(1/0)/controlReclaimTankClose(1/0)mainInkCtrl()(用于进入/退出手动控制后的主控恢复)
注意事项与可能的改进点
controlReclaimPump(true, true)与controlReclaimPump(true, false)两种调用方式的差异需参考devOp实现说明(表示不同启动模式或参数)。- 若存在异常中断(
enCleanUpAppendFlag被置为 5/6),代码会尽量关闭回收槽并恢复isPumpValveControledByHand,但是否彻底恢复所有阀泵需在DevOp层确认。 - 时间参数(2s、5.5s、60s、8.3s)为源码中硬编码值,若需更稳健的流程,建议改用位置/传感器反馈替代固定延时以提高鲁棒性。
文档基于 SystemSetting.cpp 中相关函数分析整理,若需要我可以把上述时序画成流程图或补充 DevOp 层对应函数的实现说明。