hlp:新建文件,内容从左下角开始,使用状态机,报警内容在自检和关机时不爆红提示
This commit is contained in:
+217
-58
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user