hlp:状态机初版,统一管理回收槽状态,启动和停止打印时的状态
This commit is contained in:
+79
-173
@@ -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
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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获取机器总状态
|
||||
|
||||
Reference in New Issue
Block a user