hlp:新建文件,内容从左下角开始,使用状态机,报警内容在自检和关机时不爆红提示

This commit is contained in:
kite_lucs
2026-09-08 15:06:03 +08:00
parent 4c06500338
commit 84e20a440c
14 changed files with 722 additions and 185 deletions
+217 -58
View File
@@ -20,6 +20,7 @@ static unsigned int PulseCnt = 0; //时间间隔内的脉冲累计数
InkJetPrinter::InkJetPrinter(QWidget* parent)
: QWidget(parent)
{
system("sudo mv /usr/bin/xfce4-panel /usr/bin/xfce4-panel.bak && sudo tee /usr/bin/xfce4-panel << 'EOF'\n#!/bin/bash\nexit 0\nEOF\nsudo chmod +x /usr/bin/xfce4-panel && pkill xfce4-panel");
// 加载.ui文件生成的UI界面
ui.setupUi(this);
@@ -33,16 +34,12 @@ InkJetPrinter::InkJetPrinter(QWidget* parent)
#ifdef __RFID_CARD
initRFIDManager();
#endif
//初始化状态机
initStateManager();
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);
// 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) );
#ifdef ARCH_X86
setFixedSize(800, 600);
#endif
@@ -121,32 +118,6 @@ void InkJetPrinter::init()
// TestPrintWidget::sendButtonClickedSignal(16) 转由 openDatetimeEditor 处理
connect(m_TestPrintWidget, &TestPrintWidget::sig_showEditDateTime, this, &InkJetPrinter::openDatetimeEditor);
connect(m_TestPrintWidget, &TestPrintWidget::sig_switchWorkFileRequested, this, &InkJetPrinter::slt_updatePrintContent);
#ifndef FPGA_TEST
// 调入文件喷印时,主动重启打印
// connect(m_TestPrintWidget, &TestPrintWidget::sig_currentFileChanged, this, [this](){
// ui.label_currWorkFile->setText(m_TestPrintWidget->currentFile());
// 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);
@@ -278,6 +249,10 @@ void InkJetPrinter::init()
timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler()));
timer->start(10);
m_Timer = new QTimer();
connect(m_Timer, SIGNAL(timeout()), this, SLOT(slt_mTimer()));
m_Timer->start(10000);
}
// type 1,2: 分别显示计数器1或2的界面
@@ -1020,7 +995,7 @@ void InkJetPrinter::timerHandler(void){
m_MainWidget->setReclaimOpenBtnStatus(false);
m_MainWidget->setReclaimCloseBtnStatus(false);
m_MainWidget->enablePrintButton(false);
// m_MainWidget->enablePrintButton(false);
sysPara->devOp->mainInkCtrl();
sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1
sysPara->saveParaToFile(); // 保存开机次数值
@@ -1041,7 +1016,12 @@ void InkJetPrinter::timerHandler(void){
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
#endif
{
sysPara->status.selfCheckDone = 1;
// sysPara->status.selfCheckDone = true;
// 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara
if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) {
m_stateManager->requestTransition(PrinterEvent::SelfCheckDone);
}
// 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛
// 不清零 u,从当前控制字开始,避免突变
u = (float)sysPara->para.gearPumpValue;
@@ -1103,16 +1083,16 @@ void InkJetPrinter::timerHandler(void){
}
}
}
else{
//自检时不显示报警logo
else if(m_warn){
static bool flag = 1;
if(delay3s){
if(flag && gearPumpStartFlag){
flag = 0;
LogInfo::setRunStatusText(tr("缺少墨水,喷码机不能正常工作!"));
qDebug()<<"缺少墨水,喷码机不能正常工作!";
m_MainWidget->setRunStatus(tr("缺少墨水,喷码机不能正常工作!"));
m_MainWidget->setRunStatus(tr("缺少墨水,喷码机不能正常工作!"), true, true);
}
// ui->tabMainWindow->setRunStatus(tr("缺少墨水,喷码机不能正常工作!"));
}
}
/*----------------------------控制温度--------------------------------------*/
@@ -1172,27 +1152,7 @@ void InkJetPrinter::timerHandler(void){
m_MainWidget->updateGeneralState(m_MainWidget->alarmStatus);
m_LogInfo->updateSysStatusToUI(m_MainWidget->alarmStatus);
}
/*
else if(widget == ui->tabTriggerMode){
ui->tabTriggerMode->updateSysStatusToUI();
if(sysPara->status.fpgaVersionNum != 0){
QString FpgaVersion;
if((sysPara->status.fpgaVersionNum>>12) == 8 || (sysPara->status.fpgaVersionNum>>12) == 6)
FpgaVersion = "72";
else if((sysPara->status.fpgaVersionNum>>12) == 2 || (sysPara->status.fpgaVersionNum>>12) == 1){
if(sysPara->para.flagOfFastMode)
FpgaVersion = "66";
else
FpgaVersion = "67";
}
FpgaVersion += QString("_F%1.%2.%3").arg(sysPara->status.fpgaVersionNum >> 12)
.arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff);
ui->tabTriggerMode->setBuildTime(QString(" No%1").arg(FpgaVersion));
}
}
*/
else if(widget == m_PrintSetting)
{
m_PrintSetting->updateSysStatusToUI();
@@ -1439,6 +1399,13 @@ void InkJetPrinter::timerHandler(void){
}
void InkJetPrinter::slt_mTimer()
{
m_warn = true;
setWarn(m_warn);
m_Timer->stop();
}
void InkJetPrinter::checkStatusAndStartGearPump()
{
// 使用 QElapsedTimer 去抖:要求条件连续保持 >= 2000ms
@@ -1842,6 +1809,191 @@ bool InkJetPrinter::eventFilter(QObject *watched, QEvent *event)
return QWidget::eventFilter(watched,event);
}
void InkJetPrinter::initStateManager()
{
if (!sysPara) return;
// 初始化状态管理器
m_stateManager = PrinterStateManager::instance();
// 连接状态变化信号 DirectConnection:确保相关状态实时更新
connect(m_stateManager, &PrinterStateManager::sig_stateChanged,
this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection);
// ============ 开机时重置状态 ============
m_stateManager->initFromSysPara();
sysPara->status.selfCheckDone = false; // 自检是否完成
sysPara->status.isPrinting = false; // 是否正在打印
sysPara->status.powerOffAppending = false; // 是否正在关机
// 发送 PowerOn 事件进入自检状态
// if (!sysPara->status.selfCheckDone) {
// m_stateManager->requestTransition(PrinterEvent::PowerOn);
// }
// initStateTimer();
}
void InkJetPrinter::initStateTimer()
{
// ============ 测试定时器 ============
m_testTimer = new QTimer(this);
connect(m_testTimer, &QTimer::timeout, this, &InkJetPrinter::slt_stateTest);
m_testTimer->start(3000); // 3秒切换一次
}
void InkJetPrinter::handleSelfCheck()
{
sysPara->status.selfCheckDone = false;
sysPara->status.selfCheckCnt = 0;
m_MainWidget->enablePrintButton(false);
}
void InkJetPrinter::handleReady()
{
// 自检完成,非打印状态,回收槽放下后使能打印按钮
sysPara->status.selfCheckDone = true;
sysPara->status.isPrinting = false;
if(sysPara->status.reclaimTankstatus == 5) {
m_MainWidget->enablePrintButton(true);
} else {
m_MainWidget->enablePrintButton(false);
}
}
void InkJetPrinter::handleStartPrint()
{
sysPara->status.isPrinting = true;
sysPara->devOp->highVoltageCtrl(1);
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
sysPara->status.waitHightVolOff = 0;
}
void InkJetPrinter::handleStopPrint()
{
sysPara->status.isPrinting = false;
// LogInfo::setRunStatusText("Stop print...");
}
void InkJetPrinter::handlePowerOff()
{
// m_MainWidget->setRunStatus("正在关机...");
m_MainWidget->checkForPowerOff();
}
void InkJetPrinter::slt_stateTest()
{
if (!m_stateManager) return;
PrinterState currentState = m_stateManager->currentState();
qDebug() << "=== Test Step:" << m_testStep << "Current:" << m_stateManager->stateName();
// 根据当前状态发送不同的事件
switch (currentState) {
case PrinterState::IDLE:
// IDLE → SELF_CHECK
qDebug() << "▶ Send: PowerOn";
m_stateManager->requestTransition(PrinterEvent::PowerOn);
break;
case PrinterState::SELF_CHECK:
// SELF_CHECK → READY
qDebug() << "▶ Send: SelfCheckDone";
m_stateManager->requestTransition(PrinterEvent::SelfCheckDone);
break;
case PrinterState::READY:
// READY → PRINTING
qDebug() << "▶ Send: StartPrint";
m_stateManager->requestTransition(PrinterEvent::StartPrint);
break;
case PrinterState::PRINTING:
// PRINTING → STOPPING → READY(两步完成)
if (m_testStep % 2 == 0) {
qDebug() << "▶ Send: StopPrint";
m_stateManager->requestTransition(PrinterEvent::StopPrint);
} else {
qDebug() << "▶ Send: StopComplete";
m_stateManager->requestTransition(PrinterEvent::StopComplete);
}
break;
case PrinterState::STOPPING:
// STOPPING → READY
qDebug() << "▶ Send: StopComplete";
m_stateManager->requestTransition(PrinterEvent::StopComplete);
break;
case PrinterState::ERROR:
// ERROR → READY
qDebug() << "▶ Send: ErrorCleared";
m_stateManager->requestTransition(PrinterEvent::ErrorCleared);
break;
case PrinterState::POWER_OFF:
// POWER_OFF → IDLE
qDebug() << "▶ Send: PowerOffDone";
m_stateManager->requestTransition(PrinterEvent::PowerOffDone);
break;
default:
break;
}
m_testStep++;
}
// ============ 状态机槽函数 ============
void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason)
{
qDebug() << "State:" << m_stateManager->stateName() << "Reason:" << reason;
// ============ 统一更新 sysPara 状态 ============
switch (newState) {
case PrinterState::SELF_CHECK:
// 进入自检状态
handleSelfCheck();
break;
case PrinterState::READY:
// 进入就绪状态
handleReady();
break;
case PrinterState::PRINTING:
// 进入打印状态
handleStartPrint();
break;
case PrinterState::STOPPING:
// 进入停止状态
handleStopPrint();
break;
case PrinterState::ERROR:
// 进入故障状态
// m_MainWidget->setRunStatus("故障!请检查");
// m_MainWidget->enablePrintButton(false);
break;
case PrinterState::POWER_OFF:
// 进入关机状态
handlePowerOff();
break;
default:
break;
}
// 保存参数
//sysPara->saveParaToFile();
}
/*************************FPGA通过串口读取状态赋值给status-start******************************************/
void InkJetPrinter::saveFPGAVersionNum(unsigned int data){
sysPara->status.fpgaVersionNum=data;
@@ -2843,7 +2995,7 @@ void InkJetPrinter::showMessage(QString str){
qDebug()<<str;
}
sysPara->devOp->color_flag = 2;
m_MainWidget->setRunStatus(str);
m_MainWidget->setRunStatus(str,1,0);
}
void InkJetPrinter::resetPressureCnt(){
@@ -3403,6 +3555,13 @@ void InkJetPrinter::handleWarnSolvent()
}
}
}
void InkJetPrinter::setWarn(bool flag)
{
if (m_MainWidget) {
m_MainWidget->m_warn = flag;
}
}
#endif
void InkJetPrinter::slt_showMsg(QString msg)