2026年7月16日 缓存

This commit is contained in:
2026-07-16 08:28:55 +08:00
parent 31726535b0
commit 570f359339
35 changed files with 945 additions and 1275 deletions
+106 -32
View File
@@ -113,6 +113,29 @@ void InkJetPrinter::init()
// TestPrintWidget::sendButtonClickedSignal(16) 转由 openDatetimeEditor 处理
connect(m_TestPrintWidget, &TestPrintWidget::sig_showEditDateTime, this, &InkJetPrinter::openDatetimeEditor);
connect(m_TestPrintWidget, &TestPrintWidget::sig_updatePrintContent, this, &InkJetPrinter::slt_updatePrintContent);
#ifndef FPGA_TEST
// 调入文件喷印时,主动重启打印
connect(m_TestPrintWidget, &TestPrintWidget::sig_stopPrint, m_MainWidget, [this](){
auto isPrinting = sysPara->status.isPrinting;
if(isPrinting) {
m_MainWidget->on_m_StopBtn_clicked();
QTimer::singleShot(500, [this](){
m_PrintSetting->applyPrintSettingsToSysPara(false);
m_MainWidget->on_m_StartBtn_clicked();
LogInfo::setRunStatusText("Restarting the print because the work file was switched.");
});
}
else {
QTimer::singleShot(300, [this](){
m_PrintSetting->applyPrintSettingsToSysPara(false);
});
}
});
#endif
// 班时元素与编辑 连接
connect(m_TestPrintWidget, &TestPrintWidget::sig_showScheduleShiftsEditor, this, &InkJetPrinter::showScheduleShiftsEditor);
@@ -985,7 +1008,8 @@ void InkJetPrinter::timerHandler(void){
}
// byons: 时间类型图元更新 @2026年4月11日
if (m_MainWidget->dateTimeItemsDotUpdate()) {
auto updateArea = m_MainWidget->variableItemsUpdate();
if (!updateArea.isNull()) {
// // 统计追踪更新频率
// static QElapsedTimer bnsTimer;
// static int toogleCount = 0;
@@ -997,7 +1021,7 @@ void InkJetPrinter::timerHandler(void){
// }
if(sysPara->status.isPrinting) {
m_MainWidget->SendPrintDataToFpga(0, true);
m_MainWidget->SendPrintDataToFpga(0, updateArea.left(), updateArea.width());
}
if(m_StackedWidget->currentWidget() == m_MainWidget) {
@@ -1013,11 +1037,14 @@ void InkJetPrinter::timerHandler(void){
if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0)
{
if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){
sysPara->status.selfCheckDone = true;
// sysPara->status.selfCheckDone = true;
m_MainWidget->updatePrintDisplayLabel();
// sysPara->status.flagOfAbnormalStatus = true;
qDebug()<<"打印过程中死机了!!!";
m_MainWidget->on_m_StopBtn_clicked();
}
if(!sysPara->status.selfCheckDone)
{
/*开机自检*/
@@ -1075,19 +1102,20 @@ void InkJetPrinter::timerHandler(void){
// 自检结束发送打印设置
qInfo() << "Self check done and send print para to FPGA";
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
sysPara->devOp->writeFpgaCalandar(0);
sysPara->devOp->writeFpgaPrintPara(true);
// sysPara->devOp->setHighVoltageAmplitudetoSTM32();
// sysPara->devOp->writeFpgaCalandar(0);
// sysPara->devOp->writeFpgaPrintPara(true);
#ifdef __RFID_CARD
// 刷卡判定
if(sysPara->RFIDPara.inkCardTimeOut
|| sysPara->RFIDPara.solventCardTimeOut
|| sysPara->RFIDPara.needMaintenance) {
m_MainWidget->setReclaimOpenBtnStatus(false);
LogInfo::setRunStatusText(tr("Need maintenance."));
}
#endif
// 自检完成后,关闭高电压,不知道为什么,有时候开机自检都有高压
sysPara->devOp->highVoltageCtrl(0);
// 自检完成后,写入一遍打印设置和内容,不然好像直接开始打印不行
if(m_PrintSetting)
m_PrintSetting->applyPrintSettingsToSysPara(false);
m_MainWidget->SendPrintDataToFpga(0);
m_MainWidget->on_m_StopBtn_clicked();
if(sysPara->para.Reciclar)
test_flag = 1;
@@ -1172,7 +1200,8 @@ void InkJetPrinter::timerHandler(void){
#endif
if(pulse_300ms){
sysPara->devOp->readCalandarDat(); //务必读一下此数据
sysPara->devOp->readCalandarDat(); //务必读一下此数据
if(sysPara->status.RandomNum>0)
sysPara->devOp->Read_RanddomFromFpga();
#ifdef COUNTER1_BY_GROUP /* 分段计米 */
@@ -1291,6 +1320,7 @@ void InkJetPrinter::timerHandler(void){
// warningHandler(3);
// }
// LogInfo::setRunStatusText(tr("处理警告:%1").arg(QDateTime::currentDateTime()));
handleWarnInk(); // 处理墨水警告
handleWarnSolvent(); // 处理溶剂警告
#endif
@@ -1495,6 +1525,7 @@ void InkJetPrinter::getTestPrintWidgetButtonClickedSlot(int index)
m_StackedWidget->setCurrentWidget(m_MainWidget);
MySleep(200);
m_MainWidget->onPreviewScene();
m_MainWidget->SendPrintDataToFpga(0);
break;
}
@@ -1852,6 +1883,13 @@ void InkJetPrinter::saveFPGACalandarAndDat(unsigned char *data){
for(int i=0;i<len;i++){
target[i]=data[7+i];
}
QString hexStr = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue, 16);
bool ok;
sysPara->para.cnt1CurrValue = hexStr.toUInt(&ok, 10);
hexStr = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue, 16);
sysPara->para.cnt2CurrValue = hexStr.toUInt(&ok, 10);
}
void InkJetPrinter::saveFPGACnt3CurrValue(unsigned char *data){
@@ -2454,7 +2492,6 @@ void InkJetPrinter::autoControlHeater(){
* 控制回收槽
*
* */
void InkJetPrinter::detectAndcontrolReclaimTank(){
sysPara->status.currReclaimTankPos =10*sysPara->status.curr_reclaimTankTime;
sysPara->status.reclaimTankBlockedAppending =0;
@@ -2471,6 +2508,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
sysPara->devOp->controlReclaimTankOpen(false);
}
m_MainWidget->stopFlashReclaimOpenBtn();
}
else if(sysPara->status.reclaimTankstatus == 5 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{
@@ -2480,7 +2518,10 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
m_MainWidget->setRunStatus(tr("回收槽到头"));
m_MainWidget->setReclaimStatus(true, 100);
m_MainWidget->enablePrintButton(true); //仅仅在此时能使能打印按钮
sysPara->devOp->highVoltageCtrl(1);
// sysPara->devOp->highVoltageCtrl(1);
m_MainWidget->stopFlashReclaimOpenBtn();
// emit reclaimTankOpenDone();
/*回收槽开关时间校正*/
sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12;
@@ -2494,13 +2535,21 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{
sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭
m_MainWidget->stopFlashReclaimOpenBtn();
// ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误"));
}
else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{
auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f;
int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100));
m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate);
// 不知道为什么会有rate为0,且 sysPara->status.reclaimTankstatus == 2 ,也就是 关的状态。 回收槽位置在0处,而状态却是 关 ,很奇怪
if(sysPara->status.reclaimTankstatus != 2 && rate != 0) {
m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate);
}
m_MainWidget->setReclaimOpenBtnStatus(sysPara->status.reclaimTankstatus == 2);
m_MainWidget->setReclaimCloseBtnStatus(sysPara->status.reclaimTankstatus == 1);
sysPara->status.reclaimBlockedCnt = 0;
}
@@ -2509,14 +2558,13 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
if(sysPara->devOp->isReclaimTankCloseEnable())
sysPara->devOp->controlReclaimTankClose(false); //到头,关闭
m_MainWidget->setReclaimStatus(false, 0);
m_MainWidget->stopFlashReclaimOpenBtn();
//sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零
// emit reclaimTankCloseDone();
sysPara->status.lastRecycleWarn = 0;
sysPara->status.HVFaultCloseEn=0;
sysPara->status.reclainCloseAppending=false;
sysPara->status.canRunAirPushing = true; //下次开回收槽就执行排气程序
LogInfo::setRunStatusText("reclaimTankCloseDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos));
}
else if(sysPara->status.reclaimTankstatus == 0x12 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{
@@ -2524,6 +2572,12 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误"));
m_MainWidget->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误"));
}
else if(sysPara->status.reclaimTankstatus == 4 )
{
m_MainWidget->setReclaimOpenBtnStatus(true);
m_MainWidget->setReclaimCloseBtnStatus(true);
LogInfo::setRunStatusText("Reclaim tank hold on "+QString::number(sysPara->status.currReclaimTankPos));
}
}
void InkJetPrinter::viscosity_timerHandler()
@@ -2562,7 +2616,7 @@ void InkJetPrinter::rebootApp()
sysPara->devOp->controlInkValve(false);
sysPara->devOp->controlInkValvePWM(false);
}
m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i));
m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒......").arg(i));
MySleep(1000);
}
}
@@ -2595,7 +2649,7 @@ void InkJetPrinter::rebootApp()
{
if(i==9)
sysPara->devOp->controlReclaimTankOpen(false);
m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i));
m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒......").arg(i));
MySleep(1000);
}
}
@@ -2621,7 +2675,7 @@ void InkJetPrinter::rebootApp()
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
}
m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i));
m_MainWidget->setRunStatus(tr("正在准备重启,请等待%1秒......").arg(i));
MySleep(1000);
}
}
@@ -2719,11 +2773,12 @@ void InkJetPrinter::warningHandler(int type){
if (!sysPara->RFIDPara.inkCardTimeOut)
inkTime = 48- dateTimeDiff/60/60;
}
if(sysPara->RFIDPara.inkCardTimeOut){
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;
}
}
@@ -2736,18 +2791,21 @@ void InkJetPrinter::warningHandler(int type){
if (dateTimeDiff > 60*60*24*2) {
sysPara->RFIDPara.solventCardTimeOut = true;
}
if (!sysPara->RFIDPara.solventCardTimeOut)
solventTime = 48- dateTimeDiff/60/60;
solventTime = 48- dateTimeDiff / 60 / 60;
}
if(sysPara->RFIDPara.solventCardTimeOut){
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******************/
@@ -2856,6 +2914,7 @@ int InkJetPrinter::updateWarningTime(int type){
// 读取文件内容
QTextStream in(&file);
QString starTime = in.readAll(); // 第一次提示的时间
starTime = starTime.trimmed();
// 关闭文件
file.close();
inkWarnTime = QDateTime::fromString(starTime,"yyyy-MM-dd HH::mm::ss");
@@ -2873,6 +2932,7 @@ int InkJetPrinter::updateWarningTime(int type){
// 读取文件内容
QTextStream in(&file);
QString starTime = in.readAll(); // 第一次提示的时间
starTime = starTime.trimmed();
// 关闭文件
file.close();
solventWarnTime = QDateTime::fromString(starTime,"yyyy-MM-dd HH::mm::ss");
@@ -2968,7 +3028,6 @@ void InkJetPrinter::handleWarnInk()
if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME){
sysPara->para.flagOfInkWarning = true;
sysPara->RFIDPara.needInkCard = true;
manager_rfid->setInkCardFirstPrompt(true);
QString strCurDateTime = QDateTime::currentDateTime().toString("yyMMddhhmmss");
LogInfo::setRunStatusText("Ink warning.");
@@ -3007,7 +3066,7 @@ void InkJetPrinter::handleWarnInk()
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)){
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){
qDebug()<<"Open inkRFIDTime Failure.";
LogInfo::setRunStatusText("Open inkRFIDTime Failure.");
}
@@ -3046,7 +3105,6 @@ void InkJetPrinter::handleWarnSolvent()
if(sysPara->status.solventWarningCnt >= DETECT_WARNING_TIME){
sysPara->para.flagOfSolventWarning = true;
sysPara->RFIDPara.needSolventCard = true;
manager_rfid->setSolventCardFirstPrompt(true);
QDateTime curDateTime = QDateTime::currentDateTime();
QString strCurDateTime = curDateTime.toString("yyMMddhhmmss");
@@ -3084,7 +3142,7 @@ void InkJetPrinter::handleWarnSolvent()
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)){
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){
qDebug()<<"Open solventRFIDTime Failure.";
LogInfo::setRunStatusText("Open solventRFIDTime Failure.");
}
@@ -3113,8 +3171,24 @@ void InkJetPrinter::handleWarnSolvent()
void InkJetPrinter::slt_showMsg(QString msg)
{
static QList<QMessageBox*> msgPool;
QMessageBox * msgBox = new QMessageBox(QMessageBox::NoIcon, tr("提示"), msg, QMessageBox::StandardButton::Ok);
connect(msgBox, &QMessageBox::finished, msgBox, &QMessageBox::deleteLater);
msgPool.push_back(msgBox);
connect(msgBox, &QMessageBox::finished, [this, msgBox, &msgPool](){
auto idx = msgPool.lastIndexOf(msgBox);
if(idx != -1) {
msgPool.removeAt(idx);
}
msgBox->deleteLater();
});
msgBox->show();
if(msgPool.size() > 3) {
msgPool.takeFirst()->deleteLater();
}
LogInfo::setRunStatusText(msg);
}