优化RFID流程逻辑、修改自检流程,关闭循环阀
This commit is contained in:
+347
-218
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user