diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index eab4edc..cd612d9 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -37,8 +37,8 @@ InkJetPrinter::InkJetPrinter(QWidget* parent) QThread::sleep(3); qApp->installEventFilter(this); - QString ARM_Version; - ARM_Version.sprintf("%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID); + // QString ARM_Version; + // ARM_Version.sprintf("%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID); // ui.label_version->setText(QString("A%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12) // .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) ); @@ -174,6 +174,8 @@ void InkJetPrinter::init() connect(m_MainInstruction,&MainInstruction::newFileBtnClick,m_TestPrintWidget,&TestPrintWidget::on_newfileButton_pressed); + connect(m_MainInstruction, &MainInstruction::superJmAccepted, this, &InkJetPrinter::resetRFIDStatus); + // connect(myInputMethod,&MyInputMethod::sendEnterClickedSignal,&TestPrintWidget::onEditItemDone); // connect(myInputMethod,SIGNAL(sendEnterClickedSignal()),m_TestPrintWidget,SLOT(onEditItemDone())); connect(m_DateVarSet,SIGNAL(backSpaceBtn()),myInputMethod,SLOT(backSapceButtonDel())); @@ -292,7 +294,7 @@ void InkJetPrinter::slt_warningMaintenance() { // 距离维护时间结束大于30天,判断运行时间的检测 if (timeoutDay >= 30) { - double runHours = sysPara->RFIDPara.runTime / 60.0 / 60.0; + double runHours = sysPara->RFIDPara.runtimeMs / 1000.0 / 60.0 / 60.0; double hours = sysPara->RFIDPara.maintenanceHours - runHours; QString str; if (hours >= 0) { @@ -1039,10 +1041,11 @@ void InkJetPrinter::timerHandler(void){ // 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛 // 不清零 u,从当前控制字开始,避免突变 u = (float)sysPara->para.gearPumpValue; - m_rampDone = false; - m_adjSkip = 0; - m_lastPressure = 0; - m_stableCount = 0; + // m_rampDone = false; + // m_adjSkip = 0; + // m_lastPressure = 0; + // m_stableCount = 0; + autoControlValvePump(); for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; m_bufIdx = 0; @@ -2174,28 +2177,13 @@ void InkJetPrinter::autoControlValvePump(void) } /*----------------------------------循环阀-------------------------------------------*/ - 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); - } + if(!sysPara->status.selfCheckDone) { + if(!sysPara->devOp->isCycleValveOpen()) { + sysPara->devOp->controlCycleValve(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); - } + autoControlCycleValve(); } /*----------------------------------泄压阀-------------------------------------------*/ @@ -2438,6 +2426,33 @@ void InkJetPrinter::autoControlValvePump(void) } } +void InkJetPrinter::autoControlCycleValve() +{ + if(!sysPara->status.selfCheckDone || (sysPara->status.flagOfPowerOnMode && sysPara->para.gearPumpEnable)){ + // if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 //定时开机循环时隔膜泵不开关循环阀 + // sysPara->devOp->controlCycleValve(true); + // } + cycleValveRunForSelfCheck(); + if(sysPara->status.flagOfPowerOnMode) + { + 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::cycleValveRunForSelfCheck(){ static int cycleValveOpenCnt = 0; @@ -2862,52 +2877,9 @@ void InkJetPrinter::warningHandler(int type){ LogInfo::setRunStatusText("Next Hour Warning"); } int inkTime = 0, solventTime = 0; - if (type == CARD_TYPE::INK) { - // 只有当报警标志为true时,文件的时间才会更新,此时才读取 - if(sysPara->para.flagOfInkWarning) { - int dateTimeDiff = updateWarningTime(type); - if (dateTimeDiff > 60*60*24*2) { - sysPara->RFIDPara.inkCardTimeOut = true; - } - inkTime = sysPara->RFIDPara.inkCardTimeOut ? 49 : (48 - dateTimeDiff/60/60); - } - if(sysPara->RFIDPara.inkCardTimeOut && flagOfWarning){ - if(++sysPara->status.showInkWarningNumber >= INTERVAL_AFTER48H){ - warningShow(CARD_TYPE::INK,49); - sysPara->status.showInkWarningNumber = 0;//是否有必要保存? - sysPara->saveRFIDPara(); - flagOfWarning = false; - return; - } - } - sysPara->saveRFIDPara(); - } - else if(type == CARD_TYPE::SOLVENT) { - //只有当报警标志为true时,文件的时间才会更新,此时才读取 - if (sysPara->para.flagOfSolventWarning) { - int dateTimeDiff = updateWarningTime(type); - if (dateTimeDiff > 60*60*24*2) { - sysPara->RFIDPara.solventCardTimeOut = true; - } - if (!sysPara->RFIDPara.solventCardTimeOut) - solventTime = 48- dateTimeDiff / 60 / 60; - } - - if(sysPara->RFIDPara.solventCardTimeOut && flagOfWarning){ - if(++sysPara->status.showSolventWarningNumber >= INTERVAL_AFTER48H){ - warningShow(CARD_TYPE::SOLVENT,49); - sysPara->status.showSolventWarningNumber = 0; - sysPara->saveRFIDPara(); - flagOfWarning = false; - return; - } - } - - sysPara->saveRFIDPara(); - } /***********处理保养到期提示start******************/ - else if(type == CARD_TYPE::MAINTENANCE){ + if(type == CARD_TYPE::MAINTENANCE){ if(sysPara->RFIDPara.needMaintenance){//保养到期,喷码机禁用 warningShow(CARD_TYPE::MAINTENANCE,timeoutDay); } @@ -2925,11 +2897,6 @@ void InkJetPrinter::warningHandler(int type){ // 超过48小时后,不会执行这一段 if(flagOfWarning){ //48小时后禁用,小时=第一次提示时间到当前时间的间隔秒数/60/60 - if (type == INK && sysPara->para.flagOfInkWarning) - warningShow(type,inkTime); - else if (type == SOLVENT && sysPara->para.flagOfSolventWarning) - warningShow(type,solventTime); - flagOfWarning = false; } } @@ -3077,9 +3044,10 @@ void InkJetPrinter::initRunTimeCtrl() }); connect(ctrl_runTime, &RunTimeCtrl::sig_saveRunTime, this, [=]() { // 运行时间处理 - sysPara->RFIDPara.runTime += 30; + sysPara->RFIDPara.runtimeMs = ctrl_runTime->totalRuntimeMs(); sysPara->saveRFIDPara(); }); + // 弹窗提示 connect(ctrl_runTime, &RunTimeCtrl::sig_alertTimeout, this, &InkJetPrinter::slt_warningMaintenance); @@ -3098,175 +3066,336 @@ void InkJetPrinter::initRFIDManager() { if (manager_rfid == nullptr) { manager_rfid = RFIDManager::instance(); - connect(manager_rfid, &RFIDManager::sig_showMsg, - this, &InkJetPrinter::slt_showMsg); - connect(manager_rfid,SIGNAL(sig_maintenanceShow()), - m_MainInstruction,SLOT(maintenanceDialogShow())); - - auto checkReclaimOpenBtn = [this]() { - if(sysPara->status.selfCheckDone && (sysPara->status.reclaimTankstatus == 2 || sysPara->status.reclaimTankstatus == 6)) { - m_MainWidget->setReclaimOpenBtnStatus(true); - } - }; - - connect(manager_rfid, &RFIDManager::sig_inkCardProgressFinished, this, checkReclaimOpenBtn); - connect(manager_rfid, &RFIDManager::sig_solventProgressFinished, this, checkReclaimOpenBtn); } + + connect(manager_rfid, &RFIDManager::sig_showMsg, + this, &InkJetPrinter::slt_showMsg); + connect(manager_rfid,SIGNAL(sig_maintenanceShow()), + m_MainInstruction,SLOT(maintenanceDialogShow())); + + auto checkReclaimOpenBtn = [this]() { + // if(sysPara->status.selfCheckDone && (sysPara->status.reclaimTankstatus == 2 || sysPara->status.reclaimTankstatus == 6)) { + // m_MainWidget->setReclaimOpenBtnStatus(true); + // } + }; + + connect(manager_rfid, &RFIDManager::sig_inkCardProgressFinished, this, [this](){ + sysPara->RFIDPara.needInkCard = false; + sysPara->saveRFIDPara(); + + if(!sysPara->RFIDPara.addedInk) { + slt_showMsg(tr("刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中")); + } + else { + slt_showMsg(tr("刷墨水卡成功!")); + } + }); + + connect(manager_rfid, &RFIDManager::sig_solventProgressFinished, this, [this](){ + sysPara->RFIDPara.needSolventCard = false; + sysPara->saveRFIDPara(); + + if(!sysPara->RFIDPara.addedSolvent) { + slt_showMsg(tr("刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中")); + } + else { + slt_showMsg(tr("刷溶剂卡成功!")); + } + }); } + +#define MAX_WARNING_TIME_HOUR 48 +#define WARNING_INTERVAL_SEC 3600 + +#ifdef BNS_DEBUG + +#undef MAX_WARNING_TIME_HOUR +#undef WARNING_INTERVAL_SEC + +#define MAX_WARNING_TIME_HOUR 10 +#define WARNING_INTERVAL_SEC 20 + +#endif + +void InkJetPrinter::resetRFIDStatus() +{ + if(!sysPara) + return; + + // 停止刷卡请求 + if(manager_rfid) { + manager_rfid->requireInkCard(false); + manager_rfid->requireSolventCard(false); + } + + sysPara->RFIDPara.needInkCard = false; + sysPara->RFIDPara.needSolventCard = false; + + sysPara->RFIDPara.inkCardTimeOut = false; + sysPara->RFIDPara.solventCardTimeOut = false; + + sysPara->saveRFIDPara(); + sysPara->saveParaToFile(); + + LogInfo::setRunStatusText("RFID/ink/solvent flows terminated by resetRFIDStatus"); + QMessageBox::information(this, "", "RFID progress has been cleaned.", QMessageBox::Ok); +} + +/** + * @brief 处理墨水警告 + * 如果发生墨水警告,则进入 加墨水&刷卡 流程。 + * 该流程要求 用户加入墨水并且刷了对应的墨水卡 才退出流程。 + * 如果流程没有完成,则每隔一个小时提示一次,如果超过48小时,则sysPara->RFIDPara.inkCardTimeOut = true,禁用喷码机 + * 该流程不受关机影响 + * + * 该函数 使用定时器 1s 调用一次 + * + */ void InkJetPrinter::handleWarnInk() { - static bool logFlag_inkCard = 1; // 每次启动提示一次即可 - if(!sysPara->para.flagOfInkWarning){ - if(sysPara->status.statWarn & WARN_STATUS_INK_WARN) - sysPara->status.inkWarningCnt++; // 累计警报10次就提示 - else { - sysPara->status.inkWarningCnt = 0; - } - - if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME){ - - // TO RFIDManager - - sysPara->para.flagOfInkWarning = true; - manager_rfid->setInkCardFirstPrompt(true); - QString strCurDateTime = QDateTime::currentDateTime().toString("yyMMddhhmmss"); - LogInfo::setRunStatusText("Ink warning."); - qDebug()<<"墨水液位报警"; - if(sysPara->para.inkWarnDate == 0){ - sysPara->para.inkWarnDate = strCurDateTime.mid(0,6).toInt(); - sysPara->para.inkWarnTime = strCurDateTime.mid(6,6).toInt(); - } - - warningShow(1, 48); - - sysPara->saveParaToFile(); - } + if(!sysPara || !manager_rfid) + return; + + // 墨水盒警告抖动处理 + if(sysPara->status.statWarn & WARN_STATUS_INK_WARN) { + sysPara->status.inkWarningCnt = qMax(0, sysPara->status.inkWarningCnt); + sysPara->status.inkWarningCnt++; // 累计警报10次就提示 } - else{ - - if(logFlag_inkCard){ - logFlag_inkCard = 0; - QString strDate = QString::number(sysPara->para.inkWarnDate); - QString strTime = QString::number(sysPara->para.inkWarnTime); - QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); - QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); - QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); - QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); - QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); - QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); - QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; - LogInfo::setRunStatusText(tr("ink Warning at: %1").arg(strDateTime)); - qDebug()<<"ink Warning at:"<status.inkWarningCnt = qMin(0, sysPara->status.inkWarningCnt); + --sysPara->status.inkWarningCnt; } - if(sysPara->para.flagOfInkWarning){ - if(!sysPara->RFIDPara.needInkCard){ - // 软件启动后第一次提示的时间 - QDateTime curDateTime = QDateTime::currentDateTime(); - QByteArray curDateTimestr = curDateTime.toString("yyyy-MM-dd HH::mm::ss").toUtf8(); - QFile file("/home/plg/inkRFIDTime.txt"); - if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){ - qDebug()<<"Open inkRFIDTime Failure."; - LogInfo::setRunStatusText("Open inkRFIDTime Failure."); - } - int ret = file.write(curDateTimestr); - if(ret <= 0){ - qDebug()<<"Write inkRFIDTime Failure."; - LogInfo::setRunStatusText("Write inkRFIDTime Failure."); - } - file.close(); - - sysPara->RFIDPara.needInkCard = true; - sysPara->saveRFIDPara(); - } - warningHandler(CARD_TYPE::INK); - // 状态正常但是需要刷卡,说明此时先加的墨水,后面再刷卡 - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) - && sysPara->RFIDPara.needInkCard){ - + // 墨水被加入后处理 + if(sysPara->status.inkWarningCnt <= -5 && sysPara->RFIDPara.inInkAndRFIDProgress) { + if(!sysPara->RFIDPara.addedInk) { sysPara->RFIDPara.addedInk = true; + sysPara->saveRFIDPara(); + if(sysPara->RFIDPara.needInkCard) { + slt_showMsg(tr("请及时使用墨水盒附带的IC卡激活墨水盒")); + } + } + } + + // 墨水盒空,进入 刷卡&加墨水 流程 + if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME && sysPara->RFIDPara.inInkAndRFIDProgress == 0) { + + sysPara->RFIDPara.addedInk = false; + sysPara->RFIDPara.needInkCard = true; + sysPara->status.showInkWarningNumber = 0; + sysPara->RFIDPara.inInkAndRFIDProgress = 1; + + QString strCurDateTime = QDateTime::currentDateTime().toString("yyMMddhhmmss"); + LogInfo::setRunStatusText("Ink warning."); + qDebug()<<"墨水液位报警"; + + sysPara->para.inkWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.inkWarnTime = strCurDateTime.mid(6,6).toInt(); + + slt_showMsg(tr("请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR)); + + sysPara->saveParaToFile(); + sysPara->saveRFIDPara(); + } + + // 放在这里是为了防止在 刷卡&加墨水 流程中,用户没有刷卡就关机了。关机后再开机,仍然需要 刷卡&加墨水 才能继续使用喷码机。 + if(sysPara->RFIDPara.needInkCard) + manager_rfid->requireInkCard(); + + + // 计算刷卡时间间隔 + + QDateTime inkWarnDateTime = QDateTime::fromString(QString("20%1%2"). + arg(sysPara->para.inkWarnDate, 6, 10, QChar('0')). + arg(sysPara->para.inkWarnTime, 6, 10, QChar('0')), "yyyyMMddhhmmss"); + + if (!inkWarnDateTime.isValid()) { + // 数据异常时,重置为当前时间并持久化 + QDateTime now = QDateTime::currentDateTime(); + QString s = now.toString("yyMMddhhmmss"); + sysPara->para.inkWarnDate = s.mid(0,6).toInt(); + sysPara->para.inkWarnTime = s.mid(6,6).toInt(); + sysPara->saveParaToFile(); + inkWarnDateTime = now; + } + + // 墨水卡未刷,或者没有加墨水,每隔一个小时提示一次。 + if((!sysPara->RFIDPara.addedInk || sysPara->RFIDPara.needInkCard) && sysPara->RFIDPara.inInkAndRFIDProgress != 0) { + + auto differHours = inkWarnDateTime.secsTo(QDateTime::currentDateTime()) / WARNING_INTERVAL_SEC; + + // 如果differHours小于sysPara->status.showInkWarningNumber,说明系统时间被往前修改过。此时调整开始时间,直接进入超时状态。 + // 我们让用户承担这个风险,直接进入超时状态,用户需要刷卡才能继续使用喷码机。 + if(differHours < sysPara->status.showInkWarningNumber) { + auto now = QDateTime::currentDateTime(); + auto newWarnDateTime = now.addSecs(-(MAX_WARNING_TIME_HOUR + 1) * 3600); // 直接进入超时状态,设置为当前时间的前49小时 + auto str = newWarnDateTime.toString("yyMMddhhmmss"); + sysPara->para.inkWarnDate = str.mid(0,6).toInt(); + sysPara->para.inkWarnTime = str.mid(6,6).toInt(); + + LogInfo::setRunStatusText("Detected system time rollback; forcing ink warn timeout."); + differHours = newWarnDateTime.secsTo(now) / WARNING_INTERVAL_SEC; + sysPara->status.showInkWarningNumber = differHours - 1; + sysPara->saveParaToFile(); + sysPara->saveRFIDPara(); + } + + // if(differHours >= sysPara->status.showInkWarningNumber) { + if(differHours > sysPara->status.showInkWarningNumber) { + + // 理论上differHours只会比 sysPara->status.showInkWarningNumber 大 1, 如果大于1,说明系统时间被被往后修改过或者关过机。 + + if(differHours > MAX_WARNING_TIME_HOUR) + slt_showMsg(tr("墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作!").arg(MAX_WARNING_TIME_HOUR)); + else + slt_showMsg(tr("请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours)); + + sysPara->status.showInkWarningNumber = differHours; + sysPara->saveRFIDPara(); + } + + // 进入超时状态,禁用喷码机 + if(differHours > MAX_WARNING_TIME_HOUR) { + sysPara->RFIDPara.inkCardTimeOut = true; sysPara->saveRFIDPara(); } } + // 如果用户已经刷了墨水卡,并且加了墨水,则清除 刷卡&加墨水 流程 + if(sysPara->RFIDPara.addedInk && !sysPara->RFIDPara.needInkCard && sysPara->RFIDPara.inInkAndRFIDProgress != 0) { + sysPara->status.showInkWarningNumber = 0; + sysPara->RFIDPara.inkCardTimeOut = false; + sysPara->RFIDPara.inInkAndRFIDProgress = 0; + sysPara->saveRFIDPara(); + manager_rfid->requireInkCard(false); + + LogInfo::setRunStatusText("Ink card has been added, and the ink card requirement has been cleared."); + + if(sysPara->status.selfCheckDone && (sysPara->status.reclaimTankstatus == 2 || sysPara->status.reclaimTankstatus == 6)) { + m_MainWidget->setReclaimOpenBtnStatus(true); + } + } } void InkJetPrinter::handleWarnSolvent() { - static bool logFlag_solventCard = 1; // 每次启动提示一次即可 - if(!sysPara->para.flagOfSolventWarning){ - if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN) - sysPara->status.solventWarningCnt++; - else{ - sysPara->status.solventWarningCnt = 0; - } + if(!sysPara || !manager_rfid) + return; - if(sysPara->status.solventWarningCnt >= DETECT_WARNING_TIME){ - sysPara->para.flagOfSolventWarning = true; - manager_rfid->setSolventCardFirstPrompt(true); - QDateTime curDateTime = QDateTime::currentDateTime(); - QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); - LogInfo::setRunStatusText("Solvent warning."); - qDebug()<<"溶剂液位报警"; - if(sysPara->para.solventWarnDate == 0){ - sysPara->para.solventWarnDate = strCurDateTime.mid(0,6).toInt(); - sysPara->para.solventWarnTime = strCurDateTime.mid(6,6).toInt(); - } - - warningShow(2, 48); - - sysPara->saveParaToFile(); - } + // 溶剂液位抖动处理 + if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN) { + sysPara->status.solventWarningCnt = qMax(0, sysPara->status.solventWarningCnt); + sysPara->status.solventWarningCnt++; // 累计警报10次就提示 } - else{ - if(logFlag_solventCard){ - logFlag_solventCard = 0; - QString strDate = QString::number(sysPara->para.solventWarnDate); - QString strTime = QString::number(sysPara->para.solventWarnTime); - QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); - QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); - QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); - QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); - QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); - QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); - QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; - LogInfo::setRunStatusText(tr("solvent Warning at: %1").arg(strDateTime)); - qDebug()<<"solvent Warning at:"<status.solventWarningCnt = qMin(0, sysPara->status.solventWarningCnt); + --sysPara->status.solventWarningCnt; } - if(sysPara->para.flagOfSolventWarning){ - if(!sysPara->RFIDPara.needSolventCard){ - QDateTime curDateTime = QDateTime::currentDateTime(); - QByteArray curDateTimestr = curDateTime.toString("yyyy-MM-dd HH::mm::ss").toUtf8(); - QFile file("/home/plg/solventRFIDTime.txt"); - if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){ - qDebug()<<"Open solventRFIDTime Failure."; - LogInfo::setRunStatusText("Open solventRFIDTime Failure."); - } - int ret = file.write(curDateTimestr); - if(ret <= 0){ - qDebug()<<"Write solventRFIDTime Failure."; - LogInfo::setRunStatusText("Write solventRFIDTime Failure."); - } - file.close(); - - sysPara->RFIDPara.needSolventCard = true; - sysPara->saveRFIDPara(); - } - warningHandler(CARD_TYPE::SOLVENT); - // 如果溶剂报警,说明此时先加的溶剂,后面再刷卡 - if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN) - && sysPara->RFIDPara.needSolventCard){ - + // 溶剂被加入后处理 + if(sysPara->status.solventWarningCnt <= -5 && sysPara->RFIDPara.inSolventAndRFIDProgress) { + if(!sysPara->RFIDPara.addedSolvent) { sysPara->RFIDPara.addedSolvent = true; sysPara->saveRFIDPara(); + + if(sysPara->RFIDPara.needSolventCard) { + slt_showMsg(tr("请及时使用溶剂盒附带的IC卡激活溶剂盒")); + } } } + // 溶剂盒空,进入 刷卡&加溶剂 流程 + if(sysPara->status.solventWarningCnt >= DETECT_WARNING_TIME && sysPara->RFIDPara.inSolventAndRFIDProgress == 0) { + QDateTime curDateTime = QDateTime::currentDateTime(); + QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); + LogInfo::setRunStatusText("Solvent warning."); + qDebug()<<"溶剂液位报警"; + sysPara->para.solventWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.solventWarnTime = strCurDateTime.mid(6,6).toInt(); + + sysPara->RFIDPara.addedSolvent = false; + sysPara->RFIDPara.needSolventCard = true; + sysPara->status.showSolventWarningNumber = 0; + + sysPara->RFIDPara.inSolventAndRFIDProgress = 1; + + slt_showMsg(tr("请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR)); + + sysPara->saveParaToFile(); + sysPara->saveRFIDPara(); + } + + // 放在这里是为了防止在 刷卡&加溶剂 流程中,用户没有刷卡就关机了。关机后再开机,仍然需要 刷卡&加溶剂 才能继续使用喷码机。 + if(sysPara->RFIDPara.needSolventCard) + manager_rfid->requireSolventCard(); + + // 计算刷卡时间间隔 + + QDateTime solventWarnDateTime = QDateTime::fromString(QString("20%1%2"). + arg(sysPara->para.solventWarnDate, 6, 10, QChar('0')). + arg(sysPara->para.solventWarnTime, 6, 10, QChar('0')), "yyyyMMddhhmmss"); + + if (!solventWarnDateTime.isValid()) { + // 数据异常时,重置为当前时间并持久化 + QDateTime now = QDateTime::currentDateTime(); + QString s = now.toString("yyMMddhhmmss"); + sysPara->para.solventWarnDate = s.mid(0,6).toInt(); + sysPara->para.solventWarnTime = s.mid(6,6).toInt(); + sysPara->saveParaToFile(); + solventWarnDateTime = now; + } + + // 溶剂卡未刷,或者没有加溶剂,每隔一个小时提示一次。 + if((!sysPara->RFIDPara.addedSolvent || sysPara->RFIDPara.needSolventCard) && sysPara->RFIDPara.inSolventAndRFIDProgress != 0) { + auto differHours = solventWarnDateTime.secsTo(QDateTime::currentDateTime()) / WARNING_INTERVAL_SEC; + + // 如果differHours小于sysPara->status.showSolventWarningNumber,说明系统时间被往前修改过。此时调整开始时间,直接进入超时状态。 + if(differHours < sysPara->status.showSolventWarningNumber) { + auto now = QDateTime::currentDateTime(); + auto newWarnDateTime = now.addSecs(-(MAX_WARNING_TIME_HOUR + 1) * 3600); // 直接进入超时状态,设置为当前时间的前49小时 + auto str = newWarnDateTime.toString("yyMMddhhmmss"); + sysPara->para.solventWarnDate = str.mid(0,6).toInt(); + sysPara->para.solventWarnTime = str.mid(6,6).toInt(); + + LogInfo::setRunStatusText("Detected system time rollback; forcing solvent warn timeout."); + differHours = newWarnDateTime.secsTo(now) / WARNING_INTERVAL_SEC; + sysPara->status.showSolventWarningNumber = differHours - 1; + sysPara->saveParaToFile(); + } + + if(differHours > sysPara->status.showSolventWarningNumber) { + if(differHours > MAX_WARNING_TIME_HOUR) + slt_showMsg(tr("溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作!").arg(MAX_WARNING_TIME_HOUR)); + else + slt_showMsg(tr("请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours)); + + sysPara->status.showSolventWarningNumber = differHours; + sysPara->saveRFIDPara(); + } + + // 进入超时状态,禁用喷码机 + if(differHours > MAX_WARNING_TIME_HOUR) { + sysPara->RFIDPara.solventCardTimeOut = true; + sysPara->saveRFIDPara(); + } + } + + // 如果用户已经刷了溶剂卡,并且加了溶剂,则清除 刷卡&加溶剂 流程 + if(sysPara->RFIDPara.addedSolvent && !sysPara->RFIDPara.needSolventCard && sysPara->RFIDPara.inSolventAndRFIDProgress != 0) { + sysPara->status.showSolventWarningNumber = 0; + sysPara->RFIDPara.inSolventAndRFIDProgress = 0; + sysPara->RFIDPara.solventCardTimeOut = false; + sysPara->saveRFIDPara(); + manager_rfid->requireSolventCard(false); + + LogInfo::setRunStatusText("Solvent card has been added, and the solvent card requirement has been cleared."); + + if(sysPara->status.selfCheckDone && (sysPara->status.reclaimTankstatus == 2 || sysPara->status.reclaimTankstatus == 6)) { + m_MainWidget->setReclaimOpenBtnStatus(true); + } + } } #endif diff --git a/InkJetPrinter.h b/InkJetPrinter.h index 301525d..93725db 100644 --- a/InkJetPrinter.h +++ b/InkJetPrinter.h @@ -108,6 +108,9 @@ private: void init(); void initSerialPorts(); void autoControlValvePump(); + + void autoControlCycleValve(); + void pressureAdj(); void autoControlHeater(); void cycleValveRunForSelfCheck(); @@ -156,6 +159,9 @@ private: QDateTime solventWarnTime = QDateTime(); #endif private slots: + + void resetRFIDStatus(); + void onDlgFileOpen(const QString& filename); void restartPrintWhenSwitchedWorkFile(bool isPrinting); diff --git a/MainInstruction.cpp b/MainInstruction.cpp index deea59e..094c188 100644 --- a/MainInstruction.cpp +++ b/MainInstruction.cpp @@ -47,11 +47,13 @@ MainInstruction::MainInstruction(QWidget *parent) : //30s刷新一次总运行时间 connect(RunTimeCtrl::instance(), &RunTimeCtrl::sig_saveRunTime , this, [=]() { - if (sysPara) - MTimeSetting->updateUI(sysPara->RFIDPara); + if (sysPara){ + RFIDPara_t rfidPara = sysPara->RFIDPara; + rfidPara.runtimeMs = RunTimeCtrl::instance()->totalRuntimeMs(); + MTimeSetting->updateUI(rfidPara); + } }); - applyStyleSheet(); // 授权 @@ -142,7 +144,7 @@ void MainInstruction::ondialogAuthorizationAccepted(){ { #ifdef __RFID_CARD /**********超级密码,除了维护时间的5个参数,其他参数清零*****************/ - memset(&sysPara->RFIDPara,0,sizeof(sysPara->RFIDPara)); + sysPara->RFIDPara = RFIDPara_t(); RunTimeCtrl::instance()->authorizationAccepted(&sysPara->RFIDPara); sysPara->saveRFIDPara(); QMessageBox::warning(0,tr("提示"),tr("RFID卡清零!") ); @@ -150,11 +152,15 @@ void MainInstruction::ondialogAuthorizationAccepted(){ sysPara->para.flagOfInkWarning = false; sysPara->para.flagOfSolventWarning = false; sysPara->status.needMaintenanceRemind = false; - sysPara->RFIDPara.inkCardTimeOut = false; - sysPara->RFIDPara.solventCardTimeOut = false; + + // sysPara->RFIDPara.inkCardTimeOut = false; + // sysPara->RFIDPara.solventCardTimeOut = false; + sysPara->RFIDPara.needMaintenance = false; - sysPara->RFIDPara.needInkCard = false; - sysPara->RFIDPara.needSolventCard = false; + + // sysPara->RFIDPara.needInkCard = false; + // sysPara->RFIDPara.needSolventCard = false; + QDate curDate = QDate::currentDate(); int curdate = curDate.toString("yyMMdd").toInt(); sysPara->RFIDPara.maintenanceDate = curdate; // 维护日期 @@ -166,6 +172,8 @@ void MainInstruction::ondialogAuthorizationAccepted(){ sysPara->para.solventWarnTime = 0; sysPara->saveParaToFile(); sysPara->saveRFIDPara(); + + emit superJmAccepted(); #endif } else if( dlgInputAddr->checkSupperJm(authString)) diff --git a/MainInstruction.h b/MainInstruction.h index 9426be6..c33cacc 100644 --- a/MainInstruction.h +++ b/MainInstruction.h @@ -36,6 +36,8 @@ signals: void sendButtonClickedSignal(int index); void newFileBtnClick(); + void superJmAccepted(); + private slots: void onGraphicsEditBtnClicked(); diff --git a/SysPara.cpp b/SysPara.cpp index bcb32a9..080370e 100644 --- a/SysPara.cpp +++ b/SysPara.cpp @@ -70,7 +70,7 @@ SysPara::SysPara(void): status.flagOfNo67FPGA=false; #ifdef __RFID_CARD if(!loadRFIDPara()){ - memset(&RFIDPara,0,sizeof(RFIDPara)); + RFIDPara = RFIDPara_t{}; saveRFIDPara(); } #endif @@ -1024,7 +1024,7 @@ void SysPara::saveRFIDPara() out << RFIDPara.maintenanceInterval; out << RFIDPara.maintenanceEndDate; out << RFIDPara.needMaintenance; - out << RFIDPara.runTime; + out << (unsigned int)(RFIDPara.runtimeMs / 1000); out << RFIDPara.maintenanceHours; out << RFIDPara.addedInk; out << RFIDPara.addedSolvent; @@ -1032,6 +1032,7 @@ void SysPara::saveRFIDPara() out << RFIDPara.cardSolvent; out << para.rfidCountDown; out << status.showInkWarningNumber << status.showSolventWarningNumber; + out << RFIDPara.inInkAndRFIDProgress << RFIDPara.inSolventAndRFIDProgress << RFIDPara.runtimeMs; if(!file.flush()){ LogInfo::setRunStatusText("RFID Para save Failed 1"); @@ -1057,6 +1058,11 @@ bool SysPara::loadRFIDPara() QDataStream in(&file); in.setVersion(QDataStream::Qt_4_6); // Set the version compatible with Qt 4.8.5 + uint oldRuntimeSec = 0; + + RFIDPara.inInkAndRFIDProgress = 0; + RFIDPara.inSolventAndRFIDProgress = 0; + RFIDPara.runtimeMs = 0; in >> RFIDPara.PrintInkDots; in >> RFIDPara.InkEmptyCnt; @@ -1072,7 +1078,7 @@ bool SysPara::loadRFIDPara() in >> RFIDPara.maintenanceInterval; in >> RFIDPara.maintenanceEndDate; in >> RFIDPara.needMaintenance; - in >> RFIDPara.runTime; + in >> oldRuntimeSec; in >> RFIDPara.maintenanceHours; in >> RFIDPara.addedInk; in >> RFIDPara.addedSolvent; @@ -1080,6 +1086,13 @@ bool SysPara::loadRFIDPara() in >> RFIDPara.cardSolvent; in >> para.rfidCountDown; in >> status.showInkWarningNumber >> status.showSolventWarningNumber; + in >> RFIDPara.inInkAndRFIDProgress >> RFIDPara.inSolventAndRFIDProgress >> RFIDPara.runtimeMs; + + // 兼容获取旧的运行时间,如果新的运行时间为0且旧的运行时间大于0,则使用旧的运行时间 + // 新时间所占用的8字节空间,在旧实现上也是没有用的,它们总是被写入为0,因此RFIDPara.runtimeMs为 0 ,表示软件刚刚升级,第一次运行,应该使用旧的运行时间 + if(RFIDPara.runtimeMs == 0){ + RFIDPara.runtimeMs = oldRuntimeSec * 1000; + } file.close(); return true; diff --git a/SysPara.h b/SysPara.h index 40211d1..2e7e37a 100644 --- a/SysPara.h +++ b/SysPara.h @@ -804,8 +804,8 @@ typedef struct { bool eleEyeEdgetTriggerExternal; bool synTriggerInner; bool synTriggerExternal; - bool flagOfInkWarning; //报错累计次数达标,报警标志设为true - bool flagOfSolventWarning; //报错累计次数达标,报警标志设为true + bool flagOfInkWarning __attribute_deprecated_msg__("已经由 RFIDPara_t::inInkAndRFIDProgress 替代, 现在已经不使用"); //报错累计次数达标,报警标志设为true + bool flagOfSolventWarning __attribute_deprecated_msg__("已经由 RFIDPara_t::inSolventAndRFIDProgress 替代, 现在已经不使用"); //报错累计次数达标,报警标志设为true unsigned short rfidCountDown; unsigned int canvasHeight; // 韩国需求中,要求可以设定打印区域的高度,默认为32。 @@ -876,31 +876,36 @@ typedef struct qint16 full_row_delay_table[48]; qint16 pixel_general_dac_parameter[64]; }voltePara_t_No73; + typedef struct { - unsigned int PrintInkDots; - unsigned int InkEmptyCnt; - unsigned int SOLVEmptyCnt; + unsigned int PrintInkDots __attribute_deprecated_msg__("可能是从 VX5 祖传过来的, 但是现在韩国没有用"); + unsigned int InkEmptyCnt __attribute_deprecated_msg__("可能是从 VX4 祖传过来的, 但是现在韩国没有用, VX5也没用"); + unsigned int SOLVEmptyCnt __attribute_deprecated_msg__("可能是从 VX4 祖传过来的, 但是现在韩国没有用, VX5也没用"); unsigned int InkRFIDCnt; unsigned int SOLVRFIDCnt; - unsigned short solventNumber; - bool needInkCard; - bool needSolventCard; - bool inkCardTimeOut; - bool solventCardTimeOut; - unsigned int maintenanceDate; - unsigned int maintenanceInterval; - unsigned int maintenanceEndDate; - bool needMaintenance; - // 运行时间与保养间隔时间 runTime>=maintenanceHours 时提示保养 - unsigned int runTime; // 单位:秒 - unsigned int maintenanceHours; + unsigned short solventNumber __attribute_deprecated_msg__("可能是从 VX5 祖传过来的, 但是现在韩国没有用"); + bool needInkCard = false; + bool needSolventCard = false; + bool inkCardTimeOut = false; + bool solventCardTimeOut = false; + unsigned int maintenanceDate = 0; + unsigned int maintenanceInterval = 0; + unsigned int maintenanceEndDate = 0; + bool needMaintenance = false; + // 运行时间与保养间隔时间 runtimeMs>=maintenanceHours 时提示保养 + unsigned int unused_runTime __attribute_deprecated_msg__("改由 runtimeMs 维护"); // 单位:秒 + unsigned int maintenanceHours = 0; // 已经加过墨水或溶剂 - bool addedInk; - bool addedSolvent; + bool addedInk = false; + bool addedSolvent = false; // 已经刷过墨水或溶剂卡 - bool cardInk; - bool cardSolvent; + bool cardInk __attribute_deprecated_msg__("这个字段与 needInkCard 逻辑重复"); + bool cardSolvent __attribute_deprecated_msg__("这个字段与 needSolventCard 逻辑重复"); + unsigned int inInkAndRFIDProgress = 0; + unsigned int inSolventAndRFIDProgress = 0; + qint64 runtimeMs = 0; // 运行时间,单位毫秒 .这个字段占用的是上面俩弃用字段的空间,兼容VX5的序列化数据 + }RFIDPara_t; #define MDT 0 @@ -1018,7 +1023,8 @@ typedef struct{ unsigned short flight_tm_error:1; unsigned short synPulseCntPer1sH:8; unsigned short synPulseCntPer1s:16; -*/ + */ + unsigned int ink_dot_num:6; //飞过相检头上的墨点数 0x20 unsigned int detect_phase_error:1; unsigned int flight_tm_error:1; @@ -1261,8 +1267,8 @@ typedef struct{ bool flagOfNeedSolventCard; bool flagOfKeyBoardType; unsigned char changed; - unsigned int inkWarningCnt; - unsigned int solventWarningCnt; + int inkWarningCnt; + int solventWarningCnt; unsigned int showInkWarningNumber; unsigned int showSolventWarningNumber; bool needMaintenanceRemind; diff --git a/chinese.ts b/chinese.ts index bec24f2..c0a6641 100644 --- a/chinese.ts +++ b/chinese.ts @@ -1043,12 +1043,12 @@ - + 警告 - + 确定要设置今天为新的保养日期吗? @@ -1943,163 +1943,197 @@ - + 开始自检,请等待%1秒... - - + + 自检完成!!! - + 警告 - + 提示 - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 - + 开始自检,请等待60秒... - - - + + + 正在准备重启,请等待%1秒...... - - ink Warning at: %1 - - - - - solvent Warning at: %1 - - - - - + + 压力泄漏或压力传感器故障! - + 运行中压力泄漏,停齿轮泵! - - + + 定时开机循环完成,准备关机 - + waitPowerOffTime: %1 - + 准备关机 - + 缺少墨水,喷码机不能正常工作! - + 停止打印,自动关闭高压. - + flagOfPowerOnMode: %1 - - + + 电机故障 - + 回收槽到头 - - + + 回收槽卡住或者回收槽开关时间设置错误 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + + + + + 刷墨水卡成功! + + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + + + + + 刷溶剂卡成功! + + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 - + 刷卡倒计时起始时间文件不存在 @@ -2882,7 +2916,7 @@ - + 额外设置 @@ -2903,7 +2937,7 @@ - + 系统授权 @@ -2928,28 +2962,28 @@ - + 提示 - + RFID卡清零! - - + + 取消授权 - + 警告 - + 密码错误:%1 @@ -4335,217 +4369,202 @@ p, li { white-space: pre-wrap; } - - 已经刷过墨水卡,需添加墨水 - - - - + 不需要刷墨水卡! - + 确认要刷墨水卡吗? - + 确认要刷墨水卡吗? %1 秒后将自动确认 - + 刷墨水卡成功! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 - + 刷超级墨水卡失败,请联系厂商。 - - 已经刷过溶剂卡,需添加溶剂 - - - - + 不需要刷溶剂卡! - + 确认要刷溶剂卡吗? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 - + 刷溶剂卡成功! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 - + 刷超级溶剂水卡失败,请联系厂商。 - + 确认要刷保养卡吗? - + 确认要刷保养卡吗? %1 秒后将自动确认 - + 刷超级保养卡失败,请联系厂商。 - + MAC无效卡! - + 无效卡,这张卡已经在%1时使用过 - + 设置读写器密码失败! - + 设置读写器密码成功! - + 设置读写器原始密码失败! - + 设置读写器工作模式失败! - + 设置读写器工作模式成功! - + 查询读写器地址失败 - + 警告 - + 先加墨水后刷卡:成功 - + 先加溶剂后刷卡:成功 - + 13.读卡器故障! - - - 请及时使用墨水盒附带的IC卡激活墨水盒 - 请及时刷墨水卡 - - - - - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - - RunTimeCtrl - + mtDate: %1 - + mtInterval: %1 - + mtEndDate: %1 - + mtFlag: %1 - + timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 + runtimeMs: %1 + + + + maintenanceHours: %1 - + mtDate1: %1 - + mtInterval1: %1 - + mtEndDate1: %1 - + mtFlog1: %1 diff --git a/dialogmaintenancetimesetting.cpp b/dialogmaintenancetimesetting.cpp index fe818c3..6fb0abb 100644 --- a/dialogmaintenancetimesetting.cpp +++ b/dialogmaintenancetimesetting.cpp @@ -9,6 +9,10 @@ DialogMaintenanceTimeSetting::DialogMaintenanceTimeSetting(QWidget *parent) : { ui->setupUi(this); resetSchedule = false; + + #ifdef BNS_DEBUG + ui->spinBoxRuntime->setMinimum(0); + #endif } DialogMaintenanceTimeSetting::~DialogMaintenanceTimeSetting() @@ -25,7 +29,7 @@ int DialogMaintenanceTimeSetting::getInterval(RFIDPara_t* para) QDate curDate = QDate::currentDate(); int curdate = curDate.toString("yyMMdd").toInt(); para->maintenanceDate = curdate; // 维护日期 - para->runTime = 0; + para->runtimeMs = 0; } return 0; } @@ -65,7 +69,7 @@ void DialogMaintenanceTimeSetting::updateUI(RFIDPara_t para) int timeoutDay = curDate.daysTo(mtEndDate); ui->label_MaintenanceTime->setText(QString("%1 Days").arg(timeoutDay)); ui->spinBox->setValue(para.maintenanceInterval); - double h = para.runTime / 60.0 / 60.0; + double h = para.runtimeMs / 1000.0 / 60.0 / 60.0; // 保留两位小数 ui->label_CurRunTime->setText(QString("%1 Hours").arg(QString::number(h, 'f', 2))); ui->spinBoxRuntime->setValue(para.maintenanceHours); diff --git a/dialogmaintenancetimesetting.ui b/dialogmaintenancetimesetting.ui index 813a175..41cfcdb 100644 --- a/dialogmaintenancetimesetting.ui +++ b/dialogmaintenancetimesetting.ui @@ -179,7 +179,7 @@ QPushButton { true - 3000 + 0 20000 diff --git a/english.ts b/english.ts index bec24f2..c0a6641 100644 --- a/english.ts +++ b/english.ts @@ -1043,12 +1043,12 @@ - + 警告 - + 确定要设置今天为新的保养日期吗? @@ -1943,163 +1943,197 @@ - + 开始自检,请等待%1秒... - - + + 自检完成!!! - + 警告 - + 提示 - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 - + 开始自检,请等待60秒... - - - + + + 正在准备重启,请等待%1秒...... - - ink Warning at: %1 - - - - - solvent Warning at: %1 - - - - - + + 压力泄漏或压力传感器故障! - + 运行中压力泄漏,停齿轮泵! - - + + 定时开机循环完成,准备关机 - + waitPowerOffTime: %1 - + 准备关机 - + 缺少墨水,喷码机不能正常工作! - + 停止打印,自动关闭高压. - + flagOfPowerOnMode: %1 - - + + 电机故障 - + 回收槽到头 - - + + 回收槽卡住或者回收槽开关时间设置错误 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + + + + + 刷墨水卡成功! + + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + + + + + 刷溶剂卡成功! + + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 - + 刷卡倒计时起始时间文件不存在 @@ -2882,7 +2916,7 @@ - + 额外设置 @@ -2903,7 +2937,7 @@ - + 系统授权 @@ -2928,28 +2962,28 @@ - + 提示 - + RFID卡清零! - - + + 取消授权 - + 警告 - + 密码错误:%1 @@ -4335,217 +4369,202 @@ p, li { white-space: pre-wrap; } - - 已经刷过墨水卡,需添加墨水 - - - - + 不需要刷墨水卡! - + 确认要刷墨水卡吗? - + 确认要刷墨水卡吗? %1 秒后将自动确认 - + 刷墨水卡成功! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 - + 刷超级墨水卡失败,请联系厂商。 - - 已经刷过溶剂卡,需添加溶剂 - - - - + 不需要刷溶剂卡! - + 确认要刷溶剂卡吗? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 - + 刷溶剂卡成功! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 - + 刷超级溶剂水卡失败,请联系厂商。 - + 确认要刷保养卡吗? - + 确认要刷保养卡吗? %1 秒后将自动确认 - + 刷超级保养卡失败,请联系厂商。 - + MAC无效卡! - + 无效卡,这张卡已经在%1时使用过 - + 设置读写器密码失败! - + 设置读写器密码成功! - + 设置读写器原始密码失败! - + 设置读写器工作模式失败! - + 设置读写器工作模式成功! - + 查询读写器地址失败 - + 警告 - + 先加墨水后刷卡:成功 - + 先加溶剂后刷卡:成功 - + 13.读卡器故障! - - - 请及时使用墨水盒附带的IC卡激活墨水盒 - 请及时刷墨水卡 - - - - - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - - RunTimeCtrl - + mtDate: %1 - + mtInterval: %1 - + mtEndDate: %1 - + mtFlag: %1 - + timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 + runtimeMs: %1 + + + + maintenanceHours: %1 - + mtDate1: %1 - + mtInterval1: %1 - + mtEndDate1: %1 - + mtFlog1: %1 diff --git a/farsi.ts b/farsi.ts index bec24f2..c0a6641 100644 --- a/farsi.ts +++ b/farsi.ts @@ -1043,12 +1043,12 @@ - + 警告 - + 确定要设置今天为新的保养日期吗? @@ -1943,163 +1943,197 @@ - + 开始自检,请等待%1秒... - - + + 自检完成!!! - + 警告 - + 提示 - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 - + 开始自检,请等待60秒... - - - + + + 正在准备重启,请等待%1秒...... - - ink Warning at: %1 - - - - - solvent Warning at: %1 - - - - - + + 压力泄漏或压力传感器故障! - + 运行中压力泄漏,停齿轮泵! - - + + 定时开机循环完成,准备关机 - + waitPowerOffTime: %1 - + 准备关机 - + 缺少墨水,喷码机不能正常工作! - + 停止打印,自动关闭高压. - + flagOfPowerOnMode: %1 - - + + 电机故障 - + 回收槽到头 - - + + 回收槽卡住或者回收槽开关时间设置错误 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + + + + + 刷墨水卡成功! + + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + + + + + 刷溶剂卡成功! + + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 - + 刷卡倒计时起始时间文件不存在 @@ -2882,7 +2916,7 @@ - + 额外设置 @@ -2903,7 +2937,7 @@ - + 系统授权 @@ -2928,28 +2962,28 @@ - + 提示 - + RFID卡清零! - - + + 取消授权 - + 警告 - + 密码错误:%1 @@ -4335,217 +4369,202 @@ p, li { white-space: pre-wrap; } - - 已经刷过墨水卡,需添加墨水 - - - - + 不需要刷墨水卡! - + 确认要刷墨水卡吗? - + 确认要刷墨水卡吗? %1 秒后将自动确认 - + 刷墨水卡成功! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 - + 刷超级墨水卡失败,请联系厂商。 - - 已经刷过溶剂卡,需添加溶剂 - - - - + 不需要刷溶剂卡! - + 确认要刷溶剂卡吗? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 - + 刷溶剂卡成功! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 - + 刷超级溶剂水卡失败,请联系厂商。 - + 确认要刷保养卡吗? - + 确认要刷保养卡吗? %1 秒后将自动确认 - + 刷超级保养卡失败,请联系厂商。 - + MAC无效卡! - + 无效卡,这张卡已经在%1时使用过 - + 设置读写器密码失败! - + 设置读写器密码成功! - + 设置读写器原始密码失败! - + 设置读写器工作模式失败! - + 设置读写器工作模式成功! - + 查询读写器地址失败 - + 警告 - + 先加墨水后刷卡:成功 - + 先加溶剂后刷卡:成功 - + 13.读卡器故障! - - - 请及时使用墨水盒附带的IC卡激活墨水盒 - 请及时刷墨水卡 - - - - - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - - RunTimeCtrl - + mtDate: %1 - + mtInterval: %1 - + mtEndDate: %1 - + mtFlag: %1 - + timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 + runtimeMs: %1 + + + + maintenanceHours: %1 - + mtDate1: %1 - + mtInterval1: %1 - + mtEndDate1: %1 - + mtFlog1: %1 diff --git a/korean.ts b/korean.ts index 10964ad..c94ed05 100644 --- a/korean.ts +++ b/korean.ts @@ -1081,11 +1081,6 @@ 当前行数:%1 冗点数:%2,冗点数过多,请修改您的配置!! 현재 행 수: %1, 중복 점: %2, 중복 점이 너무 많습니다. 설정을 수정하세요! - - - - Warnning - 字高太小或是高压包数据未初始化,您当前错误将忽略所有高压错误 @@ -1692,12 +1687,12 @@ 텍스트 라벨 - + 警告 경고 - + 确定要设置今天为新的保养日期吗? 오늘을 새 유지보수 날짜로 설정하시겠습니까? @@ -2241,13 +2236,13 @@ %1点 - %1点 + %1도트 点 - 픽셀 + 도트 @@ -3211,18 +3206,18 @@ 로그 정보 - - + + 定时开机循环完成,准备关机 타이머 가동 사이클 완료, 시스템 종료 준비 중 - + waitPowerOffTime: %1 waitPowerOffTime: %1 - + 准备关机 시스템 종료 준비 중 @@ -3235,25 +3230,25 @@ FPGA 통신 복구 - + 开始自检,请等待60秒... 자체 진단 시작 60초 대기 - + 开始自检,请等待%1秒... 자체 진단 시작 %1초 대기 - - + + 自检完成!!! 자체 진단 완료!!! - + 缺少墨水,喷码机不能正常工作! 잉크 부족으로 작동 불가! @@ -3286,7 +3281,7 @@ 압력 변동이 설정값 5 초과 - + 停止打印,自动关闭高压. 인쇄 중지, 고전압 자동 종료 @@ -3317,7 +3312,7 @@ - + 提示 팁 @@ -3382,13 +3377,13 @@ 13.카드 리더기 고장! - - + + 压力泄漏或压力传感器故障! 압력 누출 또는 압력 센서 고장 - + 运行中压力泄漏,停齿轮泵! 작동 중 압력 누출이 발생하여 기어 펌프를 정지합니다! @@ -3409,9 +3404,10 @@ 솔벤트 TAG을 리드하겠습니까? %1초 후 자동 확인 + 刷溶剂卡成功! 确认要刷卡吗? - 솔벤트 TAG 리드 성공! + 솔벤트 TAG 리드 성공! 不需要刷墨水卡! @@ -3430,8 +3426,9 @@ 먼저 잉크을 보충한 후 TAG을 사용하십시오! + 刷墨水卡成功! - 잉크 TAG 리드 성공! + 잉크 TAG 리드 성공! 确认要刷溶剂卡吗? @@ -3475,32 +3472,29 @@ 재부팅을 준비하는 중입니다. %1 초 동안 기다려 주십시오... - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 유지보수 주기 만료까지 %1일 남았습니다. 제때 유지보수를 실시하십시오. - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 유지보수 주기가 %1일 초과되었습니다. 잉크젯 프린터의 정상 사용을 복구하려면 유지보수를 실시하십시오. - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - 当前正在使用 - %1 -确定要新建文件吗? - 현재 사용 중인 - %1 -새 파일을 생성하시겠습니까? + 잉크 TAG를 인식해 주세요. 정품 잉크를 사용해 주세요. 그렇지 않을 경우 %1시간 후 사용이 중지됩니다! - + flagOfPowerOnMode: %1 flagOfPowerOnMode: %1 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 압력이 너무 높습니다. 배관이 막혔는지 확인한 후 오류 복구 버튼을 누르십시오. @@ -3605,22 +3599,54 @@ 기어 펌프 회전 속도가 너무 높습니다. 즉시 정지하고 공급업체에 연락하십시오. - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! 잉크 레벨 경보가 48시간을 초과했습니다. 장비의 정상 작동을 복구하기 위해 잉크를 추가하고 잉크 TAG을 리드하세요 - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! 솔벤트 TAG를 리드하시고 정품 솔벤트를 사용하십시오. 그렇지 않으면 %1시간 후에 장비 사용이 금지됩니다! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! 솔벤트 수위 경보가 48시간을 초과했습니다. 장비의 정상 작동을 복구하기 위해 솔벤트를 추가하고 솔벤트 TAG를 리드하세요 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + 잉크 TAG 리드 성공, 해당 잉크 카드에 대응하는 잉크를 장비에 즉시 보충해 주세요 + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + 솔벤트 TAG 리드 성공, 해당 솔벤트 카드에 대응하는 솔벤트를 장비에 즉시 보충해 주세요 + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + 잉크 용기에 동봉된 IC 카드로 잉크 용기를 즉시 활성화해 주세요 + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + 솔벤트 용기에 동봉된 IC 카드로 솔벤트 용기를 즉시 활성화해 주세요 + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 File not found: %1 @@ -3629,7 +3655,7 @@ 유지보수 주기가 %1일 초과되었습니다. 제때 유지보수를 실시하십시오. 그렇지 않으면 잉크젯 프린터가 손상될 수 있습니다. - + 刷卡倒计时起始时间文件不存在 카드 사용 카운트다운 시작 시간 파일이 존재하지 않습니다. @@ -3814,7 +3840,7 @@ 잉크 선 빠른 닫기 완료 - + 警告 경고 @@ -3823,12 +3849,12 @@ 유지 보수 카드 사용 확인? - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 유지 보수 기간 %1시간 남았습니다, 유지 보수 해주세요. - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 유 보수 기간 %1시간 초과, 유지 보수 해주세요. @@ -3893,21 +3919,19 @@ %1/%2/%3 - - - + + + 正在准备重启,请等待%1秒...... 재시작 준비 중, %1초 대기... - ink Warning at: %1 - 잉크 경보: %1 + 잉크 경보: %1 - solvent Warning at: %1 - 솔벤트 경보: %1 + 솔벤트 경보: %1 警告:加热器长时间无法达到预期温度,故障或设置错误! @@ -3938,8 +3962,8 @@ 오류!!!!!!!!!!!점도 이상 - - + + 电机故障 모터 에러 @@ -3948,13 +3972,13 @@ 모터 에러!!! - + 回收槽到头 거터 최대 위치 도달 - - + + 回收槽卡住或者回收槽开关时间设置错误 거터가 걸렸거나 거터 개폐 시간 설정이 잘못되었습니다. @@ -4931,7 +4955,7 @@ Char - + 额外设置 추가 설정 @@ -4951,7 +4975,7 @@ Char - + 系统授权 시스템 권한 @@ -4997,28 +5021,28 @@ Char RFID 설정 - + 提示 팁 - + RFID卡清零! RFID 카드 초기화! - - + + 取消授权 권한 해제 - + 警告 경고 - + 密码错误:%1 비밀번호 오류:%1 @@ -9174,12 +9198,11 @@ configuration. 데이터 블록 6에 데이터 쓰기 - 已经刷过墨水卡,需添加墨水 - 이미 잉크 TAG을 리드했습니다. 잉크를 추가해야 합니다. + 이미 잉크 TAG을 리드했습니다. 잉크를 추가해야 합니다. - + 不需要刷墨水卡! 잉크 TAG 리드 필요 없습니다! @@ -9188,37 +9211,36 @@ configuration. 먼저 잉크을 보충한 후 TAG을 사용하십시오! - + 确认要刷墨水卡吗? 잉크 TAG을 리드하겠습니까? - + 确认要刷墨水卡吗? %1 秒后将自动确认 잉크 TAG을 리드하겠습니까? %1초 후 자동 확인 - + 刷墨水卡成功! 잉크 TAG 리드 성공! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 잉크 TAG 리드 성공, 해당 잉크 카드에 대응하는 잉크를 장비에 즉시 보충해 주세요 - + 刷超级墨水卡失败,请联系厂商。 슈퍼 잉크 TAG 리드 실패, 제조업체에 문의하십시오. - 已经刷过溶剂卡,需添加溶剂 - 이미 솔벤트 TAG을 리드했습니다. 솔벤트를 추가해야 합니다. + 이미 솔벤트 TAG을 리드했습니다. 솔벤트를 추가해야 합니다. - + 不需要刷溶剂卡! 솔벤트 TAG 리드 필요 없습니다! @@ -9227,37 +9249,37 @@ configuration. 먼저 솔벤트을 보충한 후 TAG을 사용하십시오! - + 确认要刷溶剂卡吗? 솔벤트 TAG을 리드하겠습니까? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 솔벤트 TAG을 리드하겠습니까? %1초 후 자동 확인 - + 刷溶剂卡成功! 솔벤트 TAG 리드 성공! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 솔벤트 TAG 리드 성공, 해당 솔벤트 카드에 대응하는 솔벤트를 장비에 즉시 보충해 주세요 - + 刷超级溶剂水卡失败,请联系厂商。 슈퍼 솔벤트 TAG 리드 실패, 제조업체에 문의하십시오. - + 确认要刷保养卡吗? 유지 보수 카드 사용 확인? - + 确认要刷保养卡吗? %1 秒后将自动确认 유지 보수 카드 사용 확인? %1초 후 자동 확인 @@ -9266,84 +9288,82 @@ configuration. 유지보수 카드 성공! - + 刷超级保养卡失败,请联系厂商。 슈퍼 유지보수 카드 실패, 제조업체에 문의하십시오. - + MAC无效卡! MAC 무효 카드! - + 无效卡,这张卡已经在%1时使用过 무효 카드 %1시 사용됨 - + 设置读写器密码失败! 리더기 비밀번호 설정 실패! - + 设置读写器密码成功! 리더기 비밀번호 설정 성공! - + 设置读写器原始密码失败! 리더기 초기 비밀번호 설정 실패! - + 设置读写器工作模式失败! 리더기 작동 모드 설정 실패! - + 设置读写器工作模式成功! 리더기 작동 모드 설정 성공! - + 查询读写器地址失败 리더기 주소 조회 실패 - + 警告 경고 - + 先加墨水后刷卡:成功 먼저 잉크를 추가한 후 카드 사용: 성공 - + 先加溶剂后刷卡:成功 먼저 솔벤트를 추가한 후 카드 사용: 성공 - + 13.读卡器故障! 13.카드 리더기 고장! - 请及时使用墨水盒附带的IC卡激活墨水盒 - 잉크 용기에 동봉된 IC 카드로 잉크 용기를 즉시 활성화해 주세요 + 잉크 용기에 동봉된 IC 카드로 잉크 용기를 즉시 활성화해 주세요 请及时将该墨水卡对应的墨水添加到机器中 해당 잉크 카드에 대응하는 잉크를 장비에 즉시 보충해 주세요 - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - 솔벤트 용기에 동봉된 IC 카드로 솔벤트 용기를 즉시 활성화해 주세요 + 솔벤트 용기에 동봉된 IC 카드로 솔벤트 용기를 즉시 활성화해 주세요 请及时将该溶剂卡对应的溶剂添加到机器中 @@ -9357,57 +9377,63 @@ configuration. RunTimeCtrl - + mtDate: %1 mtDate: %1 - + mtInterval: %1 mtInterval: %1 - + mtEndDate: %1 mtEndDate: %1 - + mtFlag: %1 mtFlag: %1 - + timeoutDay: %1 timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 runTime: %1 + runtimeMs: %1 + runtimeMs: %1 + + + maintenanceHours: %1 maintenanceHours: %1 - + mtDate1: %1 mtDate1: %1 - + mtInterval1: %1 mtInterval1: %1 - + mtEndDate1: %1 mtEndDate1: %1 - + mtFlog1: %1 mtFlog1: %1 @@ -11901,7 +11927,14 @@ configuration. - \n是否重新尝试? + 操作错误 + \n是否重新尝试? + \nDo you want to retry? + + + + +是否重新尝试? \nDo you want to retry? diff --git a/rfid/rfidmanager.cpp b/rfid/rfidmanager.cpp index 7ea33a8..c0cc3dc 100644 --- a/rfid/rfidmanager.cpp +++ b/rfid/rfidmanager.cpp @@ -544,8 +544,8 @@ void RFIDManager::initRFIDMoudle(unsigned int addr, SysPara *sysPara) setICReaderModeFlag = false; //报警定时器一定要在初始化之后启动,不然就崩 #ifdef __RFID_CARD - if (warningTimer) - warningTimer->start(3000); + // if (warningTimer) + // warningTimer->start(3000); #endif } @@ -566,37 +566,28 @@ void RFIDManager::handleCheck(unsigned int addr) || strRevdata.left(3) == QString("100C")) { if(strRevdata.at(3) == 'A') { - if (sysPara->RFIDPara.cardInk) { - emit sig_showMsg(tr("已经刷过墨水卡,需添加墨水")); + + if(!m_needInkCard) { + emit sig_showMsg(tr("不需要刷墨水卡!")); return; } - if(!sysPara->RFIDPara.needInkCard){ - emit sig_showMsg(tr("不需要刷墨水卡!")); - } - else { - auto blockData = strRevdata; - cardTouchConfirmAsync(tr("确认要刷墨水卡吗?"), tr("确认要刷墨水卡吗? %1 秒后将自动确认"), [this, blockData]{ - markInkCard(blockData); - }); - } + auto blockData = strRevdata; + cardTouchConfirmAsync(tr("确认要刷墨水卡吗?"), tr("确认要刷墨水卡吗? %1 秒后将自动确认"), [this, blockData]{ + markInkCard(blockData); + }); } else if(strRevdata.at(3) == 'B') { - if (sysPara->RFIDPara.cardSolvent) { - emit sig_showMsg(tr("已经刷过溶剂卡,需添加溶剂")); + if(!m_needSolventCard) { + emit sig_showMsg(tr("不需要刷溶剂卡!")); return; } - if(!sysPara->RFIDPara.needSolventCard){ - emit sig_showMsg(tr("不需要刷溶剂卡!")); - } - else { - auto blockData = strRevdata; - cardTouchConfirmAsync(tr("确认要刷溶剂卡吗?"), tr("确认要刷溶剂卡吗? %1 秒后将自动确认"), [this, blockData](){ - markSolventCard(blockData); - }); - } + auto blockData = strRevdata; + cardTouchConfirmAsync(tr("确认要刷溶剂卡吗?"), tr("确认要刷溶剂卡吗? %1 秒后将自动确认"), [this, blockData](){ + markSolventCard(blockData); + }); } else if(strRevdata.at(3) == 'C') @@ -1052,9 +1043,9 @@ void RFIDManager::initTimer() } if (warningTimer == nullptr) { - warningTimer = new QTimer(this); - connect(warningTimer, &QTimer::timeout, - this, &RFIDManager::slt_intervalTimerHandle); + // warningTimer = new QTimer(this); + // connect(warningTimer, &QTimer::timeout, + // this, &RFIDManager::slt_intervalTimerHandle); } } @@ -1111,9 +1102,9 @@ void RFIDManager::markInkCard(const QString &blockData) auto ret = RFIDmarkCardUsedAsync(0, blockData); if(ret >= 0 || ret == -11){ const QString msg = sysPara->RFIDPara.addedInk ? tr("刷墨水卡成功!") : tr("刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中"); - emit sig_showMsg(msg); - sysPara->RFIDPara.cardInk = true; - sysPara->saveRFIDPara(); + m_hasInkCardBeenSwiped = true; + m_needInkCard = false; + emit sig_inkCardProgressFinished(); } else if(ret == -10) { emit sig_showMsg(tr("刷超级墨水卡失败,请联系厂商。")); @@ -1125,9 +1116,9 @@ void RFIDManager::markSolventCard(const QString &blockData) auto ret = RFIDmarkCardUsedAsync(1, blockData); if(ret >= 0 || ret == -11) { const QString msg = sysPara->RFIDPara.addedSolvent ? tr("刷溶剂卡成功!") : tr("刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中"); - emit sig_showMsg(msg); - sysPara->RFIDPara.cardSolvent = true; - sysPara->saveRFIDPara(); + m_hasSolventCardBeenSwiped = true; + m_needSolventCard = false; + emit sig_solventProgressFinished(); } else if(ret == -10) { emit sig_showMsg(tr("刷超级溶剂水卡失败,请联系厂商。")); @@ -1139,8 +1130,6 @@ void RFIDManager::markMaintenanceCard(const QString &blockData) auto ret = RFIDmarkCardUsedAsync(2, blockData); if(ret >= 0 || ret == -11) {//把卡数据清零 - emit sig_maintenanceShow(); - sysPara->RFIDPara.needMaintenance = false; sysPara->status.needMaintenanceRemind = false; @@ -1148,10 +1137,12 @@ void RFIDManager::markMaintenanceCard(const QString &blockData) sysPara->RFIDPara.maintenanceDate = curDate.toString("yyMMdd").toInt(); QDate mtEndDate = curDate.addMonths(sysPara->RFIDPara.maintenanceInterval); sysPara->RFIDPara.maintenanceEndDate = mtEndDate.toString("yyMMdd").toInt(); - sysPara->RFIDPara.runTime = 0; + sysPara->RFIDPara.runtimeMs = 0; RunTimeCtrl::instance()->updatePara(&sysPara->RFIDPara); sysPara->saveRFIDPara(); // emit sig_showMsg(tr("刷保养卡成功!")); + + emit sig_maintenanceShow(); } else if(ret == -10) { emit sig_showMsg(tr("刷超级保养卡失败,请联系厂商。")); @@ -1280,34 +1271,6 @@ void RFIDManager::slt_timerHandle() } } -//static int totalTime = 0; -void RFIDManager::slt_intervalTimerHandle() -{ - updateStatus(); - if(status.addedInk && !status.cardInk && status.firstPromptInkCard){ - emit sig_showMsg(tr("请及时使用墨水盒附带的IC卡激活墨水盒")); - status.firstPromptInkCard = false; - } - - if(status.addedSolvent && !status.cardSolvent && status.firstPromptSolventCard){ - emit sig_showMsg(tr("请及时使用溶剂盒附带的IC卡激活溶剂盒")); - status.firstPromptSolventCard = false; - } - - //不需要通知先后,成功即可 - auto res = waitStatus(); - if (res == 1) { - LogInfo::setRunStatusText("Ink progress finished, and the ink card has been used."); - emit sig_inkCardProgressFinished(); - return; - } - if (res == 2) { - LogInfo::setRunStatusText("Solvent progress finished, and the solvent card has been used."); - emit sig_solventProgressFinished(); - return; - } -} - int RFIDManager::RFIDQueryWalletAsync() { if (!comForRFID || !comForRFID->isOpen()) { @@ -1425,4 +1388,22 @@ int RFIDManager::RFIDQueryWalletAsync() LogInfo::setRunStatusText(("Failed to query card balance, logic error")); qDebug() << "Failed to query card balance, logic error"; return -1; -} \ No newline at end of file +} + +void RFIDManager::requireInkCard(bool required) +{ + m_needInkCard = required; + m_hasInkCardBeenSwiped = false; +} + +void RFIDManager::requireSolventCard(bool required) +{ + m_needSolventCard = required; + m_hasSolventCardBeenSwiped = false; +} + +void RFIDManager::requireMaintenanceCard(bool required) +{ + m_needMaintenanceCard = required; + m_hasMaintenanceCardBeenSwiped = false; +} diff --git a/rfid/rfidmanager.h b/rfid/rfidmanager.h index c764d1e..8d0d7ba 100644 --- a/rfid/rfidmanager.h +++ b/rfid/rfidmanager.h @@ -67,6 +67,71 @@ public: */ int RFIDQueryWalletAsync(); + /** + * @brief 要求刷墨水卡 + * @param required 默认请求刷卡,如果置 false,则取消请求刷卡 + */ + void requireInkCard(bool required = true); + + /** + * @brief 要求刷溶剂卡 + * @param required 默认请求刷卡,如果置 false,则取消请求刷卡 + */ + void requireSolventCard(bool required = true); + + /** + * @brief 要求刷保养卡 + */ + void requireMaintenanceCard(bool required = true); + + /** + * @brief 检查是否已经请求刷墨水卡 + * @return true 已经请求刷墨水卡,false 未请求刷墨水 + */ + bool hasRequiredInkCard() const { + return m_needInkCard; + } + + /** + * @brief 检查是否已经请求刷溶剂卡 + * @return true 已经请求刷溶剂卡,false 未请求刷溶剂 + */ + bool hasRequiredSolventCard() const { + return m_needSolventCard; + } + + /** + * @brief 检查是否已经请求刷保养卡 + * @return true 已经请求刷保养卡,false 未请求刷保养 + */ + bool hasRequiredMaintenanceCard() const { + return m_needMaintenanceCard; + } + + /** + * @brief 检查是否已经刷过墨水卡 + * @return true 已经刷过墨水卡,false 未刷过墨水 + */ + bool hasInkCardBeenSwiped() const { + return m_hasInkCardBeenSwiped; + } + + /** + * @brief 检查是否已经刷过溶剂卡 + * @return true 已经刷过溶剂卡,false 未刷过溶剂 + */ + bool hasSolventCardBeenSwiped() const { + return m_hasSolventCardBeenSwiped; + } + + /** + * @brief 检查是否已经刷过保养卡 + * @return true 已经刷过保养卡,false 未刷过保养 + */ + bool hasMaintenanceCardBeenSwiped() const { + return m_hasMaintenanceCardBeenSwiped; + } + private: RFIDManager(); @@ -93,6 +158,14 @@ private: int queryReadRFID_address(void); int superCardDeduct(); + bool m_needInkCard = false; + bool m_needSolventCard = false; + bool m_needMaintenanceCard = false; + + bool m_hasInkCardBeenSwiped = false; + bool m_hasSolventCardBeenSwiped = false; + bool m_hasMaintenanceCardBeenSwiped = false; + QMutex m_rfidMutex; QByteArray RFIDReadData; QString strRevdata; @@ -143,7 +216,7 @@ private slots: void slt_timerHandle(); //处理刷卡与溶剂/墨水报警标志 - void slt_intervalTimerHandle(); + // void slt_intervalTimerHandle(); }; #endif // RFIDMANAGER_H \ No newline at end of file diff --git a/runtimectrl.cpp b/runtimectrl.cpp index dea8236..a3b3e65 100644 --- a/runtimectrl.cpp +++ b/runtimectrl.cpp @@ -8,19 +8,35 @@ RunTimeCtrl::RunTimeCtrl() init(); } +qint64 RunTimeCtrl::updateRuntime() +{ + m_totalRuntimeMs += m_elapsedTimer.restart(); + return m_totalRuntimeMs; +} + +RunTimeCtrl *RunTimeCtrl::instance() +{ + static RunTimeCtrl *ins = nullptr; + if (!ins) { + ins = new RunTimeCtrl(); + } + + return ins; +} + RunTimeCtrl::~RunTimeCtrl() { + m_runTimer->stop(); m_checkTimer->stop(); m_alertTimer->stop(); - delete m_checkTimer; - delete m_alertTimer; } void RunTimeCtrl::start() { + m_elapsedTimer.start(); slt_checkRunTime(); m_checkTimer->start(1000 * 60 * 5); - m_runTimer->start(1000); + m_runTimer->start(30 * 1000); } void RunTimeCtrl::stop() @@ -39,14 +55,9 @@ void RunTimeCtrl::setAlertInterval(qint64 minutes) } } -qint64 RunTimeCtrl::getElapsedSeconds() const +qint64 RunTimeCtrl::totalRuntimeMs() { - return m_elapsedSeconds; -} - -qint64 RunTimeCtrl::getTotalSeconds() const -{ - return m_totalSeconds; + return updateRuntime(); } //5min @@ -64,16 +75,6 @@ void RunTimeCtrl::slt_checkRunTime() } } -void RunTimeCtrl::slt_recodeTime() -{ - m_elapsedSeconds++; - if (m_elapsedSeconds % 30 == 0) { - m_totalSeconds += 30; - m_para.runTime += 30; - emit sig_saveRunTime(); - } -} - void RunTimeCtrl::init() { m_checkTimer = new QTimer(this); @@ -85,14 +86,14 @@ void RunTimeCtrl::init() // 每 m_alertIntervalMinutes 分钟一次消息框提示 connect(m_alertTimer, &QTimer::timeout, this, &RunTimeCtrl::sig_alertTimeout); // 每30s,记录一次总时间 - connect(m_runTimer, &QTimer::timeout, this, &RunTimeCtrl::slt_recodeTime); + connect(m_runTimer, &QTimer::timeout, this, &RunTimeCtrl::sig_saveRunTime); } bool RunTimeCtrl::checkRunTime() { // 甲方要求提示越来越频繁 // 168h 72h 24h - int runHours = m_totalSeconds/60.0/60.0; + int runHours = int(updateRuntime() / 1000.0 / 60.0 / 60.0); if (runHours + 24 >= m_para.maintenanceHours) { setAlertInterval(15); //15min return true; @@ -102,7 +103,7 @@ bool RunTimeCtrl::checkRunTime() return true; } if (runHours + 168 >= m_para.maintenanceHours) { - setAlertInterval(1); //3h + setAlertInterval(180); //3h return true; } return false; @@ -124,7 +125,7 @@ void RunTimeCtrl::loadConfig(RFIDPara_t* para) para->maintenanceInterval = 6; QDate mtEndDate = curDate.addMonths(para->maintenanceInterval); para->maintenanceEndDate = mtEndDate.toString("yyMMdd").toInt(); - para->runTime = 0; + para->runtimeMs = 0; para->maintenanceHours = 3000; } // 结束维护的天数maintenanceEndDate = 刷卡日期+维护月份 @@ -137,7 +138,7 @@ void RunTimeCtrl::loadConfig(RFIDPara_t* para) LogInfo::setRunStatusText(tr("mtEndDate: %1").arg(para->maintenanceEndDate)); LogInfo::setRunStatusText(tr("mtFlag: %1").arg(para->needMaintenance)); LogInfo::setRunStatusText(tr("timeoutDay: %1").arg(timeoutDay)); - LogInfo::setRunStatusText(tr("runTime: %1").arg(para->runTime)); + LogInfo::setRunStatusText(tr("runtimeMs: %1").arg(para->runtimeMs)); LogInfo::setRunStatusText(tr("maintenanceHours: %1").arg(para->maintenanceHours)); if(timeoutDay <= 0 && !para->needMaintenance) para->needMaintenance = true; @@ -145,7 +146,7 @@ void RunTimeCtrl::loadConfig(RFIDPara_t* para) emit sig_updateTimeoutDay(timeoutDay); m_para = *para; - m_totalSeconds = para->runTime; + m_totalRuntimeMs = para->runtimeMs; } void RunTimeCtrl::updatePara(RFIDPara_t* para) @@ -168,7 +169,7 @@ void RunTimeCtrl::authorizationAccepted(RFIDPara_t* para) para->maintenanceDate = m_para.maintenanceDate; para->maintenanceInterval = m_para.maintenanceInterval; para->maintenanceEndDate = m_para.maintenanceEndDate; - para->runTime = m_para.runTime; + para->runtimeMs = m_para.runtimeMs; para->maintenanceHours = m_para.maintenanceHours; updatePara(para); } diff --git a/runtimectrl.h b/runtimectrl.h index d862272..350cd07 100644 --- a/runtimectrl.h +++ b/runtimectrl.h @@ -6,6 +6,7 @@ #include #include #include "SysPara.h" +#include /** 当前类用于统计软件运行时间、到期提醒间隔 @@ -16,10 +17,7 @@ class RunTimeCtrl : public QObject Q_OBJECT public: - static RunTimeCtrl* instance() { - static RunTimeCtrl ins; - return &ins; - } + static RunTimeCtrl* instance(); ~RunTimeCtrl(); @@ -32,11 +30,8 @@ public: // 设置提示间隔(单位:分钟,默认5分钟) void setAlertInterval(qint64 minutes); - // 获取本次运行时间(秒) - qint64 getElapsedSeconds() const; - - // 获取已运行时间(秒) - qint64 getTotalSeconds() const; + // 获取已运行时间(毫秒) + qint64 totalRuntimeMs(); // 初始化加载参数 void loadConfig(RFIDPara_t* para); @@ -55,22 +50,24 @@ signals: private slots: void slt_checkRunTime(); - void slt_recodeTime(); private: RunTimeCtrl(); + qint64 updateRuntime(); + QTimer *m_checkTimer = nullptr; // 检查计时器 QTimer *m_alertTimer = nullptr; // 提示计时器 QTimer *m_runTimer = nullptr; // 运行计时器,记录运行时间和更新总时间 - int m_alertIntervalMinutes = 60; // 提示间隔(分钟) - bool m_isAlter = false; // 启动提示计时器标志 - quint64 m_elapsedSeconds = 0; // 本次运行的时间 - quint64 m_totalSeconds = 0; // 总运行时间 30s更新一次 - // todo 后续一个相关功能建立一个结构体和独立定时器 + QElapsedTimer m_elapsedTimer; // 记录本次运行时间 + + int m_alertIntervalMinutes = 60; // 提示间隔(分钟) + + quint64 m_totalRuntimeMs = 0; // 自上次保养以来的总运行时间 (ms) RFIDPara_t m_para; + int timeoutDay = 0; // 当前日期到维护结束日期的天数 void init(); diff --git a/spanish.ts b/spanish.ts index bec24f2..c0a6641 100644 --- a/spanish.ts +++ b/spanish.ts @@ -1043,12 +1043,12 @@ - + 警告 - + 确定要设置今天为新的保养日期吗? @@ -1943,163 +1943,197 @@ - + 开始自检,请等待%1秒... - - + + 自检完成!!! - + 警告 - + 提示 - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 - + 开始自检,请等待60秒... - - - + + + 正在准备重启,请等待%1秒...... - - ink Warning at: %1 - - - - - solvent Warning at: %1 - - - - - + + 压力泄漏或压力传感器故障! - + 运行中压力泄漏,停齿轮泵! - - + + 定时开机循环完成,准备关机 - + waitPowerOffTime: %1 - + 准备关机 - + 缺少墨水,喷码机不能正常工作! - + 停止打印,自动关闭高压. - + flagOfPowerOnMode: %1 - - + + 电机故障 - + 回收槽到头 - - + + 回收槽卡住或者回收槽开关时间设置错误 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + + + + + 刷墨水卡成功! + + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + + + + + 刷溶剂卡成功! + + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 - + 刷卡倒计时起始时间文件不存在 @@ -2882,7 +2916,7 @@ - + 额外设置 @@ -2903,7 +2937,7 @@ - + 系统授权 @@ -2928,28 +2962,28 @@ - + 提示 - + RFID卡清零! - - + + 取消授权 - + 警告 - + 密码错误:%1 @@ -4335,217 +4369,202 @@ p, li { white-space: pre-wrap; } - - 已经刷过墨水卡,需添加墨水 - - - - + 不需要刷墨水卡! - + 确认要刷墨水卡吗? - + 确认要刷墨水卡吗? %1 秒后将自动确认 - + 刷墨水卡成功! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 - + 刷超级墨水卡失败,请联系厂商。 - - 已经刷过溶剂卡,需添加溶剂 - - - - + 不需要刷溶剂卡! - + 确认要刷溶剂卡吗? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 - + 刷溶剂卡成功! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 - + 刷超级溶剂水卡失败,请联系厂商。 - + 确认要刷保养卡吗? - + 确认要刷保养卡吗? %1 秒后将自动确认 - + 刷超级保养卡失败,请联系厂商。 - + MAC无效卡! - + 无效卡,这张卡已经在%1时使用过 - + 设置读写器密码失败! - + 设置读写器密码成功! - + 设置读写器原始密码失败! - + 设置读写器工作模式失败! - + 设置读写器工作模式成功! - + 查询读写器地址失败 - + 警告 - + 先加墨水后刷卡:成功 - + 先加溶剂后刷卡:成功 - + 13.读卡器故障! - - - 请及时使用墨水盒附带的IC卡激活墨水盒 - 请及时刷墨水卡 - - - - - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - - RunTimeCtrl - + mtDate: %1 - + mtInterval: %1 - + mtEndDate: %1 - + mtFlag: %1 - + timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 + runtimeMs: %1 + + + + maintenanceHours: %1 - + mtDate1: %1 - + mtInterval1: %1 - + mtEndDate1: %1 - + mtFlog1: %1 diff --git a/thai.ts b/thai.ts index bec24f2..c0a6641 100644 --- a/thai.ts +++ b/thai.ts @@ -1043,12 +1043,12 @@ - + 警告 - + 确定要设置今天为新的保养日期吗? @@ -1943,163 +1943,197 @@ - + 开始自检,请等待%1秒... - - + + 自检完成!!! - + 警告 - + 提示 - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 - + 开始自检,请等待60秒... - - - + + + 正在准备重启,请等待%1秒...... - - ink Warning at: %1 - - - - - solvent Warning at: %1 - - - - - + + 压力泄漏或压力传感器故障! - + 运行中压力泄漏,停齿轮泵! - - + + 定时开机循环完成,准备关机 - + waitPowerOffTime: %1 - + 准备关机 - + 缺少墨水,喷码机不能正常工作! - + 停止打印,自动关闭高压. - + flagOfPowerOnMode: %1 - - + + 电机故障 - + 回收槽到头 - - + + 回收槽卡住或者回收槽开关时间设置错误 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + + + + + 刷墨水卡成功! + + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + + + + + 刷溶剂卡成功! + + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 - + 刷卡倒计时起始时间文件不存在 @@ -2882,7 +2916,7 @@ - + 额外设置 @@ -2903,7 +2937,7 @@ - + 系统授权 @@ -2928,28 +2962,28 @@ - + 提示 - + RFID卡清零! - - + + 取消授权 - + 警告 - + 密码错误:%1 @@ -4335,217 +4369,202 @@ p, li { white-space: pre-wrap; } - - 已经刷过墨水卡,需添加墨水 - - - - + 不需要刷墨水卡! - + 确认要刷墨水卡吗? - + 确认要刷墨水卡吗? %1 秒后将自动确认 - + 刷墨水卡成功! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 - + 刷超级墨水卡失败,请联系厂商。 - - 已经刷过溶剂卡,需添加溶剂 - - - - + 不需要刷溶剂卡! - + 确认要刷溶剂卡吗? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 - + 刷溶剂卡成功! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 - + 刷超级溶剂水卡失败,请联系厂商。 - + 确认要刷保养卡吗? - + 确认要刷保养卡吗? %1 秒后将自动确认 - + 刷超级保养卡失败,请联系厂商。 - + MAC无效卡! - + 无效卡,这张卡已经在%1时使用过 - + 设置读写器密码失败! - + 设置读写器密码成功! - + 设置读写器原始密码失败! - + 设置读写器工作模式失败! - + 设置读写器工作模式成功! - + 查询读写器地址失败 - + 警告 - + 先加墨水后刷卡:成功 - + 先加溶剂后刷卡:成功 - + 13.读卡器故障! - - - 请及时使用墨水盒附带的IC卡激活墨水盒 - 请及时刷墨水卡 - - - - - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - - RunTimeCtrl - + mtDate: %1 - + mtInterval: %1 - + mtEndDate: %1 - + mtFlag: %1 - + timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 + runtimeMs: %1 + + + + maintenanceHours: %1 - + mtDate1: %1 - + mtInterval1: %1 - + mtEndDate1: %1 - + mtFlog1: %1 diff --git a/turkey.ts b/turkey.ts index bec24f2..c0a6641 100644 --- a/turkey.ts +++ b/turkey.ts @@ -1043,12 +1043,12 @@ - + 警告 - + 确定要设置今天为新的保养日期吗? @@ -1943,163 +1943,197 @@ - + 开始自检,请等待%1秒... - - + + 自检完成!!! - + 警告 - + 提示 - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 - + 开始自检,请等待60秒... - - - + + + 正在准备重启,请等待%1秒...... - - ink Warning at: %1 - - - - - solvent Warning at: %1 - - - - - + + 压力泄漏或压力传感器故障! - + 运行中压力泄漏,停齿轮泵! - - + + 定时开机循环完成,准备关机 - + waitPowerOffTime: %1 - + 准备关机 - + 缺少墨水,喷码机不能正常工作! - + 停止打印,自动关闭高压. - + flagOfPowerOnMode: %1 - - + + 电机故障 - + 回收槽到头 - - + + 回收槽卡住或者回收槽开关时间设置错误 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + + + + + 刷墨水卡成功! + + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + + + + + 刷溶剂卡成功! + + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 - + 刷卡倒计时起始时间文件不存在 @@ -2882,7 +2916,7 @@ - + 额外设置 @@ -2903,7 +2937,7 @@ - + 系统授权 @@ -2928,28 +2962,28 @@ - + 提示 - + RFID卡清零! - - + + 取消授权 - + 警告 - + 密码错误:%1 @@ -4335,217 +4369,202 @@ p, li { white-space: pre-wrap; } - - 已经刷过墨水卡,需添加墨水 - - - - + 不需要刷墨水卡! - + 确认要刷墨水卡吗? - + 确认要刷墨水卡吗? %1 秒后将自动确认 - + 刷墨水卡成功! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 - + 刷超级墨水卡失败,请联系厂商。 - - 已经刷过溶剂卡,需添加溶剂 - - - - + 不需要刷溶剂卡! - + 确认要刷溶剂卡吗? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 - + 刷溶剂卡成功! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 - + 刷超级溶剂水卡失败,请联系厂商。 - + 确认要刷保养卡吗? - + 确认要刷保养卡吗? %1 秒后将自动确认 - + 刷超级保养卡失败,请联系厂商。 - + MAC无效卡! - + 无效卡,这张卡已经在%1时使用过 - + 设置读写器密码失败! - + 设置读写器密码成功! - + 设置读写器原始密码失败! - + 设置读写器工作模式失败! - + 设置读写器工作模式成功! - + 查询读写器地址失败 - + 警告 - + 先加墨水后刷卡:成功 - + 先加溶剂后刷卡:成功 - + 13.读卡器故障! - - - 请及时使用墨水盒附带的IC卡激活墨水盒 - 请及时刷墨水卡 - - - - - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - - RunTimeCtrl - + mtDate: %1 - + mtInterval: %1 - + mtEndDate: %1 - + mtFlag: %1 - + timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 + runtimeMs: %1 + + + + maintenanceHours: %1 - + mtDate1: %1 - + mtInterval1: %1 - + mtEndDate1: %1 - + mtFlog1: %1 diff --git a/vena.ts b/vena.ts index bec24f2..c0a6641 100644 --- a/vena.ts +++ b/vena.ts @@ -1043,12 +1043,12 @@ - + 警告 - + 确定要设置今天为新的保养日期吗? @@ -1943,163 +1943,197 @@ - + 开始自检,请等待%1秒... - - + + 自检完成!!! - + 警告 - + 提示 - + 保养期还有%1小时到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1小时,请及时保养,否则喷码机容易损坏 - + 开始自检,请等待60秒... - - - + + + 正在准备重启,请等待%1秒...... - - ink Warning at: %1 - - - - - solvent Warning at: %1 - - - - - + + 压力泄漏或压力传感器故障! - + 运行中压力泄漏,停齿轮泵! - - + + 定时开机循环完成,准备关机 - + waitPowerOffTime: %1 - + 准备关机 - + 缺少墨水,喷码机不能正常工作! - + 停止打印,自动关闭高压. - + flagOfPowerOnMode: %1 - - + + 电机故障 - + 回收槽到头 - - + + 回收槽卡住或者回收槽开关时间设置错误 - + 压力过高,请检查管路是否堵塞,然后点击故障恢复按钮 - + + + 请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用! - + 墨水液位报警超过48小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! - + + + 请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用! - + 溶剂液位报警超过48小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! - + 保养期还有%1天到期,请及时保养,否则喷码机容易损坏 - + 保养期已超过%1天,请进行保养以恢复喷码机的正常使用 - + + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 + + + + + 刷墨水卡成功! + + + + + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 + + + + + 刷溶剂卡成功! + + + + + 请及时使用墨水盒附带的IC卡激活墨水盒 + + + + + 墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作! + + + + + 请及时使用溶剂盒附带的IC卡激活溶剂盒 + + + + + 溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作! + + + + File not found: %1 - + 刷卡倒计时起始时间文件不存在 @@ -2882,7 +2916,7 @@ - + 额外设置 @@ -2903,7 +2937,7 @@ - + 系统授权 @@ -2928,28 +2962,28 @@ - + 提示 - + RFID卡清零! - - + + 取消授权 - + 警告 - + 密码错误:%1 @@ -4335,217 +4369,202 @@ p, li { white-space: pre-wrap; } - - 已经刷过墨水卡,需添加墨水 - - - - + 不需要刷墨水卡! - + 确认要刷墨水卡吗? - + 确认要刷墨水卡吗? %1 秒后将自动确认 - + 刷墨水卡成功! - + 刷墨水卡成功, 请及时将该墨水卡对应的墨水添加到机器中 - + 刷超级墨水卡失败,请联系厂商。 - - 已经刷过溶剂卡,需添加溶剂 - - - - + 不需要刷溶剂卡! - + 确认要刷溶剂卡吗? - + 确认要刷溶剂卡吗? %1 秒后将自动确认 - + 刷溶剂卡成功! - + 刷溶剂卡成功, 请及时将该溶剂卡对应的溶剂添加到机器中 - + 刷超级溶剂水卡失败,请联系厂商。 - + 确认要刷保养卡吗? - + 确认要刷保养卡吗? %1 秒后将自动确认 - + 刷超级保养卡失败,请联系厂商。 - + MAC无效卡! - + 无效卡,这张卡已经在%1时使用过 - + 设置读写器密码失败! - + 设置读写器密码成功! - + 设置读写器原始密码失败! - + 设置读写器工作模式失败! - + 设置读写器工作模式成功! - + 查询读写器地址失败 - + 警告 - + 先加墨水后刷卡:成功 - + 先加溶剂后刷卡:成功 - + 13.读卡器故障! - - - 请及时使用墨水盒附带的IC卡激活墨水盒 - 请及时刷墨水卡 - - - - - 请及时使用溶剂盒附带的IC卡激活溶剂盒 - - RunTimeCtrl - + mtDate: %1 - + mtInterval: %1 - + mtEndDate: %1 - + mtFlag: %1 - + timeoutDay: %1 - runTime: %1 + timeoutDay: %1 + runTime: %1 + runtimeMs: %1 + + + + maintenanceHours: %1 - + mtDate1: %1 - + mtInterval1: %1 - + mtEndDate1: %1 - + mtFlog1: %1 diff --git a/齿轮泵压力调节算法移植方案.md b/齿轮泵压力调节算法移植方案.md deleted file mode 100644 index 93d6bfe..0000000 --- a/齿轮泵压力调节算法移植方案.md +++ /dev/null @@ -1,333 +0,0 @@ -# 齿轮泵压力调节算法移植方案 - -## 一、概述 - -`oldProject/InkJetPrinter.cpp` 中的齿轮泵压力调节算法相比当前项目进行了重大重构,引入了**软启动斜坡**、**闭环稳定性检测**、**硬保护**、**分区Kp**、**滑动平均滤波**等机制,显著提升了压力调节的稳定性、响应速度和安全性。本文档详细对比两个版本,并给出移植方案。 - ---- - -## 二、算法对比分析 - -### 2.1 PID_realize2 函数对比 - -| 特性 | 当前项目(旧版) | oldProject(新版) | -|------|-----------------|-------------------| -| **PID类型** | 位置式PID(输出绝对电压) | 增量式PID(输出Δu = Kp×(e[k]-e[k-1]) + Ki×e[k]) | -| **Kp** | 0.8 | 0.15 | -| **Ki** | 0.02 | 0.02 | -| **Kd** | 0.5 | 0.0(无微分项) | -| **积分限幅** | integral_max = 12000 | 无(增量式不需要积分限幅) | -| **自适应限幅** | 无 | 有:根据误差方向非对称限幅 | -| **输出含义** | 绝对电压值 | 增量值(叠加到u上) | - -**新版PID_realize2 自适应限幅逻辑:** - -``` -err < -30(压力严重偏高): delta_u ∈ [-6, +1] → 允许快速减速,限制加速 -err > 50(压力严重偏低): delta_u ∈ [-2, +3] → 允许正常加速,限制减速 --30 ≤ err ≤ 50(接近目标): delta_u ∈ [-3, +3] → 小步长平稳调节 -``` - -**评价:** 新版PID_realize2从位置式改为增量式,避免了积分饱和问题;自适应非对称限幅让超压时能快速降速、欠压时平稳加速,大幅减少了过冲和振荡。 - ---- - -### 2.2 pressureAdj() 函数对比 - -| 特性 | 当前项目(旧版) | oldProject(新版) | -|------|-----------------|-------------------| -| **调用频率** | 每2次调用执行1次(50%降频) | 每次调用都执行 | -| **停止/告警处理** | 函数末尾清零 | **函数开头**立即返回+状态全复位 | -| **硬保护** | 无 | 压力>目标+50时强制减速,优先级最高 | -| **软启动** | 无 | 自适应步长斜坡,800ms周期 | -| **闭环稳定性检测** | 无 | 等待压力稳定(连续15次变化<10)才调速 | -| **滑动平均滤波** | 无 | 10点滑动窗口均值 | -| **分区Kp** | 无 | 三档Kp(0.05/0.04/0.03),误差越大Kp越大 | -| **转速上限保护** | 静态maxValue截断 | 动态检测:转速达上限时禁止继续加速 | -| **状态变量** | 无(仅static局部变量) | 6个成员变量(m_rampDone等) | - ---- - -### 2.3 pressureAdj() 控制流程对比 - -#### 当前项目(旧版)流程: -``` -pressureAdj() 被调用 - ├─ printOut%2 != 0 → return(跳过一次) - ├─ if gearPumpRunStopFlag == false - │ ├─ if gearPumpEnable && reclaimPumpEnable → PID_realize2(位置式PID) - │ └─ else if u>0 || 压力偏低 → PID_realize(简单PID) - ├─ u > 0 → gearPumpValue = u,否则 = 0 - ├─ 限幅800 - ├─ reclaim模式下额外限幅(基于speedAlarm) - ├─ 最后再检查 gearPumpRunStopFlag / flagOfSpeedAlarm → 清零 - └─ WriteMoterPump() -``` - -**问题:** -1. 停止/告警状态在函数末尾才处理,中间已经执行了PID计算 -2. 无条件直接输出PID结果,没有压力稳定等待 -3. 没有超压硬保护,压力飙升时响应慢 -4. 回收泵限幅逻辑复杂且硬编码 - -#### oldProject(新版)流程: -``` -pressureAdj() 被调用 - ├─ [阶段1] 停止/告警?→ 清零状态 + 复位所有状态变量 + return - ├─ [阶段2] gearPumpEnable==false → 简单PID + return - ├─ [阶段3] 硬保护:actual > target+50 → 强制减速 + return - ├─ [阶段4] 软启动(m_rampDone==false) - │ ├─ 每8次调用(≈800ms)执行一次 - │ ├─ 自适应步长(err>200→5, >100→3, >50→2, else→1) - │ ├─ 超压→减1 - │ ├─ 转速上限保护 - │ └─ selfCheckDone && err在±50内 → m_rampDone=true - ├─ [阶段5] 闭环稳态调节 - │ ├─ 更新滑动平均缓冲 - │ ├─ 稳定检测:连续15次压力变化<10 → 可调速 - │ ├─ 5秒超时兜底 - │ ├─ 分区Kp调速 - │ └─ 转速上限保护 - └─ WriteMoterPump() -``` - -**优势:** -1. 停止/告警立即处理,状态完全复位 -2. 硬保护优先于一切,安全性最高 -3. 软启动避免开机时压力突变 -4. 闭环等待压力稳定后再调,避免管路抖动导致误调 -5. 滑动平均滤除传感器噪声 -6. 分区Kp实现大误差快调、小误差精调 -7. 转速上限保护防止电机超速 - ---- - -### 2.4 新增成员变量 - -oldProject 在 `InkJetPrinter.h` 中新增了以下成员变量: - -```cpp -bool m_rampDone = false; // 软启动完成标志 -int m_adjSkip = 0; // 节拍计数(软启动/超时复用) -int m_lastPressure = 0; // 上次采样压力(稳定检测用) -int m_stableCount = 0; // 压力连续稳定计数 -int m_pressureBuf[10] = {}; // 压力滑动平均缓冲(10点=1s) -int m_bufIdx = 0; // 滑动平均写入索引 -``` - -此外还需要一个 `m_lastByHand` 变量用于检测手动→自动控制切换边沿,以及 `m_lastReclaimMode` 用于检测回收泵模式切换。 - ---- - -### 2.5 timerHandler 中的配套修改 - -oldProject 在 `timerHandler()` 中还有以下配套修改,确保状态机正确工作: - -1. **开机/重启时清零**:`gearPumpValue=0, u=0`,确保软启动从0开始爬坡 -2. **自检完成时重置软启动**:`selfCheckDone` 变为1时重置 `m_rampDone=false` 及所有缓冲 -3. **手动→自动切换时重置**:`m_lastByHand` 边沿检测,切换回自动时重置软启动 -4. **回收泵模式切换时重置**:`m_lastReclaimMode` 边沿检测,模式切换时重置软启动和泄漏保护学习状态 - ---- - -## 三、移植方案 - -### 3.1 需要修改的文件 - -| 文件 | 修改内容 | -|------|---------| -| `InkJetPrinter.h` | 新增6个成员变量 + `m_lastByHand` + `m_lastReclaimMode` | -| `InkJetPrinter.cpp` | 替换 `PID_realize2` + 替换 `pressureAdj` + 修改 `timerHandler` 中的配套逻辑 | - -### 3.2 详细修改步骤 - -#### 步骤1:修改 InkJetPrinter.h — 新增成员变量 - -在 `InkJetPrinter` 类的 private 区域添加: - -```cpp -// 压力调节算法状态变量 -bool m_rampDone = false; // pressureAdj 软启动完成标志 -int m_adjSkip = 0; // pressureAdj 节拍计数(软启动/超时复用) -int m_lastPressure = 0; // pressureAdj 上次采样压力(稳定检测用) -int m_stableCount = 0; // pressureAdj 压力连续稳定计数 -int m_pressureBuf[10] = {}; // pressureAdj 压力滑动平均缓冲(10点=1s) -int m_bufIdx = 0; // pressureAdj 滑动平均写入索引 -bool m_lastByHand = false; // 上一帧手动控制标志(边沿检测用) -bool m_lastReclaimMode = false; // 上一帧回收泵模式(边沿检测用) -``` - -#### 步骤2:替换 PID_realize2 函数 - -将当前项目的 `PID_realize2` 替换为 oldProject 的增量式版本。 - -**替换前(当前项目):** -```cpp -float PID_realize2(float speed, float act){ - pid.Kp = 0.8; - pid.Ki = 0.02; - pid.Kd = 0.5; - pid.integral_max = 12000; - // ... 位置式PID,返回绝对电压 -} -``` - -**替换后(oldProject):** -```cpp -float PID_realize2(float speed, float act){ - // 增量式 PID:Δu = Kp*(e[k]-e[k-1]) + Ki*e[k] - pid.Kp = 0.15f; - pid.Ki = 0.02f; - pid.Kd = 0.0f; - pid.SetSpeed = speed; - pid.ActualSpeed = act; - pid.err = pid.SetSpeed - pid.ActualSpeed; - - float delta_u = pid.Kp * (pid.err - pid.err_last) - + pid.Ki * pid.err; - - // 自适应非对称限幅 - if(pid.err < -30.0f) { - if(delta_u > 1.0f) delta_u = 1.0f; - if(delta_u < -6.0f) delta_u = -6.0f; - } else if(pid.err > 50.0f) { - if(delta_u > 3.0f) delta_u = 3.0f; - if(delta_u < -2.0f) delta_u = -2.0f; - } else { - if(delta_u > 3.0f) delta_u = 3.0f; - if(delta_u < -3.0f) delta_u = -3.0f; - } - - pid.err_last = pid.err; - return delta_u; -} -``` - -**注意:** 新版 `PID_realize2` 返回的是**增量 delta_u**,而不是绝对电压。调用方需要改为 `u += PID_realize2(...)` 而不是 `u = PID_realize2(...)`。 - -#### 步骤3:替换 pressureAdj() 函数 - -将整个 `pressureAdj()` 函数替换为 oldProject 版本。由于新旧版本差异较大,建议直接整体替换,不保留旧代码。 - -**关键修改点:** -- 旧版 `pressureAdj()` 中调用 `PID_realize2` 时用的是 `u = PID_realize2(...)`(赋值),新版需要改为 `u += PID_realize2(...)`(累加),因为新版返回的是增量。 -- 注意当前项目中 `sysPara->devOp->WriteMoterPump()` 的调用方式一致,无需修改。 -- 当前项目中引用 `m_MainWidget` 而不是 `ui->tabMainWindow`,在新版 pressureAdj 中不涉及 UI 控件引用,所以不影响。 - -**实际上 oldProject 的新版 pressureAdj() 已经不再调用 PID_realize2 了**,而是采用分阶段手动调速逻辑(软启动 + 分区Kp闭环),所以 PID_realize2 的替换主要是为了完整性,实际在 gearPumpEnable 模式下不会用到。 - -#### 步骤4:修改 timerHandler() 中的配套逻辑 - -需要在当前项目的 `timerHandler()` 中做以下修改: - -**4.1 开机/重启时清零控制字(在 gearPumpStartFlag 相关逻辑中):** - -当前项目(约第581-590行): -```cpp -if(sysPara->para.gearPumpEnable) { - sysPara->para.gearPumpValue = 150; - if(tempFlag){ - sysPara->devOp->WriteMoterPump(); - tempFlag=0; - } - gearPumpStartFlag = true; -} -``` - -改为: -```cpp -if(sysPara->para.gearPumpEnable) { - // 确保开机时控制字从 0 开始,让 pressureAdj 软启动从 0 爬坡 - if(sysPara->para.gearPumpValue != 0) { - sysPara->para.gearPumpValue = 0; - u = 0.0f; - sysPara->devOp->WriteMoterPump(); - } - gearPumpStartFlag = true; -} -``` - -**4.2 自检完成时重置软启动状态:** - -在 `selfCheckDone = 1` 的位置(约第883行),在设置完成后添加: -```cpp -sysPara->status.selfCheckDone = 1; -// 自检完成后重置软启动,从当前控制字开始,避免突变 -u = (float)sysPara->para.gearPumpValue; -m_rampDone = false; -m_adjSkip = 0; -m_lastPressure = 0; -m_stableCount = 0; -for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; -m_bufIdx = 0; -``` - -**4.3 手动→自动控制切换时重置软启动:** - -在 `isPumpValveControledByHand` 相关逻辑中(约第655行附近),添加边沿检测: -```cpp -// 在 timerHandler 中增加 static 变量追踪上一帧状态 -static bool lastByHand = false; - -// 检测手动→自动边沿 -if(lastByHand && !sysPara->status.isPumpValveControledByHand) -{ - ControledSwitchFlag = true; - u = (float)sysPara->para.gearPumpValue; - m_rampDone = false; - m_adjSkip = 0; - m_lastPressure = 0; - m_stableCount = 0; - for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; - m_bufIdx = 0; -} -lastByHand = sysPara->status.isPumpValveControledByHand; -``` - -**4.4 回收泵模式切换时重置软启动:** - -在 timerHandler 中增加: -```cpp -static bool lastReclaimMode = false; -if(lastReclaimMode != sysPara->para.flagOfReclaimPumEnable) -{ - lastReclaimMode = sysPara->para.flagOfReclaimPumEnable; - gearPumpRunNormalFlag = false; - gearPumpRunNormalValue = 0.0f; - m_rampDone = false; - m_adjSkip = 0; - m_lastPressure = 0; - m_stableCount = 0; - for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; - m_bufIdx = 0; -} -``` - -### 3.3 注意事项 - -1. **PID_realize 函数保留**:`PID_realize` 和 `PID_init` 在非齿轮泵模式下仍被使用,保留不变。 -2. **static 变量 u**:`static float u` 在旧版和新版中都被使用,保持文件作用域定义。 -3. **WriteMoterPump() 调用**:确认当前项目中 `sysPara->devOp->WriteMoterPump()` 接口一致。 -4. **测试验证**:移植后需要在以下场景重点测试: - - 冷启动(从0开始软启动) - - 热重启(运行中重启) - - 目标压力突变 - - 回收泵模式切换 - - 手动/自动控制切换 - - 超压保护触发 - - 长时间运行稳定性 - ---- - -## 四、总结 - -| 维度 | 当前项目 | oldProject | 提升 | -|------|---------|-----------|------| -| 超调量 | 较大(无软启动) | 小(软启动+自适应限幅) | ★★★★★ | -| 稳态精度 | 一般(直接输出) | 高(稳定检测+分区Kp) | ★★★★ | -| 响应速度 | 快但不稳 | 自适应(大误差快调,小误差精调) | ★★★★ | -| 超压保护 | 无 | 有硬保护+转速上限保护 | ★★★★★ | -| 抗噪声能力 | 弱(直接采样) | 强(10点滑动平均) | ★★★★ | -| 代码可维护性 | 一般 | 好(分阶段清晰) | ★★★ | - -移植风险:**低**。oldProject 的算法已在生产环境验证,且与当前项目共享相同的 `SysPara` 数据结构。修改集中在 `InkJetPrinter.cpp` 和 `InkJetPrinter.h` 两个文件,不涉及跨模块接口变更。 \ No newline at end of file