提交原始齿轮泵代码

This commit is contained in:
kite_lucs
2026-08-26 16:13:59 +08:00
commit afc8fcf2a4
1688 changed files with 316635 additions and 0 deletions
+130
View File
@@ -0,0 +1,130 @@
# 喷嘴逆清洗(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()`)
1. 弹出对话框,提示“自动清洗时间约为一分钟,然后自动停止”,并显示“开始清洗 / 取消 / 停止清洗”选项。
2. 若用户选择“开始清洗”执行以下动作:
- 保存当前 `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 秒以便进入下一个阶段)。
3. 若用户选择“停止清洗”(对话框中为取消清洗按钮),会执行:
- `enCleanUpAppendFlag = 3;`(直接跳转到完成/结束阶段处理)
- 调用 `timerHandler2()` 立刻处理结束逻辑并返回。
## 清洗的执行阶段(由 `timer2` 驱动,见 `timerHandler2()`)
流程按 `enCleanUpAppendFlag` 值推进:
- 当 `enCleanUpAppendFlag == 1`(准备完成):
- 停止 `timer2`。
- 将状态置为 `2`(准备开启回收槽并监测位置)。
- 根据回收槽当前位置 `sysPara->status.currReclaimTankPos` 决定动作:
- 若位置 < 45:调用 `controlReclaimTankOpen(1);`(开始打开回收槽,参数 1 表示动作/使能)。
- 若位置 > 55:调用 `controlReclaimTankClose(1);`(开始关闭回收槽)。
- 启动 `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(...)` 报告当前步骤进度。
## 时序概览(近似)
1. 用户点击“开始清洗” -> 进入手动(isPumpValveControledByHand = true),立即设置各泵阀为清洗准备状态,`enCleanUpAppendFlag=1`。
2. 等待 ~2s(`timer2`)-> 切换到 `enCleanUpAppendFlag=2` 并根据位置 `controlReclaimTankOpen/Close(1)` -> 等待 ~5.5s。
3. `enCleanUpAppendFlag=2` 到位后 -> `enCleanUpAppendFlag=3`,停止回收槽驱动(`controlReclaimTankOpen(0)`),调用 `onCleanUPNow()`。
4. 真正清洗阶段:打开循环阀/粘度泵/回收泵(齿轮泵情形会略有不同),计时 ~60s(`timer2`)。
5. 清洗结束 -> 关闭循环阀/粘度泵,关闭回收槽(`controlReclaimTankClose(1)`),等待 ~8.3s。
6. 最终恢复:复位手动控制标志,停止 `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` 层对应函数的实现说明。
+54
View File
@@ -0,0 +1,54 @@
**翻译覆盖审计报告**
概要:
- 目标:找出项目中应使用 `tr()`(或 `QObject::tr()`)进行国际化处理但未被包装的用户可见字符串。
- 说明:本报告基于静态搜索常见 UI 文本位置(`setWindowTitle`, `setText`, `QPushButton`, `QLabel`, `QMessageBox` 等)生成。由于静态分析有一定误报/漏报可能,后续建议人工逐条确认。
重要发现(优先级按文件列出,包含示例行范围):
- `UpdateFPGA.cpp` — 多处未使用 `tr()`:界面标题、按钮、日志标签以及所有 `QMessageBox` 文本均为硬编码字符串,应国际化。
- 示例(构造/显示文本):[UpdateFPGA.cpp](UpdateFPGA.cpp#L44-L89)
- 示例(消息框与对话):[UpdateFPGA.cpp](UpdateFPGA.cpp#L280-L396)
- `InputMethod.cpp` — 大量键盘按键与语言名称直接用字符串设置(如 `setText("A")`, `setText("中文")`, 不使用 `tr()`)。这些是用户可见的文本,建议按语言情形处理或使用翻译条目。
- 代表区间(字母/符号键):[InputMethod.cpp](InputMethod.cpp#L929-L987)
- 代表区间(中文字/候选键):[InputMethod.cpp](InputMethod.cpp#L1389-L1456)
- `zkWidget.cpp` — 某些 `QMessageBox::warning`/`information` 使用了未翻译的字面串。
- 示例: [zkWidget.cpp](zkWidget.cpp#L269-L299)
- `dlginputaddr.cpp` — 若干 `QMessageBox::warning` 使用了硬编码中文字符串(未用 `tr()`)。
- 示例: [dlginputaddr.cpp](dlginputaddr.cpp#L111-L152)
- `main.cpp` — 载入翻译文件失败时使用了未包装的字符串。
- 示例: [main.cpp](main.cpp#L169)
- `LicenseManger/LicenseManger.cpp`, `dlgQrCode.cpp`, `TextEditOption*.cpp`, `PicWidget.cpp`, `DevOp.cpp`, `PrintSetting.cpp` 等文件中存在混合状况:多数 `QMessageBox` 已用 `tr()`,但也能查到若干未用 `tr()` 的调用(例如使用字面串作为参数或 QString 拼接中未对字面串进行 tr)。请重点人工核查这些文件的注释/被注释代码与少量硬编码文本。
扫描方式与样例线索(已检索的典型模式):
- `setWindowTitle("...")`、`m_Label->setText("...")`、`new QPushButton("...")`、`QMessageBox::information(..., "...")` 等调用中直接使用字符串文字。
- 以上模式在静态搜索中返回了大量匹配,报告中仅列出高优先级或代表性位置,完整匹配可由检索日志复现。
建议与后续步骤:
- 将所有用户可见文本统一包装为 `tr("...")`。在非 QObject 派生的静态/全局上下文使用 `QObject::tr("...")`。
- 对键盘/字符常量(例如单字符键标记 'A','B' 或符号)评估是否需要翻译:若这些是键盘标签或不可本地化字符(字母/符号),可以保留不翻译;若是语言名或提示性文本(例如 "English", "Arabic", "中文"),则应 `tr()`。
- 优先级建议:先修 `UpdateFPGA.cpp`(类内几乎所有字符串均未翻译),然后按照文件影响范围(Main UI、设置对话、输入法)逐个处理。
- 实施时建议:
- 使用搜索替换脚本辅助(例如在 IDE 中搜索 `setWindowTitle("` 并逐一人工确认替换为 `setWindowTitle(tr("..."))`),避免误改程序逻辑字符串。
- 对已翻译的字符串生成并更新 `.ts` 文件(`lupdate` / `linguist` / `lrelease` 流程)。
附:需要重点人工复核的文件清单(按发现频率/重要性排序):
- UpdateFPGA.cpp — 完整类几乎未使用 `tr()`(必修)
- InputMethod.cpp — 键盘/候选字符(按需复核)
- zkWidget.cpp — 部分未翻译警告文本
- dlginputaddr.cpp — 文件打开/错误提示未使用 `tr()`
- main.cpp — 翻译文件加载错误提示未用 `tr()`
- LicenseManger/LicenseManger.cpp — 部分 warn/err 未 tr
- dlgQrCode.cpp / TextEditOption.cpp / TextEditOption_backup.cpp — 存在未 tr 的提示与对话
- PicWidget.cpp / DevOp.cpp / PrintSetting.cpp — 若干未 tr 的 QMessageBox 文本
如果你需要,我可以:
- 生成一份更详尽的逐行未包装字符串清单(包含每个匹配的具体行文本),或
- 在创建分支后逐文件替换并提交 PR(我会先在单独分支修改并保留 review 注释)。
—— 翻译审计自动生成