hlp:更新翻译、喷嘴到底后等至少3秒检查相检、状态机统一打印和回收槽状态、修复数字键盘输入bug

This commit is contained in:
kite_lucs
2026-09-18 15:20:13 +08:00
35 changed files with 3840 additions and 3113 deletions
+121 -57
View File
@@ -129,6 +129,8 @@ void MainWidget::init()
airPushTimer = new QTimer(this);
connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess()));
m_pressureMonitor = new PressureMonitor();
timerPowerOff = new QTimer(this);
connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd()));
@@ -144,6 +146,9 @@ void MainWidget::init()
}
connect(m_setNumDlg, &SetNumDlg::sig_setNum, this, &MainWidget::slt_setNum);
connect(m_setNumDlg, &SetNumDlg::sig_clearCnt, this, &MainWidget::slt_clearCnt);
connect(m_setNumDlg, &SetNumDlg::sig_resetCNT1, this, &MainWidget::slt_resetCNT1);
connect(m_setNumDlg, &SetNumDlg::sig_resetCNT2, this, &MainWidget::slt_resetCNT2);
}
void MainWidget::buttonClickedSlot()
@@ -185,7 +190,7 @@ void MySleep(unsigned int msec)
}
bool MainWidget::generatePrintContent(PicScene *scene)
bool MainWidget::generatePrintContent(PicScene *scene, const PrintSettingModel& printSettings)
{
if(!scene) {
qWarning() << "Scene is empty!";
@@ -200,7 +205,34 @@ bool MainWidget::generatePrintContent(PicScene *scene)
this->pPicScene = scene;
onPreviewScene();
this->printSettingsModel = printSettings;
PrintSettingModel::applyToSysPara(printSettings, sysPara);
SendPrintDataToFpga(0);
// 检查场景内是否有计数器,根据是否有对应计数器,显示或禁用setNumDlg中对应的按钮。
bool hasCNT1 = false;
bool hasCNT2 = false;
auto items = pPicScene->items();
for(auto item : items) {
auto cntItem = dynamic_cast<PicCounterItem*>(item);
if(!cntItem)
continue;
if(cntItem->counterType() == COUNTER_TYPE_1) {
hasCNT1 = true;
continue;
}
if(cntItem->counterType() == COUNTER_TYPE_2) {
hasCNT2 = true;
continue;
}
}
m_setNumDlg->setCNTResetBtnsEnable(hasCNT1, hasCNT2);
return true;
}
@@ -1059,6 +1091,10 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate)
void MainWidget::setReclaimOpenBtnStatus(bool enable)
{
if (airPushTimer && airPushTimer->isActive()) {
return;
}
#ifdef __RFID_CARD
if(sysPara->RFIDPara.inkCardTimeOut
|| sysPara->RFIDPara.solventCardTimeOut
@@ -1068,11 +1104,16 @@ void MainWidget::setReclaimOpenBtnStatus(bool enable)
#endif
enable = !sysPara->status.airPushing && enable;
ui.m_RightBtn->setEnabled(enable);
}
void MainWidget::setReclaimCloseBtnStatus(bool enable)
{
if (airPushTimer && airPushTimer->isActive()) {
return;
}
enable = !sysPara->status.airPushing && enable;
ui.m_LeftBtn->setEnabled(enable);
}
@@ -1104,7 +1145,7 @@ void MainWidget::stopFlashReclaimOpenBtn()
flashReclaimOpenBtn();
}
void MainWidget::updateReclaimStatus()
void MainWidget::updateReclaimText()
{
QString strR = "";
QString strL = "";
@@ -1121,20 +1162,23 @@ void MainWidget::updateReclaimStatus()
strR = tr("喷嘴已开启");
strL = tr("喷嘴关闭");
break;
case 0:
case 6:
strR = tr("喷嘴开启");
strL = tr("喷嘴已关闭");
break;
case 0: // 后续运行中5和6状态之后会自动置为0,所以加额外逻辑
strR = ui.lb_RightBtn->text();
strL = ui.lb_LeftBtn->text();
break;
default:
break;
}
ui.lb_RightBtn->setText(strR);
ui.lb_LeftBtn->setText(strL);
if (strR!="" && strL!="") {
ui.lb_RightBtn->setText(strR);
ui.lb_LeftBtn->setText(strL);
}
}
static int mainInkPumpCtrlStatus = 0;
static int mainInkPumpCtrlCnt = 0;
//100ms 为单位
void MainWidget::airPushingProcess()
{
@@ -1153,17 +1197,6 @@ void MainWidget::airPushingProcess()
sysPara->saveParaToFile();
}
// 延迟 0.5秒后才开回收槽,正式结束排气阶段
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 500){
reclaimTanOpen();
sysPara->status.airPushingDone = 1;
sysPara->status.airPushing = 0;
sysPara->status.airPushingOnTime = 0;
airPushTimer->stop();
setRunStatus(tr("喷嘴开启中"));
return;
}
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){
sysPara->devOp->controlViscosityPump(false);
sysPara->devOp->controlCycleValve(false);
@@ -1171,7 +1204,42 @@ void MainWidget::airPushingProcess()
if(!sysPara->devOp->isReclaimPumpOpen())
sysPara->devOp->controlReclaimPump(true, false);
sysPara->status.isPumpValveControledByHand = false;//切换自动让压力回升
// 切换回自动模式
sysPara->status.isPumpValveControledByHand = false;
setRunStatus(tr("等待压力稳定..."));
if(m_pressureMonitor->tick((float)sysPara->status.PRESSURE, (float)sysPara->para.pressure)) {
reclaimTanOpen();
sysPara->status.airPushingDone = 1;
sysPara->status.airPushing = 0;
sysPara->status.airPushingOnTime = 0;
airPushTimer->stop();
bool isTimeout = m_pressureMonitor->wasTimeout();
float bufCopy[12];
memcpy(bufCopy, m_pressureMonitor->buffer(), sizeof(bufCopy));
m_pressureMonitor->reset();
setRunStatus(tr("喷嘴开启中"));
LogInfo::setRunStatusText(isTimeout
? "Pressure unstable timeout, fallback open the reclaim tank."
: "Pressure has stabled, will open the reclaim tank.");
QString pressureSet = QString("Pressure buffer: [%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12]")
.arg(bufCopy[0], 0, 'f', 1)
.arg(bufCopy[1], 0, 'f', 1)
.arg(bufCopy[2], 0, 'f', 1)
.arg(bufCopy[3], 0, 'f', 1)
.arg(bufCopy[4], 0, 'f', 1)
.arg(bufCopy[5], 0, 'f', 1)
.arg(bufCopy[6], 0, 'f', 1)
.arg(bufCopy[7], 0, 'f', 1)
.arg(bufCopy[8], 0, 'f', 1)
.arg(bufCopy[9], 0, 'f', 1)
.arg(bufCopy[10], 0, 'f', 1)
.arg(bufCopy[11], 0, 'f', 1);
LogInfo::setRunStatusText(pressureSet);
}
return;
}
}
@@ -1190,7 +1258,7 @@ void MainWidget::reclaimTanOpen()
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/
sysPara->status.reclaimTankstatus = 1;
updateReclaimStatus();
// updateReclaimStatus();
sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false;
@@ -1341,6 +1409,15 @@ void MainWidget::on_m_RightBtn_clicked()
sysPara->status.airPushingOnTime = 0;
airPushTimer->start(100); // 100ms
m_pressureMonitor->reset();
// 喷嘴开启中
if (m_reclaimOpenBtnFlashTimer && !m_reclaimOpenBtnFlashTimer->isActive()){
ui.lb_RightBtn->setText(tr("正在排气..."));
m_reclaimFlashState = true;
m_reclaimOpenBtnFlashTimer->start();
LogInfo::setRunStatusText("m_reclaimOpenBtnFlashTimer start");
}
}
}
else {
@@ -1358,13 +1435,7 @@ void MainWidget::on_m_RightBtn_clicked()
}
}
// 喷嘴开启中
if (m_reclaimOpenBtnFlashTimer && !m_reclaimOpenBtnFlashTimer->isActive()){
ui.lb_RightBtn->setText(tr("正在排气..."));
m_reclaimFlashState = true;
m_reclaimOpenBtnFlashTimer->start();
LogInfo::setRunStatusText("m_reclaimOpenBtnFlashTimer start");
}
}
}
@@ -2054,25 +2125,22 @@ void MainWidget::updatePrintDisplayLabel()
m_PrintDisplay->update();
}
static short recycleWarnTimes = 0;
void MainWidget::RefreshStatusLight(){//100ms
if(sysPara){
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")));
alarmStatus.inkSwint = DEV_STATUS_GREEN;
}
else {
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.inkSwint = DEV_STATUS_RED;
}
if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.inkLeak = DEV_STATUS_GREEN;
}
else {
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.inkLeak = DEV_STATUS_RED;
strTitle = tr("墨水缸满报警");
if(sysPara->devOp->isMixValveOpen()) {
@@ -2080,69 +2148,56 @@ void MainWidget::RefreshStatusLight(){//100ms
}
}
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.inkWaterLevel = DEV_STATUS_GREEN;
}
else {
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.inkWaterLevel = DEV_STATUS_RED;
strTitle = tr("墨水液位报警");
strTitle = tr("墨水液位报警");
}
if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.solveLevelWarn = DEV_STATUS_GREEN;
}
else {
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.solveLevelWarn = DEV_STATUS_RED;
strTitle = tr("溶剂液位报警");
}
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.recycleWarn = DEV_STATUS_GREEN;
recycleWarnTimes = 0;
}
else {
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.recycleWarn = DEV_STATUS_RED;
// 实际使用中这个报警很容易触发,决定添加防抖
if (recycleWarnTimes++ > 30) {
alarmStatus.recycleWarn = DEV_STATUS_RED;
}
}
//static int HVfaultCnt=0;
if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){
if(!sysPara->status.lastHighVoltageFault)
{
flagOfClearHighVltageWarnning = false;
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.highVoltageFault = DEV_STATUS_GREEN;
alarmStatus.highVoltageFault = DEV_STATUS_GREEN;
}
// HVfaultCnt=0;
//sysPara->status.HVFaultCloseEn=0;
}
else {
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.highVoltageFault = DEV_STATUS_RED;
if(sysPara->status.isPrinting){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
on_m_StopBtn_clicked();
LogInfo::setRunStatusText(tr("高压故障,暂停打印"));
setRunStatus(tr("高压故障,暂停打印"));
strTitle = tr("高压故障,暂停打印.");
sysPara->status.lastHighVoltageFault = true;
}
if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn )
{
//HVfaultCnt++;
// 高压故障关回收槽
if(sysPara->status.HVFaultCloseEn==0){
sysPara->status.reclaimTankBlockedAppending=0;
sysPara->status.reclaimCloseCnt=100;
// on_pushButtonReclaimTankClose_pressed();
on_m_LeftBtn_clicked();
sysPara->status.reclaimTankBlockedAppending=1;
LogInfo::setRunStatusText(tr("高压故障,关回收槽"));
@@ -2158,17 +2213,14 @@ void MainWidget::RefreshStatusLight(){//100ms
sysPara->status.lastStatWarn = sysPara->status.statWarn;
if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){
if(sysPara->status.viscosityFault==0){
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.viscosityWarn = DEV_STATUS_GREEN;
}
else {
if(sysPara->status.viscosityFault==1){
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.viscosityWarn = DEV_STATUS_RED;
}
else if(sysPara->status.viscosityFault==2) {
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG")));
alarmStatus.viscosityWarn = DEV_STATUS_YELLOW;
}
}
@@ -2178,7 +2230,6 @@ void MainWidget::RefreshStatusLight(){//100ms
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie
if(sysPara->status.RecycleWarnCnt)
alarmStatus.recycleWarn = DEV_STATUS_GREEN;
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
sysPara->status.RecycleWarnCnt = 0;
sysPara->status.lastRecycleWarn = 0;
}
@@ -2189,7 +2240,6 @@ void MainWidget::RefreshStatusLight(){//100ms
{
sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s
alarmStatus.recycleWarn = DEV_STATUS_RED;
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
sysPara->status.reclaimCloseCnt=100;
if(sysPara->para.RecycleWarnAction)
{
@@ -2244,7 +2294,7 @@ bool MainWidget::updatePhaseIndicatorLight(){
if(sysPara==0) return 0;
/*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/
if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){
if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || !sysPara->status.reclainTankReachEnd){
//故障后必须等手动按故障恢复才会继续
if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){
if(sysPara->status.lastPhaseFault){
@@ -2522,6 +2572,20 @@ void MainWidget::onLabelFaultRusumePressed(){
}
}
void MainWidget::slt_resetCNT1()
{
sysPara->para.cnt1CurrValue = printSettingsModel.cnt1Settings.currValue;
sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();
sysPara->devOp->writeFpgaCalandar(false);
}
void MainWidget::slt_resetCNT2()
{
sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();
sysPara->para.cnt2CurrValue = printSettingsModel.cnt2Settings.currValue;
sysPara->devOp->writeFpgaCalandar(false);
}
extern int baudRateValue;
void MainWidget::UpdateUIVersion(){
int fpgaType = sysPara->status.fpgaVersionNum>>12;