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

This commit is contained in:
kite_lucs
2026-09-08 15:06:03 +08:00
parent 4c06500338
commit 84e20a440c
14 changed files with 722 additions and 185 deletions
+102 -100
View File
@@ -38,6 +38,7 @@
#include <QPainter>
#include "MainWidget.h"
#include "scene/ItemCommon.h"
#include "StateMachine/PrinterStateManager.h"
extern MyInputMethod *myInputMethod;
unsigned char test_flag,open_close;
@@ -321,7 +322,7 @@ void MainWidget::checkForPowerOff(){
{
if(i==13)
sysPara->devOp->controlReclaimTankOpen(false);
this->setRunStatus(tr("正在准备关机,请等待%1秒...").arg(i*3), false);
this->setRunStatus(tr("正在准备关机,请等待%1秒...").arg(i), false);
MySleep(3000);
}
}
@@ -334,7 +335,7 @@ void MainWidget::checkForPowerOff(){
updateTotalCnt(0);
sysPara->saveParaToFile(); // 关机前将相关配置保存
}
sysPara->status.powerOffAppending = false;
if(!TEST_MODE){
for(int i=7;i>0;i--)
{
@@ -396,15 +397,22 @@ void MainWidget::powerOffConfirmed(){
qApp->exit(0);
}
void MainWidget::setRunStatus(QString str, bool enbRoll)
void MainWidget::setRunStatus(QString str, bool enbRoll, bool warn)
{
//自检和关机时不显示报警logo
if (warn) {
if (sysPara && !sysPara->status.selfCheckDone
|| sysPara->status.powerOffAppending) {
return;
}
}
// 自检完成后,timerHandler中会发送停止打印的命令,导致“停止打印,自动关闭高压.”顶替掉“自检完成!!!”的情况
if(ui.lb_nozzleState->text() == qApp->translate("InkJetPrinter", "自检完成!!!") &&
str == qApp->translate("InkJetPrinter", "停止打印,自动关闭高压.")) {
return;
}
qDebug() << str;
// 如果禁用走马灯(enbRoll == false),直接在label上显示文本(即使过长)
if (!enbRoll) {
if (ui.lb_nozzleState) {
@@ -911,10 +919,6 @@ void MainWidget::enablePrintButton(bool enable){
enable = true;
#endif
#ifdef FPGA_TEST
enable = true;
#endif
m_StartBtn->setEnabled(enable);
m_StopBtn->setEnabled(enable);
}
@@ -941,18 +945,6 @@ void MainWidget::updateTotalCnt(int en)
void MainWidget::on_m_StartBtn_clicked()
{
if(sysPara->status.isPrinting){
qDebug("Mainwindow: Printing 开始打印");
}else{
qDebug("Mainwindow: Non printing 开始打印");
}
static int fileCount = 0;
fileCount++;
if(fileCount > 5)
{
fileCount = 1;
}
if(sysPara){
bool MaxCol4000;
if(sysPara->status.flagOfNo67FPGA)
@@ -960,68 +952,19 @@ void MainWidget::on_m_StartBtn_clicked()
else
MaxCol4000 = false;
test_flag = 0;
/******2020/2/29*****/
if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) //同步模式下,判断喷印间隔是否设置合理
{
QSizeF size = QSizeF(sysPara->status.currPrintCol, sysPara->status.currPrintRow);
float stroke,print_len_min;
stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm;
print_len_min = stroke * size.width();
if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable)
{
QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min));
return;
}
}
/******2020/2/29 end*****/
#ifndef QT_DEBUG
if(!SIMULATE_PRINTING_MODE){
if (!sysPara->status.reclainTankReachEnd) {
return;
}
if((sysPara->status.statWarn & WARN_STATUS_HDINT)){
QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!"));
return ;
}
if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){
QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!"));
return ;
}
}
#endif
sysPara->devOp->highVoltageCtrl(1);
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
sysPara->status.waitHightVolOff = 0;
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 ;
}
if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)
||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL
||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)
&& sysPara->para.eleEyeTriggerSynPrintEn))
)
{
int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay;
long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000);
if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs)\
&& (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD)
&& (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME )
) // 在电眼方式下,是否需要判呢?
{
QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs));
return ;
}
}
sysPara->status.isPrinting=false;
if (!checkTriggerMode()) return;
// 打印状态交给状态机修改
// sysPara->status.isPrinting=false;
auto mgr = PrinterStateManager::instance();
if (mgr && mgr->canStopPrint()) {
mgr->requestTransition(PrinterEvent::StopPrint);
} else {return;}
SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
/*-------------------------------------------------------------------*/
// ui->labelSynColDelay->setText("");
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
/*---------------------------------开关回收槽------------------------------*/
@@ -1038,32 +981,33 @@ void MainWidget::on_m_StartBtn_clicked()
}
startPrintingFlag = true;
sysPara->status.isPrinting=true;
// sysPara->status.isPrinting=true;
if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) {
mgr->requestTransition(PrinterEvent::StartPrint);
}
// 高亮切换
changeHighLight(true);
LogInfo::setRunStatusText("Start print...");
}
}
void MainWidget::on_m_StopBtn_clicked()
{
if(sysPara->status.isPrinting){
qDebug("Mainwindow: Printing 停止打印");
}else{
qDebug("Mainwindow: Non printing 停止打印");
}
if(sysPara){
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) {
return;
}
// sysPara->status.flagOfAbnormalStatus = false;
sysPara->status.isPrinting=false;
// sysPara->status.isPrinting=false;// 打印状态交给状态机修改
auto mgr = PrinterStateManager::instance();
if (mgr && mgr->canStopPrint()) {
mgr->requestTransition(PrinterEvent::StopPrint);
} else {
return;
}
sysPara->devOp->printCtrl2(1);
sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT
// LogInfo::setRunStatusText(tr("停止打印"));
setReclaimCloseBtnStatus(sysPara->status.currReclaimTankPos != 0);
setReclaimOpenBtnStatus(sysPara->status.currReclaimTankPos == 0);
@@ -1071,7 +1015,7 @@ void MainWidget::on_m_StopBtn_clicked()
printintFlag = false;
startPrintingFlag = false;
updatePrintDisplayLabel();
sysPara->status. waitHightVolOff = 1;
sysPara->status.waitHightVolOff = 1;
sysPara->saveParaToFile(); // 将相关配置保存
if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0))
@@ -1081,16 +1025,11 @@ void MainWidget::on_m_StopBtn_clicked()
tr("随机码文本将展出到U盘,请插入U盘"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
// LogInfo::setRunStatusText("正在导出随机码文件到U盘......");
sysPara->devOp->RandTxtBakup(0); //备份到U盘
// LogInfo::setRunStatusText("随机码文件导出完成.");
}
}
// 高亮切换
changeHighLight(false);
LogInfo::setRunStatusText("Stop print...");
}
}
@@ -1866,6 +1805,13 @@ void MainWidget::updateGeneralState(AlarmStatus status)
}
}
// 自检时设为正常, 关机设为正常
if (!sysPara->status.selfCheckDone
|| sysPara->status.powerOffAppending) {
m_stateColor = DEV_STATUS_GREEN;
m_stateStr= tr("正常");
}
if (m_stateColor == DEV_STATUS_GREEN) {
ui.fra_state->setStyleSheet("background-color: #ccffcc;");
} else if (m_stateColor == DEV_STATUS_RED) {
@@ -2336,15 +2282,15 @@ void MainWidget::RefreshStatusLight(){//100ms
if(sysPara->para.RecycleWarnAction)
{
if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){
// on_pushButtonStopPrint_pressed();
on_m_StopBtn_clicked();
// on_pushButtonReclaimTankClose_pressed();
on_m_LeftBtn_clicked();
LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线"));
setRunStatus(tr("回收故障,关闭回收槽,关墨线"));
if (m_warn) {
LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线"));
setRunStatus(tr("回收故障,关闭回收槽,关墨线"),true,true);
}
}
}
else setRunStatus(tr("回收故障."));
else if (m_warn) {setRunStatus(tr("回收故障."),true,true); }
}
else
@@ -2553,6 +2499,62 @@ bool MainWidget::isInExpandedRect(QWidget* widget, const QPoint& globalPos, int
return rect.contains(globalPos);
}
bool MainWidget::checkTriggerMode()
{
/******2020/2/29*****/
if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) //同步模式下,判断喷印间隔是否设置合理
{
QSizeF size = QSizeF(sysPara->status.currPrintCol, sysPara->status.currPrintRow);
float stroke,print_len_min;
stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm;
print_len_min = stroke * size.width();
if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable)
{
QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min));
return false;
}
}
/******2020/2/29 end*****/
#ifndef QT_DEBUG
if(!SIMULATE_PRINTING_MODE){
if (!sysPara->status.reclainTankReachEnd) {
return;
}
if((sysPara->status.statWarn & WARN_STATUS_HDINT)){
QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!"));
return ;
}
if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){
QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!"));
return ;
}
}
#endif
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;
}
if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)
||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL
||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)
&& sysPara->para.eleEyeTriggerSynPrintEn))
)
{
int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay;
long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000);
if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs)\
&& (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD)
&& (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME )
) // 在电眼方式下,是否需要判呢?
{
QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs));
return false;
}
}
return true;
}
void MainWidget::onLabelFaultRusumePressed(){
if(sysPara){
@@ -2640,4 +2642,4 @@ void MainWidget::UpdateUIVersion(){
QString Mac = QString::number(sysPara->status.machineMac);
LogInfo::setRunStatusText(QString("Mac:%1").arg(Mac));
LogInfo::showVerionInformation(Mac,VernonBach,fpgaVersion,STM32Ver);
}
}