From af37661b74877d591f5d890ee9c9c44aff6b42bb Mon Sep 17 00:00:00 2001 From: kite_lucs <334054969@qq.com> Date: Wed, 16 Sep 2026 16:53:19 +0800 Subject: [PATCH] =?UTF-8?q?hlp:=E7=8A=B6=E6=80=81=E6=9C=BA=E5=88=9D?= =?UTF-8?q?=E7=89=88=EF=BC=8C=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E6=A7=BD=E7=8A=B6=E6=80=81=EF=BC=8C=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=92=8C=E5=81=9C=E6=AD=A2=E6=89=93=E5=8D=B0=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InkJetPrinter.cpp | 268 +++++++++----------------- InkJetPrinter.h | 16 +- StateMachine/printerstatemanager.cpp | 157 ++++++++++++++- StateMachine/printerstatemanager.h | 25 ++- SystemManage.cpp | 36 ++-- mainwidget.cpp | 278 +++++++++------------------ mainwidget.h | 9 +- 7 files changed, 373 insertions(+), 416 deletions(-) diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index d501a3f..9baa0ca 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -311,7 +311,7 @@ void InkJetPrinter::showEvent(QShowEvent *e) fpgaReadyTimer = nullptr; } else { - qDebug() << "FPGA not connected yet."; +// qDebug() << "FPGA not connected yet."; } }); @@ -789,7 +789,7 @@ void InkJetPrinter::timerHandler(void){ checkPressureControl(); if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){ - if(m_MainWidget->getCurrPrintStatus() != 1){ + if(sysPara->status.isPrinting == false){ m_MainWidget->_on_pushButtonPowerOff_pressed(false); LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机")); } @@ -889,29 +889,6 @@ void InkJetPrinter::timerHandler(void){ sysPara->devOp->readFgaStatus(); } - /**************桂澳增加超速提示*****************************/ - static int logCtrl = 0; - if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER || sysPara->para.eleEyeTriggerSynPrintEn) - && sysPara->status.lesslen_warn == 1){ //置1表示超速了 - if(logCtrl++ % 500 == 0){ -// LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!")); - qDebug()<<"速度过快,请检查是否漏喷!!!"; - } - - /*if(msgBox1->isHidden()){ //桂澳的超速提示先保留 - msgBox1->setText(tr("速度过快,请检查是否漏喷!!!")); - msgBox1->show(); - LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!")); - qDebug()<<"速度过快,请检查是否漏喷!!!"; - }*/ - sysPara->devOp->controlRedLight(true); - sysPara->devOp->controlGreenLight(false); - } - else{ -// if(!msgBox1->isHidden()) -// sysPara->devOp->controlRedLight(false); - } - sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2); if(!sysPara->para.gearPumpEnable) sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍 @@ -923,7 +900,7 @@ void InkJetPrinter::timerHandler(void){ if(sysPara->status.delay10ms%5 == 0) {//复位发送打印数据 - if((m_MainWidget->getCurrPrintStatus() == 1)&&sysPara->para.ResetSendData) + if(sysPara->status.isPrinting && sysPara->para.ResetSendData) { static bool oneTimeFlag = false; if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据 @@ -950,7 +927,6 @@ void InkJetPrinter::timerHandler(void){ lastProductCount = sysPara->status.productCnt; if(vartypeR != 0){ //更新替换变量的值 -// LogInfo::setRunStatusText("vartypeR"); MySleep(100); m_MainWidget->onPreviewScene(); m_MainWidget->SendPrintDataToFpga(0); @@ -969,15 +945,6 @@ void InkJetPrinter::timerHandler(void){ } if (!updateAreas.isEmpty() && m_StackedWidget->currentWidget() == m_MainWidget) { - // // 统计追踪更新频率 - // static QElapsedTimer bnsTimer; - // static int toogleCount = 0; - // ++toogleCount; - // if(toogleCount > 10) { - // auto elapsed = bnsTimer.restart(); - // qDebug() << (QString("timeHandler avg elapsed: %1 s").arg(elapsed / qreal(toogleCount) / 1000.0)); - // toogleCount = 0; - // } m_MainWidget->updatePrintDisplayLabel(); } @@ -1032,11 +999,10 @@ void InkJetPrinter::timerHandler(void){ if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) #endif { - 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::IDLE)) { + m_stateManager->requestTransition(PrinterEvent::PowerOn); + } // 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛 // 不清零 u,从当前控制字开始,避免突变 @@ -1049,29 +1015,15 @@ void InkJetPrinter::timerHandler(void){ for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; m_bufIdx = 0; - m_MainWidget->setReclaimOpenBtnStatus(true); - m_MainWidget->setReclaimCloseBtnStatus(false); - sysPara->devOp->mainInkCtrl(); sysPara->status.canRunAirPushing = true; // 自检完成后,关闭高电压,不知道为什么,有时候开机自检都有高压 sysPara->devOp->highVoltageCtrl(0); - m_MainWidget->on_m_StopBtn_clicked(); - - LogInfo::setRunStatusText(tr("自检完成!!!")); - m_MainWidget->setRunStatus(tr("自检完成!!!")); - qDebug()<<"自检完成!!!"; - if(sysPara->para.Reciclar) test_flag = 1; } - else { - if((sysPara->status.selfCheckCnt % 200) == 0) - m_MainWidget->setReclaimOpenBtnStatus(false); - m_MainWidget->setReclaimCloseBtnStatus(false); - } } else{ @@ -1228,6 +1180,9 @@ void InkJetPrinter::timerHandler(void){ if(pulse_100ms && sysPara->status.selfCheckDone){ detectAndcontrolReclaimTank(); //控制回收槽 + if (m_stateManager) { + m_stateManager->checkReadyState(); + } } /*---------------------------------处理警告--------------------------------------------*/ @@ -1838,63 +1793,69 @@ 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); + // 使能开始打印、停止打印、开回收槽、关回收槽按钮 + connect(m_stateManager, &PrinterStateManager::sig_enableStartPrint, + this, &InkJetPrinter::slt_enableStartPrint, Qt::DirectConnection); + connect(m_stateManager, &PrinterStateManager::sig_enableStopPrint, + this, &InkJetPrinter::slt_enableStopPrint, Qt::DirectConnection); + connect(m_stateManager, &PrinterStateManager::sig_enableOpenTank, + this, &InkJetPrinter::slt_enableOpenTank, Qt::DirectConnection); + connect(m_stateManager, &PrinterStateManager::sig_enableCloseTank, + this, &InkJetPrinter::slt_enableCloseTank, Qt::DirectConnection); + // 更新回收槽状态 + connect(m_stateManager, &PrinterStateManager::sig_updateReclaimStatus, + this, [=](){m_MainWidget->updateReclaimStatus();}); // ============ 开机时重置状态 ============ m_stateManager->initFromSysPara(); sysPara->status.selfCheckDone = false; // 自检是否完成 sysPara->status.isPrinting = false; // 是否正在打印 - sysPara->status.powerOffAppending = false; // 是否正在关机 - - // 发送 PowerOn 事件进入自检状态 -// if (!sysPara->status.selfCheckDone) { -// m_stateManager->requestTransition(PrinterEvent::PowerOn); -// } - -// initStateTimer(); -} - -void InkJetPrinter::initStateTimer() -{ - // ============ 测试定时器 ============ - m_testTimer = new QTimer(this); - connect(m_testTimer, &QTimer::timeout, this, &InkJetPrinter::slt_stateTest); - m_testTimer->start(3000); // 3秒切换一次 + sysPara->status.powerOffAppending = false; // 是否正在关机 + m_stateManager->bindSysPara(sysPara); } void InkJetPrinter::handleSelfCheck() { - sysPara->status.selfCheckDone = false; - sysPara->status.selfCheckCnt = 0; - m_MainWidget->enablePrintButton(false); + // 自检完成,非打印状态,回收槽放下后使能打印按钮 + if (!sysPara->status.selfCheckDone) { + sysPara->status.selfCheckDone = true; + LogInfo::setRunStatusText(tr("自检完成!!!")); + m_MainWidget->setRunStatus(tr("自检完成!!!")); + } } void InkJetPrinter::handleReady() { - // 自检完成,非打印状态,回收槽放下后使能打印按钮 - sysPara->status.selfCheckDone = true; sysPara->status.isPrinting = false; - if(sysPara->status.reclaimTankstatus == 5) { - m_MainWidget->enablePrintButton(true); - } else { - m_MainWidget->enablePrintButton(false); - } - +// MySleep(50); +// m_MainWidget->updateReclaimStatus(); } void InkJetPrinter::handleStartPrint() { sysPara->status.isPrinting = true; + sysPara->status.waitHightVolOff = 0; + sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据 sysPara->devOp->highVoltageCtrl(1); sysPara->devOp->setHighVoltageAmplitudetoSTM32(); - sysPara->status.waitHightVolOff = 0; + sysPara->devOp->printCtrl(PRINT_CTRL_START); +// MySleep(50); +// m_MainWidget->updateReclaimStatus(); } void InkJetPrinter::handleStopPrint() { sysPara->status.isPrinting = false; -// LogInfo::setRunStatusText("Stop print..."); + sysPara->devOp->printCtrl2(1); + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + sysPara->status.waitHightVolOff = 1; + sysPara->saveParaToFile(); // 将相关配置保存 + // 停止完毕后再进入就绪状态,允许开始打印 + m_stateManager->requestTransition(PrinterEvent::StopComplete); +// MySleep(50); +// m_MainWidget->updateReclaimStatus(); } void InkJetPrinter::handlePowerOff() @@ -1903,101 +1864,40 @@ void InkJetPrinter::handlePowerOff() m_MainWidget->checkForPowerOff(); } -void InkJetPrinter::slt_stateTest() -{ - if (!m_stateManager) return; - - PrinterState currentState = m_stateManager->currentState(); - - qDebug() << "=== Test Step:" << m_testStep << "Current:" << m_stateManager->stateName(); - - // 根据当前状态发送不同的事件 - switch (currentState) { - case PrinterState::IDLE: - // IDLE → SELF_CHECK - qDebug() << "▶ Send: PowerOn"; - m_stateManager->requestTransition(PrinterEvent::PowerOn); - break; - - case PrinterState::SELF_CHECK: - // SELF_CHECK → READY - qDebug() << "▶ Send: SelfCheckDone"; - m_stateManager->requestTransition(PrinterEvent::SelfCheckDone); - break; - - case PrinterState::READY: - // READY → PRINTING - qDebug() << "▶ Send: StartPrint"; - m_stateManager->requestTransition(PrinterEvent::StartPrint); - break; - - case PrinterState::PRINTING: - // PRINTING → STOPPING → READY(两步完成) - if (m_testStep % 2 == 0) { - qDebug() << "▶ Send: StopPrint"; - m_stateManager->requestTransition(PrinterEvent::StopPrint); - } else { - qDebug() << "▶ Send: StopComplete"; - m_stateManager->requestTransition(PrinterEvent::StopComplete); - } - break; - - case PrinterState::STOPPING: - // STOPPING → READY - qDebug() << "▶ Send: StopComplete"; - m_stateManager->requestTransition(PrinterEvent::StopComplete); - break; - - case PrinterState::ERROR: - // ERROR → READY - qDebug() << "▶ Send: ErrorCleared"; - m_stateManager->requestTransition(PrinterEvent::ErrorCleared); - break; - - case PrinterState::POWER_OFF: - // POWER_OFF → IDLE - qDebug() << "▶ Send: PowerOffDone"; - m_stateManager->requestTransition(PrinterEvent::PowerOffDone); - break; - - default: - break; - } - - m_testStep++; -} - // ============ 状态机槽函数 ============ void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason) { - qDebug() << "State:" << m_stateManager->stateName() << "Reason:" << reason; + Q_UNUSED(oldState) + LogInfo::setRunStatusText(reason); // ============ 统一更新 sysPara 状态 ============ switch (newState) { case PrinterState::SELF_CHECK: - // 进入自检状态 + // 进入自检完成状态 handleSelfCheck(); + LogInfo::setRunStatusText("SELF_CHECK_DONE"); break; case PrinterState::READY: // 进入就绪状态 handleReady(); + LogInfo::setRunStatusText("READY"); break; case PrinterState::PRINTING: // 进入打印状态 handleStartPrint(); + LogInfo::setRunStatusText("PRINTING"); break; case PrinterState::STOPPING: // 进入停止状态 handleStopPrint(); + LogInfo::setRunStatusText("STOPPING"); break; case PrinterState::ERROR: // 进入故障状态 -// m_MainWidget->setRunStatus("故障!请检查"); -// m_MainWidget->enablePrintButton(false); break; case PrinterState::POWER_OFF: @@ -2008,9 +1908,27 @@ void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldStat default: break; } +} - // 保存参数 - //sysPara->saveParaToFile(); +void InkJetPrinter::slt_enableStartPrint(bool able) +{ + m_MainWidget->enabeleStartBtn(able); +} + +void InkJetPrinter::slt_enableStopPrint(bool able) +{ + m_MainWidget->enabeleStopBtn(able); +} + +// 排气过程中不使能 +void InkJetPrinter::slt_enableOpenTank(bool able) +{ + m_MainWidget->setReclaimOpenBtnStatus(able); +} + +void InkJetPrinter::slt_enableCloseTank(bool able) +{ + m_MainWidget->setReclaimCloseBtnStatus(able); } /*************************FPGA通过串口读取状态赋值给status-start******************************************/ @@ -2768,60 +2686,47 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ if(sysPara->devOp->isReclaimTankOpenEnable()) sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 sysPara->status.reclainTankReachEnd = true; - m_MainWidget->setRunStatus(tr("回收槽到头")); - m_MainWidget->setReclaimStatus(true, 100); - m_MainWidget->enablePrintButton(true); //仅仅在此时能使能打印按钮 - sysPara->devOp->highVoltageCtrl(0); + m_MainWidget->setRunStatus(tr("回收槽到头")); + sysPara->devOp->highVoltageCtrl(0); - m_MainWidget->stopFlashReclaimOpenBtn(); + m_MainWidget->stopFlashReclaimOpenBtn(); -// emit reclaimTankOpenDone(); - /*回收槽开关时间校正*/ - sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; - m_SystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime ); + /*回收槽开关时间校正*/ + sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; + m_SystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime ); - qDebug()<<"reclaimTankOpenDone currReclaimTankPos:"<status.currReclaimTankPos; - qDebug()<<"reclaimTankOpenDone curr_reclaimTankTime:"<status.curr_reclaimTankTime; - - LogInfo::setRunStatusText("reclaimTankOpenDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos)); + LogInfo::setRunStatusText("reclaimTankOpenDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos)); } else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 { sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭 m_MainWidget->stopFlashReclaimOpenBtn(); -// ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); + // ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); } else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 { - auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f; - int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100)); +// auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f; +// int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100)); - // 不知道为什么会有rate为0,且 sysPara->status.reclaimTankstatus == 2 ,也就是 关的状态。 回收槽位置在0处,而状态却是 关 ,很奇怪 - if(sysPara->status.reclaimTankstatus != 2 && rate != 0) { - m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate); + if(sysPara->status.reclaimTankstatus != 2) { - #ifdef BNS_DEBUG +#ifdef BNS_DEBUG if(rate == 100) { m_MainWidget->enablePrintButton(true); m_MainWidget->stopFlashReclaimOpenBtn(); sysPara->status.reclaimTankstatus = 5; } - #endif +#endif } m_MainWidget->setReclaimOpenBtnStatus(sysPara->status.reclaimTankstatus == 2); m_MainWidget->setReclaimCloseBtnStatus(sysPara->status.reclaimTankstatus == 1); - - sysPara->status.reclaimBlockedCnt = 0; } else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 { if(sysPara->devOp->isReclaimTankCloseEnable()) sysPara->devOp->controlReclaimTankClose(false); //到头,关闭 - m_MainWidget->setReclaimStatus(false, 0); m_MainWidget->stopFlashReclaimOpenBtn(); - //sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零 -// emit reclaimTankCloseDone(); sysPara->status.lastRecycleWarn = 0; sysPara->status.HVFaultCloseEn=0; sysPara->status.reclainCloseAppending=false; @@ -2839,6 +2744,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){ m_MainWidget->setReclaimCloseBtnStatus(true); LogInfo::setRunStatusText("Reclaim tank hold on "+QString::number(sysPara->status.currReclaimTankPos)); } + } void InkJetPrinter::viscosity_timerHandler() diff --git a/InkJetPrinter.h b/InkJetPrinter.h index d7e7afa..6c6fc91 100644 --- a/InkJetPrinter.h +++ b/InkJetPrinter.h @@ -284,18 +284,17 @@ private: bool gearPumpStartFlag = false; - // 状态机 + // ===================状态机==================== PrinterStateManager* m_stateManager = nullptr; - // 测试定时器 - QTimer* m_testTimer = nullptr; - int m_testStep = 0; private: void initStateManager(); - void initStateTimer(); // 不同状态的处理 // 自检 void handleSelfCheck(); + // 自检完成 + void handleToReady(); + // 就绪 void handleReady(); @@ -306,7 +305,12 @@ private: // 关机 void handlePowerOff(); private slots: - void slt_stateTest(); + // 切换状态 void slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason); + // 使能开始打印、停止打印、开回收槽、关回收槽按钮 + void slt_enableStartPrint(bool); + void slt_enableStopPrint(bool); + void slt_enableOpenTank(bool); + void slt_enableCloseTank(bool); }; diff --git a/StateMachine/printerstatemanager.cpp b/StateMachine/printerstatemanager.cpp index 3a72217..be00e15 100644 --- a/StateMachine/printerstatemanager.cpp +++ b/StateMachine/printerstatemanager.cpp @@ -1,5 +1,6 @@ -#include "PrinterStateManager.h" +#include "PrinterStateManager.h" #include +#include "LogInfo.h" PrinterStateManager* PrinterStateManager::s_instance = nullptr; @@ -15,17 +16,37 @@ PrinterStateManager::PrinterStateManager() { initTransitions(); m_currentState = PrinterState::IDLE; + initTimer(); } PrinterStateManager::~PrinterStateManager() { + if (m_updateUITimer) { + m_updateUITimer->stop(); + m_updateUITimer->deleteLater(); + m_updateUITimer = NULL; + } + if (m_sysPara) { + m_sysPara = NULL; + } +} + +void PrinterStateManager::initTimer() +{ + if (m_updateUITimer == NULL) { + m_updateUITimer = new QTimer(); + connect(m_updateUITimer, &QTimer::timeout, this, + &PrinterStateManager::slt_timeout); + m_updateUITimer->setInterval(50); + m_updateUITimer->setSingleShot(true); + } } QString PrinterStateManager::stateName() const { switch (m_currentState) { case PrinterState::IDLE: return "空闲"; - case PrinterState::SELF_CHECK: return "自检中"; + case PrinterState::SELF_CHECK: return "自检完成"; case PrinterState::READY: return "就绪"; case PrinterState::PRINTING: return "打印中"; case PrinterState::STOPPING: return "停止中"; @@ -38,7 +59,7 @@ QString PrinterStateManager::stateName() const // ============ 初始化状态(开机时调用一次) ============ void PrinterStateManager::initFromSysPara() { - setState(PrinterState::SELF_CHECK, "Init from sysPara"); + setState(PrinterState::IDLE, "Init from sysPara"); } // ============ 状态转移表 ============ @@ -49,9 +70,13 @@ void PrinterStateManager::initTransitions() {PrinterState::IDLE, PrinterEvent::PowerOn, PrinterState::SELF_CHECK, "IDLE → SELF_CHECK", nullptr}, {PrinterState::SELF_CHECK, PrinterEvent::SelfCheckDone, - PrinterState::READY, "SELF_CHECK → READY", nullptr}, + PrinterState::READY, "SELF_CHECK → READY", + [this]() -> bool { return guardReclaimTankOpen(); }}, {PrinterState::SELF_CHECK, PrinterEvent::SelfCheckFailed, PrinterState::ERROR, "SELF_CHECK → ERROR", nullptr}, + // 注意,逆清洗和关回收槽时,需要把状态重新切换回自检 + {PrinterState::READY, PrinterEvent::ReSelfCheck, + PrinterState::SELF_CHECK, "READY → SELF_CHECK", nullptr}, // 打印流程 {PrinterState::READY, PrinterEvent::StartPrint, @@ -101,8 +126,9 @@ PrinterStateManager::Transition* PrinterStateManager::findTransition(PrinterEven // ============ 请求切换状态(外部唯一接口) ============ void PrinterStateManager::requestTransition(PrinterEvent event) { - qDebug() << "Request event:" << static_cast(event) - << "Current:" << stateName(); + LogInfo::setRunStatusText(QString("Transition %1:%2") + .arg(stateName()) + .arg(m_sysPara->status.reclaimTankstatus)); Transition* trans = findTransition(event); if (!trans) { @@ -123,11 +149,51 @@ void PrinterStateManager::requestTransition(PrinterEvent event) setState(trans->toState, trans->description); } +static int f = 0; +void PrinterStateManager::checkReadyState() +{ + // 自检完成后,随时检查能否进入READY状态 + if (m_currentState == PrinterState::SELF_CHECK) { + if (m_sysPara) { + if (f ++ > 50) { + f = 0; + LogInfo::setRunStatusText + (QString("%3:%1---airPushing:%2") + .arg(m_sysPara->status.reclaimTankstatus) + .arg(m_sysPara->status.airPushing) + .arg(stateName())); + } + + if (m_sysPara->status.airPushing) { + emit sig_enableOpenTank(false); + emit sig_enableCloseTank(false); + return; + } + + switch (m_sysPara->status.reclaimTankstatus) { + case 5: + setState(PrinterState::READY, "READY"); + break; + default: + // 回收槽状态变化后就更新一次 + if (lastState != m_sysPara->status.reclaimTankstatus + && m_sysPara->status.reclaimTankstatus != 0) { + if (m_updateUITimer && !m_updateUITimer->isActive()) { + m_updateUITimer->start(); + } + lastState = m_sysPara->status.reclaimTankstatus; + emit sig_updateReclaimStatus(); + } + break; + } + } + } +} + // ============ 内部状态切换 ============ void PrinterStateManager::setState(PrinterState newState, const QString& reason) { if (m_currentState == newState) { - qDebug() << "State already:" << stateName(); return; } @@ -136,8 +202,12 @@ void PrinterStateManager::setState(PrinterState newState, const QString& reason) qDebug() << "State changed:" << stateName() << "Reason:" << reason; + if (m_updateUITimer && !m_updateUITimer->isActive()) + m_updateUITimer->start(); + // 发送信号通知外部 emit sig_stateChanged(newState, m_previousState, reason); + emit sig_updateReclaimStatus(); } // ============ 辅助函数 ============ @@ -157,21 +227,30 @@ QString PrinterStateManager::stateNameFromEnum(PrinterState state) const // ============ 守卫条件函数 ============ +static char times = 0; bool PrinterStateManager::guardReclaimTankOpen() { if (!m_sysPara) return false; - return m_sysPara->status.reclainTankReachEnd == true; + if (times ++ > 50) { + times = 0; + LogInfo::setRunStatusText(QString("guardReclaimTankOpen:%1").arg(m_sysPara->status.reclainTankReachEnd)); + LogInfo::setRunStatusText(QString("reclaimTankstatus:%1").arg(m_sysPara->status.reclaimTankstatus)); + } + + return m_sysPara->status.reclainTankReachEnd || (m_sysPara->status.reclaimTankstatus == 5); } bool PrinterStateManager::guardInkSwintOpen() { if (!m_sysPara) return false; + LogInfo::setRunStatusText("guardInkSwintOpen:" + !(m_sysPara->status.statWarn & WARN_STATUS_INK_SWINT)); return !(m_sysPara->status.statWarn & WARN_STATUS_INK_SWINT); } bool PrinterStateManager::guardNoError() { if (!m_sysPara) return false; + LogInfo::setRunStatusText("guardNoError:" + (m_sysPara->status.statWarn == 0)); return m_sysPara->status.statWarn == 0; } @@ -190,6 +269,7 @@ bool PrinterStateManager::guardNoSolventWarn() bool PrinterStateManager::guardSelfCheckDone() { if (!m_sysPara) return false; + LogInfo::setRunStatusText("guardSelfCheckDone:" + m_sysPara->status.selfCheckDone); return m_sysPara->status.selfCheckDone == true; } @@ -201,3 +281,64 @@ bool PrinterStateManager::guardCanStartPrint() return guardReclaimTankOpen() && guardInkSwintOpen() && guardNoError() && guardSelfCheckDone(); } + +void PrinterStateManager::slt_timeout() +{ + if (m_sysPara) { + LogInfo::setRunStatusText(QString("slt_timeout ENTER:%1--state:%2--airPushing:%3") + .arg(stateName()) + .arg(m_sysPara->status.reclaimTankstatus) + .arg(m_sysPara->status.airPushing)); + + switch (m_sysPara->status.reclaimTankstatus) { + case 1: // 开 + emit sig_enableOpenTank(false); + emit sig_enableCloseTank(true); + break; + case 2: // 关 + emit sig_enableOpenTank(true); + emit sig_enableCloseTank(false); + break; + case 3: + case 4: + break; + case 5: // 开完成 +// emit sig_enableStartPrint(true); +// emit sig_enableStopPrint(true); + emit sig_enableOpenTank(false); + emit sig_enableCloseTank(true); + break; + case 6: // 6关完成 + emit sig_enableOpenTank(true); + emit sig_enableCloseTank(false); + break; + case 0x10: // 故障 + emit sig_enableStartPrint(false); + emit sig_enableStopPrint(false); + emit sig_enableOpenTank(false); + emit sig_enableCloseTank(true); + break; + case 0x11: // 卡住,关闭 + default: + break; + } + } + + // STATE + switch (m_currentState) { + case PrinterState::SELF_CHECK: + emit sig_enableStartPrint(false); + emit sig_enableStopPrint(false); + break; + // 需要确认开完成时,状态是否一定是READY,然后避免重复操作 TODO + case PrinterState::READY: + emit sig_enableStartPrint(true); + emit sig_enableStopPrint(true); + break; + default: + break; + } + + // 避免发出太多信号 + if (m_updateUITimer) m_updateUITimer->stop(); +} diff --git a/StateMachine/printerstatemanager.h b/StateMachine/printerstatemanager.h index ec87b9e..b21f896 100644 --- a/StateMachine/printerstatemanager.h +++ b/StateMachine/printerstatemanager.h @@ -2,12 +2,13 @@ #define PRINTERSTATEMANAGER_H #include +#include #include #include "SysPara.h" enum class PrinterState { IDLE, // 空闲 - SELF_CHECK, // 自检中 + SELF_CHECK, // 自检完成 READY, // 就绪 PRINTING, // 打印中 STOPPING, // 停止中 @@ -20,6 +21,7 @@ enum class PrinterEvent { PowerOn, SelfCheckDone, SelfCheckFailed, + ReSelfCheck, StartPrint, StopPrint, StopComplete, @@ -52,10 +54,21 @@ public: // 外部唯一接口:请求切换状态 void requestTransition(PrinterEvent event); + // 检查状态 + void checkReadyState(); signals: // 状态变化信号(外部监听执行具体业务) void sig_stateChanged(PrinterState newState, PrinterState oldState, QString reason); + //使能开始和停止打印按钮 + void sig_enableStartPrint(bool); + void sig_enableStopPrint(bool); + //使能开关回收槽 + void sig_enableOpenTank(bool); + void sig_enableCloseTank(bool); + + // 更新回收槽状态 + void sig_updateReclaimStatus(); private: PrinterStateManager(); ~PrinterStateManager(); @@ -66,6 +79,9 @@ private: PrinterState m_currentState = PrinterState::IDLE; PrinterState m_previousState = PrinterState::IDLE; + QTimer* m_updateUITimer = NULL; + void initTimer(); + // 状态转移表 // 守卫条件函数类型 using GuardFunc = std::function; @@ -80,6 +96,9 @@ private: QVector m_transitions; + // 记录上一次回收槽状态 + unsigned char lastState = 0; + void initTransitions(); Transition* findTransition(PrinterEvent event); @@ -88,7 +107,7 @@ private: QString stateNameFromEnum(PrinterState state) const; - // ============ 守卫条件函数 ============ + // ============ guard 守卫条件函数 ============ // 检查回收槽是否已打开 bool guardReclaimTankOpen(); @@ -110,5 +129,7 @@ private: // 检查是否满足所有打印条件 bool guardCanStartPrint(); +private slots: + void slt_timeout(); }; #endif // PRINTERSTATEMANAGER_H diff --git a/SystemManage.cpp b/SystemManage.cpp index d4a89de..ce7614a 100644 --- a/SystemManage.cpp +++ b/SystemManage.cpp @@ -340,14 +340,6 @@ void SystemManage::on_pushButtonControlByHand_pressed() void SystemManage::on_pushButtonReclaimTankOpen_pressed() { if(sysPara){ - // if(!sysPara->para.isCheckMagnet) - // { - // if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){ - // QMessageBox::warning(this, tr("警告"), - // tr("请先移开喷头盖!")); - // return ; - // } - // } sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止")); sysPara->devOp->highVoltageCtrl(0); @@ -355,20 +347,13 @@ void SystemManage::on_pushButtonReclaimTankOpen_pressed() sysPara->status.reclainCloseAppending = false; sysPara->status.currReclaimOperationCnt = 0; sysPara->status.reclainTankReachEnd = false; + sysPara->status.reclaimTankstatus = 1; } } void SystemManage::on_pushButtonReclaimTankClose_pressed() { if(sysPara){ - // if(!sysPara->para.isCheckMagnet) - // { - // if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){ - // QMessageBox::warning(this, tr("警告"), - // tr("请先移开喷头盖!")); - // return ; - // } - // } sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止")); sysPara->devOp->highVoltageCtrl(0); @@ -376,6 +361,7 @@ void SystemManage::on_pushButtonReclaimTankClose_pressed() sysPara->status.reclainCloseAppending = true; sysPara->status.currReclaimOperationCnt = 0; sysPara->status.reclainTankReachEnd = false; + sysPara->status.reclaimTankstatus = 2; } } #include @@ -581,12 +567,20 @@ fi\n" ; void SystemManage::on_pushButtonUpdateSoftware_pressed() { - if(sysPara->status.updateSoftEN==0){ - dialogUpateMm->clearAuth(); - dialogUpateMm->show(); - } - else ondialogAuthorizationAccepted(); + if(sysPara->status.updateSoftEN==0){ + QWidget *p = dialogUpateMm->parentWidget(); + if (p) { + QPoint topLeft = p->mapToGlobal(QPoint(0, 0)); + int x = topLeft.x() + (p->width() - dialogUpateMm->width()) / 2; + int y = topLeft.y() + (p->height() - dialogUpateMm->height()) / 2 - 100; + dialogUpateMm->move(x, y); + } + dialogUpateMm->clearAuth(); + dialogUpateMm->show(); + } + else ondialogAuthorizationAccepted(); } + void SystemManage::ondialogAuthorizationAccepted() { QString authString= dialogUpateMm->getAuth(); diff --git a/mainwidget.cpp b/mainwidget.cpp index ff857dc..bf64475 100644 --- a/mainwidget.cpp +++ b/mainwidget.cpp @@ -238,8 +238,8 @@ void MainWidget::_on_pushButtonPowerOff_pressed(bool notice) sysPara->status.reclaimCloseCnt=10; //on_pushButtonStopPrint_pressed(); on_m_StopBtn_clicked(); + MySleep(10); on_m_LeftBtn_clicked(); - //on_pushButtonReclaimTankClose_pressed(); sysPara->status.powerOffAppending = true; setReclaimCloseBtnStatus(false); setReclaimOpenBtnStatus(false); @@ -924,8 +924,19 @@ void MainWidget::enablePrintButton(bool enable){ m_StopBtn->setEnabled(enable); } +void MainWidget::enabeleStartBtn(bool enable) +{ + m_StartBtn->setEnabled(enable); +} + +void MainWidget::enabeleStopBtn(bool enable) +{ + m_StopBtn->setEnabled(enable); +} + void MainWidget::updateTotalCnt(int en) { + Q_UNUSED(en) // No50 USEING //sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt: // (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0; @@ -947,95 +958,56 @@ void MainWidget::updateTotalCnt(int en) void MainWidget::on_m_StartBtn_clicked() { if(sysPara){ - test_flag = 0; + test_flag = 0; - if (!checkTriggerMode()) return; + if (!checkTriggerMode()) { + return; + } - // 打印状态交给状态机修改 - sysPara->status.isPrinting=false; - // auto mgr = PrinterStateManager::instance(); -#if !defined(FPGA_TEST) && !defined(QT_DEBUG) - // if (mgr && mgr->canStopPrint()) { - // mgr->requestTransition(PrinterEvent::StopPrint); - // } else {return;} -#endif + // 按原来逻辑,只修改打印标志,不使用状态机做多余的操作 + sysPara->status.isPrinting=false; - // SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, - - /*-------------------------------------------------------------------*/ - sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据 + SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, /*---------------------------------开关回收槽------------------------------*/ - - setReclaimCloseBtnStatus(false); - setReclaimOpenBtnStatus(false); updatePrintDisplayLabel(); - sysPara->devOp->highVoltageCtrl(1); - sysPara->devOp->setHighVoltageAmplitudetoSTM32(); - - // 20170717 移动此,以观察条形码打印异常问题。 - if(!startPrintingFlag) - { - sysPara->devOp->printCtrl(PRINT_CTRL_START); - printintFlag = true; + auto mgr = PrinterStateManager::instance(); + if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) { + mgr->requestTransition(PrinterEvent::StartPrint); } - startPrintingFlag = true; -// sysPara->status.isPrinting=true; - // if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) { - // mgr->requestTransition(PrinterEvent::StartPrint); - // } - sysPara->status.isPrinting = true; - sysPara->status.waitHightVolOff = 0; - // 高亮切换 changeHighLight(true); -} + + LogInfo::setRunStatusText(tr("print:%1--print:%2--state:%3") + .arg(sysPara->status.reclaimTankstatus) + .arg(sysPara->status.isPrinting) + .arg(mgr->stateName())); + } } void MainWidget::on_m_StopBtn_clicked() { if(sysPara){ - if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { - return; +// sysPara->status.isPrinting=false;// 打印状态交给状态机修改 + auto mgr = PrinterStateManager::instance(); + if (mgr && mgr->canStopPrint()) { + mgr->requestTransition(PrinterEvent::StopPrint); } - sysPara->status.isPrinting=false;// 打印状态交给状态机修改 - // auto mgr = PrinterStateManager::instance(); -#if !defined(FPGA_TEST) && !defined(QT_DEBUG) - // if (mgr && mgr->canStopPrint()) { - // mgr->requestTransition(PrinterEvent::StopPrint); - // } else { - // return; - // } -#endif - - sysPara->devOp->printCtrl2(1); - sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT - setReclaimCloseBtnStatus(sysPara->status.currReclaimTankPos != 0); setReclaimOpenBtnStatus(sysPara->status.currReclaimTankPos == 0); - - printintFlag = false; - startPrintingFlag = false; updatePrintDisplayLabel(); - sysPara->status.waitHightVolOff = 1; - sysPara->saveParaToFile(); // 将相关配置保存 - if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) - { - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("提示"), - tr("随机码文本将展出到U盘,请插入U盘"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->RandTxtBakup(0); //备份到U盘 - } - } // 高亮切换 changeHighLight(false); + + LogInfo::setRunStatusText(tr("stop:%1--print:%2--state:%3") + .arg(sysPara->status.reclaimTankstatus) + .arg(sysPara->status.isPrinting) + .arg(mgr->stateName())); } } @@ -1085,23 +1057,6 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate) } } -int MainWidget::getCurrPrintStatus() -{ - int printStatus; - if (startPrintingFlag ) { - if(printintFlag) { - printStatus = 1; // 正在打印 - } - else { - printStatus = 2; // 暂停喷印 - } - } - else { - printStatus = 3; // 停止打印 - } - return printStatus; -} - void MainWidget::setReclaimOpenBtnStatus(bool enable) { #ifdef __RFID_CARD @@ -1113,12 +1068,12 @@ void MainWidget::setReclaimOpenBtnStatus(bool enable) #endif enable = !sysPara->status.airPushing && enable; - ui.m_RightBtn->setEnabled(enable); } void MainWidget::setReclaimCloseBtnStatus(bool enable) { + enable = !sysPara->status.airPushing && enable; ui.m_LeftBtn->setEnabled(enable); } @@ -1149,23 +1104,33 @@ void MainWidget::stopFlashReclaimOpenBtn() flashReclaimOpenBtn(); } -void MainWidget::setReclaimStatus(bool isOpen, int rate) +void MainWidget::updateReclaimStatus() { - if (isOpen) { - if (!sysPara->status.airPushing) { - QString str = rate == 100? tr("喷嘴已开启"):tr("喷嘴开启中"); - ui.lb_RightBtn->setText(str); - } - ui.lb_LeftBtn->setText(tr("喷嘴关闭")); - - } else { - QString str = rate == 0? tr("喷嘴已关闭"):tr("喷嘴关闭中"); - ui.lb_LeftBtn->setText(str); - - if (!sysPara->status.airPushing) { - ui.lb_RightBtn->setText(tr("喷嘴开启")); - } + QString strR = ""; + QString strL = ""; + switch (sysPara->status.reclaimTankstatus) { + case 1: + strR = tr("喷嘴开启中"); + strL = tr("喷嘴关闭"); + break; + case 2: + strR = tr("喷嘴开启"); + strL = tr("喷嘴关闭中"); + break; + case 5: + strR = tr("喷嘴已开启"); + strL = tr("喷嘴关闭"); + break; + case 0: + case 6: + strR = tr("喷嘴开启"); + strL = tr("喷嘴已关闭"); + break; + default: + break; } + ui.lb_RightBtn->setText(strR); + ui.lb_LeftBtn->setText(strL); } static int mainInkPumpCtrlStatus = 0; @@ -1179,10 +1144,7 @@ void MainWidget::airPushingProcess() QString labelTxt = tr("正在排气..."); setRunStatus(labelTxt); ui.lb_RightBtn->setText(labelTxt); - setReclaimOpenBtnStatus(false); - setReclaimCloseBtnStatus(false); - //qDebug()<< "start airPushingProcess "<status.airPushingOnTime; // 执行排气 4 秒 sysPara->status.airPushingOnTime += 100; @@ -1191,9 +1153,8 @@ void MainWidget::airPushingProcess() sysPara->saveParaToFile(); } - // 延迟 半秒后才开回收槽,正式结束排气阶段 + // 延迟 0.5秒后才开回收槽,正式结束排气阶段 if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 500){ - //qDebug()<< "start stop"; reclaimTanOpen(); sysPara->status.airPushingDone = 1; sysPara->status.airPushing = 0; @@ -1210,6 +1171,7 @@ void MainWidget::airPushingProcess() if(!sysPara->devOp->isReclaimPumpOpen()) sysPara->devOp->controlReclaimPump(true, false); + sysPara->status.isPumpValveControledByHand = false;//切换自动让压力回升 return; } } @@ -1219,33 +1181,22 @@ void MainWidget::airPushingProcess() void MainWidget::reclaimTanOpen() { // 还原当前模式 - if (sysPara->status.airPushing) { - sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore; - } sysPara->status.isPumpValveControledByHand = false; sysPara->devOp->mainInkCtrl(); - sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 - MySleep(1000); + if (sysPara->status.reclaimTankstatus == 2) { + sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 + MySleep(1000); + } sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/ -// sysPara->status.reclaimTankstatus = 1; -// setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开")); - setReclaimStatus(true, 0); - if (!sysPara->para.reclaimTankTime) { -// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); - } else { - - } + sysPara->status.reclaimTankstatus = 1; + updateReclaimStatus(); sysPara->status.currReclaimOperationCnt = 0; sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainOpenAppending = true; sysPara->status.reclainCloseAppending = false; - sysPara->status.reclaimBlockedCnt = 0; sysPara->status.canRunAirPushing = false; - - if (sysPara->status.reclainTankReachEnd) - enablePrintButton(SIMULATE_PRINTING_MODE); } void MainWidget::initSheet() @@ -1321,13 +1272,6 @@ void MainWidget::initSheet() ui.m_RightBtn->setStyleSheet(reclaimBtnNormalStyle); ui.m_LeftBtn->setStyleSheet(reclaimBtnNormalStyle); - // QString lbSheet = R"( - // QLabel { - // border: 1px solid #95a5a6; /* 灰色边框 */ - // } - // )"; - // ui.lb_LeftBtn->setStyleSheet(lbSheet); - // ui.lb_RightBtn->setStyleSheet(lbSheet); } void MainWidget::changeHighLight(bool isStart) @@ -1381,9 +1325,6 @@ void MainWidget::on_m_RightBtn_clicked() (sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气 // Pos == 0 回收槽关闭的情况下才可以执行排气; 先执行排气后开回收槽 if (!sysPara->status.airPushing) { - //排气:打印、暂停打印置灰 - enablePrintButton(false); - sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand; sysPara->status.isPumpValveControledByHand = true; sysPara->devOp->mainInkCtrl(); @@ -1394,7 +1335,6 @@ void MainWidget::on_m_RightBtn_clicked() sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 sysPara->devOp->controlInkValve(true); //墨水阀 sysPara->devOp->controlInkValvePWM(true); //墨水阀 - //qDebug()<< "start airpushings"; sysPara->status.airPushing = 1; sysPara->status.airPushingDone = 0; @@ -1415,7 +1355,6 @@ void MainWidget::on_m_RightBtn_clicked() QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10; -// onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10); } } @@ -1440,28 +1379,24 @@ void MainWidget::on_m_LeftBtn_clicked() QMessageBox::Ok | QMessageBox::Cancel); if (ret == QMessageBox::Ok){ sysPara->status.currReclaimTankPos = 0; -// onReclainTankPositionChanged(0); } } sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); - enablePrintButton(SIMULATE_PRINTING_MODE); sysPara->devOp->highVoltageCtrl(0); -// sysPara->status.reclaimTankstatus = 2; -// setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭")); - setReclaimStatus(false, 100); - if(!sysPara->para.reclaimTankTime){ -// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); - } + sysPara->status.currReclaimOperationCnt = 0; sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainOpenAppending = false; sysPara->status.reclainCloseAppending = true; - sysPara->status.reclaimBlockedCnt = 0; - - enablePrintButton(false); - + sysPara->status.reclaimTankstatus = 2; stopFlashReclaimOpenBtn(); + + // 收回收槽,把READY状态切换回自检状态(仅仅状态机的自检状态,不自检) + auto mgr = PrinterStateManager::instance(); + if (mgr && mgr->isState(PrinterState::READY)) { + mgr->requestTransition(PrinterEvent::ReSelfCheck); + } } } @@ -1680,20 +1615,9 @@ void MainWidget::updateSysStatusToUI(){ //100ms m_PrintDisplay->updateSysStatusToUI(); } } -// emit setCNT1Select(found_CNT1); -// emit setCNT2Select(found_CNT2); -// emit setCNT3Select(found_CNT3); - if(sysPara->para.isEnableGetDataButton) - { - // ui->pushButtonGetData->setEnabled(true); - } - else - { - // ui->pushButtonGetData->setEnabled(false); - } - if(TEST_MODE) - enablePrintButton(true); -// ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32)); + +// if(TEST_MODE) +// enablePrintButton(true); if(oldSizeFpga != sysPara->status.sizeFPGA){ oldSizeFpga = sysPara->status.sizeFPGA; } @@ -2132,26 +2056,6 @@ void MainWidget::updatePrintDisplayLabel() void MainWidget::RefreshStatusLight(){//100ms if(sysPara){ - static int hdint = 0; - static int reclainTankReachEnd = 0; - if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关 - // 检查回收槽是否到底,到底才能打印 - if (sysPara->status.reclainTankReachEnd) { - // sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - enablePrintButton(true); - } else { - enablePrintButton(false); - } - } - hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT); - - if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底 - if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态 - // sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - } - } - reclainTankReachEnd = sysPara->status.reclainTankReachEnd; - if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){ if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关 // ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); @@ -2221,8 +2125,7 @@ void MainWidget::RefreshStatusLight(){//100ms else { // ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); alarmStatus.highVoltageFault = DEV_STATUS_RED; - if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 -// on_pushButtonPausePrint_pressed(); + if(sysPara->status.isPrinting){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 on_m_StopBtn_clicked(); LogInfo::setRunStatusText(tr("高压故障,暂停打印")); setRunStatus(tr("高压故障,暂停打印")); @@ -2314,12 +2217,6 @@ void MainWidget::RefreshStatusLight(){//100ms else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--; } -// if(startPrintingFlag ){ -// if(printintFlag) -// setRunStatus(tr("正在喷印...")); -// else -// setRunStatus(tr("暂停喷印...")); -// } if(sysPara->status.isPrinting && sysPara->status.selfCheckDone){ setRunStatus(tr("正在喷印.......")); @@ -2538,11 +2435,8 @@ bool MainWidget::checkTriggerMode() } #endif - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; + bool MaxCol4000 = sysPara->status.flagOfNo67FPGA; + if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); return false; @@ -2622,7 +2516,7 @@ void MainWidget::onLabelFaultRusumePressed(){ sysPara->devOp->mainInkCtrl(); emit clearPressureFault(); } - if(printintFlag) { + if(sysPara->status.isPrinting) { sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); } } diff --git a/mainwidget.h b/mainwidget.h index 07095e5..611ac08 100644 --- a/mainwidget.h +++ b/mainwidget.h @@ -60,8 +60,6 @@ public: QString strWarring,strTitle; bool m_2sFlag; - bool printintFlag; //判断当前是否在打印 - bool startPrintingFlag; bool pushButtonFlag; @@ -89,7 +87,8 @@ public: void setRunStatus(QString str, bool enbRoll = true, bool warn = false); void enablePrintButton(bool); - int getCurrPrintStatus(); + void enabeleStartBtn(bool); + void enabeleStopBtn(bool); // 回收槽开启按钮状态设置 void setReclaimOpenBtnStatus(bool enable); @@ -107,10 +106,8 @@ public: /** * @brief 设置回收槽开关状态 - * @param isOpen true:开;false:关 - * @param rate 回收槽开启程度,0~100; */ - void setReclaimStatus(bool isOpen, int rate = 0); + void updateReclaimStatus(); void updateSysStatusToUI(); //重载 //Mainwindow获取机器总状态