diff --git a/DevOp.cpp b/DevOp.cpp index a457814..518702b 100644 --- a/DevOp.cpp +++ b/DevOp.cpp @@ -3615,15 +3615,20 @@ extern "C" { #pragma pack() } +static FlightComCtrl_t flightComCtrl; + void DevOp::writeFlightCompCtrl(bool enb, bool enbAccelDecelPredict, quint32 flightCompWindow) { - static FlightComCtrl_t flightComCtrl; - memset(&flightComCtrl, 0, sizeof(FlightComCtrl_t)); flightComCtrl.flags |= (enb ? 1 : 0); flightComCtrl.flags |= (enbAccelDecelPredict ? 0x2 : 0x0); flightComCtrl.flightCompWindow = flightCompWindow; + writeFlightCompCtrl(); +} + +void DevOp::writeFlightCompCtrl() +{ fpgaWr(FLIGHT_COMP_CTRL_BASE, (unsigned char*)(&flightComCtrl), sizeof(FlightComCtrl_t)); } diff --git a/DevOp.h b/DevOp.h index 8608ff5..ce8ddc1 100644 --- a/DevOp.h +++ b/DevOp.h @@ -305,6 +305,8 @@ public : */ void writeFlightCompCtrl(bool enb, bool enbAccelDecelPredict, quint32 flightCompWindow); + void writeFlightCompCtrl(); + public slots: void resendFPGADate(int,int,unsigned char *,int,int); diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index 0a1b98b..6b2dfc3 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -178,7 +178,7 @@ void InkJetPrinter::init() if(sysPara->para.gearPumpEnable) pushButtonStartFlag = true; - m_PrintSetting->updateSysParaToUI(); + m_PrintSetting->updateModelToUI(); m_SystemSetting->updateSysParaToUI(); m_OtherInfo->updateSysParaToUI(); m_CounterVarSet->updateSysParaToUI(); @@ -1380,7 +1380,7 @@ void InkJetPrinter::getTestPrintWidgetButtonClickedSlot(int index) case 9: { - m_PrintSetting->updateSysParaToUI(); + m_PrintSetting->updateModelToUI(); m_StackedWidget->setCurrentWidget(m_PrintSetting); break; } diff --git a/MainInstruction.ui b/MainInstruction.ui index 96dc3ef..c3c451b 100644 --- a/MainInstruction.ui +++ b/MainInstruction.ui @@ -246,6 +246,19 @@ + + + + 默认打印设置 + + + + 220 + 60 + + + + diff --git a/Printsetting.cpp b/Printsetting.cpp index 396f3d1..b43ea63 100644 --- a/Printsetting.cpp +++ b/Printsetting.cpp @@ -3,7 +3,10 @@ #include #include +#include +#include #include "LogInfo.h" +#include "PrintSetting.h" PrintSetting::PrintSetting(QWidget *parent) : QWidget(parent), @@ -102,135 +105,138 @@ void PrintSetting::on_pushButtonApply_pressed(){ applyPrintSettingsToSysPara(true); } -void PrintSetting::applyUIPara(){ - if(sysPara){ - sysPara->para.printTriggerMode = PRINT_TRIGGER_TIME; //延时触发 - sysPara->para.printDelayMs = 200; //重复间隔 - sysPara->para.checkSpace = 0;//ui->checkSpace->isChecked(); - // ui->spinBoxColDelay->setEnabled(1); - sysPara->para.leftRightInverse = ui->checkBoxLeftRightInverse->isChecked(); - sysPara->para.upDownInverse = ui->checkBoxUpDownInverse->isChecked(); - sysPara->para.currSelectVolPara = ui->comboBox_selcetVolPara->currentIndex(); - sysPara->para.printColDelay = ui->spinBoxColDelay->value(); +void PrintSetting::updateModelFromUI(){ + m_model.leftRightInverse = ui->checkBoxLeftRightInverse->isChecked(); + m_model.upDownInverse = ui->checkBoxUpDownInverse->isChecked(); + m_model.volParaIndex = ui->comboBox_selcetVolPara->currentIndex(); + m_model.printColDelay = ui->spinBoxColDelay->value(); + m_model.highVoltageAmplitude = ui->spinBoxHighVoltageValue->value(); - sysPara->para.HighVoltageAmplitude = ui->spinBoxHighVoltageValue->value(); + m_model.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value(); + m_model.timeTriggerPrintMode = 0; + m_model.triggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value(); + int value = 0; + if (ui->cb_unlimited->isChecked()) + value = UINT16_MAX; + else + value = ui->spinBoxEleEyeTriggerRepeatCnt->value(); + + m_model.eleEyeRepeatCnt = value; + m_model.encoderPulsePerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); - // 回收泵的控制转至系统设置界面 byons@2026年4月22日 - // sysPara->para.gearPumpEnable = ui->checkBoxGearPumpEnable->isChecked(); - // sysPara->para.flagOfReclaimPumEnable = ui->checkBox_ReclaimPumpEnable->isChecked(); - - sysPara->devOp->setHighVoltageAmplitudetoSTM32(); - - sysPara->devOp->writeFpgaCalandar(0); - - sysPara->devOp->writeFlightCompCtrl(ui->enbFlightCompCtrl->isChecked(), - ui->enbAccelDecelPredict->isChecked(), quint32(ui->flightCompWindowCycles->value())); + if(ui->eleEyeEdgetTriggerExternal->isChecked() && ui->radioButtonSynTriggerExternal->isChecked()) { + m_model.triggerMode = ui->radioButtonEleEyeEdgetTrigger->isChecked() ? PRINT_TRIGGER_ELEC_EYE_EDGE : PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; } + else if(ui->eleEyeEdgetTriggerInner->isChecked() && ui->radioButtonSynTriggerInner->isChecked()) { + m_model.triggerMode = PRINT_TRIGGER_TIME; + } + else if(ui->radioButtonSynTriggerExternal->isChecked() && ui->eleEyeEdgetTriggerInner->isChecked()) { + m_model.triggerMode = PRINT_TRIGGER_SYNCHRONIZER; + } + + // if (m_model.triggerMode == PRINT_TRIGGER_SYNCHRONIZER) { + // if (m_model.triggerInterval < m_model.eleEyeTriggerPrintDelay) { + // QMessageBox::information(nullptr, tr("提示:参数不正确"), tr("要求:触发长度小于喷印间隔")); + // } + // } + + m_model.eleMaskTime = ui->spinBoxEleMaskTime->value(); + m_model.altMirrorType = ui->comboBoxAltMirrType->currentIndex(); + m_model.altMirrorGap = ui->spinBoxAltMirrorGap->value(); + + m_model.syncTriggerMode = ui->comboBoxSyncActType->currentIndex(); + + bool eleEyeExternal = ui->eleEyeEdgetTriggerExternal->isChecked(); + bool synExternal = ui->radioButtonSynTriggerExternal->isChecked(); + m_model.eleEyeTriggerSynPrintEn = eleEyeExternal && synExternal; + + m_model.pulseOutputEnable = ui->checkBoxPulseOutputEnable->isChecked(); + m_model.productCntPerOutputPulse = ui->spinBoxProductCntPerOutputPulse->value(); + m_model.outputPulseDelayMs = ui->spinBoxOutputPulseDelayMs->value(); + m_model.OuputPulseCol = ui->spinBoxOuputPulseCol->value(); + + // if (m_model.triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + // || m_model.triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE + // || m_model.triggerMode == PRINT_TRIGGER_SYNCHRONIZER) { + // ui->labelOutputPulseDelayMs->setText(tr("延时(毫米):")); + // } else { + // ui->labelOutputPulseDelayMs->setText(tr("延时(毫秒):")); + // } } void PrintSetting::bindSysPara(SysPara *sysPara) { this->sysPara = sysPara; -} - -void PrintSetting::updateSysParaToUI(){ - if(sysPara){ - ui->checkBoxLeftRightInverse->setChecked(sysPara->para.leftRightInverse); - ui->checkBoxUpDownInverse->setChecked(sysPara->para.upDownInverse); - sysPara->para.mode0211 = 1; - - ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); - - ui->spinBoxHighVoltageValue->setValue(sysPara->para.HighVoltageAmplitude); - - ui->comboBox_selcetVolPara->setCurrentIndex(sysPara->para.currSelectVolPara); - - // 齿轮泵和回收泵的控制转至系统设置 byons@2026年4月22日 - // ui->checkBoxGearPumpEnable->setChecked(sysPara->para.gearPumpEnable); - // ui->checkBox_ReclaimPumpEnable->setChecked(sysPara->para.flagOfReclaimPumEnable); - - TriggerupdateSysParaToUI(); - + if (sysPara) { + m_model = PrintSettingModel::fromSysPara(sysPara); + updateModelToUI(); } } -void PrintSetting::TriggerupdateSysParaToUI(){ - if(sysPara) - { - /*----------------------------------------*/ - setTriggerUI(sysPara->para.printTriggerMode); +void PrintSetting::updateModelToUI(){ + ui->checkBoxLeftRightInverse->setChecked(m_model.leftRightInverse); + ui->checkBoxUpDownInverse->setChecked(m_model.upDownInverse); - if (sysPara->para.eleEyeTriggerSynPrintEn) //电眼触发的同步打印使能,电眼和同步器都选外部 - { - sysPara->para.eleEyeEdgetTriggerInner = 0; - sysPara->para.synTriggerInner = 0; - sysPara->para.eleEyeEdgetTriggerExternal = 1; - sysPara->para.synTriggerExternal = 1; - } + ui->spinBoxColDelay->setValue(m_model.printColDelay); - qDebug() << sysPara->para.eleEyeEdgetTriggerInner; - qDebug() << sysPara->para.eleEyeEdgetTriggerExternal; + ui->spinBoxHighVoltageValue->setValue(m_model.highVoltageAmplitude); - ui->eleEyeEdgetTriggerInner->setChecked(sysPara->para.eleEyeEdgetTriggerInner); - ui->eleEyeEdgetTriggerExternal->setChecked(sysPara->para.eleEyeEdgetTriggerExternal); - ui->radioButtonSynTriggerInner->setChecked(sysPara->para.synTriggerInner); - ui->radioButtonSynTriggerExternal->setChecked(sysPara->para.synTriggerExternal); + ui->comboBox_selcetVolPara->setCurrentIndex(m_model.volParaIndex); - ui->spinBoxEleEyeTriggerPrintDelay->setValue(sysPara->para.eleEyeTriggerPrintDelay); + TriggerupdateModelToUI(); +} + +void PrintSetting::TriggerupdateModelToUI() +{ + setTriggerUI(m_model.triggerMode); + + bool eleEyeInner = m_model.triggerMode != PRINT_TRIGGER_ELEC_EYE_EDGE + && m_model.triggerMode != PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; + bool isEyeMode = (m_model.triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE + || m_model.triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL); + bool synInner = m_model.triggerMode != PRINT_TRIGGER_SYNCHRONIZER + && !(isEyeMode && m_model.eleEyeTriggerSynPrintEn); + + if (m_model.eleEyeTriggerSynPrintEn) { + eleEyeInner = false; + synInner = false; + } + + ui->eleEyeEdgetTriggerInner->setChecked(eleEyeInner); + ui->eleEyeEdgetTriggerExternal->setChecked(!eleEyeInner); + ui->radioButtonSynTriggerInner->setChecked(synInner); + ui->radioButtonSynTriggerExternal->setChecked(!synInner); + + ui->spinBoxEleEyeTriggerPrintDelay->setValue(m_model.eleEyeTriggerPrintDelay); #ifndef NON_CABLE - ui->comboBoxTimeTriggerMode->setCurrentIndex(sysPara->para.timeTriggerPrintMode); + ui->comboBoxTimeTriggerMode->setCurrentIndex(m_model.timeTriggerPrintMode); #endif - ui->spinBoxEleEyeTriggerIntervalMs->setValue(sysPara->para.elecEyeTriggerInterval); - ui->spinBoxOutputPulseDelayMs->setValue(sysPara->para.outputPulseDelayMs); - ui->spinBoxEleEyeTriggerRepeatCnt->setValue(sysPara->para.photoElectricityRepeateNum); + ui->spinBoxEleEyeTriggerIntervalMs->setValue(m_model.triggerInterval); + ui->spinBoxOutputPulseDelayMs->setValue(m_model.outputPulseDelayMs); + ui->spinBoxEleEyeTriggerRepeatCnt->setValue(m_model.eleEyeRepeatCnt); - //ui->spinBoxSynTriggerPrintLen->setValue(sysPara->para.synTriggerPrintLenMm); - ui->spinBoxSynTriggerPrintLen->setText(QString::number(sysPara->para.synTriggerPrintLenMm)); - ui->lineEditTriggerPulsePerMm->setText(QString::number(sysPara->para.synPulseNumPerMm)); - if(sysPara->para.sysTriggerPrintMode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH) - //edit@11-19 - ;//ui->spinBoxSynTriggerPrintLenRatio->setValue(sysPara->para.synCharWidthRatio); - else - ui->spinBoxSynTriggerPrintLenRatio->setValue(sysPara->para.synTriggerPrintLenRatio); + ui->spinBoxSynTriggerPrintLen->setText(QString::number(m_model.triggerInterval)); + ui->lineEditTriggerPulsePerMm->setText(QString::number((double)m_model.encoderPulsePerMm)); - /*----------------------------------------*/ - // ui->spinBoxEleEyeTriggerPrintDelay->setValue(sysPara->para.eleEyeTriggerPrintDelay); - //ui->checkBoxEleEyeMakeClean->setChecked(sysPara->para.eleEyeClearCntInSynMode); - ui->comboBoxEleEyeMakeClean->setCurrentIndex( sysPara->para.eleEyeClearCntInSynMode - 0x20); + ui->comboBoxEleEyeMakeClean->setCurrentIndex(0); - ui->checkBoxPulseOutputEnable->setChecked(sysPara->para.pulseOutputEnable); - // ui->labelProductCntPerOutputPulse->setEnabled(sysPara->para.pulseOutputEnable); - // ui->spinBoxProductCntPerOutputPulse->setEnabled(sysPara->para.pulseOutputEnable); - ui->spinBoxProductCntPerOutputPulse->setValue(sysPara->para.productCntPerOutputPulse); + ui->checkBoxPulseOutputEnable->setChecked(m_model.pulseOutputEnable); + ui->spinBoxProductCntPerOutputPulse->setValue(m_model.productCntPerOutputPulse); + ui->spinBoxOuputPulseCol->setValue(m_model.OuputPulseCol); - // ui->labelOutputPulseDelayMs->setEnabled(sysPara->para.pulseOutputEnable); + ui->comboBoxSyncActType->setCurrentIndex(m_model.syncTriggerMode); - //ui->spinBoxOutputPulseDelayMs->setEnabled(sysPara->para.pulseOutputEnable); + ui->spinBoxEleMaskTime->setValue(m_model.eleMaskTime); - // ui->spinBoxOutputPulseDelayMs->setEnabled(isPulseEenable); - ui->spinBoxOuputPulseCol->setValue(sysPara->para.OuputPulseCol); + ui->spinBoxAltMirrorGap->setValue(m_model.altMirrorGap); - // 通过是否关闭同步器反转补偿,来确定选项框索引 - int comboBoxSyncActTypeIndex = int(sysPara->para.synchronizorActType); - if(!sysPara->para.syncRevCompDisable && sysPara->para.synchronizorActType != 0) { - comboBoxSyncActTypeIndex = int(sysPara->para.synchronizorActType) + 2; - } - ui->comboBoxSyncActType->setCurrentIndex(comboBoxSyncActTypeIndex); + ui->comboBoxAltMirrType->setCurrentIndex(m_model.altMirrorType); + ui->spinBoxpluseSinal->setValue(m_model.pulse_sinal_value); - //ui->checkBoxAutoSpeedEN->setChecked (sysPara->para.autoSynSpeedEn ); - ui->spinBoxEleMaskTime->setValue(sysPara->para.eleMaskTime); - - ui->spinBoxAltMirrorGap->setValue( sysPara->para.AltMirrorGap & 0x0fff ); - - ui->comboBoxAltMirrType->setCurrentIndex( (sysPara->para.AltMirrorGap>>12) & 0x000F); - ui->spinBoxpluseSinal->setValue(sysPara->para.pulse_sinal_value); - - if(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - ui->radioButtonEleEyeEdgetTrigger->setChecked(true); - if( sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) - ui->radioButtonEleEyeLevelTrigger->setChecked(true); - - } + if (m_model.triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + ui->radioButtonEleEyeEdgetTrigger->setChecked(true); + if (m_model.triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) + ui->radioButtonEleEyeLevelTrigger->setChecked(true); } void PrintSetting::updateSysStatusToUI(){ @@ -250,131 +256,7 @@ void PrintSetting::onPulseNumFixDone(float value){ void PrintSetting::on_lineEditTriggerPulsePerMm_textChanged(const QString &arg1) { Q_UNUSED(arg1); - sysPara->para.synPulseNumPerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); -} - -void PrintSetting::applyUITriggerPara(){ - - if(sysPara){ - GetTriggerUIPara(); - if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - { - if( sysPara->para.synTriggerPrintLenMm < sysPara->para.eleEyeTriggerPrintDelay ) - { - QMessageBox::information(nullptr,tr("提示:参数不正确"),tr("要求:触发长度小于喷印间隔")); - } - } - sysPara->para.eleEyeEdgetTriggerInner = ui->eleEyeEdgetTriggerInner->isChecked(); - sysPara->para.eleEyeEdgetTriggerExternal = ui->eleEyeEdgetTriggerExternal->isChecked(); - sysPara->para.synTriggerInner = ui->radioButtonSynTriggerInner->isChecked(); - sysPara->para.synTriggerExternal = ui->radioButtonSynTriggerExternal->isChecked(); - // 电眼和同步器都选外部时,就是同步 - sysPara->para.eleEyeTriggerSynPrintEn = - sysPara->para.eleEyeEdgetTriggerExternal && sysPara->para.synTriggerExternal? 1 : 0; - - - sysPara->para.pulseOutputEnable = ui->checkBoxPulseOutputEnable->isChecked(); - sysPara->para.productCntPerOutputPulse = ui->spinBoxProductCntPerOutputPulse->value(); - // 有脉冲延时使能的时候才可以设置延时 - if (isEnabled()) { - sysPara->para.outputPulseDelayMs = ui->spinBoxOutputPulseDelayMs->value(); - } else { - sysPara->para.outputPulseDelayMs = 0; - } - - sysPara->para.OuputPulseCol = ui->spinBoxOuputPulseCol->value(); - if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL - || sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)) - || sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER ) - { - ui->labelOutputPulseDelayMs->setText(tr("延时(毫米):")); - } - else - ui->labelOutputPulseDelayMs->setText(tr("延时(毫秒):")); - } - -} - -void PrintSetting::GetTriggerUIPara(){ - if(sysPara){ - sysPara->para.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value(); - sysPara->para.timeTriggerPrintMode = 0; // ui->comboBoxTimeTriggerMode->currentIndex(); - sysPara->para.elecEyeTriggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value(); //电眼触发的重复间隔 - int value = 0; - if (ui->cb_unlimited->isChecked()) value = UINT16_MAX; - else value = ui->spinBoxEleEyeTriggerRepeatCnt->value(); - sysPara->para.photoElectricityRepeateNum = value; - - sysPara->para.synTriggerPrintLenMm = ui->spinBoxEleEyeTriggerIntervalMs->value(); - //sysPara->para.synTriggerPrintLenMm = ui->spinBoxSynTriggerPrintLen->value(); - - sysPara->para.synPulseNumPerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); - - sysPara->para.sysTriggerPrintMode = SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH; // ui->comboBoxSynPrintMode->currentIndex(); - if(sysPara->para.sysTriggerPrintMode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH) - //edit@11-19 - ;//sysPara->para.synCharWidthRatio = ui->spinBoxSynTriggerPrintLenRatio->value(); - else - sysPara->para.synTriggerPrintLenRatio = ui->spinBoxSynTriggerPrintLenRatio->value(); - - // 原代码: - //sysPara->para.AltMirrorGap =(unsigned int) ( ((unsigned int)ui->spinBoxAltMirrorGap->value()) & 0x7fff) | ( ui->comboBoxAltMirrType->currentIndex()==1?0x8000:0x0000); - - // 20160303: - sysPara->para.AltMirrorGap =(unsigned int) ( ((unsigned int)ui->spinBoxAltMirrorGap->value()) & 0x0fff) |( ( ui->comboBoxAltMirrType->currentIndex())<<12 ); - - //qDebug()<< (sysPara->para.AltMirrorGap & 0x0fff) << (sysPara->para.AltMirrorGap & 0xf000); - - // if(ui->radioButtonDelayTrigger->isChecked()) - if(ui->eleEyeEdgetTriggerInner->isChecked() && ui->radioButtonSynTriggerInner->isChecked()){ //都选外部--延时触发 - sysPara->para.printTriggerMode = PRINT_TRIGGER_TIME; - sysPara->para.printDelayMs = ui->spinBoxEleEyeTriggerIntervalMs->value(); //延时触发的重复间隔 - } - else if(ui->radioButtonEleEyeLevelTrigger->isChecked() && ui->eleEyeEdgetTriggerExternal->isChecked()) //光电边沿触发 - sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; - else if(ui->radioButtonEleEyeEdgetTrigger->isChecked() && ui->eleEyeEdgetTriggerExternal->isChecked()) //光电电平触发 - sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_EDGE; - else if(ui->radioButtonSynTriggerExternal->isChecked()) - sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; - else - sysPara->para.printTriggerMode = PRINT_TRIGGER_NONE; - - - if(ui->eleEyeEdgetTriggerExternal->isChecked() && ui->radioButtonSynTriggerExternal->isChecked()) { - if(ui->radioButtonEleEyeEdgetTrigger->isChecked()) { - sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_EDGE; - } - else { - sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; - } - - sysPara->para.eleEyeTriggerSynPrintEn = true; - } - else{ - sysPara->para.eleEyeTriggerSynPrintEn = false; - } - - // sysPara->para.eleEyeTriggerSynPrintEn = ui->checkEyeTriggerSynPrintEn->isChecked (); - // sysPara->para.eleEyeTriggerSynPrintEn = ui->eleEyeEdgetTriggerExternal->isChecked() && ui->radioButtonSynTriggerExternal->isChecked(); - - // sysPara->para.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value(); - - // 韩国版本不需要电眼清零 byons@2026年6月23日 - sysPara->para.eleEyeClearCntInSynMode = 0x20 ; // + ui->comboBoxEleEyeMakeClean->currentIndex(); //ui->checkBoxEleEyeMakeClean->isChecked(); - //sysPara->para.autoSynSpeedEn = ui->checkBoxAutoSpeedEN->isChecked (); - sysPara->para.syncRevCompDisable = 0; - //sysPara->para.synPulsePerMmX8 = (unsigned short)(sysPara->para.synPulseNumPerMm *256); - sysPara->para.synPulsePerMmX8 = (unsigned short)((unsigned int)sysPara->para.synPulseNumPerMm <<8); - sysPara->para.eleMaskTime = ui->spinBoxEleMaskTime->value(); - - // 带补偿的正反转打印选项,位于最后两个comboBox item - sysPara->para.synchronizorActType = ui->comboBoxSyncActType->currentIndex() > 2 ? - ui->comboBoxSyncActType->currentIndex() - 2 : ui->comboBoxSyncActType->currentIndex(); - - sysPara->para.syncRevCompDisable = ui->comboBoxSyncActType->currentIndex() <= 2; - - sysPara->para.pulse_sinal_value = ui->spinBoxpluseSinal->value(); - } + m_model.encoderPulsePerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); } void PrintSetting::on_radioButtonDelayTrigger_pressed() @@ -407,9 +289,8 @@ void PrintSetting::on_radioButtonEleEyeLevelTrigger_pressed() void PrintSetting::on_radioButtonSynTrigger_pressed() { + setTriggerUI(PRINT_TRIGGER_SYNCHRONIZER); //edit@11-19 - sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; - // setTriggerUI(PRINT_TRIGGER_SYNCHRONIZER); // const unsigned short &FpgaVer=sysPara->status.build_dat.builTime; // //72版本禁用字符宽度 // if(72 == FpgaVer){ @@ -426,7 +307,7 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked) // ui->cb_unlimited->setEnabled(checked); if(sysPara) { - int triggerMode = sysPara->para.printTriggerMode; + int triggerMode = m_model.triggerMode; if( checked) { #ifndef NON_CABLE @@ -474,56 +355,24 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked) } void PrintSetting::setTriggerUI(int triggerMode){ + m_model.triggerMode = triggerMode; + // ui->sb_printingDelay->setEnabled(triggerMode == PRINT_TRIGGER_TIME); // ui->lb_printingDelay->setEnabled(triggerMode == PRINT_TRIGGER_TIME); ui->radioButtonEleEyeEdgetTrigger->setChecked( triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); ui->radioButtonEleEyeLevelTrigger->setChecked(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL); - // ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || triggerMode == PRINT_TRIGGER_TIME); - // ui->labelEleEyeTriggerIntervalMs->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); - // ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); - // ui->labelEleEyeTriggerRepeatCnt->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); - // ui->spinBoxEleEyeTriggerPrintDelay->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || PRINT_TRIGGER_SYNCHRONIZER); - // ui->labelEleEyeTriggerPrintDelay->setEnabled(triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE || PRINT_TRIGGER_SYNCHRONIZER); - // ui->labelEleMaskTime->setEnabled (triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); - // ui->spinBoxEleMaskTime->setEnabled (triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE); - if(sysPara->para.eleEyeTriggerSynPrintEn && + if(m_model.eleEyeTriggerSynPrintEn && (triggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL || triggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) ) { - // ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(0); - // ui->labelSynTriggerPrintLen->setEnabled(1); - // ui->lineEditTriggerPulsePerMm->setEnabled(1); - // ui->labelTriggerPulsePerMm->setEnabled(1); - // ui->spinBoxSynTriggerPrintLenRatio->setEnabled(1); - // ui->labelSynTriggerPrintLenRatio->setEnabled(1); - // ui->checkBoxEleEyeMakeClean->setEnabled(1); - // ui->pushButtonApplyPulseFix->setEnabled(1); - // ui->comboBoxSynPrintMode->setEnabled(1); - // ui->labelSynPrintMode->setEnabled(1); - // ui->labelEleMaskTime->setEnabled(1); - // ui->spinBoxEleMaskTime->setEnabled(1); - ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)")); ui->labelEleMaskTime->setText(tr("抑止距离(毫米)")); } else { -#ifndef NON_CABLE - // ui->spinBoxSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); -#endif - // ui->labelSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->lineEditTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->labelTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->spinBoxSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->labelSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->checkBoxEleEyeMakeClean->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->pushButtonApplyPulseFix->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->comboBoxSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - // ui->labelSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); - if(triggerMode == PRINT_TRIGGER_SYNCHRONIZER) { ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); @@ -543,18 +392,12 @@ void PrintSetting::setTriggerUI(int triggerMode){ } else ui->labelOutputPulseDelayMs->setText(tr("延时(毫秒):")); - setSynPrintMode(sysPara->para.sysTriggerPrintMode); + setSynPrintMode(SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH); } void PrintSetting::setSynPrintMode(int mode){ ui->labelSynTriggerPrintLenRatio->setText((mode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH)?tr("字符宽度"):tr("喷印比例(%)")); ui->comboBoxSynPrintMode->setCurrentIndex(mode); - //ui->spinBoxSynTriggerPrintLenRatio->setValue((mode == SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH)?sysPara->para.synCharWidthRatio:sysPara->para.synTriggerPrintLenRatio); - //edit@11-18 - if(SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH!=mode) - { - ui->spinBoxSynTriggerPrintLenRatio->setValue(sysPara->para.synTriggerPrintLenRatio); - } const bool bShow = SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH != mode; //隐藏文本框 @@ -702,20 +545,20 @@ void PrintSetting::on_eleEyeEdgetTriggerInner_clicked() if (sysPara == NULL) return; if(ui->radioButtonSynTriggerInner->isChecked()){ - sysPara->para.printTriggerMode = PRINT_TRIGGER_TIME; + m_model.triggerMode = PRINT_TRIGGER_TIME; }else - sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; + m_model.triggerMode = PRINT_TRIGGER_SYNCHRONIZER; - setTriggerUI(sysPara->para.printTriggerMode); + setTriggerUI(m_model.triggerMode); - sysPara->para.eleEyeTriggerSynPrintEn = false; + m_model.eleEyeTriggerSynPrintEn = false; on_checkEyeTriggerSynPrintEn_clicked(false); } void PrintSetting::setEnableEleEyeSetting(bool flag){ ui->labelEleEyeTriggerIntervalMs->setEnabled(!(ui->radioButtonSynTriggerExternal->isChecked() && ui->eleEyeEdgetTriggerInner->isChecked())); - ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(!(ui->radioButtonSynTriggerExternal->isChecked() && ui->eleEyeEdgetTriggerInner->isChecked())); + // ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(!(ui->radioButtonSynTriggerExternal->isChecked() && ui->eleEyeEdgetTriggerInner->isChecked())); ui->spinBoxEleMaskTime->setEnabled(flag); ui->spinBoxEleEyeTriggerRepeatCnt->setEnabled(flag); ui->radioButtonEleEyeEdgetTrigger->setEnabled(flag); @@ -727,9 +570,8 @@ void PrintSetting::setEnableEleEyeSetting(bool flag){ void PrintSetting::on_eleEyeEdgetTriggerExternal_clicked() { - sysPara->para.eleEyeTriggerSynPrintEn = ui->radioButtonSynTriggerExternal->isChecked(); - //电眼和同步器都选外部时,就是同步 - on_checkEyeTriggerSynPrintEn_clicked(sysPara->para.eleEyeTriggerSynPrintEn); + m_model.eleEyeTriggerSynPrintEn = ui->radioButtonSynTriggerExternal->isChecked(); + on_checkEyeTriggerSynPrintEn_clicked(m_model.eleEyeTriggerSynPrintEn); setEnableEleEyeSetting(true); } @@ -748,9 +590,16 @@ void PrintSetting::setEnableSynTriggerSetting(bool flag){ void PrintSetting::applyPrintSettingsToSysPara(bool showTip) { - applyUIPara(); - applyUITriggerPara(); - + updateModelFromUI(); + PrintSettingModel::applyToSysPara(m_model, sysPara); + + if (sysPara) { + sysPara->devOp->setHighVoltageAmplitudetoSTM32(); + sysPara->devOp->writeFpgaCalandar(0); + sysPara->devOp->writeFlightCompCtrl(ui->enbFlightCompCtrl->isChecked(), + ui->enbAccelDecelPredict->isChecked(), quint32(ui->flightCompWindowCycles->value())); + } + if(sysPara->devOp->writeFpgaPrintPara(true) != -1 && showTip) { QMessageBox box(QMessageBox::Icon::Information, tr("提示"), tr("应用成功"), QMessageBox::Ok, nullptr); auto btn = box.button(QMessageBox::Ok); @@ -763,15 +612,15 @@ void PrintSetting::applyPrintSettingsToSysPara(bool showTip) sysPara->saveParaToFile (); } -PrintSettingModel PrintSetting::model() +PrintSettingModel PrintSetting::model() const { - return PrintSettingModel::fromSysPara(sysPara); + return m_model; } void PrintSetting::setModel(const PrintSettingModel &model) { - PrintSettingModel::applyToSysPara(model, sysPara); - updateSysParaToUI(); + m_model = model; + updateModelToUI(); LogInfo::setRunStatusText("Print settings: " + PrintSettingModel::toString(model)); } @@ -781,13 +630,11 @@ void PrintSetting::on_radioButtonSynTriggerInner_clicked() setEnableSynTriggerSetting(false); if (sysPara == NULL) return; if(ui->eleEyeEdgetTriggerInner->isChecked()){ - sysPara->para.printTriggerMode = PRINT_TRIGGER_TIME; - setTriggerUI(sysPara->para.printTriggerMode); - } - if (sysPara) { - sysPara->para.eleEyeTriggerSynPrintEn = false; - on_checkEyeTriggerSynPrintEn_clicked(false); + m_model.triggerMode = PRINT_TRIGGER_TIME; + setTriggerUI(m_model.triggerMode); } + m_model.eleEyeTriggerSynPrintEn = false; + on_checkEyeTriggerSynPrintEn_clicked(false); setEnableEleEyeSetting(!ui->eleEyeEdgetTriggerInner->isChecked()); } @@ -795,26 +642,26 @@ void PrintSetting::on_radioButtonSynTriggerInner_clicked() void PrintSetting::on_radioButtonSynTriggerExternal_clicked() { if(!ui->eleEyeEdgetTriggerExternal->isChecked()){ - if (sysPara) - sysPara->para.printTriggerMode = PRINT_TRIGGER_SYNCHRONIZER; + m_model.triggerMode = PRINT_TRIGGER_SYNCHRONIZER; } - if (sysPara) { - sysPara->para.eleEyeTriggerSynPrintEn = ui->eleEyeEdgetTriggerExternal->isChecked(); - on_checkEyeTriggerSynPrintEn_clicked(sysPara->para.eleEyeTriggerSynPrintEn); + else { + m_model.triggerMode = ui->radioButtonEleEyeEdgetTrigger->isChecked() ? PRINT_TRIGGER_ELEC_EYE_EDGE : PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; } + + m_model.eleEyeTriggerSynPrintEn = ui->eleEyeEdgetTriggerExternal->isChecked(); + on_checkEyeTriggerSynPrintEn_clicked(m_model.eleEyeTriggerSynPrintEn); setEnableSynTriggerSetting(true); setEnableEleEyeSetting(!ui->eleEyeEdgetTriggerInner->isChecked()); } - void PrintSetting::on_radioButtonEleEyeEdgetTrigger_clicked() { - sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_EDGE; + m_model.triggerMode = PRINT_TRIGGER_ELEC_EYE_EDGE; } void PrintSetting::on_radioButtonEleEyeLevelTrigger_clicked() { - sysPara->para.printTriggerMode = PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; + m_model.triggerMode = PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; } @@ -845,6 +692,11 @@ void PrintSettingModel::loadFromXml(PrintSettingModel& model, const QXmlStreamAt model.mode0211 = (unsigned char)attrs.value("mode0211").toUInt(); model.highVoltageAmplitude = (unsigned char)attrs.value("highVoltageAmplitude").toUInt(); model.altMirrorType = (unsigned char)attrs.value("altMirrorType").toUInt(); + model.pulseOutputEnable = (unsigned char)attrs.value("pulseOutputEnable").toUInt(); + model.productCntPerOutputPulse = attrs.value("productCntPerOutputPulse").toUInt(); + model.outputPulseDelayMs = (unsigned short)attrs.value("outputPulseDelayMs").toUInt(); + model.OuputPulseCol = (unsigned short)attrs.value("OuputPulseCol").toUInt(); + model.pulse_sinal_value = (unsigned short)attrs.value("pulse_sinal_value").toUInt(); model.leftRightInverse = attrs.value("leftRightInverse").toInt() != 0; model.upDownInverse = attrs.value("upDownInverse").toInt() != 0; model.eleEyeTriggerSynPrintEn = attrs.value("eleEyeTriggerSynPrintEn").toInt() != 0; @@ -866,6 +718,11 @@ void PrintSettingModel::saveToXml(const PrintSettingModel& model, QXmlStreamWrit writer.writeAttribute("mode0211", QString::number(model.mode0211)); writer.writeAttribute("highVoltageAmplitude", QString::number(model.highVoltageAmplitude)); writer.writeAttribute("altMirrorType", QString::number(model.altMirrorType)); + writer.writeAttribute("pulseOutputEnable", QString::number(model.pulseOutputEnable)); + writer.writeAttribute("productCntPerOutputPulse", QString::number(model.productCntPerOutputPulse)); + writer.writeAttribute("outputPulseDelayMs", QString::number(model.outputPulseDelayMs)); + writer.writeAttribute("OuputPulseCol", QString::number(model.OuputPulseCol)); + writer.writeAttribute("pulse_sinal_value", QString::number(model.pulse_sinal_value)); writer.writeAttribute("leftRightInverse", QString::number(model.leftRightInverse)); writer.writeAttribute("upDownInverse", QString::number(model.upDownInverse)); writer.writeAttribute("eleEyeTriggerSynPrintEn", QString::number(model.eleEyeTriggerSynPrintEn)); @@ -910,6 +767,12 @@ void PrintSettingModel::applyToSysPara(const PrintSettingModel &model, SysPara * sysPara->para.syncRevCompDisable = model.syncTriggerMode <= 2; + sysPara->para.pulseOutputEnable = model.pulseOutputEnable; + sysPara->para.productCntPerOutputPulse = model.productCntPerOutputPulse; + sysPara->para.outputPulseDelayMs = model.outputPulseDelayMs; + sysPara->para.OuputPulseCol = model.OuputPulseCol; + sysPara->para.pulse_sinal_value = model.pulse_sinal_value; + sysPara->para.eleEyeEdgetTriggerInner = model.triggerMode != PRINT_TRIGGER_ELEC_EYE_EDGE && model.triggerMode != PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; @@ -963,6 +826,12 @@ PrintSettingModel PrintSettingModel::fromSysPara(SysPara *sysPara) model.altMirrorType = sysPara->para.AltMirrorGap >> 12; model.altMirrorGap = sysPara->para.AltMirrorGap & 0x0fff; + model.pulseOutputEnable = sysPara->para.pulseOutputEnable; + model.productCntPerOutputPulse = sysPara->para.productCntPerOutputPulse; + model.outputPulseDelayMs = sysPara->para.outputPulseDelayMs; + model.OuputPulseCol = sysPara->para.OuputPulseCol; + model.pulse_sinal_value = sysPara->para.pulse_sinal_value; + return model; } @@ -976,4 +845,41 @@ QString PrintSettingModel::toString(const PrintSettingModel &model) model.eleEyeTriggerSynPrintEn, model.eleMaskTime, model.triggerInterval, model.timeTriggerPrintMode, model.eleEyeRepeatCnt, model.eleEyeTriggerPrintDelay, model.encoderPulsePerMm, model.altMirrorType, model.altMirrorGap); return str; +} + + +PrintSettingModel PrintSettingModel::defPrintSettingModel() +{ + QFile file(DEF_PRINT_SETTINGS_PATH); + if (!file.open(QIODevice::ReadOnly)) { + return PrintSettingModel(); + } + + QXmlStreamReader reader(&file); + PrintSettingModel model; + + if (reader.readNextStartElement() && reader.name() == QStringLiteral("PrintSettings")) { + loadFromXml(model, reader.attributes()); + } + + file.close(); + return model; +} + +void PrintSettingModel::setDefPrintSettingModel(const PrintSettingModel &model) +{ + QFile file(DEF_PRINT_SETTINGS_PATH); + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + qWarning() << "Failed to open" << DEF_PRINT_SETTINGS_PATH << "for writing"; + return; + } + + QXmlStreamWriter writer(&file); + writer.setAutoFormatting(true); + writer.writeStartDocument(); + writer.writeEmptyElement("PrintSettings"); + saveToXml(model, writer); + writer.writeEndDocument(); + + file.close(); } \ No newline at end of file diff --git a/Printsetting.h b/Printsetting.h index a3f35f5..053e9e0 100644 --- a/Printsetting.h +++ b/Printsetting.h @@ -11,8 +11,6 @@ namespace Ui { class PrintSetting; } -#pragma pack(1) - /** * @brief 从sysPara中提取的某些用于跟随工作文件保存的打印设置 * @@ -33,7 +31,7 @@ struct PrintSettingModel * 电眼模式:根据 eleEyeRepeatCnt 设定的重复次数,确定重复间隔,单位是时间 ms * 同步器模式:重复间隔,单位长度 mm * */ - unsigned triggerInterval = 0; + unsigned triggerInterval = 100; unsigned eleEyeRepeatCnt = 1; // 电眼触发时,打印内容的次数,也就是重复数 @@ -67,6 +65,16 @@ struct PrintSettingModel unsigned char altMirrorType = 0; // 镜像交替模式 + unsigned char pulseOutputEnable = 0; // 脉冲输出使能 + + unsigned int productCntPerOutputPulse = 0; // 多少个产品产生一个输出脉冲 + + unsigned short outputPulseDelayMs = 0; // 输出脉冲延时 + + unsigned short OuputPulseCol = 0; // 在第几列输出脉冲 + + unsigned short pulse_sinal_value = 0; // 脉冲信号值 + bool leftRightInverse = false; // 信息左右颠倒 bool upDownInverse = false; // 信息上下颠倒 @@ -81,9 +89,11 @@ struct PrintSettingModel static PrintSettingModel fromSysPara(SysPara* sysPara); static QString toString(const PrintSettingModel& model); -}; -#pragma pack() + static PrintSettingModel defPrintSettingModel(); + + static void setDefPrintSettingModel(const PrintSettingModel& model); +}; class PrintSetting : public QWidget { @@ -96,21 +106,18 @@ public: QPushButton* m_closeBtn; QPushButton* m_checkBtn; - void updateSysParaToUI(); //重载 - void applyUIPara(); //重载 + void updateModelFromUI(); + void updateModelToUI(); void bindSysPara(SysPara *sysPara); void updateSysStatusToUI(); - void applyUITriggerPara(); - void GetTriggerUIPara(); - void setTriggerUI(int triggerMode); void setSynPrintMode(int mode); void on_pushButtonApply_pressed(); - void TriggerupdateSysParaToUI(); + void TriggerupdateModelToUI(); void setEnableEleEyeSetting(bool); @@ -118,7 +125,7 @@ public: void applyPrintSettingsToSysPara(bool showTip = true); - PrintSettingModel model(); + PrintSettingModel model() const; void setModel(const PrintSettingModel& model); @@ -159,8 +166,9 @@ private slots: private: Ui::PrintSetting *ui; - SysPara* sysPara = nullptr; + PrintSettingModel m_model; + SysPara *sysPara = nullptr; PulseNumFix *pulseNumFix; bool isPulseEenable = false; diff --git a/SysPara.h b/SysPara.h index f7b5212..869c3b4 100644 --- a/SysPara.h +++ b/SysPara.h @@ -41,6 +41,7 @@ #define PARA_FILE_PATH PARA_ROOT_DIR"sysPara.bin" #define DeviceCode_FILE_PATH "/home/plg/conf/deviceCode.bin" #define RFID_FILE_PATH "/home/plg/conf/RFID.bin" +#define DEF_PRINT_SETTINGS_PATH PARA_ROOT_DIR"defPrintSet.xml" #define FPGA_PRINT_PARA_BYTE_NUM 0x3C #define BATCHLEN 3 diff --git a/docs/btn_defPrintSet设计.md b/docs/btn_defPrintSet设计.md new file mode 100644 index 0000000..62a7617 --- /dev/null +++ b/docs/btn_defPrintSet设计.md @@ -0,0 +1,123 @@ +# btn_defPrintSet 默认打印设置 实现方案 + +## 1. 需求 + +`MainInstruction` 中按钮 `btn_defPrintSet`,点击后弹窗编辑默认打印参数,应用后通过 `PrintSettingModel::setDefPrintSettingModel()` 持久化,启动时通过 `PrintSettingModel::defPrintSettingModel()` 加载。 + +## 2. 核心思路 + +PrintSetting 已用 PrintSettingModel 抽离 sysPara,只需给它加一个"默认设置编辑模式"的标志位即可同时支持两种场景: + +| 模式 | apply 行为 | +|------|-----------| +| 普通模式(默认) | `updateModelFromUI()` → `applyToSysPara(sysPara)` → 写硬件 | +| 默认设置编辑模式 | `updateModelFromUI()` → `setDefPrintSettingModel(m_model)` → 写 XML | + +## 3. 修改点 + +### 3.1 PrintSetting.h — 新增声明 + +```cpp +// 公开方法 +void setDefaultSettingMode(bool enable); // 设为 true 进入默认设置编辑模式 + +// 私有成员 +bool m_isDefaultSettingMode = false; // 模式标志 +``` + +### 3.2 PrintSetting.cpp — 新增实现 + +```cpp +void PrintSetting::setDefaultSettingMode(bool enable) +{ + m_isDefaultSettingMode = enable; + + if (enable) { + // 文本可改为"保存为默认" + m_checkBtn->setText(tr("保存为默认")); + } +} + +void PrintSetting::on_pushButtonApply_pressed() +{ + if (m_isDefaultSettingMode) { + updateModelFromUI(); + PrintSettingModel::setDefPrintSettingModel(m_model); + QMessageBox::information(nullptr, tr("提示"), tr("默认设置已保存")); + } else { + applyPrintSettingsToSysPara(true); + } +} +``` + +### 3.3 MainInstruction — 按钮连接 + +`MainInstruction.cpp` 构造函数中: + +```cpp +#include "Printsetting.h" + +// 连接 btn_defPrintSet +connect(ui->btn_defPrintSet, &QPushButton::clicked, this, [this]() { + QDialog dlg(this); + dlg.setWindowTitle(tr("默认打印设置")); + dlg.resize(800, 600); + + PrintSetting* ps = new PrintSetting(&dlg); + ps->setDefaultSettingMode(true); + ps->setModel(PrintSettingModel::defPrintSettingModel()); + + // 关闭按钮 → 关闭弹窗 + connect(ps, &PrintSetting::sendButtonClickedSignal, &dlg, &QDialog::reject); + + QVBoxLayout* layout = new QVBoxLayout(&dlg); + layout->addWidget(ps); + dlg.setLayout(layout); + + dlg.exec(); +}); +``` + +## 4. 数据流 + +``` +btn_defPrintSet 点击 + │ + ▼ +创建 QDialog 内嵌 PrintSetting + │ setDefaultSettingMode(true) + │ setModel(defPrintSettingModel()) ← 从 XML 加载 + │ + ▼ +用户编辑控件 → 直接修改 m_model + │ + ▼ +点击"保存为默认"按钮 + │ on_pushButtonApply_pressed() + │ → updateModelFromUI() + │ → setDefPrintSettingModel(m_model) → 写入 XML + │ + ▼ +点击关闭按钮 → dialog.reject() +``` + +## 5. 改动清单 + +| 文件 | 改动 | +|------|------| +| `Printsetting.h` | 新增 `setDefaultSettingMode()` 声明 + `m_isDefaultSettingMode` 成员 | +| `Printsetting.cpp` | 新增 `setDefaultSettingMode()` 实现,修改 `on_pushButtonApply_pressed` 分支 | +| `MainInstruction.cpp` | 构造函数中连接 `btn_defPrintSet` 信号,创建弹窗 | +| `MainInstruction.h` | 无需改动(lambda 内联,不需要成员) | + +## 6. 关于复用 InkJetPrinter 中已有 PrintSetting 实例 + +**不建议复用**。原因: + +- `m_PrintSetting` 已通过 `bindSysPara(para)` 绑定硬件,位于 `m_StackedWidget` 页面中 +- 复用需要:保存/恢复 model + 切换模式 + 区分 `sendButtonClickedSignal` 的两种语义 +- 新建一个不绑 sysPara 的临时 `PrintSetting` 成本极低(等同于 QWidget),用完即销毁,代码清晰不侵入 InkJetPrinter + +## 7. 不需要新建任何文件 + +改动集中在 3 个文件,无需新建类或 ui 文件。 \ No newline at end of file diff --git a/testprintwidget.cpp b/testprintwidget.cpp index 775ba52..73a1cf0 100644 --- a/testprintwidget.cpp +++ b/testprintwidget.cpp @@ -101,7 +101,7 @@ TestPrintWidget::TestPrintWidget(QWidget* parent) connect(ui.btnSave, &QPushButton::clicked, [this]() { emit sendButtonClickedSignal(8); }); - connect(ui.btnListConfig, &QPushButton::clicked, [this]() { + connect(ui.btnListConfig, &QPushButton::clicked, [this]() { emit sendButtonClickedSignal(9); });