diff --git a/.gitignore b/.gitignore index b56c700..bf0e3bc 100644 --- a/.gitignore +++ b/.gitignore @@ -228,4 +228,5 @@ clear_svn.bat buge_*.* dbg.* Public (2).h -*_bak \ No newline at end of file +*_bak +latest/ \ No newline at end of file diff --git a/DevOp.cpp b/DevOp.cpp index 9366e14..208369d 100644 --- a/DevOp.cpp +++ b/DevOp.cpp @@ -816,7 +816,10 @@ unsigned int DevOp::fpgaRdD(int addr,int len){ void DevOp::controlReleaseValve(bool openFlag){ - ioctl(iocontrl, openFlag, 7); + + if(!sysPara->para.gearPumpEnable) + ioctl(iocontrl, openFlag, 7); + releaseValveOpenFlag = openFlag; pumpValveCtrl(); } diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index f940598..69cf68c 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -1241,7 +1241,8 @@ void InkJetPrinter::timerHandler(void){ xxxm=1; #endif - + if(!sysPara->status.isPumpValveControledByHand) + ++sysPara->status.viscosityDelayCnt; sysPara->para.ReadFileErrorCnt=0; // 正常打开文件 // /opt/FriendlyARM/mini2440/rootfs_qtopia_qt4/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib @@ -1708,6 +1709,8 @@ void InkJetPrinter::timerHandler(void){ autoControlValvePump(); sysPara->devOp->mainInkCtrl(); sysPara->status.canRunAirPushing = true; + // 初始化粘度泵延迟计时,避免首次触发延迟过长 + sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100; if(sysPara->para.Reciclar) test_flag = 1; } @@ -1720,7 +1723,7 @@ void InkJetPrinter::timerHandler(void){ } else { // 开机自检完成的前提下 - if (!sysPara->status.airPushing || ui->tabMainWindow->m_2sFlag) { + if (!sysPara->status.airPushing) { autoControlValvePump(); } // 检测回收泵模式切换,切换时重置泄漏保护学习状态和软启动状态 @@ -2405,68 +2408,17 @@ void InkJetPrinter::autoControlValvePump(void) if(!sysPara->status.isPumpValveControledByHand){ /*---------------------------------供墨阀--------------------------------------------*/ - bool enableFlag = ((sysPara->status.statWarn & WARN_STATUS_INK_SWINT) - || (sysPara->status.lastRecycleWarn && sysPara->para.RecycleWarnAction) // 2017.8.15版本回收故障关供墨阀问题 - || ( sysPara->status.HVFaultCloseEn ) //高压故障关闭墨线 - )?false:true; //墨线开关 - // if(enableFlag != sysPara->devOp->isInkValveOpen()){ - // sysPara->devOp->controlInkValve(enableFlag); //供墨阀 - // if(enableFlag == false){ //关闭 - // sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; - // } - // } - - if(enableFlag != sysPara->devOp->isInkValveOpen()){ - if(enableFlag == false) { //关闭供墨阀的顺序 先开循环阀后关闭供墨阀 - //#ifdef __AIR_RELEASE_OLD__ // 旧管路关闭墨线后 开粘度泵和循环阀一段时间 - if (sysPara->status.cycleValveOpenCntAfterSWintOff == 0) { - sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; - } - if (sysPara->status.cycleValveOpenCntAfterSWintOff < 60) { //在准备关闭循环阀的时候关闭供墨阀 - sysPara->devOp->controlInkValve(enableFlag); //关供墨 - sysPara->devOp->controlInkValvePWM(enableFlag); //关供墨 - } - //#else - // // 新管路直接关闭墨线 - // sysPara->devOp->controlInkValve(enableFlag); //关供墨 - //#endif + if(sysPara->status.selfCheckDone) { + autoControlInkValve(); + autoControlCycleValve(); } - else { //开供墨阀 - if(!sysPara->devOp->isReclaimPumpOpen()) //开供墨阀之前要判断回收泵有没有开,没开就提前打开 - { - sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 - } - if(!ui->tabMainWindow->m_2sFlag) - { - sysPara->devOp->controlInkValve(enableFlag); - sysPara->devOp->controlInkValvePWM(enableFlag); - } - } - } - - /*----------------------------------循环阀-------------------------------------------*/ - if(!sysPara->status.selfCheckDone || (sysPara->status.needPowerOffTimerout && sysPara->para.gearPumpEnable)){ - // if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 //定时开机循环时隔膜泵不开关循环阀 - // sysPara->devOp->controlCycleValve(true); - // } - cycleValveRunForSelfCheck(); - if(sysPara->status.needPowerOffTimerout) - { - if(sysPara->devOp->isMixValveOpen()) { // - sysPara->devOp->controlMixValve(false); - } - } - } else { - if(sysPara->status.cycleValveOpenCntAfterSWintOff){ // 开循环阀 - if(!sysPara->devOp->isCycleValveOpen()){ - sysPara->devOp->controlCycleValve(true); - } - sysPara->status.cycleValveOpenCntAfterSWintOff --; - } - else if(sysPara->devOp->isCycleValveOpen()){ // 关循环阀 + // autoControlInkValveForSelfCheck(); + // autoControlCycleValveForSelfCheck(); + autoControlInkValve(); + + if(sysPara->devOp->isCycleValveOpen()) sysPara->devOp->controlCycleValve(false); - } } /*----------------------------------泄压阀-------------------------------------------*/ @@ -2614,7 +2566,7 @@ void InkJetPrinter::autoControlValvePump(void) if(sysPara->status.cycleValveOpenCntAfterSWintOff) { //关闭墨线的时候要提前开粘度泵 sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100; } - ++sysPara->status.viscosityDelayCnt; + int mixer_open_threshold = (105*sysPara->para.viscosity)/100; int viscosity_faulty_threshold =(113*sysPara->para.viscosity)/100; if(sysPara->status.viscosityDelayCnt >= sysPara->para.viscosityPumpInterval*100 && flag == 0) @@ -2753,6 +2705,73 @@ void InkJetPrinter::autoControlValvePump(void) } } } + +void InkJetPrinter::autoControlInkValve() +{ + bool enableFlag = ((sysPara->status.statWarn & WARN_STATUS_INK_SWINT) + || (sysPara->status.lastRecycleWarn && sysPara->para.RecycleWarnAction) // 2017.8.15版本回收故障关供墨阀问题 + || ( sysPara->status.HVFaultCloseEn ) //高压故障关闭墨线 + )?false:true; //墨线开关 + + if(enableFlag != sysPara->devOp->isInkValveOpen()){ + if(enableFlag == false) { //关闭供墨阀的顺序 先开循环阀后关闭供墨阀 + //#ifdef __AIR_RELEASE_OLD__ // 旧管路关闭墨线后 开粘度泵和循环阀一段时间 + if (sysPara->status.cycleValveOpenCntAfterSWintOff == 0) { + sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; + } + if (sysPara->status.cycleValveOpenCntAfterSWintOff < 60) { //在准备关闭循环阀的时候关闭供墨阀 + sysPara->devOp->controlInkValve(enableFlag); //关供墨 + sysPara->devOp->controlInkValvePWM(enableFlag); //关供墨 + } + } + else { //开供墨阀 + if(!sysPara->devOp->isReclaimPumpOpen()) //开供墨阀之前要判断回收泵有没有开,没开就提前打开 + { + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + } + if(!sysPara->status.airPushing) + { + sysPara->devOp->controlInkValve(enableFlag); + sysPara->devOp->controlInkValvePWM(enableFlag); + } + } + } +} + +void InkJetPrinter::autoControlCycleValve() +{ + if(!sysPara->status.selfCheckDone || (sysPara->status.needPowerOffTimerout && sysPara->para.gearPumpEnable)){ + cycleValveRunForSelfCheck(); + if(sysPara->status.needPowerOffTimerout) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); + } + } + } + else { + if(sysPara->status.cycleValveOpenCntAfterSWintOff){ // 开循环阀 + if(!sysPara->devOp->isCycleValveOpen()){ + sysPara->devOp->controlCycleValve(true); + } + sysPara->status.cycleValveOpenCntAfterSWintOff --; + } + else if(sysPara->devOp->isCycleValveOpen()){ // 关循环阀 + sysPara->devOp->controlCycleValve(false); + } + } +} + +void InkJetPrinter::autoControlCycleValveForSelfCheck() +{ + if(sysPara->status.selfCheckCnt < 100 * 10 && !sysPara->devOp->isCycleValveOpen()) { + sysPara->devOp->controlCycleValve(true); + } + else if(sysPara->status.selfCheckCnt >= 100 * 10 && sysPara->devOp->isCycleValveOpen()) { + sysPara->devOp->controlCycleValve(false); + } +} + //========================== // 放在10ms的定时器运行,但和粘度泵工作周期一致 void InkJetPrinter::checkMixValveOpen(){ diff --git a/InkJetPrinter.h b/InkJetPrinter.h index f50bd61..bb0c7a9 100644 --- a/InkJetPrinter.h +++ b/InkJetPrinter.h @@ -75,6 +75,12 @@ private: QTime t1; void autoControlHeater(); void autoControlValvePump(); + + void autoControlInkValve(); + + void autoControlCycleValve(); + void autoControlCycleValveForSelfCheck(); + void detectAndcontrolReclaimTank(); void refreshModbusStatus(void); void checkPressureControl(); @@ -92,7 +98,7 @@ Q_SIGNALS: void reclaimTankCloseDone(); void reclaimTankBlock(); //回收槽卡住 //void changeEditMode(int); - void SpeedOver(int mode); + void SpeedOver(int mode); void updateCnt1GroupDisp(bool); void updataPara2UI(); void sendPicScene(PicScene* pPicScene); diff --git a/SysPara.cpp b/SysPara.cpp index 3e06d5a..fd8d931 100644 --- a/SysPara.cpp +++ b/SysPara.cpp @@ -30,6 +30,11 @@ SysPara::SysPara(void): loadParaFromFile(); //qDebug("loadParaFromFile ok."); + if(para.airPushDurationSec <= 0 || para.airPushDurationSec > 30) { + para.airPushDurationSec = 4; + saveParaToFile(); + } + //para.HVFaultCloseEn= 0; if(para.ReadFileErrorCnt<10) para.ReadFileErrorCnt++; @@ -191,6 +196,7 @@ void SysPara::loadDefaultPara(){ para.reclaimPumpPWMWidth = 50;//回收泵力度 para.viscosityPumpInterval = 30;//粘度泵动作时间间隔 para.reclaimTankTime = 25;//回收槽电机当前开关时长(s) + para.airPushDurationSec = 4; // 默认排气时长 4 秒 para.septalPostion = 500;//隔膜位置 para.pressure = 520;//压力 para.viscosity = 1200;//粘度设定值 diff --git a/SysPara.h b/SysPara.h index 9e00ab5..8e1380c 100644 --- a/SysPara.h +++ b/SysPara.h @@ -573,7 +573,7 @@ typedef struct { int highVoltageLevel; int pressure; int viscosityPumpInterval; - int reclaimTankTime; + int reclaimTankTime; int temperature;//喷头温度 int viscosity; int viscosityAdjust; @@ -716,6 +716,7 @@ typedef struct { unsigned int inkWarnTime; unsigned int solventWarnDate; unsigned int solventWarnTime; + int airPushDurationSec; // 排气时间,单位 秒, 可配置 1~30 /* */ // 1108Bytes }sysPara_t; diff --git a/SystemSetting.cpp b/SystemSetting.cpp index 177e032..c4150f6 100644 --- a/SystemSetting.cpp +++ b/SystemSetting.cpp @@ -102,6 +102,8 @@ void SystemSetting::updateSysParaToUI(){ if(sysPara->para.EditMode>SCENE) sysPara->para.EditMode=TXTFILE; ui->comboBoxEditMode->setCurrentIndex(sysPara->para.EditMode); + + ui->spinBoxAirPushDuration->setValue(sysPara->para.airPushDurationSec); } } @@ -149,6 +151,9 @@ void SystemSetting::applyUIPara(){ sysPara->para.septalPostion = ui->spinBoxSeptalPostion->value(); quint16 diaphramOffset = 5*(ui->comboBoxDiaphramOffset->currentIndex()+1); sysPara->para.diaphramOffset = diaphramOffset; + + sysPara->para.airPushDurationSec = ui->spinBoxAirPushDuration->value(); + //sysPara->para.mixValveisNewVersion = ui->radioButtonMixValveNewVersion->isChecked(); if(sysPara->devOp->writeFpgaPrintPara() != -1){ QMessageBox::information(this,tr("提示"),tr("应用成功")); diff --git a/VerBVersion.h b/VerBVersion.h index 63b1d62..47a1de1 100644 --- a/VerBVersion.h +++ b/VerBVersion.h @@ -5,7 +5,7 @@ */ #define UP_PRINTER_MAJOR_VER 6 #define UP_PRINTER_MINOR_VER 8 -#define UP_PRINTER_RIVISION_VER 1 +#define UP_PRINTER_RIVISION_VER 2 #define UP_PRINTER_STAGE_VER "Std" #define SUB_VERSION "WeiDL2" //#define UP_PRINTER_STAGE_VER "Beta" diff --git a/latest/InkJetPrinter.cpp b/latest/InkJetPrinter.cpp index b882f7c..440ba15 100644 --- a/latest/InkJetPrinter.cpp +++ b/latest/InkJetPrinter.cpp @@ -1720,7 +1720,7 @@ void InkJetPrinter::timerHandler(void){ } else { // 开机自检完成的前提下 - if (!sysPara->status.airPushing || ui->tabMainWindow->m_2sFlag) { + if (!sysPara->status.airPushing) { autoControlValvePump(); } // 检测回收泵模式切换,切换时重置泄漏保护学习状态和软启动状态 @@ -2820,7 +2820,7 @@ void InkJetPrinter::autoControlInkValve() { sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 } - if(!ui->tabMainWindow->m_2sFlag) + if(!sysPara->status.airPushing) { sysPara->devOp->controlInkValve(enableFlag); sysPara->devOp->controlInkValvePWM(enableFlag); diff --git a/mainwindow.cpp b/mainwindow.cpp index b361d6b..ac21d9b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -225,7 +225,7 @@ MainWindow::MainWindow(QWidget *parent) : qDebug()<<"edit geometry x:"<stackedWidgetText->geometry().x(); qDebug()<<"edit geometry y:"<stackedWidgetText->mapToGlobal(ui->stackedWidgetText->pos()); #endif - m_2sFlag = false; + moveToThread(&ShowThead); //connect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem()),Qt::QueuedConnection); ShowThead.start(); @@ -292,18 +292,7 @@ void MainWindow::displayTime() preCleanUP=CleanUPEn; //static int delayCount2 = 0; - if(m_2sFlag) - { - //++delayCount2; - //if(delayCount2 %10 ==5) - { - - sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关 - sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); //控制供墨阀开关 - //setRunStatus(tr("我已关闭供墨阀")); - } - - } + if(sysPara->status.boardTemp >= sysPara->para.FanTemperature) { @@ -2448,84 +2437,38 @@ void MainWindow::enablePrintButton(bool enable){ } static int mainInkPumpCtrlStatus = 0; -static int mainInkPumpCtrlCnt = 0; -//100ms 为单位 +// airPushing now uses ms unit (timer 100ms -> +=100) void MainWindow::airPushingProcess() { if(sysPara){ if (sysPara->status.airPushing) { - //qDebug()<< "start airPushingProcess "<status.airPushingOnTime; - // 执行排气 7 秒 setRunStatus(tr("正在排气 ...............")); - ++sysPara->status.airPushingOnTime; - if(sysPara->status.airPushingOnTime >= 50) { - static int delayCount = 0; - ++delayCount; - m_2sFlag = true; - //sysPara->devOp->controlInkValve(false); //关供墨阀 - if(delayCount >= 40) - { - m_2sFlag = false; - } - - if(delayCount >= 60) - { - delayCount = 0; - airPushTimer->stop(); - sysPara->devOp->controlViscosityPump(false); - reclaimTanOpen(); - //qDebug()<< "start stop"; - sysPara->status.airPushingDone = 1; - sysPara->status.airPushing = 0; - sysPara->status.airPushingOnTime = 0; - } + 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%10 >= 5) { - sysPara->devOp->controlCycleValve(true); - } - else { + // 排气时间到:关粘度泵、关循环阀、开回收泵 + if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){ + sysPara->devOp->controlViscosityPump(false); sysPara->devOp->controlCycleValve(false); - } - if (mainInkPumpCtrlStatus == 0) { - if(++mainInkPumpCtrlCnt > 15) { //100ms 为单位, 时间到关闭 - sysPara->devOp->controlMainInkPump(false); - sysPara->devOp->mainInkCtrl(); - mainInkPumpCtrlStatus = 1; - mainInkPumpCtrlCnt = 0; - } - } - else if (mainInkPumpCtrlStatus == 1) { //100ms 为单位, 时间到开启 - sysPara->devOp->controlMainInkPump(true); - sysPara->devOp->mainInkCtrl(); - mainInkPumpCtrlStatus = 2; - } - else if (mainInkPumpCtrlStatus == 2) { - if(++mainInkPumpCtrlCnt>7) { - sysPara->devOp->controlMainInkPump(false); - sysPara->devOp->mainInkCtrl(); - mainInkPumpCtrlStatus = 3; - mainInkPumpCtrlCnt = 0; - } - } - else if (mainInkPumpCtrlStatus == 3) { - if(++mainInkPumpCtrlCnt>8) { - sysPara->devOp->controlMainInkPump(true); - sysPara->devOp->mainInkCtrl(); - mainInkPumpCtrlStatus = 4; - mainInkPumpCtrlCnt = 0; - } - } - else if (mainInkPumpCtrlStatus == 4) { - if(++mainInkPumpCtrlCnt>8) { - sysPara->devOp->controlMainInkPump(false); - sysPara->devOp->mainInkCtrl(); - mainInkPumpCtrlStatus = 3; - mainInkPumpCtrlCnt = 0; - } + + if(!sysPara->devOp->isReclaimPumpOpen()) + sysPara->devOp->controlReclaimPump(true, false); + + return; } } } @@ -2576,7 +2519,7 @@ void MainWindow::on_pushButtonReclaimTanOpen_pressed() // 粘度泵跟随循环阀动作 sysPara->devOp->controlViscosityPump(true); #else - sysPara->devOp->controlViscosityPump(false);//关粘度泵 + sysPara->devOp->controlViscosityPump(true);//开粘度泵 #endif sysPara->devOp->controlMainInkPump(true);//主墨泵敞开 sysPara->devOp->mainInkCtrl(); diff --git a/mainwindow.h b/mainwindow.h index 2347e58..9460a8c 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -86,7 +86,6 @@ public: QString strWarring,strTitle; QMessageBox *msgtest; void updateTotalCnt(int en); - bool m_2sFlag; QTimer *timerShowItem; void UpdateDateTimeQRCode(QString strContent); diff --git a/systemsetting.ui b/systemsetting.ui index 9307afe..f32e4ef 100644 --- a/systemsetting.ui +++ b/systemsetting.ui @@ -531,6 +531,26 @@ + + + + 排气时间: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + diff --git a/排气流程迁移方案.md b/排气流程迁移方案.md new file mode 100644 index 0000000..f190e99 --- /dev/null +++ b/排气流程迁移方案.md @@ -0,0 +1,190 @@ +排气流程迁移方案 +一、背景概述 +将 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。 + +测试验证:在实际设备上测试正常排气、中断恢复、回收槽联动、喷墨行为。 +