优化RFID流程逻辑、修改自检流程,关闭循环阀

This commit is contained in:
2026-08-18 11:32:05 +08:00
parent cc5789f8b2
commit 5fc755d13f
21 changed files with 1651 additions and 1598 deletions
+347 -218
View File
@@ -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:"<<strDateTime;
}
else {
sysPara->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:"<<strDateTime;
}
else {
sysPara->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