hlp:状态机初版,统一管理回收槽状态,启动和停止打印时的状态

This commit is contained in:
kite_lucs
2026-09-16 16:53:19 +08:00
parent 5a187c359b
commit af37661b74
7 changed files with 373 additions and 416 deletions
+79 -173
View File
@@ -311,7 +311,7 @@ void InkJetPrinter::showEvent(QShowEvent *e)
fpgaReadyTimer = nullptr;
}
else {
qDebug() << "FPGA not connected yet.";
// qDebug() << "FPGA not connected yet.";
}
});
@@ -789,7 +789,7 @@ void InkJetPrinter::timerHandler(void){
checkPressureControl();
if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){
if(m_MainWidget->getCurrPrintStatus() != 1){
if(sysPara->status.isPrinting == false){
m_MainWidget->_on_pushButtonPowerOff_pressed(false);
LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机"));
}
@@ -889,29 +889,6 @@ void InkJetPrinter::timerHandler(void){
sysPara->devOp->readFgaStatus();
}
/**************桂澳增加超速提示*****************************/
static int logCtrl = 0;
if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER || sysPara->para.eleEyeTriggerSynPrintEn)
&& sysPara->status.lesslen_warn == 1){ //置1表示超速了
if(logCtrl++ % 500 == 0){
// LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!"));
qDebug()<<"速度过快,请检查是否漏喷!!!";
}
/*if(msgBox1->isHidden()){ //桂澳的超速提示先保留
msgBox1->setText(tr("速度过快,请检查是否漏喷!!!"));
msgBox1->show();
LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!"));
qDebug()<<"速度过快,请检查是否漏喷!!!";
}*/
sysPara->devOp->controlRedLight(true);
sysPara->devOp->controlGreenLight(false);
}
else{
// if(!msgBox1->isHidden())
// sysPara->devOp->controlRedLight(false);
}
sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2);
if(!sysPara->para.gearPumpEnable)
sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍
@@ -923,7 +900,7 @@ void InkJetPrinter::timerHandler(void){
if(sysPara->status.delay10ms%5 == 0)
{//复位发送打印数据
if((m_MainWidget->getCurrPrintStatus() == 1)&&sysPara->para.ResetSendData)
if(sysPara->status.isPrinting && sysPara->para.ResetSendData)
{
static bool oneTimeFlag = false;
if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据
@@ -950,7 +927,6 @@ void InkJetPrinter::timerHandler(void){
lastProductCount = sysPara->status.productCnt;
if(vartypeR != 0){ //更新替换变量的值
// LogInfo::setRunStatusText("vartypeR");
MySleep(100);
m_MainWidget->onPreviewScene();
m_MainWidget->SendPrintDataToFpga(0);
@@ -969,15 +945,6 @@ void InkJetPrinter::timerHandler(void){
}
if (!updateAreas.isEmpty() && m_StackedWidget->currentWidget() == m_MainWidget) {
// // 统计追踪更新频率
// static QElapsedTimer bnsTimer;
// static int toogleCount = 0;
// ++toogleCount;
// if(toogleCount > 10) {
// auto elapsed = bnsTimer.restart();
// qDebug() << (QString("timeHandler avg elapsed: %1 s").arg(elapsed / qreal(toogleCount) / 1000.0));
// toogleCount = 0;
// }
m_MainWidget->updatePrintDisplayLabel();
}
@@ -1032,11 +999,10 @@ void InkJetPrinter::timerHandler(void){
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
#endif
{
sysPara->status.selfCheckDone = true;
// 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara
// if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) {
// m_stateManager->requestTransition(PrinterEvent::SelfCheckDone);
// }
if (m_stateManager && m_stateManager->isState(PrinterState::IDLE)) {
m_stateManager->requestTransition(PrinterEvent::PowerOn);
}
// 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛
// 不清零 u,从当前控制字开始,避免突变
@@ -1049,29 +1015,15 @@ void InkJetPrinter::timerHandler(void){
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
m_MainWidget->setReclaimOpenBtnStatus(true);
m_MainWidget->setReclaimCloseBtnStatus(false);
sysPara->devOp->mainInkCtrl();
sysPara->status.canRunAirPushing = true;
// 自检完成后,关闭高电压,不知道为什么,有时候开机自检都有高压
sysPara->devOp->highVoltageCtrl(0);
m_MainWidget->on_m_StopBtn_clicked();
LogInfo::setRunStatusText(tr("自检完成!!!"));
m_MainWidget->setRunStatus(tr("自检完成!!!"));
qDebug()<<"自检完成!!!";
if(sysPara->para.Reciclar)
test_flag = 1;
}
else {
if((sysPara->status.selfCheckCnt % 200) == 0)
m_MainWidget->setReclaimOpenBtnStatus(false);
m_MainWidget->setReclaimCloseBtnStatus(false);
}
}
else{
@@ -1228,6 +1180,9 @@ void InkJetPrinter::timerHandler(void){
if(pulse_100ms && sysPara->status.selfCheckDone){
detectAndcontrolReclaimTank(); //控制回收槽
if (m_stateManager) {
m_stateManager->checkReadyState();
}
}
/*---------------------------------处理警告--------------------------------------------*/
@@ -1838,63 +1793,69 @@ void InkJetPrinter::initStateManager()
m_stateManager = PrinterStateManager::instance();
// 连接状态变化信号 DirectConnection:确保相关状态实时更新
// connect(m_stateManager, &PrinterStateManager::sig_stateChanged,
// this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection);
connect(m_stateManager, &PrinterStateManager::sig_stateChanged,
this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection);
// 使能开始打印、停止打印、开回收槽、关回收槽按钮
connect(m_stateManager, &PrinterStateManager::sig_enableStartPrint,
this, &InkJetPrinter::slt_enableStartPrint, Qt::DirectConnection);
connect(m_stateManager, &PrinterStateManager::sig_enableStopPrint,
this, &InkJetPrinter::slt_enableStopPrint, Qt::DirectConnection);
connect(m_stateManager, &PrinterStateManager::sig_enableOpenTank,
this, &InkJetPrinter::slt_enableOpenTank, Qt::DirectConnection);
connect(m_stateManager, &PrinterStateManager::sig_enableCloseTank,
this, &InkJetPrinter::slt_enableCloseTank, Qt::DirectConnection);
// 更新回收槽状态
connect(m_stateManager, &PrinterStateManager::sig_updateReclaimStatus,
this, [=](){m_MainWidget->updateReclaimStatus();});
// ============ 开机时重置状态 ============
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秒切换一次
m_stateManager->bindSysPara(sysPara);
}
void InkJetPrinter::handleSelfCheck()
{
sysPara->status.selfCheckDone = false;
sysPara->status.selfCheckCnt = 0;
m_MainWidget->enablePrintButton(false);
// 自检完成,非打印状态,回收槽放下后使能打印按钮
if (!sysPara->status.selfCheckDone) {
sysPara->status.selfCheckDone = true;
LogInfo::setRunStatusText(tr("自检完成!!!"));
m_MainWidget->setRunStatus(tr("自检完成!!!"));
}
}
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);
}
// MySleep(50);
// m_MainWidget->updateReclaimStatus();
}
void InkJetPrinter::handleStartPrint()
{
sysPara->status.isPrinting = true;
sysPara->status.waitHightVolOff = 0;
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
sysPara->devOp->highVoltageCtrl(1);
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
sysPara->status.waitHightVolOff = 0;
sysPara->devOp->printCtrl(PRINT_CTRL_START);
// MySleep(50);
// m_MainWidget->updateReclaimStatus();
}
void InkJetPrinter::handleStopPrint()
{
sysPara->status.isPrinting = false;
// LogInfo::setRunStatusText("Stop print...");
sysPara->devOp->printCtrl2(1);
sysPara->devOp->printCtrl( PRINT_CTRL_STOP);
sysPara->status.waitHightVolOff = 1;
sysPara->saveParaToFile(); // 将相关配置保存
// 停止完毕后再进入就绪状态,允许开始打印
m_stateManager->requestTransition(PrinterEvent::StopComplete);
// MySleep(50);
// m_MainWidget->updateReclaimStatus();
}
void InkJetPrinter::handlePowerOff()
@@ -1903,101 +1864,40 @@ void InkJetPrinter::handlePowerOff()
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;
Q_UNUSED(oldState)
LogInfo::setRunStatusText(reason);
// ============ 统一更新 sysPara 状态 ============
switch (newState) {
case PrinterState::SELF_CHECK:
// 进入自检状态
// 进入自检完成状态
handleSelfCheck();
LogInfo::setRunStatusText("SELF_CHECK_DONE");
break;
case PrinterState::READY:
// 进入就绪状态
handleReady();
LogInfo::setRunStatusText("READY");
break;
case PrinterState::PRINTING:
// 进入打印状态
handleStartPrint();
LogInfo::setRunStatusText("PRINTING");
break;
case PrinterState::STOPPING:
// 进入停止状态
handleStopPrint();
LogInfo::setRunStatusText("STOPPING");
break;
case PrinterState::ERROR:
// 进入故障状态
// m_MainWidget->setRunStatus("故障!请检查");
// m_MainWidget->enablePrintButton(false);
break;
case PrinterState::POWER_OFF:
@@ -2008,9 +1908,27 @@ void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldStat
default:
break;
}
}
// 保存参数
//sysPara->saveParaToFile();
void InkJetPrinter::slt_enableStartPrint(bool able)
{
m_MainWidget->enabeleStartBtn(able);
}
void InkJetPrinter::slt_enableStopPrint(bool able)
{
m_MainWidget->enabeleStopBtn(able);
}
// 排气过程中不使能
void InkJetPrinter::slt_enableOpenTank(bool able)
{
m_MainWidget->setReclaimOpenBtnStatus(able);
}
void InkJetPrinter::slt_enableCloseTank(bool able)
{
m_MainWidget->setReclaimCloseBtnStatus(able);
}
/*************************FPGA通过串口读取状态赋值给status-start******************************************/
@@ -2769,59 +2687,46 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭
sysPara->status.reclainTankReachEnd = true;
m_MainWidget->setRunStatus(tr("回收槽到头"));
m_MainWidget->setReclaimStatus(true, 100);
m_MainWidget->enablePrintButton(true); //仅仅在此时能使能打印按钮
sysPara->devOp->highVoltageCtrl(0);
m_MainWidget->stopFlashReclaimOpenBtn();
// emit reclaimTankOpenDone();
/*回收槽开关时间校正*/
sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12;
m_SystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime );
qDebug()<<"reclaimTankOpenDone currReclaimTankPos:"<<sysPara->status.currReclaimTankPos;
qDebug()<<"reclaimTankOpenDone curr_reclaimTankTime:"<<sysPara->status.curr_reclaimTankTime;
LogInfo::setRunStatusText("reclaimTankOpenDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos));
}
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("回收槽卡住或者回收槽开关时间设置错误"));
// 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));
// auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f;
// int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100));
// 不知道为什么会有rate为0,且 sysPara->status.reclaimTankstatus == 2 ,也就是 关的状态。 回收槽位置在0处,而状态却是 关 ,很奇怪
if(sysPara->status.reclaimTankstatus != 2 && rate != 0) {
m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate);
if(sysPara->status.reclaimTankstatus != 2) {
#ifdef BNS_DEBUG
#ifdef BNS_DEBUG
if(rate == 100) {
m_MainWidget->enablePrintButton(true);
m_MainWidget->stopFlashReclaimOpenBtn();
sysPara->status.reclaimTankstatus = 5;
}
#endif
#endif
}
m_MainWidget->setReclaimOpenBtnStatus(sysPara->status.reclaimTankstatus == 2);
m_MainWidget->setReclaimCloseBtnStatus(sysPara->status.reclaimTankstatus == 1);
sysPara->status.reclaimBlockedCnt = 0;
}
else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{
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;
@@ -2839,6 +2744,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
m_MainWidget->setReclaimCloseBtnStatus(true);
LogInfo::setRunStatusText("Reclaim tank hold on "+QString::number(sysPara->status.currReclaimTankPos));
}
}
void InkJetPrinter::viscosity_timerHandler()
+10 -6
View File
@@ -284,18 +284,17 @@ private:
bool gearPumpStartFlag = false;
// 状态机
// ===================状态机====================
PrinterStateManager* m_stateManager = nullptr;
// 测试定时器
QTimer* m_testTimer = nullptr;
int m_testStep = 0;
private:
void initStateManager();
void initStateTimer();
// 不同状态的处理
// 自检
void handleSelfCheck();
// 自检完成
void handleToReady();
// 就绪
void handleReady();
@@ -306,7 +305,12 @@ private:
// 关机
void handlePowerOff();
private slots:
void slt_stateTest();
// 切换状态
void slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason);
// 使能开始打印、停止打印、开回收槽、关回收槽按钮
void slt_enableStartPrint(bool);
void slt_enableStopPrint(bool);
void slt_enableOpenTank(bool);
void slt_enableCloseTank(bool);
};
+149 -8
View File
@@ -1,5 +1,6 @@
#include "PrinterStateManager.h"
#include "PrinterStateManager.h"
#include <QDebug>
#include "LogInfo.h"
PrinterStateManager* PrinterStateManager::s_instance = nullptr;
@@ -15,17 +16,37 @@ PrinterStateManager::PrinterStateManager()
{
initTransitions();
m_currentState = PrinterState::IDLE;
initTimer();
}
PrinterStateManager::~PrinterStateManager()
{
if (m_updateUITimer) {
m_updateUITimer->stop();
m_updateUITimer->deleteLater();
m_updateUITimer = NULL;
}
if (m_sysPara) {
m_sysPara = NULL;
}
}
void PrinterStateManager::initTimer()
{
if (m_updateUITimer == NULL) {
m_updateUITimer = new QTimer();
connect(m_updateUITimer, &QTimer::timeout, this,
&PrinterStateManager::slt_timeout);
m_updateUITimer->setInterval(50);
m_updateUITimer->setSingleShot(true);
}
}
QString PrinterStateManager::stateName() const
{
switch (m_currentState) {
case PrinterState::IDLE: return "空闲";
case PrinterState::SELF_CHECK: return "自检中";
case PrinterState::SELF_CHECK: return "自检完成";
case PrinterState::READY: return "就绪";
case PrinterState::PRINTING: return "打印中";
case PrinterState::STOPPING: return "停止中";
@@ -38,7 +59,7 @@ QString PrinterStateManager::stateName() const
// ============ 初始化状态(开机时调用一次) ============
void PrinterStateManager::initFromSysPara()
{
setState(PrinterState::SELF_CHECK, "Init from sysPara");
setState(PrinterState::IDLE, "Init from sysPara");
}
// ============ 状态转移表 ============
@@ -49,9 +70,13 @@ void PrinterStateManager::initTransitions()
{PrinterState::IDLE, PrinterEvent::PowerOn,
PrinterState::SELF_CHECK, "IDLE → SELF_CHECK", nullptr},
{PrinterState::SELF_CHECK, PrinterEvent::SelfCheckDone,
PrinterState::READY, "SELF_CHECK → READY", nullptr},
PrinterState::READY, "SELF_CHECK → READY",
[this]() -> bool { return guardReclaimTankOpen(); }},
{PrinterState::SELF_CHECK, PrinterEvent::SelfCheckFailed,
PrinterState::ERROR, "SELF_CHECK → ERROR", nullptr},
// 注意,逆清洗和关回收槽时,需要把状态重新切换回自检
{PrinterState::READY, PrinterEvent::ReSelfCheck,
PrinterState::SELF_CHECK, "READY → SELF_CHECK", nullptr},
// 打印流程
{PrinterState::READY, PrinterEvent::StartPrint,
@@ -101,8 +126,9 @@ PrinterStateManager::Transition* PrinterStateManager::findTransition(PrinterEven
// ============ 请求切换状态(外部唯一接口) ============
void PrinterStateManager::requestTransition(PrinterEvent event)
{
qDebug() << "Request event:" << static_cast<int>(event)
<< "Current:" << stateName();
LogInfo::setRunStatusText(QString("Transition %1:%2")
.arg(stateName())
.arg(m_sysPara->status.reclaimTankstatus));
Transition* trans = findTransition(event);
if (!trans) {
@@ -123,11 +149,51 @@ void PrinterStateManager::requestTransition(PrinterEvent event)
setState(trans->toState, trans->description);
}
static int f = 0;
void PrinterStateManager::checkReadyState()
{
// 自检完成后,随时检查能否进入READY状态
if (m_currentState == PrinterState::SELF_CHECK) {
if (m_sysPara) {
if (f ++ > 50) {
f = 0;
LogInfo::setRunStatusText
(QString("%3:%1---airPushing:%2")
.arg(m_sysPara->status.reclaimTankstatus)
.arg(m_sysPara->status.airPushing)
.arg(stateName()));
}
if (m_sysPara->status.airPushing) {
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(false);
return;
}
switch (m_sysPara->status.reclaimTankstatus) {
case 5:
setState(PrinterState::READY, "READY");
break;
default:
// 回收槽状态变化后就更新一次
if (lastState != m_sysPara->status.reclaimTankstatus
&& m_sysPara->status.reclaimTankstatus != 0) {
if (m_updateUITimer && !m_updateUITimer->isActive()) {
m_updateUITimer->start();
}
lastState = m_sysPara->status.reclaimTankstatus;
emit sig_updateReclaimStatus();
}
break;
}
}
}
}
// ============ 内部状态切换 ============
void PrinterStateManager::setState(PrinterState newState, const QString& reason)
{
if (m_currentState == newState) {
qDebug() << "State already:" << stateName();
return;
}
@@ -136,8 +202,12 @@ void PrinterStateManager::setState(PrinterState newState, const QString& reason)
qDebug() << "State changed:" << stateName() << "Reason:" << reason;
if (m_updateUITimer && !m_updateUITimer->isActive())
m_updateUITimer->start();
// 发送信号通知外部
emit sig_stateChanged(newState, m_previousState, reason);
emit sig_updateReclaimStatus();
}
// ============ 辅助函数 ============
@@ -157,21 +227,30 @@ QString PrinterStateManager::stateNameFromEnum(PrinterState state) const
// ============ 守卫条件函数 ============
static char times = 0;
bool PrinterStateManager::guardReclaimTankOpen()
{
if (!m_sysPara) return false;
return m_sysPara->status.reclainTankReachEnd == true;
if (times ++ > 50) {
times = 0;
LogInfo::setRunStatusText(QString("guardReclaimTankOpen:%1").arg(m_sysPara->status.reclainTankReachEnd));
LogInfo::setRunStatusText(QString("reclaimTankstatus:%1").arg(m_sysPara->status.reclaimTankstatus));
}
return m_sysPara->status.reclainTankReachEnd || (m_sysPara->status.reclaimTankstatus == 5);
}
bool PrinterStateManager::guardInkSwintOpen()
{
if (!m_sysPara) return false;
LogInfo::setRunStatusText("guardInkSwintOpen:" + !(m_sysPara->status.statWarn & WARN_STATUS_INK_SWINT));
return !(m_sysPara->status.statWarn & WARN_STATUS_INK_SWINT);
}
bool PrinterStateManager::guardNoError()
{
if (!m_sysPara) return false;
LogInfo::setRunStatusText("guardNoError:" + (m_sysPara->status.statWarn == 0));
return m_sysPara->status.statWarn == 0;
}
@@ -190,6 +269,7 @@ bool PrinterStateManager::guardNoSolventWarn()
bool PrinterStateManager::guardSelfCheckDone()
{
if (!m_sysPara) return false;
LogInfo::setRunStatusText("guardSelfCheckDone:" + m_sysPara->status.selfCheckDone);
return m_sysPara->status.selfCheckDone == true;
}
@@ -201,3 +281,64 @@ bool PrinterStateManager::guardCanStartPrint()
return guardReclaimTankOpen() && guardInkSwintOpen() &&
guardNoError() && guardSelfCheckDone();
}
void PrinterStateManager::slt_timeout()
{
if (m_sysPara) {
LogInfo::setRunStatusText(QString("slt_timeout ENTER:%1--state:%2--airPushing:%3")
.arg(stateName())
.arg(m_sysPara->status.reclaimTankstatus)
.arg(m_sysPara->status.airPushing));
switch (m_sysPara->status.reclaimTankstatus) {
case 1: // 开
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
break;
case 2: // 关
emit sig_enableOpenTank(true);
emit sig_enableCloseTank(false);
break;
case 3:
case 4:
break;
case 5: // 开完成
// emit sig_enableStartPrint(true);
// emit sig_enableStopPrint(true);
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
break;
case 6: // 6关完成
emit sig_enableOpenTank(true);
emit sig_enableCloseTank(false);
break;
case 0x10: // 故障
emit sig_enableStartPrint(false);
emit sig_enableStopPrint(false);
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
break;
case 0x11: // 卡住,关闭
default:
break;
}
}
// STATE
switch (m_currentState) {
case PrinterState::SELF_CHECK:
emit sig_enableStartPrint(false);
emit sig_enableStopPrint(false);
break;
// 需要确认开完成时,状态是否一定是READY,然后避免重复操作 TODO
case PrinterState::READY:
emit sig_enableStartPrint(true);
emit sig_enableStopPrint(true);
break;
default:
break;
}
// 避免发出太多信号
if (m_updateUITimer) m_updateUITimer->stop();
}
+23 -2
View File
@@ -2,12 +2,13 @@
#define PRINTERSTATEMANAGER_H
#include <QObject>
#include <QTimer>
#include <QVector>
#include "SysPara.h"
enum class PrinterState {
IDLE, // 空闲
SELF_CHECK, // 自检中
SELF_CHECK, // 自检完成
READY, // 就绪
PRINTING, // 打印中
STOPPING, // 停止中
@@ -20,6 +21,7 @@ enum class PrinterEvent {
PowerOn,
SelfCheckDone,
SelfCheckFailed,
ReSelfCheck,
StartPrint,
StopPrint,
StopComplete,
@@ -52,10 +54,21 @@ public:
// 外部唯一接口:请求切换状态
void requestTransition(PrinterEvent event);
// 检查状态
void checkReadyState();
signals:
// 状态变化信号(外部监听执行具体业务)
void sig_stateChanged(PrinterState newState, PrinterState oldState, QString reason);
//使能开始和停止打印按钮
void sig_enableStartPrint(bool);
void sig_enableStopPrint(bool);
//使能开关回收槽
void sig_enableOpenTank(bool);
void sig_enableCloseTank(bool);
// 更新回收槽状态
void sig_updateReclaimStatus();
private:
PrinterStateManager();
~PrinterStateManager();
@@ -66,6 +79,9 @@ private:
PrinterState m_currentState = PrinterState::IDLE;
PrinterState m_previousState = PrinterState::IDLE;
QTimer* m_updateUITimer = NULL;
void initTimer();
// 状态转移表
// 守卫条件函数类型
using GuardFunc = std::function<bool()>;
@@ -80,6 +96,9 @@ private:
QVector<Transition> m_transitions;
// 记录上一次回收槽状态
unsigned char lastState = 0;
void initTransitions();
Transition* findTransition(PrinterEvent event);
@@ -88,7 +107,7 @@ private:
QString stateNameFromEnum(PrinterState state) const;
// ============ 守卫条件函数 ============
// ============ guard 守卫条件函数 ============
// 检查回收槽是否已打开
bool guardReclaimTankOpen();
@@ -110,5 +129,7 @@ private:
// 检查是否满足所有打印条件
bool guardCanStartPrint();
private slots:
void slt_timeout();
};
#endif // PRINTERSTATEMANAGER_H
+10 -16
View File
@@ -340,14 +340,6 @@ void SystemManage::on_pushButtonControlByHand_pressed()
void SystemManage::on_pushButtonReclaimTankOpen_pressed()
{
if(sysPara){
// if(!sysPara->para.isCheckMagnet)
// {
// if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){
// QMessageBox::warning(this, tr("警告"),
// tr("请先移开喷头盖!"));
// return ;
// }
// }
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止"));
sysPara->devOp->highVoltageCtrl(0);
@@ -355,20 +347,13 @@ void SystemManage::on_pushButtonReclaimTankOpen_pressed()
sysPara->status.reclainCloseAppending = false;
sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclaimTankstatus = 1;
}
}
void SystemManage::on_pushButtonReclaimTankClose_pressed()
{
if(sysPara){
// if(!sysPara->para.isCheckMagnet)
// {
// if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){
// QMessageBox::warning(this, tr("警告"),
// tr("请先移开喷头盖!"));
// return ;
// }
// }
sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable());
ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止"));
sysPara->devOp->highVoltageCtrl(0);
@@ -376,6 +361,7 @@ void SystemManage::on_pushButtonReclaimTankClose_pressed()
sysPara->status.reclainCloseAppending = true;
sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclaimTankstatus = 2;
}
}
#include <time.h>
@@ -582,11 +568,19 @@ fi\n" ;
void SystemManage::on_pushButtonUpdateSoftware_pressed()
{
if(sysPara->status.updateSoftEN==0){
QWidget *p = dialogUpateMm->parentWidget();
if (p) {
QPoint topLeft = p->mapToGlobal(QPoint(0, 0));
int x = topLeft.x() + (p->width() - dialogUpateMm->width()) / 2;
int y = topLeft.y() + (p->height() - dialogUpateMm->height()) / 2 - 100;
dialogUpateMm->move(x, y);
}
dialogUpateMm->clearAuth();
dialogUpateMm->show();
}
else ondialogAuthorizationAccepted();
}
void SystemManage::ondialogAuthorizationAccepted()
{
QString authString= dialogUpateMm->getAuth();
+82 -188
View File
@@ -238,8 +238,8 @@ void MainWidget::_on_pushButtonPowerOff_pressed(bool notice)
sysPara->status.reclaimCloseCnt=10;
//on_pushButtonStopPrint_pressed();
on_m_StopBtn_clicked();
MySleep(10);
on_m_LeftBtn_clicked();
//on_pushButtonReclaimTankClose_pressed();
sysPara->status.powerOffAppending = true;
setReclaimCloseBtnStatus(false);
setReclaimOpenBtnStatus(false);
@@ -924,8 +924,19 @@ void MainWidget::enablePrintButton(bool enable){
m_StopBtn->setEnabled(enable);
}
void MainWidget::enabeleStartBtn(bool enable)
{
m_StartBtn->setEnabled(enable);
}
void MainWidget::enabeleStopBtn(bool enable)
{
m_StopBtn->setEnabled(enable);
}
void MainWidget::updateTotalCnt(int en)
{
Q_UNUSED(en)
// No50 USEING
//sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt:
// (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0;
@@ -949,93 +960,54 @@ void MainWidget::on_m_StartBtn_clicked()
if(sysPara){
test_flag = 0;
if (!checkTriggerMode()) return;
if (!checkTriggerMode()) {
return;
}
// 打印状态交给状态机修改
// 按原来逻辑,只修改打印标志,不使用状态机做多余的操作
sysPara->status.isPrinting=false;
// auto mgr = PrinterStateManager::instance();
#if !defined(FPGA_TEST) && !defined(QT_DEBUG)
// if (mgr && mgr->canStopPrint()) {
// mgr->requestTransition(PrinterEvent::StopPrint);
// } else {return;}
#endif
// SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
/*-------------------------------------------------------------------*/
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
/*---------------------------------开关回收槽------------------------------*/
setReclaimCloseBtnStatus(false);
setReclaimOpenBtnStatus(false);
updatePrintDisplayLabel();
sysPara->devOp->highVoltageCtrl(1);
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
// 20170717 移动此,以观察条形码打印异常问题。
if(!startPrintingFlag)
{
sysPara->devOp->printCtrl(PRINT_CTRL_START);
printintFlag = true;
auto mgr = PrinterStateManager::instance();
if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) {
mgr->requestTransition(PrinterEvent::StartPrint);
}
startPrintingFlag = true;
// sysPara->status.isPrinting=true;
// if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) {
// mgr->requestTransition(PrinterEvent::StartPrint);
// }
sysPara->status.isPrinting = true;
sysPara->status.waitHightVolOff = 0;
// 高亮切换
changeHighLight(true);
}
LogInfo::setRunStatusText(tr("print:%1--print:%2--state:%3")
.arg(sysPara->status.reclaimTankstatus)
.arg(sysPara->status.isPrinting)
.arg(mgr->stateName()));
}
}
void MainWidget::on_m_StopBtn_clicked()
{
if(sysPara){
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) {
return;
// sysPara->status.isPrinting=false;// 打印状态交给状态机修改
auto mgr = PrinterStateManager::instance();
if (mgr && mgr->canStopPrint()) {
mgr->requestTransition(PrinterEvent::StopPrint);
}
sysPara->status.isPrinting=false;// 打印状态交给状态机修改
// auto mgr = PrinterStateManager::instance();
#if !defined(FPGA_TEST) && !defined(QT_DEBUG)
// if (mgr && mgr->canStopPrint()) {
// mgr->requestTransition(PrinterEvent::StopPrint);
// } else {
// return;
// }
#endif
sysPara->devOp->printCtrl2(1);
sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT
setReclaimCloseBtnStatus(sysPara->status.currReclaimTankPos != 0);
setReclaimOpenBtnStatus(sysPara->status.currReclaimTankPos == 0);
printintFlag = false;
startPrintingFlag = false;
updatePrintDisplayLabel();
sysPara->status.waitHightVolOff = 1;
sysPara->saveParaToFile(); // 将相关配置保存
if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0))
{
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("提示"),
tr("随机码文本将展出到U盘,请插入U盘"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
sysPara->devOp->RandTxtBakup(0); //备份到U盘
}
}
// 高亮切换
changeHighLight(false);
LogInfo::setRunStatusText(tr("stop:%1--print:%2--state:%3")
.arg(sysPara->status.reclaimTankstatus)
.arg(sysPara->status.isPrinting)
.arg(mgr->stateName()));
}
}
@@ -1085,23 +1057,6 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate)
}
}
int MainWidget::getCurrPrintStatus()
{
int printStatus;
if (startPrintingFlag ) {
if(printintFlag) {
printStatus = 1; // 正在打印
}
else {
printStatus = 2; // 暂停喷印
}
}
else {
printStatus = 3; // 停止打印
}
return printStatus;
}
void MainWidget::setReclaimOpenBtnStatus(bool enable)
{
#ifdef __RFID_CARD
@@ -1113,12 +1068,12 @@ void MainWidget::setReclaimOpenBtnStatus(bool enable)
#endif
enable = !sysPara->status.airPushing && enable;
ui.m_RightBtn->setEnabled(enable);
}
void MainWidget::setReclaimCloseBtnStatus(bool enable)
{
enable = !sysPara->status.airPushing && enable;
ui.m_LeftBtn->setEnabled(enable);
}
@@ -1149,23 +1104,33 @@ void MainWidget::stopFlashReclaimOpenBtn()
flashReclaimOpenBtn();
}
void MainWidget::setReclaimStatus(bool isOpen, int rate)
void MainWidget::updateReclaimStatus()
{
if (isOpen) {
if (!sysPara->status.airPushing) {
QString str = rate == 100? tr("喷嘴已开启"):tr("喷嘴开启中");
ui.lb_RightBtn->setText(str);
}
ui.lb_LeftBtn->setText(tr("喷嘴关闭"));
} else {
QString str = rate == 0? tr("喷嘴已关闭"):tr("喷嘴关闭中");
ui.lb_LeftBtn->setText(str);
if (!sysPara->status.airPushing) {
ui.lb_RightBtn->setText(tr("喷嘴开启"));
}
QString strR = "";
QString strL = "";
switch (sysPara->status.reclaimTankstatus) {
case 1:
strR = tr("喷嘴开启中");
strL = tr("喷嘴关闭");
break;
case 2:
strR = tr("喷嘴开启");
strL = tr("喷嘴关闭中");
break;
case 5:
strR = tr("喷嘴已开启");
strL = tr("喷嘴关闭");
break;
case 0:
case 6:
strR = tr("喷嘴开启");
strL = tr("喷嘴已关闭");
break;
default:
break;
}
ui.lb_RightBtn->setText(strR);
ui.lb_LeftBtn->setText(strL);
}
static int mainInkPumpCtrlStatus = 0;
@@ -1179,10 +1144,7 @@ void MainWidget::airPushingProcess()
QString labelTxt = tr("正在排气...");
setRunStatus(labelTxt);
ui.lb_RightBtn->setText(labelTxt);
setReclaimOpenBtnStatus(false);
setReclaimCloseBtnStatus(false);
//qDebug()<< "start airPushingProcess "<<sysPara->status.airPushingOnTime;
// 执行排气 4 秒
sysPara->status.airPushingOnTime += 100;
@@ -1191,9 +1153,8 @@ void MainWidget::airPushingProcess()
sysPara->saveParaToFile();
}
// 延迟 半秒后才开回收槽,正式结束排气阶段
// 延迟 0.5秒后才开回收槽,正式结束排气阶段
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 500){
//qDebug()<< "start stop";
reclaimTanOpen();
sysPara->status.airPushingDone = 1;
sysPara->status.airPushing = 0;
@@ -1210,6 +1171,7 @@ void MainWidget::airPushingProcess()
if(!sysPara->devOp->isReclaimPumpOpen())
sysPara->devOp->controlReclaimPump(true, false);
sysPara->status.isPumpValveControledByHand = false;//切换自动让压力回升
return;
}
}
@@ -1219,33 +1181,22 @@ void MainWidget::airPushingProcess()
void MainWidget::reclaimTanOpen()
{
// 还原当前模式
if (sysPara->status.airPushing) {
sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore;
}
sysPara->status.isPumpValveControledByHand = false;
sysPara->devOp->mainInkCtrl();
if (sysPara->status.reclaimTankstatus == 2) {
sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止
MySleep(1000);
}
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/
// sysPara->status.reclaimTankstatus = 1;
// setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开"));
setReclaimStatus(true, 0);
if (!sysPara->para.reclaimTankTime) {
// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
} else {
}
sysPara->status.reclaimTankstatus = 1;
updateReclaimStatus();
sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclainOpenAppending = true;
sysPara->status.reclainCloseAppending = false;
sysPara->status.reclaimBlockedCnt = 0;
sysPara->status.canRunAirPushing = false;
if (sysPara->status.reclainTankReachEnd)
enablePrintButton(SIMULATE_PRINTING_MODE);
}
void MainWidget::initSheet()
@@ -1321,13 +1272,6 @@ void MainWidget::initSheet()
ui.m_RightBtn->setStyleSheet(reclaimBtnNormalStyle);
ui.m_LeftBtn->setStyleSheet(reclaimBtnNormalStyle);
// QString lbSheet = R"(
// QLabel {
// border: 1px solid #95a5a6; /* 灰色边框 */
// }
// )";
// ui.lb_LeftBtn->setStyleSheet(lbSheet);
// ui.lb_RightBtn->setStyleSheet(lbSheet);
}
void MainWidget::changeHighLight(bool isStart)
@@ -1381,9 +1325,6 @@ void MainWidget::on_m_RightBtn_clicked()
(sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气
// Pos == 0 回收槽关闭的情况下才可以执行排气; 先执行排气后开回收槽
if (!sysPara->status.airPushing) {
//排气:打印、暂停打印置灰
enablePrintButton(false);
sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand;
sysPara->status.isPumpValveControledByHand = true;
sysPara->devOp->mainInkCtrl();
@@ -1394,7 +1335,6 @@ void MainWidget::on_m_RightBtn_clicked()
sysPara->devOp->controlReclaimPump(true, false); // 回收泵开
sysPara->devOp->controlInkValve(true); //墨水阀
sysPara->devOp->controlInkValvePWM(true); //墨水阀
//qDebug()<< "start airpushings";
sysPara->status.airPushing = 1;
sysPara->status.airPushingDone = 0;
@@ -1415,7 +1355,6 @@ void MainWidget::on_m_RightBtn_clicked()
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10;
// onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10);
}
}
@@ -1440,28 +1379,24 @@ void MainWidget::on_m_LeftBtn_clicked()
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
sysPara->status.currReclaimTankPos = 0;
// onReclainTankPositionChanged(0);
}
}
sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable());
enablePrintButton(SIMULATE_PRINTING_MODE);
sysPara->devOp->highVoltageCtrl(0);
// sysPara->status.reclaimTankstatus = 2;
// setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭"));
setReclaimStatus(false, 100);
if(!sysPara->para.reclaimTankTime){
// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
}
sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclainOpenAppending = false;
sysPara->status.reclainCloseAppending = true;
sysPara->status.reclaimBlockedCnt = 0;
enablePrintButton(false);
sysPara->status.reclaimTankstatus = 2;
stopFlashReclaimOpenBtn();
// 收回收槽,把READY状态切换回自检状态(仅仅状态机的自检状态,不自检)
auto mgr = PrinterStateManager::instance();
if (mgr && mgr->isState(PrinterState::READY)) {
mgr->requestTransition(PrinterEvent::ReSelfCheck);
}
}
}
@@ -1680,20 +1615,9 @@ void MainWidget::updateSysStatusToUI(){ //100ms
m_PrintDisplay->updateSysStatusToUI();
}
}
// emit setCNT1Select(found_CNT1);
// emit setCNT2Select(found_CNT2);
// emit setCNT3Select(found_CNT3);
if(sysPara->para.isEnableGetDataButton)
{
// ui->pushButtonGetData->setEnabled(true);
}
else
{
// ui->pushButtonGetData->setEnabled(false);
}
if(TEST_MODE)
enablePrintButton(true);
// ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32));
// if(TEST_MODE)
// enablePrintButton(true);
if(oldSizeFpga != sysPara->status.sizeFPGA){
oldSizeFpga = sysPara->status.sizeFPGA;
}
@@ -2132,26 +2056,6 @@ void MainWidget::updatePrintDisplayLabel()
void MainWidget::RefreshStatusLight(){//100ms
if(sysPara){
static int hdint = 0;
static int reclainTankReachEnd = 0;
if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关
// 检查回收槽是否到底,到底才能打印
if (sysPara->status.reclainTankReachEnd) {
// sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
enablePrintButton(true);
} else {
enablePrintButton(false);
}
}
hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT);
if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底
if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态
// sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
}
}
reclainTankReachEnd = sysPara->status.reclainTankReachEnd;
if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){
if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
@@ -2221,8 +2125,7 @@ void MainWidget::RefreshStatusLight(){//100ms
else {
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.highVoltageFault = DEV_STATUS_RED;
if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
// on_pushButtonPausePrint_pressed();
if(sysPara->status.isPrinting){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
on_m_StopBtn_clicked();
LogInfo::setRunStatusText(tr("高压故障,暂停打印"));
setRunStatus(tr("高压故障,暂停打印"));
@@ -2314,12 +2217,6 @@ void MainWidget::RefreshStatusLight(){//100ms
else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--;
}
// if(startPrintingFlag ){
// if(printintFlag)
// setRunStatus(tr("正在喷印..."));
// else
// setRunStatus(tr("暂停喷印..."));
// }
if(sysPara->status.isPrinting && sysPara->status.selfCheckDone){
setRunStatus(tr("正在喷印......."));
@@ -2538,11 +2435,8 @@ bool MainWidget::checkTriggerMode()
}
#endif
bool MaxCol4000;
if(sysPara->status.flagOfNo67FPGA)
MaxCol4000 = true;
else
MaxCol4000 = false;
bool MaxCol4000 = sysPara->status.flagOfNo67FPGA;
if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){
QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)));
return false;
@@ -2622,7 +2516,7 @@ void MainWidget::onLabelFaultRusumePressed(){
sysPara->devOp->mainInkCtrl();
emit clearPressureFault();
}
if(printintFlag) {
if(sysPara->status.isPrinting) {
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
}
}
+3 -6
View File
@@ -60,8 +60,6 @@ public:
QString strWarring,strTitle;
bool m_2sFlag;
bool printintFlag; //判断当前是否在打印
bool startPrintingFlag;
bool pushButtonFlag;
@@ -89,7 +87,8 @@ public:
void setRunStatus(QString str, bool enbRoll = true, bool warn = false);
void enablePrintButton(bool);
int getCurrPrintStatus();
void enabeleStartBtn(bool);
void enabeleStopBtn(bool);
// 回收槽开启按钮状态设置
void setReclaimOpenBtnStatus(bool enable);
@@ -107,10 +106,8 @@ public:
/**
* @brief 设置回收槽开关状态
* @param isOpen true:开;false:关
* @param rate 回收槽开启程度,0~100;
*/
void setReclaimStatus(bool isOpen, int rate = 0);
void updateReclaimStatus();
void updateSysStatusToUI(); //重载
//Mainwindow获取机器总状态