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);
});