From 5f96e8d592532f5c036d785c6d1d2c9bee676f23 Mon Sep 17 00:00:00 2001 From: Byons Date: Wed, 9 Sep 2026 18:14:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E6=A3=80=E7=B2=98?= =?UTF-8?q?=E5=BA=A6=E8=AE=A1=E6=B5=8B=E8=AF=95=E3=80=81=E5=BC=83=E7=94=A8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9C=BA=E3=80=81=E4=BF=AE=E6=94=B9=E7=94=B5?= =?UTF-8?q?=E7=9C=BC=E8=AE=BE=E7=BD=AE=E9=BB=98=E8=AE=A4=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InkJetPrinter.cpp | 311 ++++++++++++++++++++++++++-------------------- InkJetPrinter.h | 4 + Printsetting.ui | 15 ++- mainwidget.cpp | 20 +-- 4 files changed, 203 insertions(+), 147 deletions(-) diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index 54e8ae3..bd41867 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -1026,17 +1026,17 @@ void InkJetPrinter::timerHandler(void){ m_MainWidget->setRunStatus(tr("开始自检,请等待%1秒..."). arg((MAX_SELF_CHECK_CNT - sysPara->status.selfCheckCnt)/100)); } -#ifdef QT_DEBUG - if(sysPara->status.selfCheckCnt >= 500) // 测试自检改为15s +#ifdef BNS_DEBUG + if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) // 测试自检改为15s #else if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) #endif { -// sysPara->status.selfCheckDone = true; + sysPara->status.selfCheckDone = true; // 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara - if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) { - m_stateManager->requestTransition(PrinterEvent::SelfCheckDone); - } + // if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) { + // m_stateManager->requestTransition(PrinterEvent::SelfCheckDone); + // } // 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛 // 不清零 u,从当前控制字开始,避免突变 @@ -1833,8 +1833,8 @@ void InkJetPrinter::initStateManager() m_stateManager = PrinterStateManager::instance(); // 连接状态变化信号 DirectConnection:确保相关状态实时更新 - connect(m_stateManager, &PrinterStateManager::sig_stateChanged, - this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection); + // connect(m_stateManager, &PrinterStateManager::sig_stateChanged, + // this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection); // ============ 开机时重置状态 ============ m_stateManager->initFromSysPara(); @@ -1880,8 +1880,6 @@ void InkJetPrinter::handleReady() void InkJetPrinter::handleStartPrint() { - - sysPara->status.isPrinting = true; sysPara->devOp->highVoltageCtrl(1); sysPara->devOp->setHighVoltageAmplitudetoSTM32(); @@ -2452,131 +2450,14 @@ void InkJetPrinter::autoControlValvePump(void) }*/ /*------------------------------------粘度泵,混合阀-----------------------------------------*/ + + if(sysPara->status.selfCheckDone) + autoControlViscosityPump(); + else + autoControlViscosityPumpForSelfCheck(sysPara->status.selfCheckCnt); /*-----------------------------每30s打开一次粘度泵以及相关处理--------------------------------------*/ - static bool hasDetectedBellow = false; // 检测到下位灯 - static bool hasDetectedTop = false; // 检测到上位灯 - static int viscosity_low = 0; //统计粘度连续偏低10%次数 - static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数 - static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数 - static bool flag = 0; - - 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) - { - flag=1; - if (!sysPara->devOp->isViscosityPumpOpen()) - { - sysPara->devOp->controlViscosityPump(true); - viscosity_timer->start(10000); - qDebug()<<"粘度: "<status.viscosity); - } - if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold)) - { - sysPara->status.viscosityFault = 0; - viscosity_low=0; - Mixing_valve_open = 0; - viscosity_faulty_num = 0; - } - if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100) - { - viscosity_low++; - viscosity_faulty_num = 0; - Mixing_valve_open = 0; - } - if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold) - { - Mixing_valve_open++; - viscosity_low = 0; - viscosity_faulty_num = 0; - } - if(sysPara->status.viscosity > viscosity_faulty_threshold){ - Mixing_valve_open++; - viscosity_faulty_num++; - viscosity_low = 0; - } - - if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { // - sysPara->devOp->controlMixValve(true); - Mixing_valve_open = 0; -// LogInfo::setRunStatusText(tr("添加溶剂:")+QString::number(sysPara->status.viscosity)); - qDebug()<<"添加溶剂"; - } - - if(viscosity_low >= 60) - { -// LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity)); - qDebug()<<"粘度值偏低"; - sysPara->status.viscosityFault = 2; - if(sysPara->devOp->isMixValveOpen()) { - sysPara->devOp->controlMixValve(false); - } - } - if(viscosity_faulty_num >= 5) - { -// LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity)); - qDebug()<<"粘度偏大故障"; - sysPara->status.viscosityFault = 1; - } - - } - if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1) - { - if(sysPara->devOp->isMixValveOpen()) { - sysPara->devOp->controlMixValve(false); - } - } - - if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1) - { - if (sysPara->devOp->isViscosityPumpOpen()) { - sysPara->devOp->controlViscosityPump(false); - } - sysPara->status.viscosityDelayCnt = 0; - flag=0; - } - - if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位 - viscosity_timer->stop(); - } - - if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) { - static int detectBelow = 0; - if (++detectBelow%400 == 0) { - if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY) - { - if(sysPara->status.rWarnViscoReady>=15){ - sysPara->status.viscosityFault = 1; - sysPara->status.viscosity=0; - if(!firstTime) - qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity); - // LogInfo::setRunStatusText(tr("错误!粘度计下位灯故障.")+QString::number(sysPara->status.viscosity)); - hasDetectedBellow = true; - } - else sysPara->status.rWarnViscoReady++; - } - else { - sysPara->status.rWarnViscoReady = 0; - sysPara->status.viscosityFault = 0; - } - } - } - if(hasDetectedBellow && hasDetectedTop) - { - if(sysPara->devOp->isMixValveOpen()) { // - sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀 - } - } - if(sysPara->status.viscosityFault==0) - { - hasDetectedBellow = false; - hasDetectedTop = false; - } + // } /*-----------------------------------回收泵------------------------------------------*/ @@ -2600,6 +2481,168 @@ void InkJetPrinter::autoControlValvePump(void) } } +void InkJetPrinter::autoControlViscosityPump() +{ + static bool hasDetectedBellow = false; // 检测到下位灯 + static bool hasDetectedTop = false; // 检测到上位灯 + static int viscosity_low = 0; //统计粘度连续偏低10%次数 + static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数 + static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数 + static bool flag = 0; + + 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) + { + flag=1; + if (!sysPara->devOp->isViscosityPumpOpen()) + { + sysPara->devOp->controlViscosityPump(true); + viscosity_timer->start(10000); + qDebug()<<"粘度: "<status.viscosity); + } + if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold)) + { + sysPara->status.viscosityFault = 0; + viscosity_low=0; + Mixing_valve_open = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100) + { + viscosity_low++; + viscosity_faulty_num = 0; + Mixing_valve_open = 0; + } + if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold) + { + Mixing_valve_open++; + viscosity_low = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity > viscosity_faulty_threshold){ + Mixing_valve_open++; + viscosity_faulty_num++; + viscosity_low = 0; + } + + if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { // + sysPara->devOp->controlMixValve(true); + Mixing_valve_open = 0; + // LogInfo::setRunStatusText(tr("添加溶剂:")+QString::number(sysPara->status.viscosity)); + qDebug()<<"添加溶剂"; + } + + if(viscosity_low >= 60) + { + // LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度值偏低"; + sysPara->status.viscosityFault = 2; + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); + } + } + if(viscosity_faulty_num >= 5) + { + // LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度偏大故障"; + sysPara->status.viscosityFault = 1; + } + + } + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1) + { + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); + } + } + + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1) + { + if (sysPara->devOp->isViscosityPumpOpen()) { + sysPara->devOp->controlViscosityPump(false); + } + sysPara->status.viscosityDelayCnt = 0; + flag=0; + } + + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位 + viscosity_timer->stop(); + } + + if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) { + static int detectBelow = 0; + if (++detectBelow%400 == 0) { + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY) + { + if(sysPara->status.rWarnViscoReady>=15){ + sysPara->status.viscosityFault = 1; + sysPara->status.viscosity=0; + if(!firstTime) + qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity); + // LogInfo::setRunStatusText(tr("错误!粘度计下位灯故障.")+QString::number(sysPara->status.viscosity)); + hasDetectedBellow = true; + } + else sysPara->status.rWarnViscoReady++; + } + else { + sysPara->status.rWarnViscoReady = 0; + sysPara->status.viscosityFault = 0; + } + } + } + if(hasDetectedBellow && hasDetectedTop) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀 + } + } + if(sysPara->status.viscosityFault==0) + { + hasDetectedBellow = false; + hasDetectedTop = false; + } +} + +void InkJetPrinter::autoControlViscosityPumpForSelfCheck(int selfCheckCnt) +{ + if(sysPara->devOp->isCycleValveOpen()) { + sysPara->devOp->controlCycleValve(false); + } + + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); + } + + if(selfCheckCnt >= MAX_SELF_CHECK_CNT) { + + if(sysPara->devOp->isViscosityPumpOpen()) + sysPara->devOp->controlViscosityPump(false); + + return; + } + + int stageCnt = selfCheckCnt % 1000; + + if(stageCnt >= 0 && stageCnt < 150) { + if(!sysPara->devOp->isViscosityPumpOpen()) { + sysPara->devOp->controlViscosityPump(true); + qDebug() << "Start test viscosity pump."; + } + } + + if(stageCnt >= 150) { + if(sysPara->devOp->isViscosityPumpOpen()) { + sysPara->devOp->controlViscosityPump(false); + qDebug() << "Stop test viscosity pump."; + } + } +} + void InkJetPrinter::autoControlCycleValve() { if(!sysPara->status.selfCheckDone || (sysPara->status.flagOfPowerOnMode && sysPara->para.gearPumpEnable)){ @@ -2750,7 +2793,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ if(sysPara->status.reclaimTankstatus != 2 && rate != 0) { m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate); - #ifdef QT_DEBUG + #ifdef BNS_DEBUG if(rate == 100) { m_MainWidget->enablePrintButton(true); m_MainWidget->stopFlashReclaimOpenBtn(); diff --git a/InkJetPrinter.h b/InkJetPrinter.h index 5c9afe8..d7e7afa 100644 --- a/InkJetPrinter.h +++ b/InkJetPrinter.h @@ -115,6 +115,10 @@ private: void autoControlCycleValve(); + void autoControlViscosityPump(); + + void autoControlViscosityPumpForSelfCheck(int selfCheckCnt); + void pressureAdj(); void autoControlHeater(); void cycleValveRunForSelfCheck(); diff --git a/Printsetting.ui b/Printsetting.ui index 1c1141a..706f012 100644 --- a/Printsetting.ui +++ b/Printsetting.ui @@ -26,7 +26,7 @@ Qt::StrongFocus - 0 + 1 @@ -428,7 +428,7 @@ - 0 + 1 2147483647 @@ -491,13 +491,13 @@ - 1 + 0 65535 - 1 + 0 @@ -541,14 +541,17 @@ - 1 + 0 65535 - + 1 + + 0 + diff --git a/mainwidget.cpp b/mainwidget.cpp index 6cda026..3b096a5 100644 --- a/mainwidget.cpp +++ b/mainwidget.cpp @@ -951,8 +951,8 @@ void MainWidget::on_m_StartBtn_clicked() if (!checkTriggerMode()) return; // 打印状态交给状态机修改 -// sysPara->status.isPrinting=false; - auto mgr = PrinterStateManager::instance(); + sysPara->status.isPrinting=false; + // auto mgr = PrinterStateManager::instance(); #if !defined(FPGA_TEST) && !defined(QT_DEBUG) // if (mgr && mgr->canStopPrint()) { // mgr->requestTransition(PrinterEvent::StopPrint); @@ -970,6 +970,10 @@ void MainWidget::on_m_StartBtn_clicked() setReclaimOpenBtnStatus(false); updatePrintDisplayLabel(); + + sysPara->devOp->highVoltageCtrl(1); + sysPara->devOp->setHighVoltageAmplitudetoSTM32(); + // 20170717 移动此,以观察条形码打印异常问题。 if(!startPrintingFlag) { @@ -979,9 +983,11 @@ void MainWidget::on_m_StartBtn_clicked() startPrintingFlag = true; // sysPara->status.isPrinting=true; - if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) { - mgr->requestTransition(PrinterEvent::StartPrint); - } + // if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) { + // mgr->requestTransition(PrinterEvent::StartPrint); + // } + sysPara->status.isPrinting = true; + sysPara->status.waitHightVolOff = 0; // 高亮切换 changeHighLight(true); @@ -994,8 +1000,8 @@ void MainWidget::on_m_StopBtn_clicked() if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { return; } -// sysPara->status.isPrinting=false;// 打印状态交给状态机修改 - auto mgr = PrinterStateManager::instance(); + sysPara->status.isPrinting=false;// 打印状态交给状态机修改 + // auto mgr = PrinterStateManager::instance(); #if !defined(FPGA_TEST) && !defined(QT_DEBUG) // if (mgr && mgr->canStopPrint()) { // mgr->requestTransition(PrinterEvent::StopPrint);