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
+86 -192
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;
@@ -947,95 +958,56 @@ void MainWidget::updateTotalCnt(int en)
void MainWidget::on_m_StartBtn_clicked()
{
if(sysPara){
test_flag = 0;
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
// 按原来逻辑,只修改打印标志,不使用状态机做多余的操作
sysPara->status.isPrinting=false;
// 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();
sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止
MySleep(1000);
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);
}
}