diff --git a/DevOp.cpp b/DevOp.cpp index b5b3fcd..6d913ce 100644 --- a/DevOp.cpp +++ b/DevOp.cpp @@ -3324,9 +3324,7 @@ void DevOp::writeFpgaCalandar(bool Enable){ fpgaWr(WRITE_COUNTER3_ADDR,(unsigned char *)&sysPara->para.Counter3,sizeof(sysPara->para.Counter3)); sysPara->para.Counter4.cnt4CurrValue= QString::number(sysPara->para.cnt4CurrValue).toUInt(0,16); //计数器4当前值用于隐藏功能 - #ifndef COUNTER2_BY_GROUP - fpgaWr(WRITE_COUNTER4_ADDR,(unsigned char *)&sysPara->para.Counter4,sizeof(sysPara->para.Counter4)); - #endif + fpgaWr(WRITE_COUNTER4_ADDR,(unsigned char *)&sysPara->para.Counter4, 4); sysPara->status.cnt3CurrentValueInitDoneFlag = true; sysPara->status.cnt2CurrentValueInitDoneFlag = true; diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index 72bf05f..4a1e3b2 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -1,3406 +1,3429 @@ -#include "InkJetPrinter.h" -#include "ui_inkjetprinter.h" -#include "QDebug" -#include "LogInfo.h" -#include "mainwindow.h" -#include "DlgVolteParaNo73.h" -#include "DlgVoltePara25Dots.h" -#include "./Network/NetworkManager.h" -#include "ZkEdit.h" -#include "myinclude.h" -#include -#include -#include -#include -#include - -#define MAX_VOL 300 -#define MIN_VOL 0 -void PID_init(); -#define ONLYCNTCLEAR -extern MyInputMethod *myInputMethod; -static bool firstTime = true; -static unsigned int PulseCnt = 0; //时间间隔内的脉冲累计数 -InkJetPrinter::InkJetPrinter(QWidget *parent) : - QTabWidget(parent), - ui(new Ui::InkJetPrinter) -{ - // 隐藏系统任务栏,隐藏后,如果需要激活任务栏,则需要呼出QtUI中的任意弹出式、非全屏窗口,然后使用鼠标将光标移动至屏幕最左侧或最顶部则可以呼出任务栏 - int ret = system("xfconf-query -c xfce4-panel -p /panels/panel-1/autohide-behavior -s 2"); - qInfo() << "Hide system panel ret:" << ret; - -// system("ifconfig eth1 down"); - ui->setupUi(this); - SysPara *para = new SysPara(); - bindSysPara(para); - ui->tabMainWindow->bindSysPara(para); - sysPara->status.InkOrSOLVEmptyCnt=0; - - t1.start();//calandar_and_dat_t - fileTransceiv = new FileTranseceiver(5001); - QObject::connect(fileTransceiv,SIGNAL(fileRecieved(QString)),this,SLOT(recievedFile2Save(QString))); - fileTransceiv->start(); - - //edit@12-30 - tcpTransceiv = new FileTranseceiver(5002); - tcpTransceiv->start(); - - - connect(ui->tabMainWindow,SIGNAL(closeSerial()),this,SLOT(closedSerial())); - qDebug()<<"main thread id:"<< QString("0x%1").arg(reinterpret_cast(QThread::currentThreadId()), 0, 16); - - m_serialThreadFPGA = new QThread; - serialFPGA = new Serial("/dev/ttyAS5"); - - connect(m_serialThreadFPGA,&QThread::started,serialFPGA,&Serial::startInitSlot); - - serialFPGA->moveToThread(m_serialThreadFPGA); - connect(serialFPGA,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); - connect(serialFPGA,SIGNAL(resendFPGAData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); - connect(sysPara->devOp,SIGNAL(sendSerialDataToFPGA(int,int,unsigned char*,int,int)),serialFPGA,SLOT(sendSerialData(int,int,unsigned char*,int,int)),Qt::QueuedConnection); - connect(serialFPGA,SIGNAL(getFPGAVersion(uint)),this,SLOT(saveFPGAVersionNum(uint))); - - connect(serialFPGA,SIGNAL(stopSendData(bool)),this,SLOT(stopSendFPGAData(bool))); - connect(serialFPGA,SIGNAL(getFPGAPhaseDetectHighTm(unsigned char*)),this,SLOT(saveFPGAPhaseDetectHighTm(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGAStatus(unsigned char*)),this,SLOT(saveFPGAStatus(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGACalandarAndDat(unsigned char*)),this,SLOT(saveFPGACalandarAndDat(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGACnt3CurrValue(unsigned char*)),this,SLOT(saveFPGACnt3CurrValue(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGAXXXDay(unsigned char*)),this,SLOT(saveFPGAXXXDay(unsigned char*))); - connect(serialFPGA,SIGNAL(queueSizeFPGA(int)),ui->tabMainWindow,SLOT(showFPGAqueuesize(int))); - connect(serialFPGA,SIGNAL(queueFPGASizeSIG(int)),ui->tabMainWindow,SLOT(showqueueFPGAsize(int))); - connect(serialFPGA, &Serial::FPGABuildDat, this, [this](int buildTime){ - sysPara->status.build_dat.builTime = quint16(buildTime); - qDebug() << "FPGA build time: " << buildTime; - }); - - m_serialThreadSTM32 = new QThread(); - serialSTM32 = new Serial("/dev/ttyAS2"); - - connect(m_serialThreadSTM32,&QThread::started,serialSTM32,&Serial::startInitSlot); - - serialSTM32->moveToThread(m_serialThreadSTM32); - connect(serialSTM32,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendSTM32Date(int,int,unsigned char*,int,int))); - connect(sysPara->devOp,SIGNAL(sendSerialDataToSTM32(int,int,unsigned char*,int,int)),serialSTM32,SLOT(sendSerialData(int,int,unsigned char*,int,int))); - connect(serialSTM32,SIGNAL(getSTM32Status(unsigned char*)),this,SLOT(saveSTM32Status(unsigned char*))); - connect(serialSTM32,SIGNAL(getGearPumpVal(unsigned char*)),this,SLOT(saveGearPumpVal(unsigned char*))); - connect(serialSTM32,SIGNAL(getPulseCnt(unsigned char*)),this,SLOT(savePulseCntVal(unsigned char*))); - connect(serialSTM32,SIGNAL(getSTM32Version(unsigned char*)),this,SLOT(saveSTM32Version(unsigned char*))); - connect(serialSTM32,SIGNAL(getSTM32Time(unsigned char*)),this,SLOT(saveSTM32Time(unsigned char*))); - connect(serialSTM32,SIGNAL(stopSendData(bool)),this,SLOT(stopSendSTM32Data(bool))); - connect(serialSTM32,SIGNAL(powerOffReady()),ui->tabMainWindow,SLOT(powerOffConfirmed())); - - connect(serialSTM32,SIGNAL(queueSizeSTM32(int)),ui->tabMainWindow,SLOT(showSTM32queuesize(int))); - connect(ui->tabSystemManage,SIGNAL(upgradeSTM32(QString)),serialSTM32,SLOT(upgradeSTM32File(QString))); - connect(ui->tabSystemManage,SIGNAL(enableClick(bool)),this,SLOT(enableInkJetTabClick(bool))); - connect(serialSTM32,SIGNAL(progress(int,int)),ui->tabSystemManage,SLOT(progressBarControl(int,int))); - - connect(ui->tabSystemManage,SIGNAL(sigToCloseSerialFPGA()),this,SLOT(closeSerialFPGA())); - connect(ui->tabSystemManage,SIGNAL(sigToCloseSerialSTM32()),this,SLOT(closeSerialSTM32())); - connect(ui->tabSystemManage,SIGNAL(restartSerial()),this,SLOT(restartSerialPort())); - flagOfSerialThreadStratEn = true; - - connect(this,SIGNAL(showReclaimTankstatus(unsigned char)),ui->tabPrintSetting,SLOT(showReclaimTankstatusslot(unsigned char))); - connect(this,SIGNAL(showMotorIsen(int,int)),ui->tabPrintSetting,SLOT(showMotorIsenVal(int,int))); - connect(ui->tabPrintSetting,SIGNAL(HiddenFunction(bool)),ui->tabMainWindow->getTexteditOption(),SLOT(SetHiddenValue(bool))); - ui->tabMainWindow->SetEditMode(sysPara->para.EditMode); - ui->tabOtherInfo->bindSysPara(para); - ui->tabPrintSetting->bindSysPara(para); - ui->tabSystemSetting->bindSysPara(para); - ui->tabOtherInfo->bindSysPara(para); - ui->tabTriggerMode->bindSysPara(para); - ui->tabSystemManage->bindSysPara(para); - ui->tabPicEdit->bindSysPara(para); - ui->tabNetworkManager->bindSysPara(para); - -//--------------------------------------------------------------------------- -// byons电压调整部分 - - voltePara25DotsDlg = nullptr; - no73VolteParaDlg = nullptr; - if (sysPara && sysPara->devOp) { - #ifdef ENB_VOLTAGE_ADJUST_NO72 - voltePara25DotsDlg = new DlgVoltePara25Dots(sysPara->devOp, this); - voltePara25DotsDlg->setWindowFlags(Qt::Widget); - voltePara25DotsDlg->setAttribute(Qt::WA_DeleteOnClose, false); - voltePara25DotsDlg->bindSysPara(sysPara); - voltePara25DotsDlg->onBtnLoadClicked(); - insertTab(1, voltePara25DotsDlg, tr("电压调整No72")); - #endif - - #ifdef ENB_VOLTAGE_ADJUST_NO73 - no73VolteParaDlg = new DlgVolteParaNo73(sysPara->devOp, this); - no73VolteParaDlg->setWindowFlags(Qt::Widget); - no73VolteParaDlg->setAttribute(Qt::WA_DeleteOnClose, false); - no73VolteParaDlg->bindSysPara(sysPara); - no73VolteParaDlg->onBtnLoadClicked(); - insertTab(1, no73VolteParaDlg, tr("电压调整No73")); - #endif - } - -//end voltage--------------------------------------------------------------------------- - - ui->tabSystemManage->loadKeyBoardType(); - - //以下两个信号要在(ui->tabMainWindow->updateSysParaToUI();)之前绑定,否则获取不到文本框的更新值 - connect (ui->tabTriggerMode,SIGNAL(autoUpdateFontWidthByTriggerCtrl(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); - connect (ui->tabMainWindow,SIGNAL(autoUpdateFontWidthByMainWindow(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); - connect(ui->tabMainWindow,SIGNAL(readFPGAVersionReady()),ui->tabPrintSetting,SLOT(getFpgaVersionSetDisable())); - ui->tabMainWindow->updateSysParaToUI(); - - ui->tabPrintSetting->updateSysParaToUI(); - ui->tabSystemSetting->updateSysParaToUI(); - ui->tabOtherInfo->updateSysParaToUI(); - ui->tabTriggerMode->updateSysParaToUI(); - - dlgShowMsg =new DlgShowMsg; - dlgShowMsg->hide(); - -#ifdef __RFID_CARD - initRFIDManager(); -#endif - timer = new QTimer(); - connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); - timer->start(10); - - qDebug()<<"timer status:"<isActive(); - - viscosity_timer = new QTimer(); - connect(viscosity_timer, SIGNAL(timeout()), this, SLOT(viscosity_timerHandler())); - - if(sysPara->para.gearPumpEnable) - { - pushButtonStartFlag = true; - } - - connect(this,SIGNAL(currentChanged(int)),this,SLOT(onInkJetPrinterCurrentChanged(int))); - connect(this,SIGNAL(setReclaimTankCurrentPos(int)),ui->tabMainWindow,SLOT(onReclainTankPositionChanged(int))); - - connect(this,SIGNAL(reclaimTankCloseDone()),ui->tabMainWindow,SLOT(checkForPowerOff())); - connect(this,SIGNAL(reclaimTankBlock()),this,SLOT(onReclaimTankBlock())); - connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),this,SLOT(onAuthChanged(int))); - connect (this,SIGNAL(sendPicScene(PicScene*)),ui->tabPrintSetting,SLOT(updateUIForSpecialCondition(PicScene*))); - - connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabOtherInfo,SLOT(onAuthChanged(int))); - //test - connect(ui->tabMainWindow,SIGNAL(InkjetCleanUP()),ui->tabSystemSetting,SLOT(on_pushButtonCleanUP_pressed())); - connect(ui->tabMainWindow,SIGNAL(clearPressureFault()),this,SLOT(resetPressureCnt())); - connect(ui->tabSystemSetting,SIGNAL(pressureAdjust()),this,SLOT(pressureAdjustForsystemseeting())); - -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - connect(this,SIGNAL(updateCnt1GroupDisp(bool)), - ui->tabPrintSetting,SLOT(onUpdateCnt1GroupDisp(bool))); -#endif - initCntGroup(); - - msgtest = new QMessageBox(this); - connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); - msgBox1 = new QMessageBox(this); - connect(msgBox1, SIGNAL(finished(int)), this, SLOT(OnBoxFinished(int))); - - connect(ui->tabPrintSetting->dlgInputAddr,SIGNAL(printErrorStatus(QString,unsigned int)),this,SLOT(onPrintErrorStatus(QString,unsigned int)));// - connect(ui->tabSystemSetting,SIGNAL(changeEditMode(int)),this,SLOT(onchangeEditMode(int))); - connect(ui->tabSystemSetting,SIGNAL(setRunStatus(QString )),ui->tabMainWindow,SLOT(setRunStatus(QString))); - - connect(ui->tabPrintSetting->dlgInputAddr,SIGNAL(changeMac(QString)),ui->tabMainWindow,SLOT(UpdateUIVersion())); - connect(ui->tabSystemManage,SIGNAL(enableReclaimButton(bool)),ui->tabMainWindow,SLOT(onEnableReclaimCtrlButton(bool))); - connect(ui->tabSystemManage,SIGNAL(configChanged(void)),this,SLOT(onConfigChanged(void))); - connect(ui->tabPrintSetting, SIGNAL(change_OutputPulse()), ui->tabTriggerMode, SLOT(OutputPulse())); - connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() )); - connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabSystemSetting,SLOT( SystemupdateSysParaToUI() )); - connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabOtherInfo,SLOT( OtherupdateSysParaToUI() )); - connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabTriggerMode,SLOT( TriggerupdateSysParaToUI() )); - connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabMainWindow->getTexteditOption(),SLOT( updateSysParaToZero() )); - connect (ui->tabMainWindow,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); - //if(sysPara->para.EditMode==PICFILE){ - connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabPicEdit,SLOT(updateAuthorization(int)));// 字库编辑使能 - connect (ui->tabPicEdit,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); - connect (ui->tabPicEdit ,SIGNAL(openCurrentFile (QString ,bool )),ui->tabMainWindow,SLOT(openPicFIleOpen(QString ,bool ))); - connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),ui->tabPicEdit,SLOT( EditCurrFile(QString))); - connect (ui->tabPicEdit ,SIGNAL(setMainTabEdit (int)),ui->tabMainWindow,SLOT(SetMainTabEdit(int))); - //} - //connect (ui->tabPrintSetting,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); - - connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),this,SLOT(onChangeTab(QString))); - - connect(ui->tabPrintSetting,SIGNAL(checkPrintIntervalSignal()),ui->tabMainWindow,SLOT(checkPrintingInterval())); - connect(ui->tabTriggerMode,SIGNAL(checkPrintIntervalSignal()),ui->tabMainWindow,SLOT(checkPrintingInterval())); - - connect (ui->tabMainWindow,SIGNAL(CloseJd()),this,SLOT(close_jd_timer())); - connect (ui->tabMainWindow,SIGNAL(pushButtonStartPressed(bool)),this,SLOT(handlePushButtonStartPressed(bool))); - connect (ui->tabMainWindow,SIGNAL(repeatInitedPid()),this,SLOT(handleInitedPID())); - connect (ui->tabMainWindow,SIGNAL(setCNT1Select(bool)),ui->tabPrintSetting,SLOT(setCNT1BackColor(bool))); - connect (ui->tabMainWindow,SIGNAL(setCNT2Select(bool)),ui->tabPrintSetting,SLOT(setCNT2BackColor(bool))); - connect (ui->tabMainWindow,SIGNAL(setCNT3Select(bool)),ui->tabPrintSetting,SLOT(setCNT3BackColor(bool))); - connect(ui->tabMainWindow,SIGNAL(setDisableAll()),this,SLOT(disableTabClick())); - - connect(ui->tabPrintSetting,SIGNAL(engineerMode(bool)),ui->tabSystemManage,SLOT(engieerModeAcceptSystemManage(bool))); - connect(ui->tabPrintSetting, SIGNAL(engineerMode(bool)), ui->tabSystemSetting, SLOT(setFreqFixVisible(bool))); - - sysPara->status.rWarnViscoReady=0; - - // hlp: 260608: 以授权为标准,不过度开放权限 - onAuthChanged(AUTH_NONE); -// onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); - - - sysPara->status.WorkTimeOut=0; - ui->tabMainWindow->changeEditMode(0); - emit onchangeEditMode(0); // 20140912 - sysPara->devOp->printCtrl( PRINT_CTRL_STOP); -#ifdef MYTEST - onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); -#else - ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); -#endif - sysPara->status.viscosityFaultCnt=0; - setCurrentIndex(0); - sysPara->status.updateSoftEN=0; - sysPara->status.adjHightVolInitEN=0; - sysPara->status.FileChangeRestCntFlag=0; - sysPara->status.HVFaultCloseEn=0; - sysPara->devOp->printCtrl( PRINT_CTRL_STOP); - sysPara->devOp->writeFpgaCalandar(1); - //qDebug()<para.calandar_and_dat.year; - sysPara->status.cnt1GroupRunningIndex=0; - //sysPara->status.cnt1RepeatCurrent=0; - sysPara->status.cnt1GroupCurrentLoop=0; - - //JSON data - connect(ui->tabNetworkManager, SIGNAL(updateJSONData()), ui->tabMainWindow, SLOT(JSON_UpdateDATA()), Qt::QueuedConnection); - connect(ui->tabNetworkManager,SIGNAL(net_stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); - connect(ui->tabMainWindow,SIGNAL(getJSONData()),ui->tabNetworkManager,SLOT(on_GetJsonpushButton_clicked()), Qt::QueuedConnection); - connect(ui->tabNetworkManager,SIGNAL(OpenNewFile()),ui->tabMainWindow->getTexteditOption(),SLOT(onOpenNewFile()), Qt::QueuedConnection); - //JSON data -#ifdef MODBUS - - modbus = NULL; - memset((uint8_t *)&sysPara->modbusParas, 0, sizeof(sysPara->modbusParas)); - sysPara->modbusStatus.receiveEnbleFlag = 1; - snprintf((char *)sysPara->modbusParas.selectFileName, sizeof(sysPara->modbusParas.selectFileName), "%s",QFileInfo(sysPara->para.lastOpenedFileName).fileName().toLatin1().constData()); - modbus = new ModbusTcp(&sysPara->modbusParas, &sysPara->modbusStatus); - m_thread = new QThread(); - modbus->moveToThread(m_thread); - connect(m_thread, SIGNAL(started()),modbus,SLOT(pvPollingThread())); - connect(modbus, SIGNAL(updateQRcode()), ui->tabMainWindow, SLOT(modbusUpdateQRCode()), Qt::QueuedConnection); - connect(modbus, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); - connect(modbus, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); - connect(modbus, SIGNAL(pausePrint()), ui->tabMainWindow, SLOT(on_pushButtonPausePrint_pressed()), Qt::QueuedConnection);//暂时屏蔽排除问题 - connect(modbus,SIGNAL(stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); - connect(modbus,SIGNAL(writeCalendar()),this,SLOT(onModbusWriteCalendar()), Qt::QueuedConnection); - connect(modbus,SIGNAL(writeCalendar1()),this,SLOT(onModbusWriteCalendar1CurrValue()), Qt::QueuedConnection); - connect(modbus,SIGNAL(writeCalendar1EndValue()),this,SLOT(onModbusWriteCalendar1EndValue()), Qt::QueuedConnection); - connect(modbus,SIGNAL(writeCalendar2EndValue()),this,SLOT(onModbusWriteCalendar2EndValue()), Qt::QueuedConnection); - connect(modbus,SIGNAL(writeCalendar2RepeatValue()),this,SLOT(onModbusWriteCalendar2RepeatValue()), Qt::QueuedConnection); - connect(modbus,SIGNAL(writeCalendar2InitValue()),this,SLOT(onModbusWriteCalendar2InitValue()), Qt::QueuedConnection); - connect(modbus,SIGNAL(CNTResetNow()),ui->tabMainWindow,SLOT(onModbusCNTResetNowPressed()), Qt::QueuedConnection); - connect(modbus,SIGNAL(faultResume()),ui->tabMainWindow,SLOT(onLabelFaultRusumePressed()), Qt::QueuedConnection); - connect(modbus,SIGNAL(mbLineAndCharSpace(int, int)),ui->tabMainWindow->getTexteditOption(),SLOT(onMbSetLineAndChar(int, int)), Qt::QueuedConnection); - connect(this,SIGNAL(updataPara2UI()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() ), Qt::QueuedConnection); - connect(this, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); - connect(this, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); -#endif - - ui->tabMainWindow->enableReclaimCtrlButton(false); - - - - - //edit@12-14 - connect(this,SIGNAL(currentChanged(int)),ui->tabMainWindow,SLOT(onInkJetPrinterCurrentChanged(int)), Qt::QueuedConnection); - //pidControllerInit(); - PID_init(); - - removeTab(indexOf(ui->tabDacAdjust)); - removeTab(indexOf(ui->tabFpgaDebug)); - ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tab_3)); - - ui->vol0SpinBox->setMinimum(0); - ui->vol1SpinBox->setMinimum(0); - ui->vol2SpinBox->setMinimum(0); - ui->vol3SpinBox->setMinimum(0); - ui->vol4SpinBox->setMinimum(0); - ui->vol5SpinBox->setMinimum(0); - ui->vol6SpinBox->setMinimum(0); - ui->vol7SpinBox->setMinimum(0); - ui->vol8SpinBox->setMinimum(0); - ui->vol9SpinBox->setMinimum(0); - ui->vol10SpinBox->setMinimum(0); - ui->vol11SpinBox->setMinimum(0); - ui->vol12SpinBox->setMinimum(0); - ui->vol13SpinBox->setMinimum(0); - ui->vol14SpinBox->setMinimum(0); - ui->vol15SpinBox->setMinimum(0); - ui->vol16SpinBox->setMinimum(0); - ui->vol17SpinBox->setMinimum(0); - ui->vol18SpinBox->setMinimum(0); - ui->vol19SpinBox->setMinimum(0); - ui->vol20SpinBox->setMinimum(0); - ui->vol21SpinBox->setMinimum(0); - ui->vol22SpinBox->setMinimum(0); - ui->vol23SpinBox->setMinimum(0); - ui->vol24SpinBox->setMinimum(0); - ui->vol25SpinBox->setMinimum(0); - ui->vol26SpinBox->setMinimum(0); - ui->vol27SpinBox->setMinimum(0); - ui->vol28SpinBox->setMinimum(0); - ui->vol29SpinBox->setMinimum(0); - ui->vol30SpinBox->setMinimum(0); - ui->vol31SpinBox->setMinimum(0); - ui->vol32SpinBox->setMinimum(0); - ui->vol33SpinBox->setMinimum(0); - ui->vol34SpinBox->setMinimum(0); - ui->vol35SpinBox->setMinimum(0); - ui->vol36SpinBox->setMinimum(0); - ui->vol37SpinBox->setMinimum(0); - ui->vol38SpinBox->setMinimum(0); - ui->vol39SpinBox->setMinimum(0); - - ui->vol0SpinBox->setMaximum(MAX_VOL); - ui->vol1SpinBox->setMaximum(MAX_VOL); - ui->vol2SpinBox->setMaximum(MAX_VOL); - ui->vol3SpinBox->setMaximum(MAX_VOL); - ui->vol4SpinBox->setMaximum(MAX_VOL); - ui->vol5SpinBox->setMaximum(MAX_VOL); - ui->vol6SpinBox->setMaximum(MAX_VOL); - ui->vol7SpinBox->setMaximum(MAX_VOL); - ui->vol8SpinBox->setMaximum(MAX_VOL); - ui->vol9SpinBox->setMaximum(MAX_VOL); - ui->vol10SpinBox->setMaximum(MAX_VOL); - ui->vol11SpinBox->setMaximum(MAX_VOL); - ui->vol12SpinBox->setMaximum(MAX_VOL); - ui->vol13SpinBox->setMaximum(MAX_VOL); - ui->vol14SpinBox->setMaximum(MAX_VOL); - ui->vol15SpinBox->setMaximum(MAX_VOL); - ui->vol16SpinBox->setMaximum(MAX_VOL); - ui->vol17SpinBox->setMaximum(MAX_VOL); - ui->vol18SpinBox->setMaximum(MAX_VOL); - ui->vol19SpinBox->setMaximum(MAX_VOL); - ui->vol20SpinBox->setMaximum(MAX_VOL); - ui->vol21SpinBox->setMaximum(MAX_VOL); - ui->vol22SpinBox->setMaximum(MAX_VOL); - ui->vol23SpinBox->setMaximum(MAX_VOL); - ui->vol24SpinBox->setMaximum(MAX_VOL); - ui->vol25SpinBox->setMaximum(MAX_VOL); - ui->vol26SpinBox->setMaximum(MAX_VOL); - ui->vol27SpinBox->setMaximum(MAX_VOL); - ui->vol28SpinBox->setMaximum(MAX_VOL); - ui->vol29SpinBox->setMaximum(MAX_VOL); - ui->vol30SpinBox->setMaximum(MAX_VOL); - ui->vol31SpinBox->setMaximum(MAX_VOL); - ui->vol32SpinBox->setMaximum(MAX_VOL); - ui->vol33SpinBox->setMaximum(MAX_VOL); - ui->vol34SpinBox->setMaximum(MAX_VOL); - ui->vol35SpinBox->setMaximum(MAX_VOL); - ui->vol36SpinBox->setMaximum(MAX_VOL); - ui->vol37SpinBox->setMaximum(MAX_VOL); - ui->vol38SpinBox->setMaximum(MAX_VOL); - ui->vol39SpinBox->setMaximum(MAX_VOL); - - ui->fvol0SpinBox->setMinimum(0); - ui->fvol1SpinBox->setMinimum(0); - ui->fvol2SpinBox->setMinimum(0); - ui->fvol3SpinBox->setMinimum(0); - ui->fvol4SpinBox->setMinimum(0); - ui->fvol5SpinBox->setMinimum(0); - ui->fvol6SpinBox->setMinimum(0); - ui->fvol7SpinBox->setMinimum(0); - ui->fvol8SpinBox->setMinimum(0); - ui->fvol9SpinBox->setMinimum(0); - ui->fvol10SpinBox->setMinimum(0); - ui->fvol11SpinBox->setMinimum(0); - ui->fvol12SpinBox->setMinimum(0); - ui->fvol13SpinBox->setMinimum(0); - ui->fvol14SpinBox->setMinimum(0); - ui->fvol15SpinBox->setMinimum(0); - ui->fvol16SpinBox->setMinimum(0); - ui->fvol17SpinBox->setMinimum(0); - ui->fvol18SpinBox->setMinimum(0); - ui->fvol19SpinBox->setMinimum(0); - ui->fvol20SpinBox->setMinimum(0); - ui->fvol21SpinBox->setMinimum(0); - ui->fvol22SpinBox->setMinimum(0); - ui->fvol23SpinBox->setMinimum(0); - ui->fvol24SpinBox->setMinimum(0); - ui->fvol25SpinBox->setMinimum(0); - ui->fvol26SpinBox->setMinimum(0); - ui->fvol27SpinBox->setMinimum(0); - ui->fvol28SpinBox->setMinimum(0); - ui->fvol29SpinBox->setMinimum(0); - ui->fvol30SpinBox->setMinimum(0); - ui->fvol31SpinBox->setMinimum(0); - ui->fvol32SpinBox->setMinimum(0); - ui->fvol33SpinBox->setMinimum(0); - ui->fvol34SpinBox->setMinimum(0); - ui->fvol35SpinBox->setMinimum(0); - ui->fvol36SpinBox->setMinimum(0); - ui->fvol37SpinBox->setMinimum(0); - ui->fvol38SpinBox->setMinimum(0); - ui->fvol39SpinBox->setMinimum(0); - - ui->fvol0SpinBox->setMaximum(MAX_VOL); - ui->fvol1SpinBox->setMaximum(MAX_VOL); - ui->fvol2SpinBox->setMaximum(MAX_VOL); - ui->fvol3SpinBox->setMaximum(MAX_VOL); - ui->fvol4SpinBox->setMaximum(MAX_VOL); - ui->fvol5SpinBox->setMaximum(MAX_VOL); - ui->fvol6SpinBox->setMaximum(MAX_VOL); - ui->fvol7SpinBox->setMaximum(MAX_VOL); - ui->fvol8SpinBox->setMaximum(MAX_VOL); - ui->fvol9SpinBox->setMaximum(MAX_VOL); - ui->fvol10SpinBox->setMaximum(MAX_VOL); - ui->fvol11SpinBox->setMaximum(MAX_VOL); - ui->fvol12SpinBox->setMaximum(MAX_VOL); - ui->fvol13SpinBox->setMaximum(MAX_VOL); - ui->fvol14SpinBox->setMaximum(MAX_VOL); - ui->fvol15SpinBox->setMaximum(MAX_VOL); - ui->fvol16SpinBox->setMaximum(MAX_VOL); - ui->fvol17SpinBox->setMaximum(MAX_VOL); - ui->fvol18SpinBox->setMaximum(MAX_VOL); - ui->fvol19SpinBox->setMaximum(MAX_VOL); - ui->fvol20SpinBox->setMaximum(MAX_VOL); - ui->fvol21SpinBox->setMaximum(MAX_VOL); - ui->fvol22SpinBox->setMaximum(MAX_VOL); - ui->fvol23SpinBox->setMaximum(MAX_VOL); - ui->fvol24SpinBox->setMaximum(MAX_VOL); - ui->fvol25SpinBox->setMaximum(MAX_VOL); - ui->fvol26SpinBox->setMaximum(MAX_VOL); - ui->fvol27SpinBox->setMaximum(MAX_VOL); - ui->fvol28SpinBox->setMaximum(MAX_VOL); - ui->fvol29SpinBox->setMaximum(MAX_VOL); - ui->fvol30SpinBox->setMaximum(MAX_VOL); - ui->fvol31SpinBox->setMaximum(MAX_VOL); - ui->fvol32SpinBox->setMaximum(MAX_VOL); - ui->fvol33SpinBox->setMaximum(MAX_VOL); - ui->fvol34SpinBox->setMaximum(MAX_VOL); - ui->fvol35SpinBox->setMaximum(MAX_VOL); - ui->fvol36SpinBox->setMaximum(MAX_VOL); - ui->fvol37SpinBox->setMaximum(MAX_VOL); - ui->fvol38SpinBox->setMaximum(MAX_VOL); - ui->fvol39SpinBox->setMaximum(MAX_VOL); - - ui->cVol0SpinBox->setMinimum(0); - ui->cVol1SpinBox->setMinimum(0); - ui->cVol2SpinBox->setMinimum(0); - ui->cVol3SpinBox->setMinimum(0); - ui->cVol4SpinBox->setMinimum(0); - ui->cVol5SpinBox->setMinimum(0); - ui->cVol6SpinBox->setMinimum(0); - ui->cVol7SpinBox->setMinimum(0); - ui->cVol8SpinBox->setMinimum(0); - ui->cVol9SpinBox->setMinimum(0); - ui->cVol10SpinBox->setMinimum(0); - ui->cVol11SpinBox->setMinimum(0); - ui->cVol12SpinBox->setMinimum(0); - ui->cVol13SpinBox->setMinimum(0); - ui->cVol14SpinBox->setMinimum(0); - ui->cVol15SpinBox->setMinimum(0); - ui->cVol16SpinBox->setMinimum(0); - ui->cVol17SpinBox->setMinimum(0); - ui->cVol18SpinBox->setMinimum(0); - ui->cVol19SpinBox->setMinimum(0); - ui->cVol20SpinBox->setMinimum(0); - ui->cVol21SpinBox->setMinimum(0); - ui->cVol22SpinBox->setMinimum(0); - ui->cVol23SpinBox->setMinimum(0); - ui->cVol24SpinBox->setMinimum(0); - ui->cVol25SpinBox->setMinimum(0); - ui->cVol26SpinBox->setMinimum(0); - ui->cVol27SpinBox->setMinimum(0); - ui->cVol28SpinBox->setMinimum(0); - ui->cVol29SpinBox->setMinimum(0); - ui->cVol30SpinBox->setMinimum(0); - ui->cVol31SpinBox->setMinimum(0); - ui->cVol32SpinBox->setMinimum(0); - ui->cVol33SpinBox->setMinimum(0); - ui->cVol34SpinBox->setMinimum(0); - ui->cVol35SpinBox->setMinimum(0); - ui->cVol36SpinBox->setMinimum(0); - ui->cVol37SpinBox->setMinimum(0); - ui->cVol38SpinBox->setMinimum(0); - ui->cVol39SpinBox->setMinimum(0); - - ui->cVol0SpinBox->setMaximum(MAX_VOL); - ui->cVol1SpinBox->setMaximum(MAX_VOL); - ui->cVol2SpinBox->setMaximum(MAX_VOL); - ui->cVol3SpinBox->setMaximum(MAX_VOL); - ui->cVol4SpinBox->setMaximum(MAX_VOL); - ui->cVol5SpinBox->setMaximum(MAX_VOL); - ui->cVol6SpinBox->setMaximum(MAX_VOL); - ui->cVol7SpinBox->setMaximum(MAX_VOL); - ui->cVol8SpinBox->setMaximum(MAX_VOL); - ui->cVol9SpinBox->setMaximum(MAX_VOL); - ui->cVol10SpinBox->setMaximum(MAX_VOL); - ui->cVol11SpinBox->setMaximum(MAX_VOL); - ui->cVol12SpinBox->setMaximum(MAX_VOL); - ui->cVol13SpinBox->setMaximum(MAX_VOL); - ui->cVol14SpinBox->setMaximum(MAX_VOL); - ui->cVol15SpinBox->setMaximum(MAX_VOL); - ui->cVol16SpinBox->setMaximum(MAX_VOL); - ui->cVol17SpinBox->setMaximum(MAX_VOL); - ui->cVol18SpinBox->setMaximum(MAX_VOL); - ui->cVol19SpinBox->setMaximum(MAX_VOL); - ui->cVol20SpinBox->setMaximum(MAX_VOL); - ui->cVol21SpinBox->setMaximum(MAX_VOL); - ui->cVol22SpinBox->setMaximum(MAX_VOL); - ui->cVol23SpinBox->setMaximum(MAX_VOL); - ui->cVol24SpinBox->setMaximum(MAX_VOL); - ui->cVol25SpinBox->setMaximum(MAX_VOL); - ui->cVol26SpinBox->setMaximum(MAX_VOL); - ui->cVol27SpinBox->setMaximum(MAX_VOL); - ui->cVol28SpinBox->setMaximum(MAX_VOL); - ui->cVol29SpinBox->setMaximum(MAX_VOL); - ui->cVol30SpinBox->setMaximum(MAX_VOL); - ui->cVol31SpinBox->setMaximum(MAX_VOL); - ui->cVol32SpinBox->setMaximum(MAX_VOL); - ui->cVol33SpinBox->setMaximum(MAX_VOL); - ui->cVol34SpinBox->setMaximum(MAX_VOL); - ui->cVol35SpinBox->setMaximum(MAX_VOL); - ui->cVol36SpinBox->setMaximum(MAX_VOL); - ui->cVol37SpinBox->setMaximum(MAX_VOL); - ui->cVol38SpinBox->setMaximum(MAX_VOL); - ui->cVol39SpinBox->setMaximum(MAX_VOL); - - loadVoltageValue(); - connect(ui->savePushButton,SIGNAL(clicked()), this,SLOT( DacAdjustStore())); - sysPara->status.statWarn = sysPara->status.statWarn | WARN_STATUS_INK_WARN; //先置墨水标示为1 - sleep(3); - qApp->installEventFilter(this); -} - - -void InkJetPrinter::loadVoltageValue() -{ - ui->vol0SpinBox->setValue(sysPara->para.printed_adj_dac[0]); - ui->vol1SpinBox->setValue(sysPara->para.printed_adj_dac[1]); - ui->vol2SpinBox->setValue(sysPara->para.printed_adj_dac[2]); - ui->vol3SpinBox->setValue(sysPara->para.printed_adj_dac[3]); - ui->vol4SpinBox->setValue(sysPara->para.printed_adj_dac[4]); - ui->vol5SpinBox->setValue(sysPara->para.printed_adj_dac[5]); - ui->vol6SpinBox->setValue(sysPara->para.printed_adj_dac[6]); - ui->vol7SpinBox->setValue(sysPara->para.printed_adj_dac[7]); - ui->vol8SpinBox->setValue(sysPara->para.printed_adj_dac[8]); - ui->vol9SpinBox->setValue(sysPara->para.printed_adj_dac[9]); - - ui->vol10SpinBox->setValue(sysPara->para.printed_adj_dac[10]); - ui->vol11SpinBox->setValue(sysPara->para.printed_adj_dac[11]); - ui->vol12SpinBox->setValue(sysPara->para.printed_adj_dac[12]); - ui->vol13SpinBox->setValue(sysPara->para.printed_adj_dac[13]); - ui->vol14SpinBox->setValue(sysPara->para.printed_adj_dac[14]); - ui->vol15SpinBox->setValue(sysPara->para.printed_adj_dac[15]); - ui->vol16SpinBox->setValue(sysPara->para.printed_adj_dac[16]); - ui->vol17SpinBox->setValue(sysPara->para.printed_adj_dac[17]); - ui->vol18SpinBox->setValue(sysPara->para.printed_adj_dac[18]); - ui->vol19SpinBox->setValue(sysPara->para.printed_adj_dac[19]); - - ui->vol20SpinBox->setValue(sysPara->para.printed_adj_dac[20]); - ui->vol21SpinBox->setValue(sysPara->para.printed_adj_dac[21]); - ui->vol22SpinBox->setValue(sysPara->para.printed_adj_dac[22]); - ui->vol23SpinBox->setValue(sysPara->para.printed_adj_dac[23]); - ui->vol24SpinBox->setValue(sysPara->para.printed_adj_dac[24]); - ui->vol25SpinBox->setValue(sysPara->para.printed_adj_dac[25]); - ui->vol26SpinBox->setValue(sysPara->para.printed_adj_dac[26]); - ui->vol27SpinBox->setValue(sysPara->para.printed_adj_dac[27]); - ui->vol28SpinBox->setValue(sysPara->para.printed_adj_dac[28]); - ui->vol29SpinBox->setValue(sysPara->para.printed_adj_dac[29]); - - ui->vol30SpinBox->setValue(sysPara->para.printed_adj_dac[30]); - ui->vol31SpinBox->setValue(sysPara->para.printed_adj_dac[31]); - ui->vol32SpinBox->setValue(sysPara->para.printed_adj_dac[32]); - ui->vol33SpinBox->setValue(sysPara->para.printed_adj_dac[33]); - ui->vol34SpinBox->setValue(sysPara->para.printed_adj_dac[34]); - ui->vol35SpinBox->setValue(sysPara->para.printed_adj_dac[35]); - ui->vol36SpinBox->setValue(sysPara->para.printed_adj_dac[36]); - ui->vol37SpinBox->setValue(sysPara->para.printed_adj_dac[37]); - ui->vol38SpinBox->setValue(sysPara->para.printed_adj_dac[38]); - ui->vol39SpinBox->setValue(sysPara->para.printed_adj_dac[39]); - - ui->cVol0SpinBox->setValue(sysPara->para.printed_continue_col_dac[0]); - ui->cVol1SpinBox->setValue(sysPara->para.printed_continue_col_dac[1]); - ui->cVol2SpinBox->setValue(sysPara->para.printed_continue_col_dac[2]); - ui->cVol3SpinBox->setValue(sysPara->para.printed_continue_col_dac[3]); - ui->cVol4SpinBox->setValue(sysPara->para.printed_continue_col_dac[4]); - ui->cVol5SpinBox->setValue(sysPara->para.printed_continue_col_dac[5]); - ui->cVol6SpinBox->setValue(sysPara->para.printed_continue_col_dac[6]); - ui->cVol7SpinBox->setValue(sysPara->para.printed_continue_col_dac[7]); - ui->cVol8SpinBox->setValue(sysPara->para.printed_continue_col_dac[8]); - ui->cVol9SpinBox->setValue(sysPara->para.printed_continue_col_dac[9]); - - ui->cVol10SpinBox->setValue(sysPara->para.printed_continue_col_dac[10]); - ui->cVol11SpinBox->setValue(sysPara->para.printed_continue_col_dac[11]); - ui->cVol12SpinBox->setValue(sysPara->para.printed_continue_col_dac[12]); - ui->cVol13SpinBox->setValue(sysPara->para.printed_continue_col_dac[13]); - ui->cVol14SpinBox->setValue(sysPara->para.printed_continue_col_dac[14]); - ui->cVol15SpinBox->setValue(sysPara->para.printed_continue_col_dac[15]); - ui->cVol16SpinBox->setValue(sysPara->para.printed_continue_col_dac[16]); - ui->cVol17SpinBox->setValue(sysPara->para.printed_continue_col_dac[17]); - ui->cVol18SpinBox->setValue(sysPara->para.printed_continue_col_dac[18]); - ui->cVol19SpinBox->setValue(sysPara->para.printed_continue_col_dac[19]); - - ui->cVol20SpinBox->setValue(sysPara->para.printed_continue_col_dac[20]); - ui->cVol21SpinBox->setValue(sysPara->para.printed_continue_col_dac[21]); - ui->cVol22SpinBox->setValue(sysPara->para.printed_continue_col_dac[22]); - ui->cVol23SpinBox->setValue(sysPara->para.printed_continue_col_dac[23]); - ui->cVol24SpinBox->setValue(sysPara->para.printed_continue_col_dac[24]); - ui->cVol25SpinBox->setValue(sysPara->para.printed_continue_col_dac[25]); - ui->cVol26SpinBox->setValue(sysPara->para.printed_continue_col_dac[26]); - ui->cVol27SpinBox->setValue(sysPara->para.printed_continue_col_dac[27]); - ui->cVol28SpinBox->setValue(sysPara->para.printed_continue_col_dac[28]); - ui->cVol29SpinBox->setValue(sysPara->para.printed_continue_col_dac[29]); - - ui->cVol30SpinBox->setValue(sysPara->para.printed_continue_col_dac[30]); - ui->cVol31SpinBox->setValue(sysPara->para.printed_continue_col_dac[31]); - ui->cVol32SpinBox->setValue(sysPara->para.printed_continue_col_dac[32]); - ui->cVol33SpinBox->setValue(sysPara->para.printed_continue_col_dac[33]); - ui->cVol34SpinBox->setValue(sysPara->para.printed_continue_col_dac[34]); - ui->cVol35SpinBox->setValue(sysPara->para.printed_continue_col_dac[35]); - ui->cVol36SpinBox->setValue(sysPara->para.printed_continue_col_dac[36]); - ui->cVol37SpinBox->setValue(sysPara->para.printed_continue_col_dac[37]); - ui->cVol38SpinBox->setValue(sysPara->para.printed_continue_col_dac[38]); - ui->cVol39SpinBox->setValue(sysPara->para.printed_continue_col_dac[39]); - - ui->fvol0SpinBox->setValue(sysPara->para.printed_full_col_dac[0]); - ui->fvol1SpinBox->setValue(sysPara->para.printed_full_col_dac[1]); - ui->fvol2SpinBox->setValue(sysPara->para.printed_full_col_dac[2]); - ui->fvol3SpinBox->setValue(sysPara->para.printed_full_col_dac[3]); - ui->fvol4SpinBox->setValue(sysPara->para.printed_full_col_dac[4]); - ui->fvol5SpinBox->setValue(sysPara->para.printed_full_col_dac[5]); - ui->fvol6SpinBox->setValue(sysPara->para.printed_full_col_dac[6]); - ui->fvol7SpinBox->setValue(sysPara->para.printed_full_col_dac[7]); - ui->fvol8SpinBox->setValue(sysPara->para.printed_full_col_dac[8]); - ui->fvol9SpinBox->setValue(sysPara->para.printed_full_col_dac[9]); - - ui->fvol10SpinBox->setValue(sysPara->para.printed_full_col_dac[10]); - ui->fvol11SpinBox->setValue(sysPara->para.printed_full_col_dac[11]); - ui->fvol12SpinBox->setValue(sysPara->para.printed_full_col_dac[12]); - ui->fvol13SpinBox->setValue(sysPara->para.printed_full_col_dac[13]); - ui->fvol14SpinBox->setValue(sysPara->para.printed_full_col_dac[14]); - ui->fvol15SpinBox->setValue(sysPara->para.printed_full_col_dac[15]); - ui->fvol16SpinBox->setValue(sysPara->para.printed_full_col_dac[16]); - ui->fvol17SpinBox->setValue(sysPara->para.printed_full_col_dac[17]); - ui->fvol18SpinBox->setValue(sysPara->para.printed_full_col_dac[18]); - ui->fvol19SpinBox->setValue(sysPara->para.printed_full_col_dac[19]); - - ui->fvol20SpinBox->setValue(sysPara->para.printed_full_col_dac[20]); - ui->fvol21SpinBox->setValue(sysPara->para.printed_full_col_dac[21]); - ui->fvol22SpinBox->setValue(sysPara->para.printed_full_col_dac[22]); - ui->fvol23SpinBox->setValue(sysPara->para.printed_full_col_dac[23]); - ui->fvol24SpinBox->setValue(sysPara->para.printed_full_col_dac[24]); - ui->fvol25SpinBox->setValue(sysPara->para.printed_full_col_dac[25]); - ui->fvol26SpinBox->setValue(sysPara->para.printed_full_col_dac[26]); - ui->fvol27SpinBox->setValue(sysPara->para.printed_full_col_dac[27]); - ui->fvol28SpinBox->setValue(sysPara->para.printed_full_col_dac[28]); - ui->fvol29SpinBox->setValue(sysPara->para.printed_full_col_dac[29]); - - ui->fvol30SpinBox->setValue(sysPara->para.printed_full_col_dac[30]); - ui->fvol31SpinBox->setValue(sysPara->para.printed_full_col_dac[31]); - ui->fvol32SpinBox->setValue(sysPara->para.printed_full_col_dac[32]); - ui->fvol33SpinBox->setValue(sysPara->para.printed_full_col_dac[33]); - ui->fvol34SpinBox->setValue(sysPara->para.printed_full_col_dac[34]); - ui->fvol35SpinBox->setValue(sysPara->para.printed_full_col_dac[35]); - ui->fvol36SpinBox->setValue(sysPara->para.printed_full_col_dac[36]); - ui->fvol37SpinBox->setValue(sysPara->para.printed_full_col_dac[37]); - ui->fvol38SpinBox->setValue(sysPara->para.printed_full_col_dac[38]); - ui->fvol39SpinBox->setValue(sysPara->para.printed_full_col_dac[39]); - if(sysPara->para.dacScale < 40 || sysPara->para.dacScale>150) - sysPara->para.dacScale = 100; -} - -void InkJetPrinter::initCntGroup() -{ - connect(this, &InkJetPrinter::sig_updateDisp, - SectionalManager::instance(), &SectionalManager::sig_updateCntGroupDisp); -} - -float PID_realize(float speed); - -struct _pid{ - float SetSpeed;//定义设定值 - float ActualSpeed;//定义实际值 - float err;//定义偏差值 - float err_last;//定义上一个偏差值 - float Kp,Ki,Kd;//定义比例、积分、微分系数 - float voltage;//定义电压值(控制执行器的变量) - float integral;//定义积分值 - float integral_max; //积分限幅(根据实际调整) -}pid; - - -void PID_init(){ - pid.SetSpeed=0.0; - pid.ActualSpeed=0.0; - pid.err=0.0; - pid.err_last=0.0; - pid.voltage=0.0; - pid.integral=0.0; - pid.Kp=0.21; //0.25 - pid.Ki=0.006; //0.015 - pid.Kd=0.0; -} - -static float u = 1.0; -float PID_realize(float speed, float act){ - unsigned char index = 1; - pid.SetSpeed=speed; - pid.ActualSpeed = act; - pid.err=pid.SetSpeed-pid.ActualSpeed; - if(u < 900) - { - pid.integral+=pid.err; - } - - pid.voltage=pid.Kp*pid.err + index*pid.Ki*pid.integral + pid.Kd*(pid.err-pid.err_last); - pid.err_last=pid.err; - pid.ActualSpeed =pid.voltage*1.0; - return pid.ActualSpeed; -} - -float PID_realize2(float speed, float act){ - // 增量式 PID:Δu = Kp*(e[k]-e[k-1]) + Ki*e[k] - pid.Kp = 0.15f; - pid.Ki = 0.02f; - pid.Kd = 0.0f; - pid.SetSpeed = speed; - pid.ActualSpeed = act; - pid.err = pid.SetSpeed - pid.ActualSpeed; - - float delta_u = pid.Kp * (pid.err - pid.err_last) - + pid.Ki * pid.err; - - // 自适应非对称限幅: - // 压力严重偏高(err < -30):允许快速减速,限制慢速加速 - // 压力严重偏低(err > 50):允许正常加速,限制减速(避免过度降速) - // 接近目标:小步长,平稳调节 - if(pid.err < -30.0f) { - if(delta_u > 1.0f) delta_u = 1.0f; - if(delta_u < -6.0f) delta_u = -6.0f; - } else if(pid.err > 50.0f) { - if(delta_u > 3.0f) delta_u = 3.0f; - if(delta_u < -2.0f) delta_u = -2.0f; - } else { - if(delta_u > 3.0f) delta_u = 3.0f; - if(delta_u < -3.0f) delta_u = -3.0f; - } - - pid.err_last = pid.err; - return delta_u; -} - -void InkJetPrinter::pressureAdj() -{ - // 故障停机处理 - if(sysPara->status.gearPumpRunStopFlag || sysPara->status.flagOfSpeedAlarm) - { - sysPara->para.gearPumpValue = 0; - u = 0.0f; - m_pumpState = DPUMP_STOPPED; - m_stateChangeCount = 0; - m_adjSkip = 0; - m_lastActualPressure = 0; - m_bufValidCount = 0; - for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; - m_bufIdx = 0; - sysPara->devOp->WriteMoterPump(); - return; - } - - // 泵未使能时的PID控制(保持原有逻辑) - if(!sysPara->para.gearPumpEnable) - { - if(u > 0 || ((sysPara->para.pressure - sysPara->status.PRESSURE) > 0)) - u = PID_realize((float)sysPara->para.pressure, (float)sysPara->status.PRESSURE); - sysPara->para.gearPumpValue = (u > 0) ? (unsigned short)u : 0; - if(sysPara->para.gearPumpValue > 800) - sysPara->para.gearPumpValue = 800; - sysPara->devOp->WriteMoterPump(); - return; - } - - // 隔膜泵控制参数 - const int STOP_TO_START_THRESHOLD = 5; // 停止→启动:压力低于目标15(扩大滞环) - const int RUN_TO_STOP_THRESHOLD = 5; // 运行→停止:压力高于目标10(扩大滞环) - const int MIN_STATE_INTERVAL = 8; // 最小状态切换间隔:8个100ms = 800ms - - int actual = sysPara->status.PRESSURE; - int target = (int)sysPara->para.pressure; - int err = target - actual; // 正值=压力偏低,负值=压力偏高 - - // 更新滑动平均缓冲 - m_pressureBuf[m_bufIdx] = actual; - m_bufIdx = (m_bufIdx + 1) % 10; - int avgPressure = 0; - for(int i = 0; i < 10; i++) avgPressure += m_pressureBuf[i]; - avgPressure /= 10; - - // 状态切换计数器递增 - m_stateChangeCount++; - - // 检查是否允许状态切换(距上次切换>=800ms) - bool canSwitch = (m_stateChangeCount >= MIN_STATE_INTERVAL); - - // 硬保护:压力严重超标,立即强制停泵(不受800ms限制) - if(actual > target + 80) - { - if(m_pumpState != DPUMP_STOPPED) { - u = 0.0f; - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - m_pumpState = DPUMP_STOPPED; - m_stateChangeCount = 0; - m_adjSkip = 0; - } - return; - } - - // 状态机处理 - switch(m_pumpState) { - case DPUMP_STOPPED: - handleStoppedState(err, canSwitch); - break; - - case DPUMP_STARTING: - handleStartingState(err, actual, target); - break; - - case DPUMP_RUNNING: - handleRunningState(err, canSwitch); - break; - } -} - -// 停止状态处理:压力低于目标较多时启动泵 -void InkJetPrinter::handleStoppedState(int err, bool canSwitch) -{ - const int STOP_TO_START_THRESHOLD = 5; // 压力低于目标15启动(扩大滞环) - const float START_INIT_SPEED = 80.0f; // 启动初始转速 - - // 压力低于目标较多,且允许切换(距上次停止>=800ms),启动泵 - if(err > STOP_TO_START_THRESHOLD && canSwitch) { - u = START_INIT_SPEED; - m_startingStepCount = 0; - m_adjSkip = 0; - sysPara->para.gearPumpValue = (unsigned short)(int)u; - sysPara->devOp->WriteMoterPump(); - m_pumpState = DPUMP_STARTING; - m_stateChangeCount = 0; // 重置计数器 - } -} - -// 启动爬升状态处理:从低转速逐步提升到工作转速 -void InkJetPrinter::handleStartingState(int err, int actual, int target) - { - const int STARTING_TO_RUNNING_RANGE = 30; // 进入目标±50范围转到运行状态 - const float MAX_WORKING_SPEED = 350.0f; // 最大工作转速 - const float START_SPEED_STEP_LARGE = 40.0f; - const float START_SPEED_STEP_MED = 30.0f; - const float START_SPEED_STEP_SMALL = 20.0f; - - m_adjSkip++; - - // 每800ms调整一次(8个100ms周期) - if(m_adjSkip < 8) { - sysPara->para.gearPumpValue = (unsigned short)(int)u; - sysPara->devOp->WriteMoterPump(); - return; - } - m_adjSkip = 0; - - // 判断是否进入运行状态 - int absErr = (err >= 0) ? err : -err; - bool nearTarget = (absErr <= STARTING_TO_RUNNING_RANGE); - bool reachedMaxSpeed = (u >= MAX_WORKING_SPEED - 10); - - if(nearTarget || reachedMaxSpeed) { - // 转到运行微调状态 - m_pumpState = DPUMP_RUNNING; - m_lastActualPressure = actual; - m_stateChangeCount = 0; // 重置计数器 - return; - } - - // 继续爬升:根据误差自适应增速 - float step; - if(err > 100) step = START_SPEED_STEP_LARGE; - else if(err > 50) step = START_SPEED_STEP_MED; - else step = START_SPEED_STEP_SMALL; - - u += step; - if(u > MAX_WORKING_SPEED) u = MAX_WORKING_SPEED; - - sysPara->para.gearPumpValue = (unsigned short)(int)u; - sysPara->devOp->WriteMoterPump(); - m_startingStepCount++; -} - -// 运行微调状态处理:使用增量式控制算法 -void InkJetPrinter::handleRunningState(int err, bool canSwitch) - { - const int RUN_TO_STOP_THRESHOLD = 5; // 压力高于目标10准备停泵(扩大滞环) - const int EMERGENCY_STOP_THRESHOLD = 10; // 压力高于目标20立即停泵(不受800ms限制) - - // 紧急停泵:压力严重超标,立即停泵(不受800ms限制) - if(err < -EMERGENCY_STOP_THRESHOLD) { - u = 0.0f; - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - m_pumpState = DPUMP_STOPPED; - m_stateChangeCount = 0; - m_adjSkip = 0; - return; - } - - // 常规停泵:压力略高于目标,等待800ms后停泵 - if(err < -RUN_TO_STOP_THRESHOLD && canSwitch) { - u = 0.0f; - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - m_pumpState = DPUMP_STOPPED; - m_stateChangeCount = 0; - m_adjSkip = 0; - return; - } - - // === 增量式微调控制(每200ms调整一次)=== - m_adjSkip++; - if(m_adjSkip < 2) { - sysPara->para.gearPumpValue = (unsigned short)(int)u; - sysPara->devOp->WriteMoterPump(); - return; - } - m_adjSkip = 0; - - int actual = sysPara->status.PRESSURE; - float error = (float)err; - float absErr = (error >= 0) ? error : -error; - - // 死区:误差≤0.5不调整 - if(absErr < 0.5f) { - m_lastActualPressure = actual; - sysPara->para.gearPumpValue = (unsigned short)(int)u; - sysPara->devOp->WriteMoterPump(); - return; - } - - // 计算压力变化率(微分项) - int pressureChange = actual - m_lastActualPressure; - m_lastActualPressure = actual; - - // 增量式控制公式 - float delta_u; - - // 近目标刹车策略:误差≤5且正在接近目标,只刹车不加速 - if(absErr <= 5.0f && - ((error > 0.0f && pressureChange > 0) || // 压力低且在上升 - (error < 0.0f && pressureChange < 0))) // 压力高且在下降 - { - delta_u = -0.20f * (float)pressureChange; // 只刹车 - } - else { - // 标准增量式控制:比例项 + 微分项 - delta_u = 0.05f * error - 0.20f * (float)pressureChange; - } - - // 分级限幅(根据误差大小限制调节幅度) - float maxDelta; - if(absErr > 30.0f) maxDelta = 1.0f; - else if(absErr > 10.0f) maxDelta = 0.6f; - else maxDelta = 0.3f; - - if(delta_u > maxDelta) delta_u = maxDelta; - if(delta_u < -maxDelta) delta_u = -maxDelta; - - // 更新控制量 - u += delta_u; - - // 限制范围 - const float MIN_RUNNING_SPEED = 30.0f; // 最低运行转速(低于此值泵不转) - const float MAX_WORKING_SPEED = 350.0f; - - if(u < MIN_RUNNING_SPEED) u = MIN_RUNNING_SPEED; - if(u > MAX_WORKING_SPEED) u = MAX_WORKING_SPEED; - - sysPara->para.gearPumpValue = (unsigned short)(int)u; - sysPara->devOp->WriteMoterPump(); -} - - - -void InkJetPrinter::DacAdjustStore() -{ - sysPara->para.printed_adj_dac[0] = ui->vol0SpinBox->value(); - sysPara->para.printed_adj_dac[1] = ui->vol1SpinBox->value(); - sysPara->para.printed_adj_dac[2] = ui->vol2SpinBox->value(); - sysPara->para.printed_adj_dac[3] = ui->vol3SpinBox->value(); - sysPara->para.printed_adj_dac[4] = ui->vol4SpinBox->value(); - sysPara->para.printed_adj_dac[5] = ui->vol5SpinBox->value(); - sysPara->para.printed_adj_dac[6] = ui->vol6SpinBox->value(); - sysPara->para.printed_adj_dac[7] = ui->vol7SpinBox->value(); - sysPara->para.printed_adj_dac[8] = ui->vol8SpinBox->value(); - sysPara->para.printed_adj_dac[9] = ui->vol9SpinBox->value(); - sysPara->para.printed_adj_dac[10] = ui->vol10SpinBox->value(); - sysPara->para.printed_adj_dac[11] = ui->vol11SpinBox->value(); - sysPara->para.printed_adj_dac[12] = ui->vol12SpinBox->value(); - sysPara->para.printed_adj_dac[13] = ui->vol13SpinBox->value(); - sysPara->para.printed_adj_dac[14] = ui->vol14SpinBox->value(); - sysPara->para.printed_adj_dac[15] = ui->vol15SpinBox->value(); - sysPara->para.printed_adj_dac[16] = ui->vol16SpinBox->value(); - sysPara->para.printed_adj_dac[17] = ui->vol17SpinBox->value(); - sysPara->para.printed_adj_dac[18] = ui->vol18SpinBox->value(); - sysPara->para.printed_adj_dac[19] = ui->vol19SpinBox->value(); - - sysPara->para.printed_adj_dac[20] = ui->vol20SpinBox->value(); - sysPara->para.printed_adj_dac[21] = ui->vol21SpinBox->value(); - sysPara->para.printed_adj_dac[22] = ui->vol22SpinBox->value(); - sysPara->para.printed_adj_dac[23] = ui->vol23SpinBox->value(); - sysPara->para.printed_adj_dac[24] = ui->vol24SpinBox->value(); - sysPara->para.printed_adj_dac[25] = ui->vol25SpinBox->value(); - sysPara->para.printed_adj_dac[26] = ui->vol26SpinBox->value(); - sysPara->para.printed_adj_dac[27] = ui->vol27SpinBox->value(); - sysPara->para.printed_adj_dac[28] = ui->vol28SpinBox->value(); - sysPara->para.printed_adj_dac[29] = ui->vol29SpinBox->value(); - - sysPara->para.printed_adj_dac[30] = ui->vol30SpinBox->value(); - sysPara->para.printed_adj_dac[31] = ui->vol31SpinBox->value(); - sysPara->para.printed_adj_dac[32] = ui->vol32SpinBox->value(); - sysPara->para.printed_adj_dac[33] = ui->vol33SpinBox->value(); - sysPara->para.printed_adj_dac[34] = ui->vol34SpinBox->value(); - sysPara->para.printed_adj_dac[35] = ui->vol35SpinBox->value(); - sysPara->para.printed_adj_dac[36] = ui->vol36SpinBox->value(); - sysPara->para.printed_adj_dac[37] = ui->vol37SpinBox->value(); - sysPara->para.printed_adj_dac[38] = ui->vol38SpinBox->value(); - sysPara->para.printed_adj_dac[39] = ui->vol39SpinBox->value(); - - sysPara->para.printed_continue_col_dac[0] = ui->cVol0SpinBox->value(); - sysPara->para.printed_continue_col_dac[1] = ui->cVol1SpinBox->value(); - sysPara->para.printed_continue_col_dac[2] = ui->cVol2SpinBox->value(); - sysPara->para.printed_continue_col_dac[3] = ui->cVol3SpinBox->value(); - sysPara->para.printed_continue_col_dac[4] = ui->cVol4SpinBox->value(); - sysPara->para.printed_continue_col_dac[5] = ui->cVol5SpinBox->value(); - sysPara->para.printed_continue_col_dac[6] = ui->cVol6SpinBox->value(); - sysPara->para.printed_continue_col_dac[7] = ui->cVol7SpinBox->value(); - sysPara->para.printed_continue_col_dac[8] = ui->cVol8SpinBox->value(); - sysPara->para.printed_continue_col_dac[9] = ui->cVol9SpinBox->value(); - sysPara->para.printed_continue_col_dac[10] = ui->cVol10SpinBox->value(); - sysPara->para.printed_continue_col_dac[11] = ui->cVol11SpinBox->value(); - sysPara->para.printed_continue_col_dac[12] = ui->cVol12SpinBox->value(); - sysPara->para.printed_continue_col_dac[13] = ui->cVol13SpinBox->value(); - sysPara->para.printed_continue_col_dac[14] = ui->cVol14SpinBox->value(); - sysPara->para.printed_continue_col_dac[15] = ui->cVol15SpinBox->value(); - sysPara->para.printed_continue_col_dac[16] = ui->cVol16SpinBox->value(); - sysPara->para.printed_continue_col_dac[17] = ui->cVol17SpinBox->value(); - sysPara->para.printed_continue_col_dac[18] = ui->cVol18SpinBox->value(); - sysPara->para.printed_continue_col_dac[19] = ui->cVol19SpinBox->value(); - - sysPara->para.printed_continue_col_dac[20] = ui->cVol20SpinBox->value(); - sysPara->para.printed_continue_col_dac[21] = ui->cVol21SpinBox->value(); - sysPara->para.printed_continue_col_dac[22] = ui->cVol22SpinBox->value(); - sysPara->para.printed_continue_col_dac[23] = ui->cVol23SpinBox->value(); - sysPara->para.printed_continue_col_dac[24] = ui->cVol24SpinBox->value(); - sysPara->para.printed_continue_col_dac[25] = ui->cVol25SpinBox->value(); - sysPara->para.printed_continue_col_dac[26] = ui->cVol26SpinBox->value(); - sysPara->para.printed_continue_col_dac[27] = ui->cVol27SpinBox->value(); - sysPara->para.printed_continue_col_dac[28] = ui->cVol28SpinBox->value(); - sysPara->para.printed_continue_col_dac[29] = ui->cVol29SpinBox->value(); - - sysPara->para.printed_continue_col_dac[30] = ui->cVol30SpinBox->value(); - sysPara->para.printed_continue_col_dac[31] = ui->cVol31SpinBox->value(); - sysPara->para.printed_continue_col_dac[32] = ui->cVol32SpinBox->value(); - sysPara->para.printed_continue_col_dac[33] = ui->cVol33SpinBox->value(); - sysPara->para.printed_continue_col_dac[34] = ui->cVol34SpinBox->value(); - sysPara->para.printed_continue_col_dac[35] = ui->cVol35SpinBox->value(); - sysPara->para.printed_continue_col_dac[36] = ui->cVol36SpinBox->value(); - sysPara->para.printed_continue_col_dac[37] = ui->cVol37SpinBox->value(); - sysPara->para.printed_continue_col_dac[38] = ui->cVol38SpinBox->value(); - sysPara->para.printed_continue_col_dac[39] = ui->cVol39SpinBox->value(); - - sysPara->para.printed_full_col_dac[0] = ui->fvol0SpinBox->value(); - sysPara->para.printed_full_col_dac[1] = ui->fvol1SpinBox->value(); - sysPara->para.printed_full_col_dac[2] = ui->fvol2SpinBox->value(); - sysPara->para.printed_full_col_dac[3] = ui->fvol3SpinBox->value(); - sysPara->para.printed_full_col_dac[4] = ui->fvol4SpinBox->value(); - sysPara->para.printed_full_col_dac[5] = ui->fvol5SpinBox->value(); - sysPara->para.printed_full_col_dac[6] = ui->fvol6SpinBox->value(); - sysPara->para.printed_full_col_dac[7] = ui->fvol7SpinBox->value(); - sysPara->para.printed_full_col_dac[8] = ui->fvol8SpinBox->value(); - sysPara->para.printed_full_col_dac[9] = ui->fvol9SpinBox->value(); - sysPara->para.printed_full_col_dac[10] = ui->fvol10SpinBox->value(); - sysPara->para.printed_full_col_dac[11] = ui->fvol11SpinBox->value(); - sysPara->para.printed_full_col_dac[12] = ui->fvol12SpinBox->value(); - sysPara->para.printed_full_col_dac[13] = ui->fvol13SpinBox->value(); - sysPara->para.printed_full_col_dac[14] = ui->fvol14SpinBox->value(); - sysPara->para.printed_full_col_dac[15] = ui->fvol15SpinBox->value(); - sysPara->para.printed_full_col_dac[16] = ui->fvol16SpinBox->value(); - sysPara->para.printed_full_col_dac[17] = ui->fvol17SpinBox->value(); - sysPara->para.printed_full_col_dac[18] = ui->fvol18SpinBox->value(); - sysPara->para.printed_full_col_dac[19] = ui->fvol19SpinBox->value(); - - sysPara->para.printed_full_col_dac[20] = ui->fvol20SpinBox->value(); - sysPara->para.printed_full_col_dac[21] = ui->fvol21SpinBox->value(); - sysPara->para.printed_full_col_dac[22] = ui->fvol22SpinBox->value(); - sysPara->para.printed_full_col_dac[23] = ui->fvol23SpinBox->value(); - sysPara->para.printed_full_col_dac[24] = ui->fvol24SpinBox->value(); - sysPara->para.printed_full_col_dac[25] = ui->fvol25SpinBox->value(); - sysPara->para.printed_full_col_dac[26] = ui->fvol26SpinBox->value(); - sysPara->para.printed_full_col_dac[27] = ui->fvol27SpinBox->value(); - sysPara->para.printed_full_col_dac[28] = ui->fvol28SpinBox->value(); - sysPara->para.printed_full_col_dac[29] = ui->fvol29SpinBox->value(); - - sysPara->para.printed_full_col_dac[30] = ui->fvol30SpinBox->value(); - sysPara->para.printed_full_col_dac[31] = ui->fvol31SpinBox->value(); - sysPara->para.printed_full_col_dac[32] = ui->fvol32SpinBox->value(); - sysPara->para.printed_full_col_dac[33] = ui->fvol33SpinBox->value(); - sysPara->para.printed_full_col_dac[34] = ui->fvol34SpinBox->value(); - sysPara->para.printed_full_col_dac[35] = ui->fvol35SpinBox->value(); - sysPara->para.printed_full_col_dac[36] = ui->fvol36SpinBox->value(); - sysPara->para.printed_full_col_dac[37] = ui->fvol37SpinBox->value(); - sysPara->para.printed_full_col_dac[38] = ui->fvol38SpinBox->value(); - sysPara->para.printed_full_col_dac[39] = ui->fvol39SpinBox->value(); - sysPara->devOp->writeFpgaPrintPara(); -} - - -InkJetPrinter::~InkJetPrinter() -{ - if(m_serialThreadFPGA->isRunning()){ - m_serialThreadFPGA->quit(); - m_serialThreadFPGA->wait(); - } - if(m_serialThreadSTM32->isRunning()){ - m_serialThreadSTM32->quit(); - m_serialThreadSTM32->wait(); - } - if(m_thread->isRunning()){ - m_thread->quit(); - m_thread->wait(); - } - if(serialFPGA) - delete serialFPGA; - if(serialSTM32) - delete serialSTM32; - delete ui; - delete timer; -#ifdef MODBUS - if (modbus) { - delete modbus; - } -#endif - if (fileTransceiv) { - fileTransceiv->deleteLater(); - } - //edit@01-03 - if (tcpTransceiv) { - tcpTransceiv->deleteLater(); - } -} - -extern void MySleep(unsigned int msec); -extern unsigned char test_flag; -bool gearPumpRunNormalFlag = false; -unsigned char isPrintingFlag[1]={0}; -void InkJetPrinter::timerHandler(void){ - static bool flag1 = 1; - if(flag1){ - flag1 = 0; - qDebug()<<"timer had started"; - } - - int pulse_100ms = 0; - int pulse_200ms = 0; - int pulse_50ms = 0; - int pulse_20ms = 0; - int pulse_1s = 0; - int pulse_10s = 0; - int pulse_100s = 0; - int pulse_300ms = 0; - int timer_3s = 0; - - static int pulse_3s = 0; - static int pulse_4s = 0; - static int pulse_5s = 0; - static int reciclar_30s = 0; - static int pulse_30s = 0; - static int xxxm=0; - - static int tempFlag=0; - static int save_weeknum = 0; - static bool gearPumpRunFlag = false; - static bool ControledSwitchFlag = false; - static bool gearPumpStartFlag = false; - static bool delay3s; - bool InkSwintFlag = false,lastInkSwintFlag = false; - static float gearPumpRunNormalValue = 0.0; - if(sysPara){ - xxxm=1; - - sysPara->para.ReadFileErrorCnt=0; // 正常打开文件 - - // /opt/FriendlyARM/mini2440/rootfs_qtopia_qt4/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib - if(sysPara->para.gearPumpEnable) - { - ui->tabMainWindow->enablePushButtonStart(true); - if(!pushButtonStartFlag) - { - gearPumpRunNormalFlag = false; - } - if(!gearPumpRunFlag) - { - ui->tabMainWindow->enableReclaimCtrlButton(false); - } - } - else - { - ui->tabMainWindow->enablePushButtonStart(false); - } - - /*-----------------------形成脉冲-----------------------------*/ - sysPara->status.delay10ms ++; - if(sysPara->status.delay10ms == 2){ - pulse_20ms = 1; - } - if(sysPara->status.delay10ms == 5){ - pulse_50ms = 1; - } - if(sysPara->status.delay10ms == 10){ - pulse_100ms = 1; - sysPara->status.delay10ms = 0; - } - if(pulse_100ms){ - sysPara->status.delay100ms ++; - if(sysPara->status.delay100ms == 10){ - pulse_1s = 1; - sysPara->status.delay100ms = 0; - } - pulse_300ms = (sysPara->status.delay100ms%3) == 0; //1秒3次,并非精确的300ms - pulse_200ms = (sysPara->status.delay100ms%2) == 0; - } - if(pulse_300ms) tempFlag=1; - if((sysPara->status.delay10ms%3) == 0) //读取状态后再检測 - { - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) && !gearPumpRunFlag && !sysPara->status.isPumpValveControledByHand)//刚启动前3秒 - { - if(sysPara->para.gearPumpEnable) { - // 隔膜泵初始化:确保从停止状态开始 - if(sysPara->para.gearPumpValue != 0) { - sysPara->para.gearPumpValue = 0; - u = 0.0f; - sysPara->devOp->WriteMoterPump(); - } - // 初始化隔膜泵状态机 - m_pumpState = DPUMP_STOPPED; - m_stateChangeCount = 0; - m_adjSkip = 0; - m_lastActualPressure = 0; - m_bufValidCount = 0; - m_startingStepCount = 0; - gearPumpStartFlag = true; - } - } - } - - if(pushButtonStartFlag && sysPara->status.selfCheckDone) - { - if((sysPara->status.PRESSURE > (sysPara->para.pressure -10)) && (sysPara->status.PRESSURE < (sysPara->para.pressure +10))) - { - if(pulse_1s) - { - - pulse_5s++; - } - if( pulse_5s == 5) - { - pulse_5s = 0; - gearPumpRunNormalFlag = true; - gearPumpRunNormalValue = u; - } - } - } - if(sysPara->status.isPumpValveControledByHand) - { - gearPumpRunNormalFlag = false; - ControledSwitchFlag = false; - pulse_3s = 0; - } - // 检测手动→自动边沿,直接恢复压力控制,不走 gearPumpStartFlag 的 3s 等待 - if(m_lastByHand && !sysPara->status.isPumpValveControledByHand) - { - ControledSwitchFlag = true; - u = (float)sysPara->para.gearPumpValue; // 同步当前转速,避免突变 - // 重置隔膜泵状态机,从当前转速状态开始 - if(u > 40.0f) { - m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态 - } else { - m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始 - } - m_stateChangeCount = 0; - m_adjSkip = 0; - m_lastActualPressure = 0; - m_bufValidCount = 0; - for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; - m_bufIdx = 0; - } - m_lastByHand = sysPara->status.isPumpValveControledByHand; - if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关,压力抖动 - InkSwintFlag = true; - } - else - { - InkSwintFlag = false; - } - if(lastInkSwintFlag != InkSwintFlag) - { - lastInkSwintFlag = InkSwintFlag; - gearPumpRunNormalFlag = false; - } - if(gearPumpRunNormalFlag && !sysPara->status.isPumpValveControledByHand && sysPara->para.gearPumpEnable) - { - // 隔膜泵泄漏检测:运行状态下,压力持续不上升或下降 - static int leakCheckCount = 0; - static int lastPressureForLeak = 0; - - if(m_pumpState == DPUMP_RUNNING && pulse_1s) - { - int pressureChange = sysPara->status.PRESSURE - lastPressureForLeak; - - // 泵运行中(转速>40),压力不升反降,或上升太慢(<5/秒) - if(u > 40.0f && pressureChange < 5) { - leakCheckCount++; - if(leakCheckCount >= 5) { // 连续5秒 - leakCheckCount = 0; - ui->tabMainWindow->setRunStatus(tr("压力异常,可能泄漏!")); - sysPara->status.gearPumpRunStopFlag = true; - gearPumpRunNormalFlag = false; - LogInfo::setRunStatusText(tr("运行中压力泄漏,停泵!")); - } - } else { - leakCheckCount = 0; - } - - lastPressureForLeak = sysPara->status.PRESSURE; - } - } - if(sysPara->para.gearPumpEnable && (sysPara->status.gearPumpRunSpeed < 100) && test_flag){ - if(test_flag % 2) - ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); - test_flag = 0; - } - if(pulse_1s) { - if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable) - checkPressureControl(); - if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){ - if(ui->tabMainWindow->getCurrPrintStatus() != 1){ - ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); - LogInfo::setRunStatusText(tr("测试时间结束,准备关机")); - ui->tabMainWindow->setRunStatus(tr("测试时间结束,准备关机")); - } - } - if(sysPara->status.selfCheckDone && sysPara->para.Reciclar && test_flag){ - reciclar_30s++; - if(reciclar_30s > 30){ - reciclar_30s = 0; - test_flag++; - } - } - else if(reciclar_30s){ - reciclar_30s = 0; - } - QDate d = QDate::currentDate(); - - if(save_weeknum == 0) - { - save_weeknum = d.weekNumber(); - } - - if(save_weeknum != d.weekNumber()) - { - sysPara->devOp->writeFpgaCalandar(1); - save_weeknum = d.weekNumber(); - } - - sysPara->status.delay1s ++; - if(sysPara->status.delay1s == 3 && !delay3s){ - delay3s = true; - } - if(sysPara->status.delay1s % 3 == 0 && sysPara->status.delay1s != 0) - timer_3s = 1; - if(sysPara->status.delay1s == 10){ - pulse_10s = 1; - sysPara->status.delay1s = 0; - } - - pulse_4s++; - if(gearPumpStartFlag) - { - pulse_3s ++; - if(pulse_3s == 3) - { - pulse_3s = 0; - gearPumpRunFlag = true; - ControledSwitchFlag = true; - } - } - if( sysPara->status.reclainTankReachEnd) sysPara->para.openInkLineTime++; - } - - if(pulse_1s && flagOfSerialThreadStratEn){ - if (!m_serialThreadFPGA->isRunning()) { - qDebug()<<"start FPGA tread"; - m_serialThreadFPGA->start(); - } - if (!m_serialThreadSTM32->isRunning()){ - qDebug()<<"start STM32 tread"; - m_serialThreadSTM32->start(); - } - flagOfSerialThreadStratEn = false; - } - - if(pulse_10s){ - if(!m_thread->isRunning()) - m_thread->start(); - sysPara->status.delay10s ++; - if(sysPara->status.delay10s == 10){ - pulse_100s = 1; - sysPara->status.delay10s = 0; - -// if(sysPara->status.flagOfPowerOnMode && (ui->tabMainWindow->getCurrPrintStatus() != 1)) - if(sysPara->status.flagOfPowerOnMode) - { - qDebug()<<"waitPowerOffTime: "<status.waitPowerOffTime; - LogInfo::setRunStatusText(tr("waitPowerOffTime: %1").arg(sysPara->status.waitPowerOffTime)); - if(sysPara->status.waitPowerOffTime) - { - sysPara->status.waitPowerOffTime--; - if(!sysPara->status.waitPowerOffTime) - { - ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); - LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机")); - ui->tabMainWindow->setRunStatus(tr("准备关机")); - } - } - } - } - - } - - /*------------------------------------------------------*/ - if(pulse_100ms) { - sysPara->devOp->stm32Rd(0x07,(unsigned char *)&PulseCnt,2);//读取脉冲个数低字节 - sysPara->devOp->readFgaStatus(); - } - - /**************桂澳增加超速提示*****************************/ - static int logCtrl = 0; - if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER || sysPara->para.eleEyeTriggerSynPrintEn) - && sysPara->status.lesslen_warn == 1){ //置1表示超速了 - if(logCtrl++ % 500 == 0){ - LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!")); - qDebug()<<"速度过快,请检查是否漏喷!!!"; - } - - /*if(msgBox1->isHidden()){ //桂澳的超速提示先保留 - msgBox1->setText(tr("速度过快,请检查是否漏喷!!!")); - msgBox1->show(); - LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!")); - qDebug()<<"速度过快,请检查是否漏喷!!!"; - }*/ - sysPara->devOp->controlRedLight(true); - sysPara->devOp->controlGreenLight(false); - } - else{ - if(!msgBox1->isHidden()) - sysPara->devOp->controlRedLight(false); - } - - - sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2); - if(!sysPara->para.gearPumpEnable) - sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍 - - /*-------------------------------------------------------*/ - bool lostCommuFlag = 1; - if(sysPara->status.fpgaVersionNum != 0) - lostCommuFlag = 0; - - if(sysPara->status.delay10ms%5 == 0) - {//复位发送打印数据 - if((ui->tabMainWindow->getCurrPrintStatus() == 1)&&sysPara->para.ResetSendData) - { - static bool oneTimeFlag = false; - if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据 - { - oneTimeFlag = true; - ui->tabMainWindow->on_pushButtonStartPrint_pressed(); - //复位重设起始值 - if(sysPara->para.cnt1ResetToInitValue) - { - sysPara->para.cnt1CurrValue = sysPara->para.cnt1StartValue; - sysPara->status.cnt1CurrentValueInitDoneFlag = false; - sysPara->devOp->writeFpgaCalandar(0); - } - } - if(sysPara->status.productCnt != 0) - { - oneTimeFlag = false; - } - } - static unsigned int lastProductCount=0; - if(sysPara->status.productCnt != lastProductCount || sysPara->status.printDoneFlag) - { - sysPara->status.printDoneFlag = false; - lastProductCount = sysPara->status.productCnt; - sysPara->modbusStatus.printFinishFlag = 1; - memcpy((void*)(&sysPara->modbusStatus.orderCode), (void*)(&sysPara->modbusParas.QRcode_buf), 2);//写返回序列号 - ui->tabMainWindow->UpdateDateTimeQRCode(QDateTime::currentDateTime().toString("hh:mm")); - } - if (modbus->getModbusStatus() == 1) { - refreshModbusStatus(); - } - } - - if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0) - { - if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){ - sysPara->status.selfCheckDone = true; - ui->tabMainWindow->updatePrintDisplayLabel(); - sysPara->status.flagOfAbnormalStatus = true; - - static bool onceLog = true; - if(onceLog) { - LogInfo::setRunStatusText(tr("打印过程中死机了!!!")); - qDebug()<<"打印过程中死机了!!!"; - onceLog = false; - - ui->tabMainWindow->updatePrintDisplayLabel(); - } - - ui->tabMainWindow->on_pushButtonStopPrint_pressed(); - - } - if(!sysPara->status.selfCheckDone) - { - /*开机自检*/ - autoControlValvePump(); - if(pulse_100ms){ - pressureAdj(); - } - /*-----------------------------------------------------*/ - if(!sysPara->status.selfCheckCnt) { - LogInfo::setRunStatusText(tr("开始自检,请等待60秒...............")); - ui->tabMainWindow->enableReclaimCtrlButton(false); - ui->tabMainWindow->enablePrintButton(false); - sysPara->devOp->mainInkCtrl(); - sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1 - sysPara->saveParaToFile(); // 保存开机次数值 - - sysPara->status.lastProductCnt = sysPara->status.productCnt ; //这会让产品计数显示出来 - - ui->tabMainWindow->updateTotalCnt(0); - - - } - if((++sysPara->status.selfCheckCnt % 100) == 0){ - ui->tabMainWindow->setRunStatus(tr("开始自检,请等待%1秒...............").arg((MAX_SELF_CHECK_CNT - sysPara->status.selfCheckCnt)/100)); - } - - if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) - { - sysPara->status.selfCheckDone = 1; - u = (float)sysPara->para.gearPumpValue; - // 自检完成后管道恢复正常阻力,重置状态机让压力重新平稳收敛 - // 不清零 u,从当前控制字开始,避免突变 - if(u > 40.0f) { - m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态 - } else { - m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始 - } - m_stateChangeCount = 0; - m_adjSkip = 0; - m_lastActualPressure = 0; - m_bufValidCount = 0; - for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; - m_bufIdx = 0; - LogInfo::setRunStatusText(tr("自检完成!!!")); - ui->tabMainWindow->setRunStatus(tr("自检完成!!!")); - qDebug()<<"自检完成!!!"; - ui->tabPrintSetting->PrintSettingLog(); - ui->tabMainWindow->enableReclaimCtrlButton(true); - sysPara->devOp->mainInkCtrl(); - sysPara->status.canRunAirPushing = true; - - if(sysPara->para.Reciclar) - test_flag = 1; - } - else { - if((sysPara->status.selfCheckCnt % 200) == 0) - // sysPara->devOp->controlReclaimTankOpen(false); - ui->tabMainWindow->enableReclaimCtrlButton(false); - } - - } - else{ - // 开机自检完成的前提下 - if (!sysPara->status.airPushing || ui->tabMainWindow->m_2sFlag) { - autoControlValvePump(); - } - // 检测回收泵模式切换,切换时重置泄漏保护学习状态和软启动状态 - if(m_lastReclaimMode != sysPara->para.flagOfReclaimPumEnable) - { - m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable; - gearPumpRunNormalFlag = false; // 泄漏保护重新学习 - gearPumpRunNormalValue = 0.0f; - // 重置隔膜泵状态机,适应新模式 - m_pumpState = DPUMP_STOPPED; - m_stateChangeCount = 0; - m_adjSkip = 0; - m_lastActualPressure = 0; - m_bufValidCount = 0; - for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; - m_bufIdx = 0; - } - if(pulse_100ms && sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag ) { - pressureAdj(); - - } - } - } - else{ - static bool flag = 1; - if(delay3s){ - if(flag){ - flag = 0; - LogInfo::setRunStatusText(tr("缺少墨水,喷码机不能正常工作!")); - qDebug()<<"缺少墨水,喷码机不能正常工作!"; - } - ui->tabMainWindow->setRunStatus(tr("缺少墨水,喷码机不能正常工作!")); - } - } - /*----------------------------控制温度--------------------------------------*/ - if(pulse_300ms){ - autoControlHeater(); - sysPara->devOp->readSyncCounterAtZero(); - } - - sysPara->status.lostCommuFlag = lostCommuFlag; //务必放在后面 - static unsigned int lastProductCnt =0; - static int lastalterMode=-1; - if(sysPara->para.alterPrint.enable) - { - sysPara->para.AlterMode=sysPara->status.AlterMode; // 电眼触发交替功能:新增这一行 - if( (sysPara->para.AlterMode!=lastalterMode) - || (lastProductCnt != sysPara->status.productCnt) - ) - { - ui->tabMainWindow->alterDataPrint (sysPara->para.AlterMode); - } - } - else sysPara->para.AlterMode=0; - lastalterMode = sysPara->para.AlterMode; - lastProductCnt = sysPara->status.productCnt; - ui->tabMainWindow->CheckStatus(pulse_300ms); // - /*----------------------------------界面更新状态---------------------------------------*/ -#ifdef __RFID_CARD - static bool flag6 = true; - unsigned int addr = ui->tabPrintSetting->dlgInputAddr->jd.addr; - if(pulse_10s && flag6){ //初始化刷卡模块 - qDebug()<<"初始化刷卡模块"; - LogInfo::setRunStatusText(QString("jd.addr:%1").arg(addr)); - flag6 = false; - if (manager_rfid) - manager_rfid->initRFIDMoudle(addr, sysPara); - } - - if(pulse_300ms){ - if (manager_rfid) - manager_rfid->handleCheck(addr); - } - -#endif - if(pulse_300ms){ - sysPara->devOp->readCalandarDat(); //务必读一下此数据 - if(sysPara->status.RandomNum>0) - sysPara->devOp->Read_RanddomFromFpga(); -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - cnt1GroupCheck();//分段计米 -#endif - cntGroupCheck();//分段计米 - - QWidget *widget = this->currentWidget(); - static bool read_flag = false; - if(widget == ui->tabMainWindow && pulse_100ms) { - ui->tabMainWindow->updateSysStatusToUI(); - } - else if(widget == ui->tabTriggerMode){ - ui->tabTriggerMode->updateSysStatusToUI(); - if(sysPara->status.fpgaVersionNum != 0){ - QString FpgaVersion; - if((sysPara->status.fpgaVersionNum>>12) == 8 || (sysPara->status.fpgaVersionNum>>12) == 6) - FpgaVersion = "72"; - else if((sysPara->status.fpgaVersionNum>>12) == 2 || (sysPara->status.fpgaVersionNum>>12) == 1){ - if(sysPara->para.flagOfFastMode) - FpgaVersion = "66"; - else - FpgaVersion = "67"; - } - FpgaVersion += QString("_F%1.%2.%3").arg(sysPara->status.fpgaVersionNum >> 12) - .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff); - ui->tabTriggerMode->setBuildTime(QString(" No%1").arg(FpgaVersion)); - } - - } - else if(widget == ui->tabPrintSetting) - { - ui->tabPrintSetting->updateSysStatusToUI(); - if(!read_flag) - { - emit sendPicScene(ui->tabMainWindow->getPicScene()); - } - read_flag = true; - } - else if(widget == ui->tabSystemSetting){ - - ui->tabSystemSetting->updateSysStatusToUI(); - } - else if(widget == ui->tabSystemManage){ - ui->tabSystemManage->updateSysStatusToUI(); - } - else if(widget == ui->tabOtherInfo){ - ui->tabOtherInfo->updateSysStatusToUI(); - } - else if(widget == ui->tabNetworkManager){ - if(!sysPara->status.bLanConfigManual) - { - ui->tabNetworkManager->updateSysStatusToUI(); - } - } - if(widget != ui->tabPrintSetting) - { - read_flag = false; - } - - // 20140306 - static int last_lesslen_warn=0,lesslen_cnt=0; - if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) - { - if(last_lesslen_warn==0) - { - last_lesslen_warn =lesslen_cnt; - if(lesslen_cnt<60)lesslen_cnt +=6; - if(lesslen_cnt>40) sysPara->devOp->resumeFault(); - - if(sysPara->para.speedoverPaushPrint) { - ui->tabMainWindow->on_pushButtonPausePrint_pressed();// 2014-03-19 - // emit OnSpeedOver(2);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); - ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); - - } - else { - // emit OnSpeedOver(1);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全!!!")); - ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全!!!")); - } - - } - } - else { last_lesslen_warn=0;lesslen_cnt=30;} - - if(last_lesslen_warn) last_lesslen_warn--; - - } - - if(pulse_100ms && sysPara->status.selfCheckDone){ - detectAndcontrolReclaimTank(); //控制回收槽 - } - - /*---------------------------------处理警告--------------------------------------------*/ - if(pulse_1s){ - if(sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone && gearPumpRunNormalFlag) - { - if((sysPara->status.PRESSURE < (sysPara->para.pressure -8)) || (sysPara->status.PRESSURE > (sysPara->para.pressure +8))) - { - LogInfo::setRunStatusText(tr("压力波动超过设定的5个值.")); - } - } - - static bool logFlag1 = true; - if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN && logFlag1){ - logFlag1 = false; - LogInfo::setRunStatusText(tr("溶剂液位报警! %1").arg(sysPara->RFIDPara.solventNumber)); - qDebug()<<"溶剂液位报警! "<RFIDPara.solventNumber; - } - -#ifdef __RFID_CARD - /*****************墨水刷卡控制start**********************************************/ - /*墨水刷卡新的控制逻辑*/ - /* 1.任何时候,打印墨点数达到2.3billion之后,提示24小时内刷卡,否则禁止使用机器*/ - /*2.当墨水液位后,持续提示刷卡,24小时后如果还没有刷卡,禁止使用机器*/ - static bool logFlag4 = 1; - static int warnNum1 = 0; - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) - warnNum1 = 0; - if((sysPara->status.statWarn & WARN_STATUS_INK_WARN) || sysPara->para.RFIDInkWarn){ - if(!sysPara->para.RFIDInkWarn){ - if(++warnNum1 >6){ - sysPara->para.RFIDInkWarn = true; - QDateTime curDateTime = QDateTime::currentDateTime(); - QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); - if(sysPara->para.inkWarnDate == 0){ - sysPara->para.inkWarnDate = strCurDateTime.mid(0,6).toInt(); - sysPara->para.inkWarnTime = strCurDateTime.mid(6,6).toInt(); - } - sysPara->saveParaToFile(); - } - else{ - LogInfo::setRunStatusText(tr("detect Ink warning cnt: %1").arg(warnNum1)); - qDebug()<<"检测到墨水液位次数:"<status.flagOfNeedInkCard = true; - if(logFlag4){ - logFlag4 = 0; - QString strDate = QString::number(sysPara->para.inkWarnDate); - QString strTime = QString::number(sysPara->para.inkWarnTime); - QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); - QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); - QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); - QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); - QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); - QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); - QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; - LogInfo::setRunStatusText(tr("ink Warning at: %1").arg(strDateTime)); - qDebug()<<"ink Warning at:"<RFIDPara.PrintInkDots >= MAX_INK_DOTS || sysPara->para.RFIDInkWarn){ - sysPara->status.flagOfNeedInkCard = true; - if(sysPara->RFIDPara.InkRFIDCnt == 0){ - msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); - msgtest->show(); - ui->tabMainWindow->setRunStatus(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); - LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); - } - int timeRemain = (MAX_INK_RFIDTIME - sysPara->RFIDPara.InkRFIDCnt)/60; - if(timeRemain > 60){ - if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) - ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); - else - ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); - } - else if(timeRemain > 0){ - if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) - ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); - else - ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); - } - if(sysPara->RFIDPara.InkRFIDCnt % 300 == 0) - sysPara->saveRFIDPara(); - if(++sysPara->RFIDPara.InkRFIDCnt >= MAX_INK_RFIDTIME) - sysPara->status.flagOfInkMaxDot = true; - } - - if(sysPara->status.flagOfInkMaxDot){ - if(sysPara->status.isPrinting) - ui->tabMainWindow->on_pushButtonStopPrint_pressed(); - static bool logFlag2= true; - if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS){ - ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); - if(logFlag2){ - logFlag2 = false; - msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); - msgtest->show(); - LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); - qDebug()<<"打印墨点已达到2.3billion,请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; - } - } - else{ - ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); - if(logFlag2){ - logFlag2 = false; - msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); - msgtest->show(); - LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); - qDebug()<<"请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; - } - } - } - /*****************墨水刷卡控制end**********************************************/ - - /*****************溶剂刷卡控制start**********************************************/ - /*溶剂刷卡新的控制逻辑*/ - /* 1.任何时候,混合阀打开次数达到360次,提示2小时关机,必须刷卡才能恢复*/ - /*2.溶剂液位报警后,提示刷卡,允许有10次的混合阀打开次数,必须刷卡才能恢复*/ - if(sysPara->RFIDPara.solventNumber >= MAX_SOLV_OPENNUM){ //混合阀打开次数达到360次 - sysPara->status.flagOfNeedSolventCard = true; - if(sysPara->RFIDPara.SOLVRFIDCnt == 0){ - msgtest->setText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); - msgtest->show(); - LogInfo::setRunStatusText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); - } - int timeRemain = (MAX_SOLV_RFIDTIME - sysPara->RFIDPara.SOLVRFIDCnt)/60; - if(timeRemain > 0) - ui->tabMainWindow->setRunStatus(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); - if(sysPara->RFIDPara.SOLVRFIDCnt % 300 == 0) - sysPara->saveRFIDPara(); - if(++sysPara->RFIDPara.SOLVRFIDCnt >= MAX_SOLV_RFIDTIME) - sysPara->status.flagOfSolventMaxNum = true; - } - - static bool logFlag5 = 1; - static int warnNum2 = 0; - if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) - warnNum2 = 0; - if((sysPara->status.statWarn & WARN_STATUS_SOLV_WARN) || sysPara->para.RFIDSolventWarn){ - if(!sysPara->para.RFIDSolventWarn){ - if(++warnNum2 > 6){ - sysPara->para.RFIDSolventWarn = true; - sysPara->para.RFIDSolventWarnMixCnt = 0; - LogInfo::setRunStatusText(tr("请添加原厂溶剂,然后刷溶剂卡!")); - qDebug()<<"请添加原厂溶剂,然后刷溶剂卡,否则将会在打开10次混合阀之后禁用喷码机!"; - QDateTime curDateTime = QDateTime::currentDateTime(); - QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); - if(sysPara->para.solventWarnDate == 0){ - sysPara->para.solventWarnDate = strCurDateTime.mid(0,6).toInt(); - sysPara->para.solventWarnTime = strCurDateTime.mid(6,6).toInt(); - } - sysPara->saveParaToFile(); - } - else{ - LogInfo::setRunStatusText(tr("detect solvent warning cnt: %1").arg(warnNum2)); - qDebug()<<"检测到溶剂液位次数:"<status.flagOfNeedSolventCard = true; - ui->tabMainWindow->setRunStatus(tr("请添加原厂溶剂,然后刷溶剂卡!")); - if(logFlag5){ - logFlag5 = 0; - QString strDate = QString::number(sysPara->para.solventWarnDate); - QString strTime = QString::number(sysPara->para.solventWarnTime); - QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); - QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); - QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); - QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); - QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); - QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); - QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; - LogInfo::setRunStatusText(tr("solvent Warning at: %1").arg(strDateTime)); - qDebug()<<"solvent Warning at:"<para.RFIDSolventWarnMixCnt >= 10) - sysPara->status.flagOfSolventMaxNum = true; - - if(sysPara->status.flagOfSolventMaxNum){ - if(sysPara->status.isPrinting) - ui->tabMainWindow->on_pushButtonStopPrint_pressed(); - static bool logFlag3 = true; - if(sysPara->para.RFIDSolventWarnMixCnt>=10){ - ui->tabMainWindow->setRunStatus(tr("请刷溶剂卡以恢复机器的正常功能")); - if(logFlag3){ - logFlag3 = false; - msgtest->setText(tr("请刷溶剂卡以恢复机器的正常功能!")); - msgtest->show(); - LogInfo::setRunStatusText(tr("请刷溶剂卡以恢复机器的正常功能")); - qDebug()<<"溶剂液位报警后已经打开混合阀10次,请刷卡以恢复机器的正常功能"; - } - } - else{ - ui->tabMainWindow->setRunStatus(tr("请刷溶剂卡以恢复机器的正常功能")); - if(logFlag3){ - logFlag3 = false; - msgtest->setText(tr("请刷溶剂卡以恢复机器的正常功能!")); - msgtest->show(); - LogInfo::setRunStatusText(tr("请刷溶剂卡以恢复机器的正常功能")); - qDebug()<<"已经打开混合阀360次,请刷卡以恢复机器的正常功能"; - } - } - } - /*****************溶剂刷卡控制end**********************************************/ -#endif - - static bool resumeFlag = false; - if(lostCommuFlag || ui->tabMainWindow->updatePhaseIndicatorLight() || (sysPara->status.statWarn & (WARN_STATUS_POWER_MON|WARN_STATUS_INK_WARN|WARN_STATUS_SUMP_WARN - |WARN_STATUS_SOLV_WARN|WARN_STATUS_POWER_MON)) || (sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) ||sysPara->status.lastHighVoltageFault) - { //updatePhaseIndicatorLight()务必放前面 - sysPara->status.beeperOnFlag = true; - if(sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) - { - ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!")); - } - if(!resumeFlag) - { - resumeFlag = true; - pulse_4s = 0; - if(!sysPara->status.lastHighVoltageFault) - { - ui->tabMainWindow->onLabelFaultRusumePressed(); - } - } - } - else { - sysPara->status.beeperOnFlag = false; - sysPara->devOp->controlBeeper(false); - if(pulse_4s >= 20) - { - pulse_4s = 0; - resumeFlag = false; - } - } - - if(sysPara->status.beeperOnFlag){ //报警会时有时无 - sysPara->devOp->controlBeeper(!sysPara->devOp->isBeeperEnable()); - } - - if((sysPara->status.statWarn & (WARN_STATUS_POWER_MON)) - ||sysPara->status.lastwarmInkPump||sysPara->status.lastwarmInkPump||sysPara->status.mainInkPumpError - ||sysPara->status.compressPumpError||sysPara->status.lastPhaseFault||sysPara->status.lastRecycleWarn||sysPara->status.lastHighVoltageFault) - { //2013-12-12故障报警灯 杨 - sysPara->status.RedLightOnFlag = true; - - } - else { - sysPara->status.RedLightOnFlag = false; - sysPara->devOp->controlRedLight(false); - //sysPara->devOp->controlRedLight(true); - } - if(sysPara->status.RedLightOnFlag){ //报警会时有时无 - sysPara->devOp->controlRedLight(!sysPara->devOp->isRedLightEnable()); - } - if((sysPara->status.statWarn & (WARN_STATUS_INK_WARN|WARN_STATUS_SOLV_WARN |WARN_STATUS_RECYCLE_FAULT|WARN_STATUS_SUMP_WARN)) - && !sysPara->status.RedLightOnFlag){ - //if(!sysPara->status.RedLightOnFlag){ - sysPara->status.YellowLightOnFlag = true; - } - else { - sysPara->status.YellowLightOnFlag = false; - sysPara->devOp->controlYellowLight(false); - //sysPara->devOp->controlYellowLight(true); - } - if(sysPara->status.YellowLightOnFlag){ //报警会时有时无 - sysPara->devOp->controlYellowLight(!sysPara->devOp->isYellowLightEnable()); - } - - if(sysPara->status.waitHightVolOff>0){ - sysPara->status.waitHightVolOff--; - if(sysPara->status.waitHightVolOff==0){ - sysPara->devOp->highVoltageCtrl(0); - ui->tabMainWindow->setRunStatus(tr("停止打印,自动关闭高压.")); - } - } - - }// 1s - -#ifdef WARNING - static int pre_pressed=0,pre_hvcurrent=0,press_err_cnt=0; - if(pulse_1s) - { - if((pre_pressed > sysPara->status.PRESSURE+70)) - { - if(++press_err_cnt>3) - { - LogInfo::setRunStatusText(tr("压力异常:上次压力值%1,当前压力值%2").arg(pre_pressed).arg(sysPara->status.PRESSURE)); - } - } - else - { - press_err_cnt = 0; - } - pre_pressed = sysPara->status.PRESSURE; - - - } - - if(pulse_100ms) - { - if(pre_hvcurrent>150 && ( sysPara->status.HV_DETOUT> pre_hvcurrent+20) && (sysPara->status.waitHightVolOn==8 || sysPara->status.waitHightVolOff==1) && sysPara->status.isPrinting ) - pre_hvcurrent = sysPara->status.HV_DETOUT; - - if(sysPara->status.waitHightVolOn<8)sysPara->status.waitHightVolOn++; - if(sysPara->status.isPrinting==0) sysPara->status.waitHightVolOn=0; - } -#endif - if(sysPara->devOp->color_flag ==3){ - sysPara->devOp->color_flag = 0; - pulse_30s = 0; - } - else if(pulse_1s && sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone - && (!sysPara->status.statWarn) && !sysPara->status.powerOffAppending){ - // 隔膜泵速度告警逻辑:检测转速是否异常超过最大工作转速 - // 最大工作转速对应的RPM约为:300 * 60 * 1000 / (500 * 2) = 1800 RPM - // 给予余量,告警阈值设为2200 RPM - const int MAX_SPEED_ALARM = 2200; - - if(sysPara->status.gearPumpRunSpeed <= MAX_SPEED_ALARM) - { - pulse_30s = 0; - } - else{ - pulse_30s++; - if(pulse_30s >= 30){ - sysPara->status.flagOfSpeedAlarm = true; - sysPara->devOp->color_flag = 2; - if(pulse_30s % 500 == 0){ - LogInfo::setRunStatusText(tr("泵转速异常过高,请立即停机并联系供应商!")); - qDebug()<<"泵转速异常过高,请立即停机并联系供应商!"; - } - ui->tabMainWindow->setRunStatus(tr("泵转速异常过高,请立即停机并联系供应商!")); - sysPara->devOp->controlRedLight(true); - if(sysPara->status.isPrinting) - ui->tabMainWindow->on_pushButtonStopPrint_pressed(); - } - if(pulse_30s % 10 == 0) - qDebug()<<"粘度: "<status.viscosity); - } - } - else if(sysPara->status.statWarn & 0xFE){ - sysPara->devOp->color_flag = 3; - pulse_30s = 0; - } - } - - //测试代码,发布模式自动忽略 - -} - -void InkJetPrinter::autoControlHeater(){ - //100ms - static int tempDly=1830; - if(sysPara->para.heatTime == 0) - sysPara->para.heatTime = 5; - int maxHeatTime = sysPara->para.heatTime * 600; - if(sysPara->para.flagOfContinueHeat) - maxHeatTime = 60* 600; - if(tempDly) tempDly--; - if(tempDly>=1800) - { - if(tempDly==1800) - { - sysPara->status.indoorTemperature = sysPara->status.TEMP_ADIN/4; - sysPara->devOp->pumpValveCtrl(1); - if(sysPara->status.indoorTemperature-35>0) - ui->tabSystemSetting->updateViscosityAdjust((sysPara->status.indoorTemperature-35)); - else - ui->tabSystemSetting->updateViscosityAdjust(0); - } - return; - } - if(sysPara->status.TEMP_ADIN/4 < sysPara->para.temperature && sysPara->status.heaterONTimeCnt < MAX_HEATER_TIME){ - if(tempDly==0) sysPara->status.heaterONTimeCnt ++; -// if(!sysPara->devOp->isHearterEnable()) - sysPara->devOp->controlHeater(true); - - if(sysPara->status.heaterONTimeCnt == maxHeatTime) - { - if(sysPara->status.TEMP_ADIN/4 < (sysPara->para.temperature - 2)){ - LogInfo::setRunStatusText(tr("警告:加热器长时间无法达到预期温度,故障或设置错误!")); - ui->tabMainWindow->setRunStatus("加热器长时间无法达到预期温度,故障或设置错误!");//20150105 no check - sysPara->devOp->controlHeater(false); - } - else - sysPara->status.heaterONTimeCnt = 0; - } - } - else if(sysPara->status.TEMP_ADIN/4 >= (sysPara->para.temperature + 2)){ - if(sysPara->status.heaterONTimeCnt < maxHeatTime) - { - sysPara->status.heaterONTimeCnt = 0; - } -// if(sysPara->devOp->isHearterEnable()) - sysPara->devOp->controlHeater(false); - } -} - -void InkJetPrinter::cnt1GroupCheck(void) -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - static unsigned char lastGroupRunningIndex = 0; - if(sysPara->para.cnt1ByGroupEnalbe) - { - - - sysPara->devOp->ReadCnt1GroupStatus(); - if(lastGroupRunningIndex == sysPara->status.cnt1GroupRunningIndex) - return; - lastGroupRunningIndex = sysPara->status.cnt1GroupRunningIndex; - - emit updateCnt1GroupDisp(1); - } -#endif -} - -void InkJetPrinter::cntGroupCheck() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - static unsigned char mlastGroupRunningIndex = 0; - if(sysPara->para.cnt1ByGroupEnalbe) - { - sysPara->devOp->ReadCnt1GroupStatus(); - if(mlastGroupRunningIndex != sysPara->status.cnt1GroupRunningIndex) { - mlastGroupRunningIndex = sysPara->status.cnt1GroupRunningIndex; - LogInfo::setRunStatusText("Next cnt1 group index: " + QString::number(sysPara->status.cnt1GroupRunningIndex)); - } - } -#endif - -#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ - if(sysPara->para.cnt2ByGroupEnalbe) - { - sysPara->devOp->ReadCnt2GroupStatus(); - if(mlastGroupRunningIndex != sysPara->status.cnt2GroupRunningIndex) { - mlastGroupRunningIndex = sysPara->status.cnt2GroupRunningIndex; - LogInfo::setRunStatusText("Next cnt2 group index: " + QString::number(sysPara->status.cnt2GroupRunningIndex)); - } - } -#endif - emit sig_updateDisp(1); -} - -void InkJetPrinter::autoControlCycleValve() -{ - if(!sysPara->status.selfCheckDone || (sysPara->status.flagOfPowerOnMode && sysPara->para.gearPumpEnable)){ - // if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 //定时开机循环时隔膜泵不开关循环阀 - // sysPara->devOp->controlCycleValve(true); - // } - cycleValveRunForSelfCheck(); - if(sysPara->status.flagOfPowerOnMode) - { - if(sysPara->devOp->isMixValveOpen()) { // - sysPara->devOp->controlMixValve(false); - } - } - } - else { - if(sysPara->status.cycleValveOpenCntAfterSWintOff){ // 开循环阀 - if(!sysPara->devOp->isCycleValveOpen()){ - sysPara->devOp->controlCycleValve(true); - } - sysPara->status.cycleValveOpenCntAfterSWintOff --; - } - else if(sysPara->devOp->isCycleValveOpen()){ // 关循环阀 - sysPara->devOp->controlCycleValve(false); - } - } -} - -void InkJetPrinter::autoControlValvePump(void) -{ - if(sysPara){ - if(!sysPara->status.isPumpValveControledByHand){ - - /*---------------------------------供墨阀--------------------------------------------*/ - bool enableFlag = ((sysPara->status.statWarn & WARN_STATUS_INK_SWINT) - || (sysPara->status.lastRecycleWarn && sysPara->para.RecycleWarnAction) // 2017.8.15版本回收故障关供墨阀问题 - || ( sysPara->status.HVFaultCloseEn ) //高压故障关闭墨线 - )?false:true; //墨线开关 - - if(enableFlag != sysPara->devOp->isInkValveOpen()){ - if(enableFlag == false) { //关闭供墨阀的顺序 先开循环阀后关闭供墨阀间 - if (sysPara->status.cycleValveOpenCntAfterSWintOff == 0) { - sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; - } - if (sysPara->status.cycleValveOpenCntAfterSWintOff < 60) { //在准备关闭循环阀的时候关闭供墨阀 - sysPara->devOp->controlInkValve(enableFlag); //关供墨 - sysPara->devOp->controlInkValvePWM(enableFlag); //关供墨 - } - } - else { //开供墨阀 - if(!sysPara->devOp->isReclaimPumpOpen()) //开供墨阀之前要判断回收泵有没有开,没开就提前打开 - { - sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 - } - if(!ui->tabMainWindow->m_2sFlag) - { - sysPara->devOp->controlInkValve(enableFlag); - sysPara->devOp->controlInkValvePWM(enableFlag); - } - } - } - - if(!sysPara->status.selfCheckDone) { - if(!sysPara->devOp->isCycleValveOpen()) { - sysPara->devOp->controlCycleValve(false); - } - } - else { - autoControlCycleValve(); - } - - /*----------------------------------泄压阀-------------------------------------------*/ - //===================================================================================================== - if(sysPara->status.PRESSURE - sysPara->para.pressure > MAX_PRESSURE_RELEASE_DIFF) - sysPara->status.pressureOverFlowCnt ++; - else - sysPara->status.pressureOverFlowCnt = 0; - - if(( - sysPara->status.releaseValveOpenApending || - sysPara->status.pressureOverFlowCnt > 2 - ) //防止干扰和误动作 - && !sysPara->status.releaseValveDelayCnt) - { - if(!sysPara->devOp->isReleaseValveOpen()) - { //泄压阀 - sysPara->devOp->controlReleaseValve(true); - } - sysPara->status.releaseValveDelayCnt = MAX_RELEASE_VALVE_DELAY_CNT; - sysPara->status.releaseValveOpenApending = true; - } - else - { - if(sysPara->devOp->isReleaseValveOpen()) - { // - //sysPara->devOp->controlReleaseValve(false); - } - - if(sysPara->status.releaseValveDelayCnt) - sysPara->status.releaseValveDelayCnt --; - if(sysPara->status.PRESSURE < sysPara->para.pressure) - { - sysPara->status.releaseValveOpenApending = false; - if(sysPara->devOp->isReleaseValveOpen()){ sysPara->devOp->controlReleaseValve(false); - - } - } - } - - /*-----------------------------------主墨泵------------------------------------------*/ - if(sysPara->status.SEPTAL_POSITION < (sysPara->para.septalPostion - DIFF_SEPTAL_POSITION)) - sysPara->status.septalPositionOverFlowCnt ++; - else - sysPara->status.septalPositionOverFlowCnt = 0; - if(sysPara->status.septalPositionOverFlowCnt > 2 && !sysPara->status.mainInkPumpError){ //主墨泵 - if(!sysPara->devOp->isMainInkPumpOpen()){ - sysPara->devOp->controlMainInkPump(true); - sysPara->status.mainInkPumpRunTmCnt = 0; - } - else if(sysPara->status.selfCheckDone){ - if(sysPara->status.mainInkPumpRunTmCnt < MAX_MAIN_INK_PUMP_RUN_TIME){ // - sysPara->status.mainInkPumpRunTmCnt ++; - } - else { - if(!sysPara->para.gearPumpEnable) - { - sysPara->status.mainInkPumpError = true; - sysPara->devOp->controlMainInkPump(false); - LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!主墨泵故障")); - ui->tabMainWindow->setRunStatus(tr("主墨泵故障!!!")); - } - } - } - } - else if(sysPara->status.SEPTAL_POSITION > sysPara->para.septalPostion){ - if(sysPara->devOp->isMainInkPumpOpen()) - sysPara->devOp->controlMainInkPump(false); - } - /*-----------------------------------压缩机------------------------------------------*/ - - if((sysPara->para.pressure - sysPara->status.PRESSURE > MAX_PRESSURE_DIFF) && !sysPara->status.compressPumpError){ //压缩机 - if(!sysPara->devOp->isCompressPumpOpen()){ - sysPara->devOp->controlCompressPump(true); - sysPara->status.compressPumpRunTmCnt = 0; - } - else if(sysPara->status.selfCheckDone){ - if(sysPara->status.compressPumpRunTmCnt < MAX_COMPRESS_PUMP_RUN_TIME){ //如果长时间开压缩机,考虑设备故障 - sysPara->status.compressPumpRunTmCnt ++; - } - else { - sysPara->status.compressPumpError = true; - sysPara->devOp->controlCompressPump(false); - if(!sysPara->para.gearPumpEnable) - { - LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!压缩机故障")); - ui->tabMainWindow->setRunStatus(tr("压缩机故障!!!")); - } - - } - } - } - else if(sysPara->para.pressure <= sysPara->status.PRESSURE){ //压力到达预期的压力 - if(sysPara->devOp->isCompressPumpOpen()) - sysPara->devOp->controlCompressPump(false); - } - - /*------------------------------------粘度泵,混合阀-----------------------------------------*/ - - /*-----------------------------每30s打开一次粘度泵以及相关处理--------------------------------------*/ - static bool hasDetectedBellow = false; // 检测到下位灯 - static bool hasDetectedTop = false; // 检测到上位灯 - static int viscosity_low = 0; //统计粘度连续偏低10%次数 - static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数 - static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数 - static bool flag = 0; - - if(sysPara->status.cycleValveOpenCntAfterSWintOff) { //关闭墨线的时候要提前开粘度泵 - sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100; - } - ++sysPara->status.viscosityDelayCnt; - int mixer_open_threshold = (105*sysPara->para.viscosity)/100; - int viscosity_faulty_threshold =(113*sysPara->para.viscosity)/100; - if(sysPara->status.viscosityDelayCnt >= sysPara->para.viscosityPumpInterval*100 && flag == 0) - { - flag=1; - if (!sysPara->devOp->isViscosityPumpOpen()) - { - sysPara->devOp->controlViscosityPump(true); - viscosity_timer->start(10000); - qDebug()<<"粘度: "<status.viscosity); - } - if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold)) - { - sysPara->status.viscosityFault = 0; - viscosity_low=0; - Mixing_valve_open = 0; - viscosity_faulty_num = 0; - } - if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100) - { - viscosity_low++; - viscosity_faulty_num = 0; - Mixing_valve_open = 0; - } - if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold) - { - Mixing_valve_open++; - viscosity_low = 0; - viscosity_faulty_num = 0; - } - if(sysPara->status.viscosity > viscosity_faulty_threshold){ - Mixing_valve_open++; - viscosity_faulty_num++; - viscosity_low = 0; - } - - if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { // - sysPara->devOp->controlMixValve(true); - Mixing_valve_open = 0; - LogInfo::setRunStatusText(tr("添加溶剂:")+QString::number(sysPara->status.viscosity)); - qDebug()<<"添加溶剂"; - } - - if(viscosity_low >= 60) - { - LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity)); - qDebug()<<"粘度值偏低"; - sysPara->status.viscosityFault = 2; - if(sysPara->devOp->isMixValveOpen()) { - sysPara->devOp->controlMixValve(false); - } - } - if(viscosity_faulty_num >= 5) - { - LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity)); - qDebug()<<"粘度偏大故障"; - sysPara->status.viscosityFault = 1; - } - - } - if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1) - { - if(sysPara->devOp->isMixValveOpen()) { - sysPara->devOp->controlMixValve(false); - } - } - - if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1) - { - if (sysPara->devOp->isViscosityPumpOpen()) { - sysPara->devOp->controlViscosityPump(false); - } - sysPara->status.viscosityDelayCnt = 0; - flag=0; - } - - if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位 - viscosity_timer->stop(); - } - - if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) { - static int detectBelow = 0; - if (++detectBelow%400 == 0) { - if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY) - { - if(sysPara->status.rWarnViscoReady>=15){ - sysPara->status.viscosityFault = 1; - sysPara->status.viscosity=0; - if(!firstTime) - qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity); - // LogInfo::setRunStatusText(tr("错误!粘度计下位灯故障.")+QString::number(sysPara->status.viscosity)); - hasDetectedBellow = true; - } - else sysPara->status.rWarnViscoReady++; - } - else { - sysPara->status.rWarnViscoReady = 0; - sysPara->status.viscosityFault = 0; - } - } - } - if(hasDetectedBellow && hasDetectedTop) - { - if(sysPara->devOp->isMixValveOpen()) { // - sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀 - } - } - if(sysPara->status.viscosityFault==0) - { - hasDetectedBellow = false; - hasDetectedTop = false; - } - // } - /*-----------------------------------回收泵------------------------------------------*/ - - if(!sysPara->status.autoCtlReclaimAfterSWintOff) - { - if(!sysPara->devOp->isReclaimPumpOpen() ){ //回收泵 - // ui->tabMainWindow->setRunStatus(tr("全速回收泵!!!")); - sysPara->status.reclaimPumpFullSpeedCnt = 0; - sysPara->devOp->controlReclaimPump(true,true); //先全速,后降速 - } - else if(sysPara->status.reclaimPumpFullSpeedCnt <= RECLAIM_PUMP_FULL_SPEED_CNT){ - sysPara->status.reclaimPumpFullSpeedCnt ++; - if(sysPara->status.reclaimPumpFullSpeedCnt == RECLAIM_PUMP_FULL_SPEED_CNT){ //降速 - // ui->tabMainWindow->setRunStatus(tr("降速回收泵!!!")); - sysPara->devOp->controlReclaimPump(true,false); - } - } - } - /*-----------------------------------------------------------------------------*/ - } - } -} -//========================== -// 放在10ms的定时器运行,但和粘度泵工作周期一致 -void InkJetPrinter::checkMixValveOpen(){ - //混合阀 - if(sysPara->status.viscosity>40000){ - sysPara->status.viscosityMaxFaultCnt++; - if(sysPara->status.viscosityMaxFaultCnt>5) - { - sysPara->status.viscosityMaxFaultCnt=0; - if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("粘度检测异常,粘度值太大!!!")); - sysPara->status.viscosityFault=1; - } - sysPara->status.viscosity=0; - } - int mixer_open_threshold = MAX_VISICOSITY_RATIO*sysPara->para.viscosity/100; - int mixer_open_threshold_high = (MAX_VISICOSITY_RATIO + 11)*sysPara->para.viscosity/100; - if(sysPara->status.viscosity > mixer_open_threshold) - {// 粘度值高报警: 条件@高于设定值的1.05,时间:120个测量周期 - sysPara->status.visocityValueOverflowNum ++; - if(sysPara->status.visocityValueOverflowNum >= (MAX_VISICOSITY_VALUE_OVERFLOW_NUM/3)){ - if((sysPara->status.viscosity >= mixer_open_threshold_high)//超出太多加得快,否则隔三下,加一下 - || ((sysPara->status.visocityValueOverflowNum % 3) == 0)){ - if(!sysPara->devOp->isMixValveOpen()){ // - sysPara->devOp->controlMixValve(true); - LogInfo::setRunStatusText(tr("混合阀打开2:")+QString::number(sysPara->status.viscosity)); - } - } - } - if(sysPara->status.visocityValueOverflowNum > MAX_ALLOW_VISICOSITY_OVERFLOW_NUM){ - if(sysPara->status.viscosityFault ==0 ) - LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")); - - sysPara->status.viscosityFault = 1; - } - } - else if(sysPara->status.viscosity > 90*sysPara->para.viscosity/100){ - // 粘度值正常 - sysPara->status.visocityValueOverflowNum = 0; - sysPara->status.viscosityFault = 0; // 20160922 粘度低报警不能复位问题 - } - else {// 粘度值低报警: 条件@ 低于设定值的0.9,时间:60个测量周期 - sysPara->status.visocityValueOverflowNum ++; - if(sysPara->status.visocityValueOverflowNum > (MAX_ALLOW_VISICOSITY_OVERFLOW_NUM/2)){ - - if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")); - sysPara->status.viscosityFault = 2; - sysPara->status.visocityValueOverflowNum=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM-10; - } - } -} - - -void InkJetPrinter::checkMixValveClose(){ - if(sysPara->devOp->isMixValveOpen()){ // 关闭混合阀 - sysPara->devOp->controlMixValve(false); - } -} - -//在开机自检过程中交替打开和关闭循环阀 -void InkJetPrinter::cycleValveRunForSelfCheck(){ - static int cycleValveOpenCnt = 0; - if (++cycleValveOpenCnt%300 > 150) { - if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 开 - sysPara->devOp->controlCycleValve(true); - } - } - else { - if(sysPara->devOp->isCycleValveOpen()){ //循环阀 关 - sysPara->devOp->controlCycleValve(false); - } - } -} - -void InkJetPrinter::onReclaimTankBlock(){ - if(sysPara){ - ui->tabMainWindow->enableReclaimCtrlButton(true); - sysPara->status.reclaimTankBlockedAppending = true; - if(sysPara->status.powerOffAppending && sysPara->status.powerOffAfterPhaseFaultAppending) - ui->tabMainWindow->checkForPowerOff(); - sysPara->status.powerOffAppending = false; //如果有关机动作,终止 - - } - -} -/* - * - * 控制回收槽 - * - * */ - -void InkJetPrinter::detectAndcontrolReclaimTank(){ - sysPara->status.currReclaimTankPos =10*sysPara->status.curr_reclaimTankTime; - sysPara->status.reclaimTankBlockedAppending =0; - //qDebug()<status.reclaimTankstatus; - // if(sysPara->status.currReclaimTankPos == 0) - // ui->tabMainWindow->setReBootQtUIEnable(false); - // else - // ui->tabMainWindow->setReBootQtUIEnable(true); - - if(sysPara->status.reclaimTankstatus == 0x10) //7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 - { - if(sysPara->devOp->isReclaimTankCloseEnable()) - { - LogInfo::setRunStatusText(tr("电机故障")); - ui->tabMainWindow->setRunStatus(tr("电机故障")); - sysPara->devOp->controlReclaimTankClose(false); - ui->tabMainWindow->resetReclaimCtrlButtonText(); - emit reclaimTankBlock(); - } - else { - LogInfo::setRunStatusText(tr("电机故障")); - ui->tabMainWindow->setRunStatus(tr("电机故障!!!")); - if(sysPara->devOp->isReclaimTankOpenEnable()) - sysPara->devOp->controlReclaimTankOpen(false); - ui->tabMainWindow->resetReclaimCtrlButtonText(); - emit reclaimTankBlock(); - } - - } - else if(sysPara->status.reclaimTankstatus == 5 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 - { - if(sysPara->devOp->isReclaimTankOpenEnable()) - sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 - sysPara->status.reclainTankReachEnd = true; - /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ - ui->tabMainWindow->setRunStatus(tr("回收槽到头")); - ui->tabMainWindow->enablePrintButton(true); //仅仅在此时能使能打印按钮 - ui->tabMainWindow->resetReclaimCtrlButtonText(); - // sysPara->devOp->highVoltageCtrl(1); - emit reclaimTankOpenDone(); - /*回收槽开关时间校正*/ - sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; - ui->tabSystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime ); - - qDebug()<<"reclaimTankOpenDone currReclaimTankPos:"<status.currReclaimTankPos; - qDebug()<<"reclaimTankOpenDone curr_reclaimTankTime:"<status.curr_reclaimTankTime; - } - else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 - { - sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭 - ui->tabMainWindow->resetReclaimCtrlButtonText(); - LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); - ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); - emit reclaimTankBlock(); - } - else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 - { - emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); - sysPara->status.reclaimBlockedCnt = 0; - - } - else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 - { - if(sysPara->devOp->isReclaimTankCloseEnable()) - sysPara->devOp->controlReclaimTankClose(false); //到头,关闭 - /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ - ui->tabMainWindow->setRunStatus(tr("回收槽到头")); - //sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零 - ui->tabMainWindow->resetReclaimCtrlButtonText(); - emit reclaimTankCloseDone(); - sysPara->status.lastRecycleWarn = 0; - sysPara->status.HVFaultCloseEn=0; - sysPara->status.reclainCloseAppending=false; - sysPara->status.canRunAirPushing = true; //下次开回收槽就执行排气程序 - qDebug()<<"reclaimTankCloseDone currReclaimTankPos:"<status.currReclaimTankPos; - qDebug()<<"reclaimTankCloseDone curr_reclaimTankTime:"<status.curr_reclaimTankTime; - } - else if(sysPara->status.reclaimTankstatus == 0x12 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 - { - sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 - LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); - ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); - ui->tabMainWindow->resetReclaimCtrlButtonText(); - emit reclaimTankBlock(); - } - else // if(sysPara->status.reclaimTankstatus == 7 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 - { - emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); - } -} - -static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable){ - if(enable){ - if(tab->indexOf(page) == -1){ - tab->addTab(page,name); - - } - } - else { - int index = tab->indexOf(page); - if(index != -1) - tab->removeTab(index); - } - -} - -static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable,int Pos){ - if(enable){ - if(tab->indexOf(page) == -1){ - tab->insertTab(Pos,page,name); - } - } - else { - int index = tab->indexOf(page); - if(index != -1) - tab->removeTab(index); - } - -} -void InkJetPrinter::onAuthChanged(int auth){ - - controlTabDisplay(this,ui->tabSystemSetting,tr("系统设置"),auth&AUTH_DISPLAY_SYSTEM_SETTING); - controlTabDisplay(this,ui->tabSystemManage,tr("系统管理"),auth&AUTH_DISPLAY_SYSTEM_MANAGE); - controlTabDisplay(this,ui->tabOtherInfo,tr("其他信息"),auth& AUTH_DISPLAY_OTHER_INFO); - controlTabDisplay(this,ui->tabLogInfo,tr("日志信息"),auth&AUTH_DISPLAY_LOG_INFO); - controlTabDisplay(this,ui->tabNetworkManager,tr("网络管理"),auth&AUTH_SUPER_USER1); - - // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),auth); - ui->tabPrintSetting->updateAuthorization(auth); - ui->tabSystemSetting->updateAuthorization(auth); - ui->tabNetworkManager->updateAuthorization(auth); -} - -void InkJetPrinter::onConfigChanged(void){ - - sysPara->loadParaFromFile(); -} - -/* - * 这个方法的主要目的是在切换tab时不要弹出输入法 - * - */ - -void InkJetPrinter::onInkJetPrinterCurrentChanged(int index) -{ - QWidget *w = widget(index); - if(w){ - QWidget *subWidget = w->focusWidget(); - if(subWidget) - subWidget->clearFocus(); - } - //if(index == 3||index == 3) //刷新打印设置这个界面 - { - ui->tabPrintSetting->update(); - } - -} - -void InkJetPrinter::closeEvent(QCloseEvent *event) -{ - event->ignore(); -} -void InkJetPrinter::resizeEvent(QResizeEvent *event){ - - event->ignore(); -} - -void InkJetPrinter::onChangeTab(QString) -{ - this->setCurrentIndex (indexOf( ui->tabPicEdit)); -} -void InkJetPrinter::onchangeEditMode(int) -{ - if(sysPara){ - if(sysPara->para.EditMode == PICFILE) { - insertTab(1,ui->tabPicEdit,tr("信息编辑")); - // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),0); - } - else if(sysPara->para.EditMode == TXTFILE|| sysPara->para.EditMode == SCENE){ - controlTabDisplay(this,ui->tabPicEdit,tr("信息编辑"),0); - // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),1,1); - } - ui->tabMainWindow->changeEditMode(sysPara->para.EditMode); - } - else{ - - } -} - - -void InkJetPrinter::OnSpeedOver(int mode) -{ - if(mode==2){ - //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); - msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); - msgtest->show(); - } - else if(mode==1){ - //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全!!!")); - msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全!!!")); - msgtest->show(); - } -} - -void InkJetPrinter::onPrintErrorStatus(QString s,unsigned int res) -{ - if(res==1 || sysPara->status.WorkTimeOut ){ - sysPara->status.WorkTimeOut =1; - sysPara->devOp->printCtrl( PRINT_CTRL_STOP); - //emit QMessageBox::warning(NULL,tr("警告"),s); - msgtest->setText(s); - msgtest->show(); - } - else if(res==2) { - //emit QMessageBox::warning(NULL,tr("警告"),s); - msgtest->setText(s); - msgtest->show(); - } - else if(res==3) { sysPara->status.WorkTimeOut =0; } -} -void InkJetPrinter::OnFinished(int event){ - //msgtest->setText(" ");msgtest->show(); - Q_UNUSED(event); - msgtest->hide(); - -} -void InkJetPrinter::OnBoxFinished(int event){ - //msgtest->setText(" ");msgtest->show(); - Q_UNUSED(event); - msgBox1->hide(); - -} -unsigned char BCDtoHEX(unsigned char BCD) -{ - unsigned char tempData; - - tempData = (BCD >> 4) * 10 + (BCD & 0x0F); - return (tempData); -} -void InkJetPrinter::refreshModbusStatus(void) -{ -#ifdef MODBUS - if (modbus->getModbusStatus() != 1) { - qDebug()<<"refresh get modbus error"; - return; - } - - qint16 fileNameSize = QFileInfo(sysPara->para.lastOpenedFileName).fileName().size(); - if (fileNameSize) { - if (fileNameSize > 100) { - fileNameSize = 100; - } - } - QString str = QFileInfo(sysPara->para.lastOpenedFileName).fileName(); - snprintf((char *)sysPara->modbusStatus.usedFileName, sizeof(sysPara->modbusStatus.usedFileName), "%s",(char *)str.toLatin1().constData()); - sysPara->modbusStatus.printStatus = ui->tabMainWindow->getCurrPrintStatus(); - memcpy(&sysPara->modbusStatus.curCalendarAndDate, &sysPara->status.calandar_and_dat, sizeof(sysPara->status.calandar_and_dat)); - - unsigned char tmp[4]; - memcpy(&tmp,&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,4); - tmp[0] = BCDtoHEX(tmp[0]); - tmp[1] = BCDtoHEX(tmp[1]); - tmp[2] = BCDtoHEX(tmp[2]); - tmp[3] = BCDtoHEX(tmp[3]); - //memcpy(&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,&tmp,4); - sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = tmp[3]*1000000 + tmp[2]*10000+ tmp[1]*100 + tmp[0] ; - //sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue).toUInt(0,16); - sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); - sysPara->modbusStatus.curCalendarAndDate.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); - sysPara->modbusStatus.curCalendarAndDate.cnt1End = sysPara->para.cnt1EndValue; - sysPara->modbusStatus.curCalendarAndDate.cnt2End = sysPara->para.cnt2EndValue; - sysPara->modbusStatus.curCalendarAndDate.cnt2Repeat = sysPara->para.cnt2RepeateValue; - sysPara->modbusStatus.curCalendarAndDate.cnt2InitValue = sysPara->para.cnt2StartValue; - sysPara->modbusStatus.productCnt = sysPara->status.productCnt; - - - sysPara->modbusStatus.statWarn = sysPara->status.RedLightOnFlag ; - // 显示正在打印内容的行数和列数 - int wmax = sysPara->status.currPrintRow; - if (sysPara->para.AlterMode) { - wmax = sysPara->status.currAlterPrintRow; - } - sysPara->modbusStatus.mbCurrPrintRow = wmax; - sysPara->modbusStatus.mbCurrPrintCol = sysPara->status.currPrintCol; -#endif -} - -void InkJetPrinter::onModbusWriteCalendar() -{ -#ifdef MODBUS - if (modbus->getModbusStatus() == -1) { - qDebug()<<"get modbus error"; - return; - } - - sysPara->para.cnt1StartValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; - sysPara->para.cnt1EndValue = sysPara->modbusParas.setCalendar.cnt1End; - sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1Repeat; - sysPara->para.cnt1StepValue = sysPara->modbusParas.setCalendar.cnt1Step; - - sysPara->para.cnt2StartValue = sysPara->modbusParas.setCalendar.cnt2InitValue; - sysPara->para.cnt2EndValue = sysPara->modbusParas.setCalendar.cnt2End; - sysPara->para.cnt2StepValue = sysPara->modbusParas.setCalendar.cnt2Repeat; - sysPara->para.cnt2RepeateValue = sysPara->modbusParas.setCalendar.cnt2Step; - - if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x02) { - sysPara->status.cnt2CurrentValueInitDoneFlag = 0; - } - if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x01) { - sysPara->status.cnt1CurrentValueInitDoneFlag = 0; - } - sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; - sysPara->para.cnt2CurrValue = sysPara->modbusParas.setCalendar.cnt2CurrValue; - sysPara->devOp->writeFpgaCalandar(0); - emit updataPara2UI(); -#endif -} - -void InkJetPrinter::close_jd_timer() -{ - timer->stop(); -} - - -void InkJetPrinter::handlePushButtonStartPressed(bool flag) -{ - pushButtonStartFlag = flag; - - if(flag) - { - PID_init(); - } - sysPara->status.gearPumpRunStopFlag = !flag;//齿轮泵开关 -} - -void InkJetPrinter::handleInitedPID() -{ - PID_init(); -} - -void InkJetPrinter::recievedFile2Save(QString fileName) -{ - //qDebug() << "recieveFile2Save:"<exists(saveName); - if (exist) - { - createfile->remove(saveName); - }//end if - QFile::copy ( sourceName,saveName ); - emit openFile(saveName,false); - //emit startPrint();确认接收到消息立即打印 - //ui->tabMainWindow->getTexteditOption()->onFileOpen(saveName,false); - //ui->tabMainWindow->on_pushButtonStartPrint_pressed(); - } - else { - - } -} - -void InkJetPrinter::viscosity_timerHandler() -{ - if(!firstTime) - qDebug()<<"错误!粘度计故障:检测不到上位灯"; - // LogInfo::setRunStatusText(tr("错误!粘度计故障:检测不到上位灯")); - viscosity_timer->stop(); - firstTime = 0; -} - -void InkJetPrinter::disableTabClick(){ - this->setDisabled(true); - this->setCurrentIndex(0); -} - -void InkJetPrinter::enableInkJetTabClick(bool flag){ - this->setEnabled(flag); -} - -bool InkJetPrinter::eventFilter(QObject *watched, QEvent *event) -{ - - if(sysPara->status.flagOfKeyBoardType) - return QTabWidget::eventFilter(watched,event); - - QSpinBox *qsb=dynamic_cast(watched); - QLineEdit *qle=dynamic_cast(watched); - QTextEdit *qte=dynamic_cast(watched); - QMouseEvent *me = dynamic_cast(event); - switch (event->type()){ - case QEvent::FocusIn: - if(qsb&&!qsb->isReadOnly() - ||qle&&!qle->isReadOnly() - ||qte&&!qte->isReadOnly())myInputMethod->updateHandler(1); - break; - case QEvent::FocusOut: - myInputMethod->updateHandler(2); - break; - } - - return QTabWidget::eventFilter(watched,event); -} - -void InkJetPrinter::sendDataManual(QString cmdstr,QString addrstr,QString datastr,QString lenstr,QString typestr){ - qDebug()<<"sendDataManual!!!"; - bool ok; - quint8 arr[8]={0xAA,0x02,0x03,0x01,0x11,0x00,0x00,0x55}; - int cmd = cmdstr.toInt(&ok,16); - int addr = addrstr.toInt(&ok,16); - int len = lenstr.toInt(&ok,10); - int type = typestr.toInt(&ok,10); - QByteArray data; - data.resize(datastr.length() / 2); - - for (int i = 0; i < datastr.length(); i += 2) { - // 提取每两个字符 - QString byteString = datastr.mid(i, 2); - // 将16进制字符串转换为unsigned char - bool ok; - unsigned char byte = static_cast(byteString.toUInt(&ok, 16)); - data[i / 2] = byte; - } - // quint16 data1[] = {68, 90, 108, 125, 141, 156, 170, 170, 180, 193, 204, 214}; - const char* charData = data.constData(); - - // 转换为 unsigned char 指针 - const unsigned char* unsignedCharData = reinterpret_cast(charData); -} - -void InkJetPrinter::slt_showMsg(QString msg) -{ - msgtest->setText(msg); - msgtest->show(); - LogInfo::setRunStatusText(msg); -} - -/*************************FPGA通过串口读取状态赋值给status-start******************************************/ -void InkJetPrinter::saveFPGAVersionNum(unsigned int data){ - sysPara->status.fpgaVersionNum=data; -} -unsigned char statWarnTempData=0; -void InkJetPrinter::saveFPGAStatus(unsigned char *data){ - quint16 len=data[5]; - len=len<<8; - len+=data[6]; - unsigned char *target= ((unsigned char *)&sysPara->status); - for(int i=0;istatus.dummy != sysPara->status.isPrinting && sysPara->status.selfCheckDone){ - sysPara->status.isPrinting = sysPara->status.dummy; - ui->tabMainWindow->updatePrintDisplayLabel(); - } -} - -void InkJetPrinter::saveFPGAPhaseDetectHighTm(unsigned char *data){ - quint16 len=data[5]; - len=len<<8; - len+=data[6]; - unsigned char *target= ((unsigned char *)&sysPara->status.phaseDetectHighTm); - for(int i=0;istatus.calandar_and_dat); - for(int i=0;istatus.Status_Counter3.cnt3CurrValue); - for(int i=0;istatus.XXXDay); - for(int i=0;idevOp->stopSendDataFPGA = true; - else - sysPara->devOp->stopSendDataFPGA = false; -} - -void InkJetPrinter::stopSendSTM32Data(bool flag){ - if(flag) - sysPara->devOp->stopSendDataSTM32 = true; - else - sysPara->devOp->stopSendDataSTM32 = false; -} - - -/*************************FPGA通过串口读取状态赋值给status-end******************************************/ - - - -//------------------------------------------------------------------------------------------------------------------------------------------ - - - -/*************************STM32通过串口读取状态赋值给status-start******************************************/ -void InkJetPrinter::saveSTM32Status(unsigned char *data){ - unsigned char *target= ((unsigned char *)&sysPara->status)+0x44; - for(int i=0;istatus.reclaimTankstatus); - emit showMotorIsen(sysPara->status.MOTOR_ISEN,sysPara->status.AD_FIXED); -} - -void InkJetPrinter::saveGearPumpVal(unsigned char *data){ - unsigned char *target= ((unsigned char *)&sysPara->para.gearPumpValue); - for(int i=0;ipara.gearPumpValue > 0) - return; - - unsigned char *target= ((unsigned char *)&PulseCnt); - for(int i=0;istatus.stm32Verion); - for(int i=0;istatus.flagOfPowerOnMode = (sysPara->status.stm32Verion>>23) & 0x01; - if(sysPara->status.flagOfPowerOnMode) - sysPara->status.waitPowerOffTime = 18;//半个小时 - else - sysPara->status.waitPowerOffTime = 0; - LogInfo::setRunStatusText(tr("flagOfPowerOnMode: %1").arg(sysPara->status.flagOfPowerOnMode)); - QString STM32Ver = QString("%1.%2.%3").arg((sysPara->status.stm32Verion>>16)&0x7F) - .arg((sysPara->status.stm32Verion>>8) & 0xFF).arg(sysPara->status.stm32Verion&0xFF); - qDebug()<<"STM32Ver:"<status.stm32Time = true; - } - - QString Year = QString::number(datatime[0])+QString::number(datatime[1]); - QString Month = QString("%1").arg(datatime[2], 2, 10, QChar('0')); - QString Day = QString("%1").arg(datatime[3], 2, 10, QChar('0')); - QString Week = QString::number(datatime[4]); - - QString Hour = QString("%1").arg(datatime[5], 2, 10, QChar('0')); - QString Minute = QString("%1").arg(datatime[6], 2, 10, QChar('0')); - QString Second = QString("%1").arg(datatime[7], 2, 10, QChar('0')); - QString date = Year+"-"+Month+"-"+Day+" "+Hour+":"+Minute+":"+Second; - qDebug()<tabSystemManage->PowerOnSetTime(date); - -} - - -/*************************STM32通过串口读取状态赋值给status-end******************************************/ - - -void InkJetPrinter::closedSerial(){ - if(m_serialThreadFPGA->isRunning()){ - m_serialThreadFPGA->quit(); - m_serialThreadFPGA->wait(); - } - if(m_serialThreadSTM32->isRunning()){ - m_serialThreadSTM32->quit(); - m_serialThreadSTM32->wait(); - } - if(serialFPGA) - delete serialFPGA; - if(serialSTM32) - delete serialSTM32; -} - - -static int highPressureCnt = 0; -static unsigned int logCnt = 0; -void InkJetPrinter::checkPressureControl(){ //1s - unsigned int alarmPressure = 0; - if(sysPara->para.pressure <= 700) - alarmPressure = 800; - else - alarmPressure = 950; - - if(sysPara->status.PRESSURE > alarmPressure) - highPressureCnt++; - else - highPressureCnt = 0; - - if(highPressureCnt >= 4 && sysPara->status.PRESSURE > 1000){ - QString str = tr("压力过高,请检查管路是否堵塞,然后点击故障恢复按钮"); - showMessage(str); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - sysPara->status.isPumpValveControledByHand = true; - sysPara->devOp->mainInkCtrl(); - sysPara->status.flagOfPressureFault = true; - } -} - -void InkJetPrinter::showMessage(QString str){ - if(logCnt++ % 30 == 0){ - LogInfo::setRunStatusText(str); - qDebug()<devOp->color_flag = 2; - ui->tabMainWindow->setRunStatus(str); -} - -#ifdef __RFID_CARD -void InkJetPrinter::initRFIDManager() -{ - if (manager_rfid == nullptr) { - manager_rfid = RFIDManager::instance(); - connect(manager_rfid, &RFIDManager::sig_showMsg, - this, &InkJetPrinter::slt_showMsg); - } -} -#endif - -void InkJetPrinter::resetPressureCnt(){ - logCnt = 0; - highPressureCnt = 0; -} - -void InkJetPrinter::pressureAdjustForsystemseeting(){ - pressureAdj(); -} - -void InkJetPrinter::closeSerialFPGA(){ - if(m_serialThreadFPGA->isRunning()){ - m_serialThreadFPGA->quit(); - m_serialThreadFPGA->wait(); - } - - if(serialFPGA) - delete serialFPGA; -} - -void InkJetPrinter::closeSerialSTM32(){ - if(m_serialThreadSTM32->isRunning()){ - m_serialThreadSTM32->quit(); - m_serialThreadSTM32->wait(); - } - if(serialSTM32) - delete serialSTM32; -} - -void InkJetPrinter::restartSerialPort(){ - - closeSerialFPGA(); - closeSerialSTM32(); - - serialFPGA = new Serial("/dev/ttyAS5"); - serialFPGA->moveToThread(m_serialThreadFPGA); - connect(serialFPGA,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); - connect(serialFPGA,SIGNAL(resendFPGAData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); - connect(sysPara->devOp,SIGNAL(sendSerialDataToFPGA(int,int,unsigned char*,int,int)),serialFPGA,SLOT(sendSerialData(int,int,unsigned char*,int,int)),Qt::QueuedConnection); - connect(serialFPGA,SIGNAL(getFPGAVersion(uint)),this,SLOT(saveFPGAVersionNum(uint))); - connect(m_serialThreadFPGA,&QThread::started,serialFPGA,&Serial::startInitSlot); - connect(serialFPGA,SIGNAL(stopSendData(bool)),this,SLOT(stopSendFPGAData(bool))); - connect(serialFPGA,SIGNAL(getFPGAPhaseDetectHighTm(unsigned char*)),this,SLOT(saveFPGAPhaseDetectHighTm(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGAStatus(unsigned char*)),this,SLOT(saveFPGAStatus(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGACalandarAndDat(unsigned char*)),this,SLOT(saveFPGACalandarAndDat(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGACnt3CurrValue(unsigned char*)),this,SLOT(saveFPGACnt3CurrValue(unsigned char*))); - connect(serialFPGA,SIGNAL(getFPGAXXXDay(unsigned char*)),this,SLOT(saveFPGAXXXDay(unsigned char*))); - connect(serialFPGA,SIGNAL(queueSizeFPGA(int)),ui->tabMainWindow,SLOT(showFPGAqueuesize(int))); - connect(serialFPGA,SIGNAL(queueFPGASizeSIG(int)),ui->tabMainWindow,SLOT(showqueueFPGAsize(int))); - connect(serialFPGA, &Serial::FPGABuildDat, this, [this](int buildTime){ - sysPara->status.build_dat.builTime = quint16(buildTime); - qDebug() << "FPGA build time: " << buildTime; - }); - - serialSTM32 = new Serial("/dev/ttyAS2"); - serialSTM32->moveToThread(m_serialThreadSTM32); - connect(serialSTM32,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendSTM32Date(int,int,unsigned char*,int,int))); - connect(sysPara->devOp,SIGNAL(sendSerialDataToSTM32(int,int,unsigned char*,int,int)),serialSTM32,SLOT(sendSerialData(int,int,unsigned char*,int,int))); - connect(serialSTM32,SIGNAL(getSTM32Status(unsigned char*)),this,SLOT(saveSTM32Status(unsigned char*))); - connect(serialSTM32,SIGNAL(getGearPumpVal(unsigned char*)),this,SLOT(saveGearPumpVal(unsigned char*))); - connect(serialSTM32,SIGNAL(getPulseCnt(unsigned char*)),this,SLOT(savePulseCntVal(unsigned char*))); - connect(serialSTM32,SIGNAL(getSTM32Version(unsigned char*)),this,SLOT(saveSTM32Version(unsigned char*))); - connect(serialSTM32,SIGNAL(getSTM32Time(unsigned char*)),this,SLOT(saveSTM32Time(unsigned char*))); - connect(serialSTM32,SIGNAL(stopSendData(bool)),this,SLOT(stopSendSTM32Data(bool))); - connect(serialSTM32,SIGNAL(powerOffReady()),ui->tabMainWindow,SLOT(powerOffConfirmed())); - connect(m_serialThreadSTM32,&QThread::started,serialSTM32,&Serial::startInitSlot); - connect(serialSTM32,SIGNAL(queueSizeSTM32(int)),ui->tabMainWindow,SLOT(showSTM32queuesize(int))); - - flagOfSerialThreadStratEn = true; -} +#include "InkJetPrinter.h" +#include "ui_inkjetprinter.h" +#include "QDebug" +#include "LogInfo.h" +#include "mainwindow.h" +#include "DlgVolteParaNo73.h" +#include "DlgVoltePara25Dots.h" +#include "./Network/NetworkManager.h" +#include "ZkEdit.h" +#include "myinclude.h" +#include +#include +#include +#include +#include + +#define MAX_VOL 300 +#define MIN_VOL 0 +void PID_init(); +#define ONLYCNTCLEAR +extern MyInputMethod *myInputMethod; +static bool firstTime = true; +static unsigned int PulseCnt = 0; //时间间隔内的脉冲累计数 +InkJetPrinter::InkJetPrinter(QWidget *parent) : + QTabWidget(parent), + ui(new Ui::InkJetPrinter) +{ + // 隐藏系统任务栏,隐藏后,如果需要激活任务栏,则需要呼出QtUI中的任意弹出式、非全屏窗口,然后使用鼠标将光标移动至屏幕最左侧或最顶部则可以呼出任务栏 + int ret = system("xfconf-query -c xfce4-panel -p /panels/panel-1/autohide-behavior -s 2"); + qInfo() << "Hide system panel ret:" << ret; + +// system("ifconfig eth1 down"); + ui->setupUi(this); + SysPara *para = new SysPara(); + bindSysPara(para); + ui->tabMainWindow->bindSysPara(para); + sysPara->status.InkOrSOLVEmptyCnt=0; + + t1.start();//calandar_and_dat_t + fileTransceiv = new FileTranseceiver(5001); + QObject::connect(fileTransceiv,SIGNAL(fileRecieved(QString)),this,SLOT(recievedFile2Save(QString))); + fileTransceiv->start(); + + //edit@12-30 + tcpTransceiv = new FileTranseceiver(5002); + tcpTransceiv->start(); + + + connect(ui->tabMainWindow,SIGNAL(closeSerial()),this,SLOT(closedSerial())); + qDebug()<<"main thread id:"<< QString("0x%1").arg(reinterpret_cast(QThread::currentThreadId()), 0, 16); + + m_serialThreadFPGA = new QThread; + serialFPGA = new Serial("/dev/ttyAS5"); + + connect(m_serialThreadFPGA,&QThread::started,serialFPGA,&Serial::startInitSlot); + + serialFPGA->moveToThread(m_serialThreadFPGA); + connect(serialFPGA,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); + connect(serialFPGA,SIGNAL(resendFPGAData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); + connect(sysPara->devOp,SIGNAL(sendSerialDataToFPGA(int,int,unsigned char*,int,int)),serialFPGA,SLOT(sendSerialData(int,int,unsigned char*,int,int)),Qt::QueuedConnection); + connect(serialFPGA,SIGNAL(getFPGAVersion(uint)),this,SLOT(saveFPGAVersionNum(uint))); + + connect(serialFPGA,SIGNAL(stopSendData(bool)),this,SLOT(stopSendFPGAData(bool))); + connect(serialFPGA,SIGNAL(getFPGAPhaseDetectHighTm(unsigned char*)),this,SLOT(saveFPGAPhaseDetectHighTm(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGAStatus(unsigned char*)),this,SLOT(saveFPGAStatus(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGACalandarAndDat(unsigned char*)),this,SLOT(saveFPGACalandarAndDat(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGACnt3CurrValue(unsigned char*)),this,SLOT(saveFPGACnt3CurrValue(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGAXXXDay(unsigned char*)),this,SLOT(saveFPGAXXXDay(unsigned char*))); + connect(serialFPGA,SIGNAL(queueSizeFPGA(int)),ui->tabMainWindow,SLOT(showFPGAqueuesize(int))); + connect(serialFPGA,SIGNAL(queueFPGASizeSIG(int)),ui->tabMainWindow,SLOT(showqueueFPGAsize(int))); + connect(serialFPGA, &Serial::FPGABuildDat, this, [this](int buildTime){ + sysPara->status.build_dat.builTime = quint16(buildTime); + qDebug() << "FPGA build time: " << buildTime; + }); + + m_serialThreadSTM32 = new QThread(); + serialSTM32 = new Serial("/dev/ttyAS2"); + + connect(m_serialThreadSTM32,&QThread::started,serialSTM32,&Serial::startInitSlot); + + serialSTM32->moveToThread(m_serialThreadSTM32); + connect(serialSTM32,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendSTM32Date(int,int,unsigned char*,int,int))); + connect(sysPara->devOp,SIGNAL(sendSerialDataToSTM32(int,int,unsigned char*,int,int)),serialSTM32,SLOT(sendSerialData(int,int,unsigned char*,int,int))); + connect(serialSTM32,SIGNAL(getSTM32Status(unsigned char*)),this,SLOT(saveSTM32Status(unsigned char*))); + connect(serialSTM32,SIGNAL(getGearPumpVal(unsigned char*)),this,SLOT(saveGearPumpVal(unsigned char*))); + connect(serialSTM32,SIGNAL(getPulseCnt(unsigned char*)),this,SLOT(savePulseCntVal(unsigned char*))); + connect(serialSTM32,SIGNAL(getSTM32Version(unsigned char*)),this,SLOT(saveSTM32Version(unsigned char*))); + connect(serialSTM32,SIGNAL(getSTM32Time(unsigned char*)),this,SLOT(saveSTM32Time(unsigned char*))); + connect(serialSTM32,SIGNAL(stopSendData(bool)),this,SLOT(stopSendSTM32Data(bool))); + connect(serialSTM32,SIGNAL(powerOffReady()),ui->tabMainWindow,SLOT(powerOffConfirmed())); + + connect(serialSTM32,SIGNAL(queueSizeSTM32(int)),ui->tabMainWindow,SLOT(showSTM32queuesize(int))); + connect(ui->tabSystemManage,SIGNAL(upgradeSTM32(QString)),serialSTM32,SLOT(upgradeSTM32File(QString))); + connect(ui->tabSystemManage,SIGNAL(enableClick(bool)),this,SLOT(enableInkJetTabClick(bool))); + connect(serialSTM32,SIGNAL(progress(int,int)),ui->tabSystemManage,SLOT(progressBarControl(int,int))); + + connect(serialSTM32, &Serial::STM32Connected, this, [this](bool ok, QString errStr){ + if(!ok || !sysPara || !sysPara->devOp) { + return; + } + + QTimer::singleShot(1000, this, [this](){ + sysPara->devOp->highVoltageCtrl(0); + LogInfo::setRunStatusText("High voltage forced off at app boot"); + }); + + }, Qt::QueuedConnection); + + connect(ui->tabSystemManage,SIGNAL(sigToCloseSerialFPGA()),this,SLOT(closeSerialFPGA())); + connect(ui->tabSystemManage,SIGNAL(sigToCloseSerialSTM32()),this,SLOT(closeSerialSTM32())); + connect(ui->tabSystemManage,SIGNAL(restartSerial()),this,SLOT(restartSerialPort())); + flagOfSerialThreadStratEn = true; + + connect(this,SIGNAL(showReclaimTankstatus(unsigned char)),ui->tabPrintSetting,SLOT(showReclaimTankstatusslot(unsigned char))); + connect(this,SIGNAL(showMotorIsen(int,int)),ui->tabPrintSetting,SLOT(showMotorIsenVal(int,int))); + connect(ui->tabPrintSetting,SIGNAL(HiddenFunction(bool)),ui->tabMainWindow->getTexteditOption(),SLOT(SetHiddenValue(bool))); + ui->tabMainWindow->SetEditMode(sysPara->para.EditMode); + ui->tabOtherInfo->bindSysPara(para); + ui->tabPrintSetting->bindSysPara(para); + ui->tabSystemSetting->bindSysPara(para); + ui->tabOtherInfo->bindSysPara(para); + ui->tabTriggerMode->bindSysPara(para); + ui->tabSystemManage->bindSysPara(para); + ui->tabPicEdit->bindSysPara(para); + ui->tabNetworkManager->bindSysPara(para); + +//--------------------------------------------------------------------------- +// byons电压调整部分 + + voltePara25DotsDlg = nullptr; + no73VolteParaDlg = nullptr; + if (sysPara && sysPara->devOp) { + #ifdef ENB_VOLTAGE_ADJUST_NO72 + voltePara25DotsDlg = new DlgVoltePara25Dots(sysPara->devOp, this); + voltePara25DotsDlg->setWindowFlags(Qt::Widget); + voltePara25DotsDlg->setAttribute(Qt::WA_DeleteOnClose, false); + voltePara25DotsDlg->bindSysPara(sysPara); + voltePara25DotsDlg->onBtnLoadClicked(); + insertTab(1, voltePara25DotsDlg, tr("电压调整No72")); + #endif + + #ifdef ENB_VOLTAGE_ADJUST_NO73 + no73VolteParaDlg = new DlgVolteParaNo73(sysPara->devOp, this); + no73VolteParaDlg->setWindowFlags(Qt::Widget); + no73VolteParaDlg->setAttribute(Qt::WA_DeleteOnClose, false); + no73VolteParaDlg->bindSysPara(sysPara); + no73VolteParaDlg->onBtnLoadClicked(); + insertTab(1, no73VolteParaDlg, tr("电压调整No73")); + #endif + } + +//end voltage--------------------------------------------------------------------------- + + ui->tabSystemManage->loadKeyBoardType(); + + //以下两个信号要在(ui->tabMainWindow->updateSysParaToUI();)之前绑定,否则获取不到文本框的更新值 + connect (ui->tabTriggerMode,SIGNAL(autoUpdateFontWidthByTriggerCtrl(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); + connect (ui->tabMainWindow,SIGNAL(autoUpdateFontWidthByMainWindow(const unsigned int)),ui->tabPrintSetting,SLOT(autoUpdateFontWidth(const unsigned int))); + connect(ui->tabMainWindow,SIGNAL(readFPGAVersionReady()),ui->tabPrintSetting,SLOT(getFpgaVersionSetDisable())); + ui->tabMainWindow->updateSysParaToUI(); + + ui->tabPrintSetting->updateSysParaToUI(); + ui->tabSystemSetting->updateSysParaToUI(); + ui->tabOtherInfo->updateSysParaToUI(); + ui->tabTriggerMode->updateSysParaToUI(); + + dlgShowMsg =new DlgShowMsg; + dlgShowMsg->hide(); + +#ifdef __RFID_CARD + initRFIDManager(); +#endif + timer = new QTimer(); + connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); + timer->start(10); + + qDebug()<<"timer status:"<isActive(); + + viscosity_timer = new QTimer(); + connect(viscosity_timer, SIGNAL(timeout()), this, SLOT(viscosity_timerHandler())); + + if(sysPara->para.gearPumpEnable) + { + pushButtonStartFlag = true; + } + + connect(this,SIGNAL(currentChanged(int)),this,SLOT(onInkJetPrinterCurrentChanged(int))); + connect(this,SIGNAL(setReclaimTankCurrentPos(int)),ui->tabMainWindow,SLOT(onReclainTankPositionChanged(int))); + + connect(this,SIGNAL(reclaimTankCloseDone()),ui->tabMainWindow,SLOT(checkForPowerOff())); + connect(this,SIGNAL(reclaimTankBlock()),this,SLOT(onReclaimTankBlock())); + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),this,SLOT(onAuthChanged(int))); + connect (this,SIGNAL(sendPicScene(PicScene*)),ui->tabPrintSetting,SLOT(updateUIForSpecialCondition(PicScene*))); + + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabOtherInfo,SLOT(onAuthChanged(int))); + //test + connect(ui->tabMainWindow,SIGNAL(InkjetCleanUP()),ui->tabSystemSetting,SLOT(on_pushButtonCleanUP_pressed())); + connect(ui->tabMainWindow,SIGNAL(clearPressureFault()),this,SLOT(resetPressureCnt())); + connect(ui->tabSystemSetting,SIGNAL(pressureAdjust()),this,SLOT(pressureAdjustForsystemseeting())); + +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + connect(this,SIGNAL(updateCnt1GroupDisp(bool)), + ui->tabPrintSetting,SLOT(onUpdateCnt1GroupDisp(bool))); +#endif + initCntGroup(); + + msgtest = new QMessageBox(this); + connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); + msgBox1 = new QMessageBox(this); + connect(msgBox1, SIGNAL(finished(int)), this, SLOT(OnBoxFinished(int))); + + connect(ui->tabPrintSetting->dlgInputAddr,SIGNAL(printErrorStatus(QString,unsigned int)),this,SLOT(onPrintErrorStatus(QString,unsigned int)));// + connect(ui->tabSystemSetting,SIGNAL(changeEditMode(int)),this,SLOT(onchangeEditMode(int))); + connect(ui->tabSystemSetting,SIGNAL(setRunStatus(QString )),ui->tabMainWindow,SLOT(setRunStatus(QString))); + + connect(ui->tabPrintSetting->dlgInputAddr,SIGNAL(changeMac(QString)),ui->tabMainWindow,SLOT(UpdateUIVersion())); + connect(ui->tabSystemManage,SIGNAL(enableReclaimButton(bool)),ui->tabMainWindow,SLOT(onEnableReclaimCtrlButton(bool))); + connect(ui->tabSystemManage,SIGNAL(configChanged(void)),this,SLOT(onConfigChanged(void))); + connect(ui->tabPrintSetting, SIGNAL(change_OutputPulse()), ui->tabTriggerMode, SLOT(OutputPulse())); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabSystemSetting,SLOT( SystemupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabOtherInfo,SLOT( OtherupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabTriggerMode,SLOT( TriggerupdateSysParaToUI() )); + connect (ui->tabMainWindow,SIGNAL(openFileChange()),ui->tabMainWindow->getTexteditOption(),SLOT( updateSysParaToZero() )); + connect (ui->tabMainWindow,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + //if(sysPara->para.EditMode==PICFILE){ + connect(ui->tabPrintSetting,SIGNAL(authChanged(int)),ui->tabPicEdit,SLOT(updateAuthorization(int)));// 字库编辑使能 + connect (ui->tabPicEdit,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + connect (ui->tabPicEdit ,SIGNAL(openCurrentFile (QString ,bool )),ui->tabMainWindow,SLOT(openPicFIleOpen(QString ,bool ))); + connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),ui->tabPicEdit,SLOT( EditCurrFile(QString))); + connect (ui->tabPicEdit ,SIGNAL(setMainTabEdit (int)),ui->tabMainWindow,SLOT(SetMainTabEdit(int))); + //} + //connect (ui->tabPrintSetting,SIGNAL(setMainTabNow(int)),this,SLOT(setCurrentIndex(int))); + + connect (ui->tabMainWindow,SIGNAL(openCurrFile(QString)),this,SLOT(onChangeTab(QString))); + + connect(ui->tabPrintSetting,SIGNAL(checkPrintIntervalSignal()),ui->tabMainWindow,SLOT(checkPrintingInterval())); + connect(ui->tabTriggerMode,SIGNAL(checkPrintIntervalSignal()),ui->tabMainWindow,SLOT(checkPrintingInterval())); + + connect (ui->tabMainWindow,SIGNAL(CloseJd()),this,SLOT(close_jd_timer())); + connect (ui->tabMainWindow,SIGNAL(pushButtonStartPressed(bool)),this,SLOT(handlePushButtonStartPressed(bool))); + connect (ui->tabMainWindow,SIGNAL(repeatInitedPid()),this,SLOT(handleInitedPID())); + connect (ui->tabMainWindow,SIGNAL(setCNT1Select(bool)),ui->tabPrintSetting,SLOT(setCNT1BackColor(bool))); + connect (ui->tabMainWindow,SIGNAL(setCNT2Select(bool)),ui->tabPrintSetting,SLOT(setCNT2BackColor(bool))); + connect (ui->tabMainWindow,SIGNAL(setCNT3Select(bool)),ui->tabPrintSetting,SLOT(setCNT3BackColor(bool))); + connect(ui->tabMainWindow,SIGNAL(setDisableAll()),this,SLOT(disableTabClick())); + + connect(ui->tabPrintSetting,SIGNAL(engineerMode(bool)),ui->tabSystemManage,SLOT(engieerModeAcceptSystemManage(bool))); + connect(ui->tabPrintSetting, SIGNAL(engineerMode(bool)), ui->tabSystemSetting, SLOT(setFreqFixVisible(bool))); + + sysPara->status.rWarnViscoReady=0; + + // hlp: 260608: 以授权为标准,不过度开放权限 + onAuthChanged(AUTH_NONE); +// onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); + + + sysPara->status.WorkTimeOut=0; + ui->tabMainWindow->changeEditMode(0); + emit onchangeEditMode(0); // 20140912 + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); +#ifdef MYTEST + onAuthChanged(AUTH_NONE | AUTH_SUPER_USER2 |AUTH_DISPLAY_SYSTEM_SETTING| 0xffff); +#else + ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); +#endif + sysPara->status.viscosityFaultCnt=0; + setCurrentIndex(0); + sysPara->status.updateSoftEN=0; + sysPara->status.adjHightVolInitEN=0; + sysPara->status.FileChangeRestCntFlag=0; + sysPara->status.HVFaultCloseEn=0; + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + sysPara->devOp->writeFpgaCalandar(1); + //qDebug()<para.calandar_and_dat.year; + sysPara->status.cnt1GroupRunningIndex=0; + //sysPara->status.cnt1RepeatCurrent=0; + sysPara->status.cnt1GroupCurrentLoop=0; + + //JSON data + connect(ui->tabNetworkManager, SIGNAL(updateJSONData()), ui->tabMainWindow, SLOT(JSON_UpdateDATA()), Qt::QueuedConnection); + connect(ui->tabNetworkManager,SIGNAL(net_stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); + connect(ui->tabMainWindow,SIGNAL(getJSONData()),ui->tabNetworkManager,SLOT(on_GetJsonpushButton_clicked()), Qt::QueuedConnection); + connect(ui->tabNetworkManager,SIGNAL(OpenNewFile()),ui->tabMainWindow->getTexteditOption(),SLOT(onOpenNewFile()), Qt::QueuedConnection); + //JSON data +#ifdef MODBUS + + modbus = NULL; + memset((uint8_t *)&sysPara->modbusParas, 0, sizeof(sysPara->modbusParas)); + sysPara->modbusStatus.receiveEnbleFlag = 1; + snprintf((char *)sysPara->modbusParas.selectFileName, sizeof(sysPara->modbusParas.selectFileName), "%s",QFileInfo(sysPara->para.lastOpenedFileName).fileName().toLatin1().constData()); + modbus = new ModbusTcp(&sysPara->modbusParas, &sysPara->modbusStatus); + m_thread = new QThread(); + modbus->moveToThread(m_thread); + connect(m_thread, SIGNAL(started()),modbus,SLOT(pvPollingThread())); + connect(modbus, SIGNAL(updateQRcode()), ui->tabMainWindow, SLOT(modbusUpdateQRCode()), Qt::QueuedConnection); + connect(modbus, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); + connect(modbus, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); + connect(modbus, SIGNAL(pausePrint()), ui->tabMainWindow, SLOT(on_pushButtonPausePrint_pressed()), Qt::QueuedConnection);//暂时屏蔽排除问题 + connect(modbus,SIGNAL(stopPrint()),ui->tabMainWindow,SLOT(on_pushButtonStopPrint_pressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar()),this,SLOT(onModbusWriteCalendar()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar1()),this,SLOT(onModbusWriteCalendar1CurrValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar1EndValue()),this,SLOT(onModbusWriteCalendar1EndValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2EndValue()),this,SLOT(onModbusWriteCalendar2EndValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2RepeatValue()),this,SLOT(onModbusWriteCalendar2RepeatValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(writeCalendar2InitValue()),this,SLOT(onModbusWriteCalendar2InitValue()), Qt::QueuedConnection); + connect(modbus,SIGNAL(CNTResetNow()),ui->tabMainWindow,SLOT(onModbusCNTResetNowPressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(faultResume()),ui->tabMainWindow,SLOT(onLabelFaultRusumePressed()), Qt::QueuedConnection); + connect(modbus,SIGNAL(mbLineAndCharSpace(int, int)),ui->tabMainWindow->getTexteditOption(),SLOT(onMbSetLineAndChar(int, int)), Qt::QueuedConnection); + connect(this,SIGNAL(updataPara2UI()),ui->tabPrintSetting,SLOT( PrintupdateSysParaToUI() ), Qt::QueuedConnection); + connect(this, SIGNAL(openFile(QString,bool)), ui->tabMainWindow->getTexteditOption(), SLOT(onFileOpen(QString,bool)), Qt::QueuedConnection); + connect(this, SIGNAL(startPrint()), ui->tabMainWindow, SLOT(on_pushButtonStartPrint_pressed()), Qt::QueuedConnection); +#endif + + ui->tabMainWindow->enableReclaimCtrlButton(false); + + + + + //edit@12-14 + connect(this,SIGNAL(currentChanged(int)),ui->tabMainWindow,SLOT(onInkJetPrinterCurrentChanged(int)), Qt::QueuedConnection); + //pidControllerInit(); + PID_init(); + + removeTab(indexOf(ui->tabDacAdjust)); + removeTab(indexOf(ui->tabFpgaDebug)); + ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tab_3)); + + ui->vol0SpinBox->setMinimum(0); + ui->vol1SpinBox->setMinimum(0); + ui->vol2SpinBox->setMinimum(0); + ui->vol3SpinBox->setMinimum(0); + ui->vol4SpinBox->setMinimum(0); + ui->vol5SpinBox->setMinimum(0); + ui->vol6SpinBox->setMinimum(0); + ui->vol7SpinBox->setMinimum(0); + ui->vol8SpinBox->setMinimum(0); + ui->vol9SpinBox->setMinimum(0); + ui->vol10SpinBox->setMinimum(0); + ui->vol11SpinBox->setMinimum(0); + ui->vol12SpinBox->setMinimum(0); + ui->vol13SpinBox->setMinimum(0); + ui->vol14SpinBox->setMinimum(0); + ui->vol15SpinBox->setMinimum(0); + ui->vol16SpinBox->setMinimum(0); + ui->vol17SpinBox->setMinimum(0); + ui->vol18SpinBox->setMinimum(0); + ui->vol19SpinBox->setMinimum(0); + ui->vol20SpinBox->setMinimum(0); + ui->vol21SpinBox->setMinimum(0); + ui->vol22SpinBox->setMinimum(0); + ui->vol23SpinBox->setMinimum(0); + ui->vol24SpinBox->setMinimum(0); + ui->vol25SpinBox->setMinimum(0); + ui->vol26SpinBox->setMinimum(0); + ui->vol27SpinBox->setMinimum(0); + ui->vol28SpinBox->setMinimum(0); + ui->vol29SpinBox->setMinimum(0); + ui->vol30SpinBox->setMinimum(0); + ui->vol31SpinBox->setMinimum(0); + ui->vol32SpinBox->setMinimum(0); + ui->vol33SpinBox->setMinimum(0); + ui->vol34SpinBox->setMinimum(0); + ui->vol35SpinBox->setMinimum(0); + ui->vol36SpinBox->setMinimum(0); + ui->vol37SpinBox->setMinimum(0); + ui->vol38SpinBox->setMinimum(0); + ui->vol39SpinBox->setMinimum(0); + + ui->vol0SpinBox->setMaximum(MAX_VOL); + ui->vol1SpinBox->setMaximum(MAX_VOL); + ui->vol2SpinBox->setMaximum(MAX_VOL); + ui->vol3SpinBox->setMaximum(MAX_VOL); + ui->vol4SpinBox->setMaximum(MAX_VOL); + ui->vol5SpinBox->setMaximum(MAX_VOL); + ui->vol6SpinBox->setMaximum(MAX_VOL); + ui->vol7SpinBox->setMaximum(MAX_VOL); + ui->vol8SpinBox->setMaximum(MAX_VOL); + ui->vol9SpinBox->setMaximum(MAX_VOL); + ui->vol10SpinBox->setMaximum(MAX_VOL); + ui->vol11SpinBox->setMaximum(MAX_VOL); + ui->vol12SpinBox->setMaximum(MAX_VOL); + ui->vol13SpinBox->setMaximum(MAX_VOL); + ui->vol14SpinBox->setMaximum(MAX_VOL); + ui->vol15SpinBox->setMaximum(MAX_VOL); + ui->vol16SpinBox->setMaximum(MAX_VOL); + ui->vol17SpinBox->setMaximum(MAX_VOL); + ui->vol18SpinBox->setMaximum(MAX_VOL); + ui->vol19SpinBox->setMaximum(MAX_VOL); + ui->vol20SpinBox->setMaximum(MAX_VOL); + ui->vol21SpinBox->setMaximum(MAX_VOL); + ui->vol22SpinBox->setMaximum(MAX_VOL); + ui->vol23SpinBox->setMaximum(MAX_VOL); + ui->vol24SpinBox->setMaximum(MAX_VOL); + ui->vol25SpinBox->setMaximum(MAX_VOL); + ui->vol26SpinBox->setMaximum(MAX_VOL); + ui->vol27SpinBox->setMaximum(MAX_VOL); + ui->vol28SpinBox->setMaximum(MAX_VOL); + ui->vol29SpinBox->setMaximum(MAX_VOL); + ui->vol30SpinBox->setMaximum(MAX_VOL); + ui->vol31SpinBox->setMaximum(MAX_VOL); + ui->vol32SpinBox->setMaximum(MAX_VOL); + ui->vol33SpinBox->setMaximum(MAX_VOL); + ui->vol34SpinBox->setMaximum(MAX_VOL); + ui->vol35SpinBox->setMaximum(MAX_VOL); + ui->vol36SpinBox->setMaximum(MAX_VOL); + ui->vol37SpinBox->setMaximum(MAX_VOL); + ui->vol38SpinBox->setMaximum(MAX_VOL); + ui->vol39SpinBox->setMaximum(MAX_VOL); + + ui->fvol0SpinBox->setMinimum(0); + ui->fvol1SpinBox->setMinimum(0); + ui->fvol2SpinBox->setMinimum(0); + ui->fvol3SpinBox->setMinimum(0); + ui->fvol4SpinBox->setMinimum(0); + ui->fvol5SpinBox->setMinimum(0); + ui->fvol6SpinBox->setMinimum(0); + ui->fvol7SpinBox->setMinimum(0); + ui->fvol8SpinBox->setMinimum(0); + ui->fvol9SpinBox->setMinimum(0); + ui->fvol10SpinBox->setMinimum(0); + ui->fvol11SpinBox->setMinimum(0); + ui->fvol12SpinBox->setMinimum(0); + ui->fvol13SpinBox->setMinimum(0); + ui->fvol14SpinBox->setMinimum(0); + ui->fvol15SpinBox->setMinimum(0); + ui->fvol16SpinBox->setMinimum(0); + ui->fvol17SpinBox->setMinimum(0); + ui->fvol18SpinBox->setMinimum(0); + ui->fvol19SpinBox->setMinimum(0); + ui->fvol20SpinBox->setMinimum(0); + ui->fvol21SpinBox->setMinimum(0); + ui->fvol22SpinBox->setMinimum(0); + ui->fvol23SpinBox->setMinimum(0); + ui->fvol24SpinBox->setMinimum(0); + ui->fvol25SpinBox->setMinimum(0); + ui->fvol26SpinBox->setMinimum(0); + ui->fvol27SpinBox->setMinimum(0); + ui->fvol28SpinBox->setMinimum(0); + ui->fvol29SpinBox->setMinimum(0); + ui->fvol30SpinBox->setMinimum(0); + ui->fvol31SpinBox->setMinimum(0); + ui->fvol32SpinBox->setMinimum(0); + ui->fvol33SpinBox->setMinimum(0); + ui->fvol34SpinBox->setMinimum(0); + ui->fvol35SpinBox->setMinimum(0); + ui->fvol36SpinBox->setMinimum(0); + ui->fvol37SpinBox->setMinimum(0); + ui->fvol38SpinBox->setMinimum(0); + ui->fvol39SpinBox->setMinimum(0); + + ui->fvol0SpinBox->setMaximum(MAX_VOL); + ui->fvol1SpinBox->setMaximum(MAX_VOL); + ui->fvol2SpinBox->setMaximum(MAX_VOL); + ui->fvol3SpinBox->setMaximum(MAX_VOL); + ui->fvol4SpinBox->setMaximum(MAX_VOL); + ui->fvol5SpinBox->setMaximum(MAX_VOL); + ui->fvol6SpinBox->setMaximum(MAX_VOL); + ui->fvol7SpinBox->setMaximum(MAX_VOL); + ui->fvol8SpinBox->setMaximum(MAX_VOL); + ui->fvol9SpinBox->setMaximum(MAX_VOL); + ui->fvol10SpinBox->setMaximum(MAX_VOL); + ui->fvol11SpinBox->setMaximum(MAX_VOL); + ui->fvol12SpinBox->setMaximum(MAX_VOL); + ui->fvol13SpinBox->setMaximum(MAX_VOL); + ui->fvol14SpinBox->setMaximum(MAX_VOL); + ui->fvol15SpinBox->setMaximum(MAX_VOL); + ui->fvol16SpinBox->setMaximum(MAX_VOL); + ui->fvol17SpinBox->setMaximum(MAX_VOL); + ui->fvol18SpinBox->setMaximum(MAX_VOL); + ui->fvol19SpinBox->setMaximum(MAX_VOL); + ui->fvol20SpinBox->setMaximum(MAX_VOL); + ui->fvol21SpinBox->setMaximum(MAX_VOL); + ui->fvol22SpinBox->setMaximum(MAX_VOL); + ui->fvol23SpinBox->setMaximum(MAX_VOL); + ui->fvol24SpinBox->setMaximum(MAX_VOL); + ui->fvol25SpinBox->setMaximum(MAX_VOL); + ui->fvol26SpinBox->setMaximum(MAX_VOL); + ui->fvol27SpinBox->setMaximum(MAX_VOL); + ui->fvol28SpinBox->setMaximum(MAX_VOL); + ui->fvol29SpinBox->setMaximum(MAX_VOL); + ui->fvol30SpinBox->setMaximum(MAX_VOL); + ui->fvol31SpinBox->setMaximum(MAX_VOL); + ui->fvol32SpinBox->setMaximum(MAX_VOL); + ui->fvol33SpinBox->setMaximum(MAX_VOL); + ui->fvol34SpinBox->setMaximum(MAX_VOL); + ui->fvol35SpinBox->setMaximum(MAX_VOL); + ui->fvol36SpinBox->setMaximum(MAX_VOL); + ui->fvol37SpinBox->setMaximum(MAX_VOL); + ui->fvol38SpinBox->setMaximum(MAX_VOL); + ui->fvol39SpinBox->setMaximum(MAX_VOL); + + ui->cVol0SpinBox->setMinimum(0); + ui->cVol1SpinBox->setMinimum(0); + ui->cVol2SpinBox->setMinimum(0); + ui->cVol3SpinBox->setMinimum(0); + ui->cVol4SpinBox->setMinimum(0); + ui->cVol5SpinBox->setMinimum(0); + ui->cVol6SpinBox->setMinimum(0); + ui->cVol7SpinBox->setMinimum(0); + ui->cVol8SpinBox->setMinimum(0); + ui->cVol9SpinBox->setMinimum(0); + ui->cVol10SpinBox->setMinimum(0); + ui->cVol11SpinBox->setMinimum(0); + ui->cVol12SpinBox->setMinimum(0); + ui->cVol13SpinBox->setMinimum(0); + ui->cVol14SpinBox->setMinimum(0); + ui->cVol15SpinBox->setMinimum(0); + ui->cVol16SpinBox->setMinimum(0); + ui->cVol17SpinBox->setMinimum(0); + ui->cVol18SpinBox->setMinimum(0); + ui->cVol19SpinBox->setMinimum(0); + ui->cVol20SpinBox->setMinimum(0); + ui->cVol21SpinBox->setMinimum(0); + ui->cVol22SpinBox->setMinimum(0); + ui->cVol23SpinBox->setMinimum(0); + ui->cVol24SpinBox->setMinimum(0); + ui->cVol25SpinBox->setMinimum(0); + ui->cVol26SpinBox->setMinimum(0); + ui->cVol27SpinBox->setMinimum(0); + ui->cVol28SpinBox->setMinimum(0); + ui->cVol29SpinBox->setMinimum(0); + ui->cVol30SpinBox->setMinimum(0); + ui->cVol31SpinBox->setMinimum(0); + ui->cVol32SpinBox->setMinimum(0); + ui->cVol33SpinBox->setMinimum(0); + ui->cVol34SpinBox->setMinimum(0); + ui->cVol35SpinBox->setMinimum(0); + ui->cVol36SpinBox->setMinimum(0); + ui->cVol37SpinBox->setMinimum(0); + ui->cVol38SpinBox->setMinimum(0); + ui->cVol39SpinBox->setMinimum(0); + + ui->cVol0SpinBox->setMaximum(MAX_VOL); + ui->cVol1SpinBox->setMaximum(MAX_VOL); + ui->cVol2SpinBox->setMaximum(MAX_VOL); + ui->cVol3SpinBox->setMaximum(MAX_VOL); + ui->cVol4SpinBox->setMaximum(MAX_VOL); + ui->cVol5SpinBox->setMaximum(MAX_VOL); + ui->cVol6SpinBox->setMaximum(MAX_VOL); + ui->cVol7SpinBox->setMaximum(MAX_VOL); + ui->cVol8SpinBox->setMaximum(MAX_VOL); + ui->cVol9SpinBox->setMaximum(MAX_VOL); + ui->cVol10SpinBox->setMaximum(MAX_VOL); + ui->cVol11SpinBox->setMaximum(MAX_VOL); + ui->cVol12SpinBox->setMaximum(MAX_VOL); + ui->cVol13SpinBox->setMaximum(MAX_VOL); + ui->cVol14SpinBox->setMaximum(MAX_VOL); + ui->cVol15SpinBox->setMaximum(MAX_VOL); + ui->cVol16SpinBox->setMaximum(MAX_VOL); + ui->cVol17SpinBox->setMaximum(MAX_VOL); + ui->cVol18SpinBox->setMaximum(MAX_VOL); + ui->cVol19SpinBox->setMaximum(MAX_VOL); + ui->cVol20SpinBox->setMaximum(MAX_VOL); + ui->cVol21SpinBox->setMaximum(MAX_VOL); + ui->cVol22SpinBox->setMaximum(MAX_VOL); + ui->cVol23SpinBox->setMaximum(MAX_VOL); + ui->cVol24SpinBox->setMaximum(MAX_VOL); + ui->cVol25SpinBox->setMaximum(MAX_VOL); + ui->cVol26SpinBox->setMaximum(MAX_VOL); + ui->cVol27SpinBox->setMaximum(MAX_VOL); + ui->cVol28SpinBox->setMaximum(MAX_VOL); + ui->cVol29SpinBox->setMaximum(MAX_VOL); + ui->cVol30SpinBox->setMaximum(MAX_VOL); + ui->cVol31SpinBox->setMaximum(MAX_VOL); + ui->cVol32SpinBox->setMaximum(MAX_VOL); + ui->cVol33SpinBox->setMaximum(MAX_VOL); + ui->cVol34SpinBox->setMaximum(MAX_VOL); + ui->cVol35SpinBox->setMaximum(MAX_VOL); + ui->cVol36SpinBox->setMaximum(MAX_VOL); + ui->cVol37SpinBox->setMaximum(MAX_VOL); + ui->cVol38SpinBox->setMaximum(MAX_VOL); + ui->cVol39SpinBox->setMaximum(MAX_VOL); + + loadVoltageValue(); + connect(ui->savePushButton,SIGNAL(clicked()), this,SLOT( DacAdjustStore())); + sysPara->status.statWarn = sysPara->status.statWarn | WARN_STATUS_INK_WARN; //先置墨水标示为1 + sleep(3); + qApp->installEventFilter(this); +} + + +void InkJetPrinter::loadVoltageValue() +{ + ui->vol0SpinBox->setValue(sysPara->para.printed_adj_dac[0]); + ui->vol1SpinBox->setValue(sysPara->para.printed_adj_dac[1]); + ui->vol2SpinBox->setValue(sysPara->para.printed_adj_dac[2]); + ui->vol3SpinBox->setValue(sysPara->para.printed_adj_dac[3]); + ui->vol4SpinBox->setValue(sysPara->para.printed_adj_dac[4]); + ui->vol5SpinBox->setValue(sysPara->para.printed_adj_dac[5]); + ui->vol6SpinBox->setValue(sysPara->para.printed_adj_dac[6]); + ui->vol7SpinBox->setValue(sysPara->para.printed_adj_dac[7]); + ui->vol8SpinBox->setValue(sysPara->para.printed_adj_dac[8]); + ui->vol9SpinBox->setValue(sysPara->para.printed_adj_dac[9]); + + ui->vol10SpinBox->setValue(sysPara->para.printed_adj_dac[10]); + ui->vol11SpinBox->setValue(sysPara->para.printed_adj_dac[11]); + ui->vol12SpinBox->setValue(sysPara->para.printed_adj_dac[12]); + ui->vol13SpinBox->setValue(sysPara->para.printed_adj_dac[13]); + ui->vol14SpinBox->setValue(sysPara->para.printed_adj_dac[14]); + ui->vol15SpinBox->setValue(sysPara->para.printed_adj_dac[15]); + ui->vol16SpinBox->setValue(sysPara->para.printed_adj_dac[16]); + ui->vol17SpinBox->setValue(sysPara->para.printed_adj_dac[17]); + ui->vol18SpinBox->setValue(sysPara->para.printed_adj_dac[18]); + ui->vol19SpinBox->setValue(sysPara->para.printed_adj_dac[19]); + + ui->vol20SpinBox->setValue(sysPara->para.printed_adj_dac[20]); + ui->vol21SpinBox->setValue(sysPara->para.printed_adj_dac[21]); + ui->vol22SpinBox->setValue(sysPara->para.printed_adj_dac[22]); + ui->vol23SpinBox->setValue(sysPara->para.printed_adj_dac[23]); + ui->vol24SpinBox->setValue(sysPara->para.printed_adj_dac[24]); + ui->vol25SpinBox->setValue(sysPara->para.printed_adj_dac[25]); + ui->vol26SpinBox->setValue(sysPara->para.printed_adj_dac[26]); + ui->vol27SpinBox->setValue(sysPara->para.printed_adj_dac[27]); + ui->vol28SpinBox->setValue(sysPara->para.printed_adj_dac[28]); + ui->vol29SpinBox->setValue(sysPara->para.printed_adj_dac[29]); + + ui->vol30SpinBox->setValue(sysPara->para.printed_adj_dac[30]); + ui->vol31SpinBox->setValue(sysPara->para.printed_adj_dac[31]); + ui->vol32SpinBox->setValue(sysPara->para.printed_adj_dac[32]); + ui->vol33SpinBox->setValue(sysPara->para.printed_adj_dac[33]); + ui->vol34SpinBox->setValue(sysPara->para.printed_adj_dac[34]); + ui->vol35SpinBox->setValue(sysPara->para.printed_adj_dac[35]); + ui->vol36SpinBox->setValue(sysPara->para.printed_adj_dac[36]); + ui->vol37SpinBox->setValue(sysPara->para.printed_adj_dac[37]); + ui->vol38SpinBox->setValue(sysPara->para.printed_adj_dac[38]); + ui->vol39SpinBox->setValue(sysPara->para.printed_adj_dac[39]); + + ui->cVol0SpinBox->setValue(sysPara->para.printed_continue_col_dac[0]); + ui->cVol1SpinBox->setValue(sysPara->para.printed_continue_col_dac[1]); + ui->cVol2SpinBox->setValue(sysPara->para.printed_continue_col_dac[2]); + ui->cVol3SpinBox->setValue(sysPara->para.printed_continue_col_dac[3]); + ui->cVol4SpinBox->setValue(sysPara->para.printed_continue_col_dac[4]); + ui->cVol5SpinBox->setValue(sysPara->para.printed_continue_col_dac[5]); + ui->cVol6SpinBox->setValue(sysPara->para.printed_continue_col_dac[6]); + ui->cVol7SpinBox->setValue(sysPara->para.printed_continue_col_dac[7]); + ui->cVol8SpinBox->setValue(sysPara->para.printed_continue_col_dac[8]); + ui->cVol9SpinBox->setValue(sysPara->para.printed_continue_col_dac[9]); + + ui->cVol10SpinBox->setValue(sysPara->para.printed_continue_col_dac[10]); + ui->cVol11SpinBox->setValue(sysPara->para.printed_continue_col_dac[11]); + ui->cVol12SpinBox->setValue(sysPara->para.printed_continue_col_dac[12]); + ui->cVol13SpinBox->setValue(sysPara->para.printed_continue_col_dac[13]); + ui->cVol14SpinBox->setValue(sysPara->para.printed_continue_col_dac[14]); + ui->cVol15SpinBox->setValue(sysPara->para.printed_continue_col_dac[15]); + ui->cVol16SpinBox->setValue(sysPara->para.printed_continue_col_dac[16]); + ui->cVol17SpinBox->setValue(sysPara->para.printed_continue_col_dac[17]); + ui->cVol18SpinBox->setValue(sysPara->para.printed_continue_col_dac[18]); + ui->cVol19SpinBox->setValue(sysPara->para.printed_continue_col_dac[19]); + + ui->cVol20SpinBox->setValue(sysPara->para.printed_continue_col_dac[20]); + ui->cVol21SpinBox->setValue(sysPara->para.printed_continue_col_dac[21]); + ui->cVol22SpinBox->setValue(sysPara->para.printed_continue_col_dac[22]); + ui->cVol23SpinBox->setValue(sysPara->para.printed_continue_col_dac[23]); + ui->cVol24SpinBox->setValue(sysPara->para.printed_continue_col_dac[24]); + ui->cVol25SpinBox->setValue(sysPara->para.printed_continue_col_dac[25]); + ui->cVol26SpinBox->setValue(sysPara->para.printed_continue_col_dac[26]); + ui->cVol27SpinBox->setValue(sysPara->para.printed_continue_col_dac[27]); + ui->cVol28SpinBox->setValue(sysPara->para.printed_continue_col_dac[28]); + ui->cVol29SpinBox->setValue(sysPara->para.printed_continue_col_dac[29]); + + ui->cVol30SpinBox->setValue(sysPara->para.printed_continue_col_dac[30]); + ui->cVol31SpinBox->setValue(sysPara->para.printed_continue_col_dac[31]); + ui->cVol32SpinBox->setValue(sysPara->para.printed_continue_col_dac[32]); + ui->cVol33SpinBox->setValue(sysPara->para.printed_continue_col_dac[33]); + ui->cVol34SpinBox->setValue(sysPara->para.printed_continue_col_dac[34]); + ui->cVol35SpinBox->setValue(sysPara->para.printed_continue_col_dac[35]); + ui->cVol36SpinBox->setValue(sysPara->para.printed_continue_col_dac[36]); + ui->cVol37SpinBox->setValue(sysPara->para.printed_continue_col_dac[37]); + ui->cVol38SpinBox->setValue(sysPara->para.printed_continue_col_dac[38]); + ui->cVol39SpinBox->setValue(sysPara->para.printed_continue_col_dac[39]); + + ui->fvol0SpinBox->setValue(sysPara->para.printed_full_col_dac[0]); + ui->fvol1SpinBox->setValue(sysPara->para.printed_full_col_dac[1]); + ui->fvol2SpinBox->setValue(sysPara->para.printed_full_col_dac[2]); + ui->fvol3SpinBox->setValue(sysPara->para.printed_full_col_dac[3]); + ui->fvol4SpinBox->setValue(sysPara->para.printed_full_col_dac[4]); + ui->fvol5SpinBox->setValue(sysPara->para.printed_full_col_dac[5]); + ui->fvol6SpinBox->setValue(sysPara->para.printed_full_col_dac[6]); + ui->fvol7SpinBox->setValue(sysPara->para.printed_full_col_dac[7]); + ui->fvol8SpinBox->setValue(sysPara->para.printed_full_col_dac[8]); + ui->fvol9SpinBox->setValue(sysPara->para.printed_full_col_dac[9]); + + ui->fvol10SpinBox->setValue(sysPara->para.printed_full_col_dac[10]); + ui->fvol11SpinBox->setValue(sysPara->para.printed_full_col_dac[11]); + ui->fvol12SpinBox->setValue(sysPara->para.printed_full_col_dac[12]); + ui->fvol13SpinBox->setValue(sysPara->para.printed_full_col_dac[13]); + ui->fvol14SpinBox->setValue(sysPara->para.printed_full_col_dac[14]); + ui->fvol15SpinBox->setValue(sysPara->para.printed_full_col_dac[15]); + ui->fvol16SpinBox->setValue(sysPara->para.printed_full_col_dac[16]); + ui->fvol17SpinBox->setValue(sysPara->para.printed_full_col_dac[17]); + ui->fvol18SpinBox->setValue(sysPara->para.printed_full_col_dac[18]); + ui->fvol19SpinBox->setValue(sysPara->para.printed_full_col_dac[19]); + + ui->fvol20SpinBox->setValue(sysPara->para.printed_full_col_dac[20]); + ui->fvol21SpinBox->setValue(sysPara->para.printed_full_col_dac[21]); + ui->fvol22SpinBox->setValue(sysPara->para.printed_full_col_dac[22]); + ui->fvol23SpinBox->setValue(sysPara->para.printed_full_col_dac[23]); + ui->fvol24SpinBox->setValue(sysPara->para.printed_full_col_dac[24]); + ui->fvol25SpinBox->setValue(sysPara->para.printed_full_col_dac[25]); + ui->fvol26SpinBox->setValue(sysPara->para.printed_full_col_dac[26]); + ui->fvol27SpinBox->setValue(sysPara->para.printed_full_col_dac[27]); + ui->fvol28SpinBox->setValue(sysPara->para.printed_full_col_dac[28]); + ui->fvol29SpinBox->setValue(sysPara->para.printed_full_col_dac[29]); + + ui->fvol30SpinBox->setValue(sysPara->para.printed_full_col_dac[30]); + ui->fvol31SpinBox->setValue(sysPara->para.printed_full_col_dac[31]); + ui->fvol32SpinBox->setValue(sysPara->para.printed_full_col_dac[32]); + ui->fvol33SpinBox->setValue(sysPara->para.printed_full_col_dac[33]); + ui->fvol34SpinBox->setValue(sysPara->para.printed_full_col_dac[34]); + ui->fvol35SpinBox->setValue(sysPara->para.printed_full_col_dac[35]); + ui->fvol36SpinBox->setValue(sysPara->para.printed_full_col_dac[36]); + ui->fvol37SpinBox->setValue(sysPara->para.printed_full_col_dac[37]); + ui->fvol38SpinBox->setValue(sysPara->para.printed_full_col_dac[38]); + ui->fvol39SpinBox->setValue(sysPara->para.printed_full_col_dac[39]); + if(sysPara->para.dacScale < 40 || sysPara->para.dacScale>150) + sysPara->para.dacScale = 100; +} + +void InkJetPrinter::initCntGroup() +{ + connect(this, &InkJetPrinter::sig_updateDisp, + SectionalManager::instance(), &SectionalManager::sig_updateCntGroupDisp); +} + +float PID_realize(float speed); + +struct _pid{ + float SetSpeed;//定义设定值 + float ActualSpeed;//定义实际值 + float err;//定义偏差值 + float err_last;//定义上一个偏差值 + float Kp,Ki,Kd;//定义比例、积分、微分系数 + float voltage;//定义电压值(控制执行器的变量) + float integral;//定义积分值 + float integral_max; //积分限幅(根据实际调整) +}pid; + + +void PID_init(){ + pid.SetSpeed=0.0; + pid.ActualSpeed=0.0; + pid.err=0.0; + pid.err_last=0.0; + pid.voltage=0.0; + pid.integral=0.0; + pid.Kp=0.21; //0.25 + pid.Ki=0.006; //0.015 + pid.Kd=0.0; +} + +static float u = 1.0; +float PID_realize(float speed, float act){ + unsigned char index = 1; + pid.SetSpeed=speed; + pid.ActualSpeed = act; + pid.err=pid.SetSpeed-pid.ActualSpeed; + if(u < 900) + { + pid.integral+=pid.err; + } + + pid.voltage=pid.Kp*pid.err + index*pid.Ki*pid.integral + pid.Kd*(pid.err-pid.err_last); + pid.err_last=pid.err; + pid.ActualSpeed =pid.voltage*1.0; + return pid.ActualSpeed; +} + +float PID_realize2(float speed, float act){ + // 增量式 PID:Δu = Kp*(e[k]-e[k-1]) + Ki*e[k] + pid.Kp = 0.15f; + pid.Ki = 0.02f; + pid.Kd = 0.0f; + pid.SetSpeed = speed; + pid.ActualSpeed = act; + pid.err = pid.SetSpeed - pid.ActualSpeed; + + float delta_u = pid.Kp * (pid.err - pid.err_last) + + pid.Ki * pid.err; + + // 自适应非对称限幅: + // 压力严重偏高(err < -30):允许快速减速,限制慢速加速 + // 压力严重偏低(err > 50):允许正常加速,限制减速(避免过度降速) + // 接近目标:小步长,平稳调节 + if(pid.err < -30.0f) { + if(delta_u > 1.0f) delta_u = 1.0f; + if(delta_u < -6.0f) delta_u = -6.0f; + } else if(pid.err > 50.0f) { + if(delta_u > 3.0f) delta_u = 3.0f; + if(delta_u < -2.0f) delta_u = -2.0f; + } else { + if(delta_u > 3.0f) delta_u = 3.0f; + if(delta_u < -3.0f) delta_u = -3.0f; + } + + pid.err_last = pid.err; + return delta_u; +} + +void InkJetPrinter::pressureAdj() +{ + // 故障停机处理 + if(sysPara->status.gearPumpRunStopFlag || sysPara->status.flagOfSpeedAlarm) + { + sysPara->para.gearPumpValue = 0; + u = 0.0f; + m_pumpState = DPUMP_STOPPED; + m_stateChangeCount = 0; + m_adjSkip = 0; + m_lastActualPressure = 0; + m_bufValidCount = 0; + for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; + m_bufIdx = 0; + sysPara->devOp->WriteMoterPump(); + return; + } + + // 泵未使能时的PID控制(保持原有逻辑) + if(!sysPara->para.gearPumpEnable) + { + if(u > 0 || ((sysPara->para.pressure - sysPara->status.PRESSURE) > 0)) + u = PID_realize((float)sysPara->para.pressure, (float)sysPara->status.PRESSURE); + sysPara->para.gearPumpValue = (u > 0) ? (unsigned short)u : 0; + if(sysPara->para.gearPumpValue > 800) + sysPara->para.gearPumpValue = 800; + sysPara->devOp->WriteMoterPump(); + return; + } + + // 隔膜泵控制参数 + const int STOP_TO_START_THRESHOLD = 5; // 停止→启动:压力低于目标15(扩大滞环) + const int RUN_TO_STOP_THRESHOLD = 5; // 运行→停止:压力高于目标10(扩大滞环) + const int MIN_STATE_INTERVAL = 8; // 最小状态切换间隔:8个100ms = 800ms + + int actual = sysPara->status.PRESSURE; + int target = (int)sysPara->para.pressure; + int err = target - actual; // 正值=压力偏低,负值=压力偏高 + + // 更新滑动平均缓冲 + m_pressureBuf[m_bufIdx] = actual; + m_bufIdx = (m_bufIdx + 1) % 10; + int avgPressure = 0; + for(int i = 0; i < 10; i++) avgPressure += m_pressureBuf[i]; + avgPressure /= 10; + + // 状态切换计数器递增 + m_stateChangeCount++; + + // 检查是否允许状态切换(距上次切换>=800ms) + bool canSwitch = (m_stateChangeCount >= MIN_STATE_INTERVAL); + + // 硬保护:压力严重超标,立即强制停泵(不受800ms限制) + if(actual > target + 80) + { + if(m_pumpState != DPUMP_STOPPED) { + u = 0.0f; + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + m_pumpState = DPUMP_STOPPED; + m_stateChangeCount = 0; + m_adjSkip = 0; + } + return; + } + + // 状态机处理 + switch(m_pumpState) { + case DPUMP_STOPPED: + handleStoppedState(err, canSwitch); + break; + + case DPUMP_STARTING: + handleStartingState(err, actual, target); + break; + + case DPUMP_RUNNING: + handleRunningState(err, canSwitch); + break; + } +} + +// 停止状态处理:压力低于目标较多时启动泵 +void InkJetPrinter::handleStoppedState(int err, bool canSwitch) +{ + const int STOP_TO_START_THRESHOLD = 5; // 压力低于目标15启动(扩大滞环) + const float START_INIT_SPEED = 80.0f; // 启动初始转速 + + // 压力低于目标较多,且允许切换(距上次停止>=800ms),启动泵 + if(err > STOP_TO_START_THRESHOLD && canSwitch) { + u = START_INIT_SPEED; + m_startingStepCount = 0; + m_adjSkip = 0; + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + m_pumpState = DPUMP_STARTING; + m_stateChangeCount = 0; // 重置计数器 + } +} + +// 启动爬升状态处理:从低转速逐步提升到工作转速 +void InkJetPrinter::handleStartingState(int err, int actual, int target) + { + const int STARTING_TO_RUNNING_RANGE = 30; // 进入目标±50范围转到运行状态 + const float MAX_WORKING_SPEED = 350.0f; // 最大工作转速 + const float START_SPEED_STEP_LARGE = 40.0f; + const float START_SPEED_STEP_MED = 30.0f; + const float START_SPEED_STEP_SMALL = 20.0f; + + m_adjSkip++; + + // 每800ms调整一次(8个100ms周期) + if(m_adjSkip < 8) { + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + return; + } + m_adjSkip = 0; + + // 判断是否进入运行状态 + int absErr = (err >= 0) ? err : -err; + bool nearTarget = (absErr <= STARTING_TO_RUNNING_RANGE); + bool reachedMaxSpeed = (u >= MAX_WORKING_SPEED - 10); + + if(nearTarget || reachedMaxSpeed) { + // 转到运行微调状态 + m_pumpState = DPUMP_RUNNING; + m_lastActualPressure = actual; + m_stateChangeCount = 0; // 重置计数器 + return; + } + + // 继续爬升:根据误差自适应增速 + float step; + if(err > 100) step = START_SPEED_STEP_LARGE; + else if(err > 50) step = START_SPEED_STEP_MED; + else step = START_SPEED_STEP_SMALL; + + u += step; + if(u > MAX_WORKING_SPEED) u = MAX_WORKING_SPEED; + + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + m_startingStepCount++; +} + +// 运行微调状态处理:使用增量式控制算法 +void InkJetPrinter::handleRunningState(int err, bool canSwitch) + { + const int RUN_TO_STOP_THRESHOLD = 5; // 压力高于目标10准备停泵(扩大滞环) + const int EMERGENCY_STOP_THRESHOLD = 10; // 压力高于目标20立即停泵(不受800ms限制) + + // 紧急停泵:压力严重超标,立即停泵(不受800ms限制) + if(err < -EMERGENCY_STOP_THRESHOLD) { + u = 0.0f; + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + m_pumpState = DPUMP_STOPPED; + m_stateChangeCount = 0; + m_adjSkip = 0; + return; + } + + // 常规停泵:压力略高于目标,等待800ms后停泵 + if(err < -RUN_TO_STOP_THRESHOLD && canSwitch) { + u = 0.0f; + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + m_pumpState = DPUMP_STOPPED; + m_stateChangeCount = 0; + m_adjSkip = 0; + return; + } + + // === 增量式微调控制(每200ms调整一次)=== + m_adjSkip++; + if(m_adjSkip < 2) { + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + return; + } + m_adjSkip = 0; + + int actual = sysPara->status.PRESSURE; + float error = (float)err; + float absErr = (error >= 0) ? error : -error; + + // 死区:误差≤0.5不调整 + if(absErr < 0.5f) { + m_lastActualPressure = actual; + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); + return; + } + + // 计算压力变化率(微分项) + int pressureChange = actual - m_lastActualPressure; + m_lastActualPressure = actual; + + // 增量式控制公式 + float delta_u; + + // 近目标刹车策略:误差≤5且正在接近目标,只刹车不加速 + if(absErr <= 5.0f && + ((error > 0.0f && pressureChange > 0) || // 压力低且在上升 + (error < 0.0f && pressureChange < 0))) // 压力高且在下降 + { + delta_u = -0.20f * (float)pressureChange; // 只刹车 + } + else { + // 标准增量式控制:比例项 + 微分项 + delta_u = 0.05f * error - 0.20f * (float)pressureChange; + } + + // 分级限幅(根据误差大小限制调节幅度) + float maxDelta; + if(absErr > 30.0f) maxDelta = 1.0f; + else if(absErr > 10.0f) maxDelta = 0.6f; + else maxDelta = 0.3f; + + if(delta_u > maxDelta) delta_u = maxDelta; + if(delta_u < -maxDelta) delta_u = -maxDelta; + + // 更新控制量 + u += delta_u; + + // 限制范围 + const float MIN_RUNNING_SPEED = 30.0f; // 最低运行转速(低于此值泵不转) + const float MAX_WORKING_SPEED = 350.0f; + + if(u < MIN_RUNNING_SPEED) u = MIN_RUNNING_SPEED; + if(u > MAX_WORKING_SPEED) u = MAX_WORKING_SPEED; + + sysPara->para.gearPumpValue = (unsigned short)(int)u; + sysPara->devOp->WriteMoterPump(); +} + + + +void InkJetPrinter::DacAdjustStore() +{ + sysPara->para.printed_adj_dac[0] = ui->vol0SpinBox->value(); + sysPara->para.printed_adj_dac[1] = ui->vol1SpinBox->value(); + sysPara->para.printed_adj_dac[2] = ui->vol2SpinBox->value(); + sysPara->para.printed_adj_dac[3] = ui->vol3SpinBox->value(); + sysPara->para.printed_adj_dac[4] = ui->vol4SpinBox->value(); + sysPara->para.printed_adj_dac[5] = ui->vol5SpinBox->value(); + sysPara->para.printed_adj_dac[6] = ui->vol6SpinBox->value(); + sysPara->para.printed_adj_dac[7] = ui->vol7SpinBox->value(); + sysPara->para.printed_adj_dac[8] = ui->vol8SpinBox->value(); + sysPara->para.printed_adj_dac[9] = ui->vol9SpinBox->value(); + sysPara->para.printed_adj_dac[10] = ui->vol10SpinBox->value(); + sysPara->para.printed_adj_dac[11] = ui->vol11SpinBox->value(); + sysPara->para.printed_adj_dac[12] = ui->vol12SpinBox->value(); + sysPara->para.printed_adj_dac[13] = ui->vol13SpinBox->value(); + sysPara->para.printed_adj_dac[14] = ui->vol14SpinBox->value(); + sysPara->para.printed_adj_dac[15] = ui->vol15SpinBox->value(); + sysPara->para.printed_adj_dac[16] = ui->vol16SpinBox->value(); + sysPara->para.printed_adj_dac[17] = ui->vol17SpinBox->value(); + sysPara->para.printed_adj_dac[18] = ui->vol18SpinBox->value(); + sysPara->para.printed_adj_dac[19] = ui->vol19SpinBox->value(); + + sysPara->para.printed_adj_dac[20] = ui->vol20SpinBox->value(); + sysPara->para.printed_adj_dac[21] = ui->vol21SpinBox->value(); + sysPara->para.printed_adj_dac[22] = ui->vol22SpinBox->value(); + sysPara->para.printed_adj_dac[23] = ui->vol23SpinBox->value(); + sysPara->para.printed_adj_dac[24] = ui->vol24SpinBox->value(); + sysPara->para.printed_adj_dac[25] = ui->vol25SpinBox->value(); + sysPara->para.printed_adj_dac[26] = ui->vol26SpinBox->value(); + sysPara->para.printed_adj_dac[27] = ui->vol27SpinBox->value(); + sysPara->para.printed_adj_dac[28] = ui->vol28SpinBox->value(); + sysPara->para.printed_adj_dac[29] = ui->vol29SpinBox->value(); + + sysPara->para.printed_adj_dac[30] = ui->vol30SpinBox->value(); + sysPara->para.printed_adj_dac[31] = ui->vol31SpinBox->value(); + sysPara->para.printed_adj_dac[32] = ui->vol32SpinBox->value(); + sysPara->para.printed_adj_dac[33] = ui->vol33SpinBox->value(); + sysPara->para.printed_adj_dac[34] = ui->vol34SpinBox->value(); + sysPara->para.printed_adj_dac[35] = ui->vol35SpinBox->value(); + sysPara->para.printed_adj_dac[36] = ui->vol36SpinBox->value(); + sysPara->para.printed_adj_dac[37] = ui->vol37SpinBox->value(); + sysPara->para.printed_adj_dac[38] = ui->vol38SpinBox->value(); + sysPara->para.printed_adj_dac[39] = ui->vol39SpinBox->value(); + + sysPara->para.printed_continue_col_dac[0] = ui->cVol0SpinBox->value(); + sysPara->para.printed_continue_col_dac[1] = ui->cVol1SpinBox->value(); + sysPara->para.printed_continue_col_dac[2] = ui->cVol2SpinBox->value(); + sysPara->para.printed_continue_col_dac[3] = ui->cVol3SpinBox->value(); + sysPara->para.printed_continue_col_dac[4] = ui->cVol4SpinBox->value(); + sysPara->para.printed_continue_col_dac[5] = ui->cVol5SpinBox->value(); + sysPara->para.printed_continue_col_dac[6] = ui->cVol6SpinBox->value(); + sysPara->para.printed_continue_col_dac[7] = ui->cVol7SpinBox->value(); + sysPara->para.printed_continue_col_dac[8] = ui->cVol8SpinBox->value(); + sysPara->para.printed_continue_col_dac[9] = ui->cVol9SpinBox->value(); + sysPara->para.printed_continue_col_dac[10] = ui->cVol10SpinBox->value(); + sysPara->para.printed_continue_col_dac[11] = ui->cVol11SpinBox->value(); + sysPara->para.printed_continue_col_dac[12] = ui->cVol12SpinBox->value(); + sysPara->para.printed_continue_col_dac[13] = ui->cVol13SpinBox->value(); + sysPara->para.printed_continue_col_dac[14] = ui->cVol14SpinBox->value(); + sysPara->para.printed_continue_col_dac[15] = ui->cVol15SpinBox->value(); + sysPara->para.printed_continue_col_dac[16] = ui->cVol16SpinBox->value(); + sysPara->para.printed_continue_col_dac[17] = ui->cVol17SpinBox->value(); + sysPara->para.printed_continue_col_dac[18] = ui->cVol18SpinBox->value(); + sysPara->para.printed_continue_col_dac[19] = ui->cVol19SpinBox->value(); + + sysPara->para.printed_continue_col_dac[20] = ui->cVol20SpinBox->value(); + sysPara->para.printed_continue_col_dac[21] = ui->cVol21SpinBox->value(); + sysPara->para.printed_continue_col_dac[22] = ui->cVol22SpinBox->value(); + sysPara->para.printed_continue_col_dac[23] = ui->cVol23SpinBox->value(); + sysPara->para.printed_continue_col_dac[24] = ui->cVol24SpinBox->value(); + sysPara->para.printed_continue_col_dac[25] = ui->cVol25SpinBox->value(); + sysPara->para.printed_continue_col_dac[26] = ui->cVol26SpinBox->value(); + sysPara->para.printed_continue_col_dac[27] = ui->cVol27SpinBox->value(); + sysPara->para.printed_continue_col_dac[28] = ui->cVol28SpinBox->value(); + sysPara->para.printed_continue_col_dac[29] = ui->cVol29SpinBox->value(); + + sysPara->para.printed_continue_col_dac[30] = ui->cVol30SpinBox->value(); + sysPara->para.printed_continue_col_dac[31] = ui->cVol31SpinBox->value(); + sysPara->para.printed_continue_col_dac[32] = ui->cVol32SpinBox->value(); + sysPara->para.printed_continue_col_dac[33] = ui->cVol33SpinBox->value(); + sysPara->para.printed_continue_col_dac[34] = ui->cVol34SpinBox->value(); + sysPara->para.printed_continue_col_dac[35] = ui->cVol35SpinBox->value(); + sysPara->para.printed_continue_col_dac[36] = ui->cVol36SpinBox->value(); + sysPara->para.printed_continue_col_dac[37] = ui->cVol37SpinBox->value(); + sysPara->para.printed_continue_col_dac[38] = ui->cVol38SpinBox->value(); + sysPara->para.printed_continue_col_dac[39] = ui->cVol39SpinBox->value(); + + sysPara->para.printed_full_col_dac[0] = ui->fvol0SpinBox->value(); + sysPara->para.printed_full_col_dac[1] = ui->fvol1SpinBox->value(); + sysPara->para.printed_full_col_dac[2] = ui->fvol2SpinBox->value(); + sysPara->para.printed_full_col_dac[3] = ui->fvol3SpinBox->value(); + sysPara->para.printed_full_col_dac[4] = ui->fvol4SpinBox->value(); + sysPara->para.printed_full_col_dac[5] = ui->fvol5SpinBox->value(); + sysPara->para.printed_full_col_dac[6] = ui->fvol6SpinBox->value(); + sysPara->para.printed_full_col_dac[7] = ui->fvol7SpinBox->value(); + sysPara->para.printed_full_col_dac[8] = ui->fvol8SpinBox->value(); + sysPara->para.printed_full_col_dac[9] = ui->fvol9SpinBox->value(); + sysPara->para.printed_full_col_dac[10] = ui->fvol10SpinBox->value(); + sysPara->para.printed_full_col_dac[11] = ui->fvol11SpinBox->value(); + sysPara->para.printed_full_col_dac[12] = ui->fvol12SpinBox->value(); + sysPara->para.printed_full_col_dac[13] = ui->fvol13SpinBox->value(); + sysPara->para.printed_full_col_dac[14] = ui->fvol14SpinBox->value(); + sysPara->para.printed_full_col_dac[15] = ui->fvol15SpinBox->value(); + sysPara->para.printed_full_col_dac[16] = ui->fvol16SpinBox->value(); + sysPara->para.printed_full_col_dac[17] = ui->fvol17SpinBox->value(); + sysPara->para.printed_full_col_dac[18] = ui->fvol18SpinBox->value(); + sysPara->para.printed_full_col_dac[19] = ui->fvol19SpinBox->value(); + + sysPara->para.printed_full_col_dac[20] = ui->fvol20SpinBox->value(); + sysPara->para.printed_full_col_dac[21] = ui->fvol21SpinBox->value(); + sysPara->para.printed_full_col_dac[22] = ui->fvol22SpinBox->value(); + sysPara->para.printed_full_col_dac[23] = ui->fvol23SpinBox->value(); + sysPara->para.printed_full_col_dac[24] = ui->fvol24SpinBox->value(); + sysPara->para.printed_full_col_dac[25] = ui->fvol25SpinBox->value(); + sysPara->para.printed_full_col_dac[26] = ui->fvol26SpinBox->value(); + sysPara->para.printed_full_col_dac[27] = ui->fvol27SpinBox->value(); + sysPara->para.printed_full_col_dac[28] = ui->fvol28SpinBox->value(); + sysPara->para.printed_full_col_dac[29] = ui->fvol29SpinBox->value(); + + sysPara->para.printed_full_col_dac[30] = ui->fvol30SpinBox->value(); + sysPara->para.printed_full_col_dac[31] = ui->fvol31SpinBox->value(); + sysPara->para.printed_full_col_dac[32] = ui->fvol32SpinBox->value(); + sysPara->para.printed_full_col_dac[33] = ui->fvol33SpinBox->value(); + sysPara->para.printed_full_col_dac[34] = ui->fvol34SpinBox->value(); + sysPara->para.printed_full_col_dac[35] = ui->fvol35SpinBox->value(); + sysPara->para.printed_full_col_dac[36] = ui->fvol36SpinBox->value(); + sysPara->para.printed_full_col_dac[37] = ui->fvol37SpinBox->value(); + sysPara->para.printed_full_col_dac[38] = ui->fvol38SpinBox->value(); + sysPara->para.printed_full_col_dac[39] = ui->fvol39SpinBox->value(); + sysPara->devOp->writeFpgaPrintPara(); +} + + +InkJetPrinter::~InkJetPrinter() +{ + if(m_serialThreadFPGA->isRunning()){ + m_serialThreadFPGA->quit(); + m_serialThreadFPGA->wait(); + } + if(m_serialThreadSTM32->isRunning()){ + m_serialThreadSTM32->quit(); + m_serialThreadSTM32->wait(); + } + if(m_thread->isRunning()){ + m_thread->quit(); + m_thread->wait(); + } + if(serialFPGA) + delete serialFPGA; + if(serialSTM32) + delete serialSTM32; + delete ui; + delete timer; +#ifdef MODBUS + if (modbus) { + delete modbus; + } +#endif + if (fileTransceiv) { + fileTransceiv->deleteLater(); + } + //edit@01-03 + if (tcpTransceiv) { + tcpTransceiv->deleteLater(); + } +} + +extern void MySleep(unsigned int msec); +extern unsigned char test_flag; +bool gearPumpRunNormalFlag = false; +unsigned char isPrintingFlag[1]={0}; +void InkJetPrinter::timerHandler(void){ + static bool flag1 = 1; + if(flag1){ + flag1 = 0; + qDebug()<<"timer had started"; + } + + int pulse_100ms = 0; + int pulse_200ms = 0; + int pulse_50ms = 0; + int pulse_20ms = 0; + int pulse_1s = 0; + int pulse_10s = 0; + int pulse_100s = 0; + int pulse_300ms = 0; + int timer_3s = 0; + + static int pulse_3s = 0; + static int pulse_4s = 0; + static int pulse_5s = 0; + static int reciclar_30s = 0; + static int pulse_30s = 0; + static int xxxm=0; + + static int tempFlag=0; + static int save_weeknum = 0; + static bool gearPumpRunFlag = false; + static bool ControledSwitchFlag = false; + static bool gearPumpStartFlag = false; + static bool delay3s; + bool InkSwintFlag = false,lastInkSwintFlag = false; + static float gearPumpRunNormalValue = 0.0; + if(sysPara){ + xxxm=1; + + sysPara->para.ReadFileErrorCnt=0; // 正常打开文件 + + // /opt/FriendlyARM/mini2440/rootfs_qtopia_qt4/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib + if(sysPara->para.gearPumpEnable) + { + ui->tabMainWindow->enablePushButtonStart(true); + if(!pushButtonStartFlag) + { + gearPumpRunNormalFlag = false; + } + if(!gearPumpRunFlag) + { + ui->tabMainWindow->enableReclaimCtrlButton(false); + } + } + else + { + ui->tabMainWindow->enablePushButtonStart(false); + } + + /*-----------------------形成脉冲-----------------------------*/ + sysPara->status.delay10ms ++; + if(sysPara->status.delay10ms == 2){ + pulse_20ms = 1; + } + if(sysPara->status.delay10ms == 5){ + pulse_50ms = 1; + } + if(sysPara->status.delay10ms == 10){ + pulse_100ms = 1; + sysPara->status.delay10ms = 0; + } + if(pulse_100ms){ + sysPara->status.delay100ms ++; + if(sysPara->status.delay100ms == 10){ + pulse_1s = 1; + sysPara->status.delay100ms = 0; + } + pulse_300ms = (sysPara->status.delay100ms%3) == 0; //1秒3次,并非精确的300ms + pulse_200ms = (sysPara->status.delay100ms%2) == 0; + } + if(pulse_300ms) tempFlag=1; + if((sysPara->status.delay10ms%3) == 0) //读取状态后再检測 + { + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) && !gearPumpRunFlag && !sysPara->status.isPumpValveControledByHand)//刚启动前3秒 + { + if(sysPara->para.gearPumpEnable) { + // 隔膜泵初始化:确保从停止状态开始 + if(sysPara->para.gearPumpValue != 0) { + sysPara->para.gearPumpValue = 0; + u = 0.0f; + sysPara->devOp->WriteMoterPump(); + } + // 初始化隔膜泵状态机 + m_pumpState = DPUMP_STOPPED; + m_stateChangeCount = 0; + m_adjSkip = 0; + m_lastActualPressure = 0; + m_bufValidCount = 0; + m_startingStepCount = 0; + gearPumpStartFlag = true; + } + } + } + + if(pushButtonStartFlag && sysPara->status.selfCheckDone) + { + if((sysPara->status.PRESSURE > (sysPara->para.pressure -10)) && (sysPara->status.PRESSURE < (sysPara->para.pressure +10))) + { + if(pulse_1s) + { + + pulse_5s++; + } + if( pulse_5s == 5) + { + pulse_5s = 0; + gearPumpRunNormalFlag = true; + gearPumpRunNormalValue = u; + } + } + } + if(sysPara->status.isPumpValveControledByHand) + { + gearPumpRunNormalFlag = false; + ControledSwitchFlag = false; + pulse_3s = 0; + } + // 检测手动→自动边沿,直接恢复压力控制,不走 gearPumpStartFlag 的 3s 等待 + if(m_lastByHand && !sysPara->status.isPumpValveControledByHand) + { + ControledSwitchFlag = true; + u = (float)sysPara->para.gearPumpValue; // 同步当前转速,避免突变 + // 重置隔膜泵状态机,从当前转速状态开始 + if(u > 40.0f) { + m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态 + } else { + m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始 + } + m_stateChangeCount = 0; + m_adjSkip = 0; + m_lastActualPressure = 0; + m_bufValidCount = 0; + for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; + m_bufIdx = 0; + } + m_lastByHand = sysPara->status.isPumpValveControledByHand; + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关,压力抖动 + InkSwintFlag = true; + } + else + { + InkSwintFlag = false; + } + if(lastInkSwintFlag != InkSwintFlag) + { + lastInkSwintFlag = InkSwintFlag; + gearPumpRunNormalFlag = false; + } + if(gearPumpRunNormalFlag && !sysPara->status.isPumpValveControledByHand && sysPara->para.gearPumpEnable) + { + // 隔膜泵泄漏检测:运行状态下,压力持续不上升或下降 + static int leakCheckCount = 0; + static int lastPressureForLeak = 0; + + if(m_pumpState == DPUMP_RUNNING && pulse_1s) + { + int pressureChange = sysPara->status.PRESSURE - lastPressureForLeak; + + // 泵运行中(转速>40),压力不升反降,或上升太慢(<5/秒) + if(u > 40.0f && pressureChange < 5) { + leakCheckCount++; + if(leakCheckCount >= 5) { // 连续5秒 + leakCheckCount = 0; + ui->tabMainWindow->setRunStatus(tr("压力异常,可能泄漏!")); + sysPara->status.gearPumpRunStopFlag = true; + gearPumpRunNormalFlag = false; + LogInfo::setRunStatusText(tr("运行中压力泄漏,停泵!")); + } + } else { + leakCheckCount = 0; + } + + lastPressureForLeak = sysPara->status.PRESSURE; + } + } + if(sysPara->para.gearPumpEnable && (sysPara->status.gearPumpRunSpeed < 100) && test_flag){ + if(test_flag % 2) + ui->tabMainWindow->on_pushButtonReclaimTankClose_pressed(); + test_flag = 0; + } + if(pulse_1s) { + if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable) + checkPressureControl(); + if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){ + if(ui->tabMainWindow->getCurrPrintStatus() != 1){ + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("测试时间结束,准备关机")); + ui->tabMainWindow->setRunStatus(tr("测试时间结束,准备关机")); + } + } + if(sysPara->status.selfCheckDone && sysPara->para.Reciclar && test_flag){ + reciclar_30s++; + if(reciclar_30s > 30){ + reciclar_30s = 0; + test_flag++; + } + } + else if(reciclar_30s){ + reciclar_30s = 0; + } + QDate d = QDate::currentDate(); + + if(save_weeknum == 0) + { + save_weeknum = d.weekNumber(); + } + + if(save_weeknum != d.weekNumber()) + { + sysPara->devOp->writeFpgaCalandar(1); + save_weeknum = d.weekNumber(); + } + + sysPara->status.delay1s ++; + if(sysPara->status.delay1s == 3 && !delay3s){ + delay3s = true; + } + if(sysPara->status.delay1s % 3 == 0 && sysPara->status.delay1s != 0) + timer_3s = 1; + if(sysPara->status.delay1s == 10){ + pulse_10s = 1; + sysPara->status.delay1s = 0; + } + + pulse_4s++; + if(gearPumpStartFlag) + { + pulse_3s ++; + if(pulse_3s == 3) + { + pulse_3s = 0; + gearPumpRunFlag = true; + ControledSwitchFlag = true; + } + } + if( sysPara->status.reclainTankReachEnd) sysPara->para.openInkLineTime++; + } + + if(pulse_1s && flagOfSerialThreadStratEn){ + if (!m_serialThreadFPGA->isRunning()) { + qDebug()<<"start FPGA tread"; + m_serialThreadFPGA->start(); + } + if (!m_serialThreadSTM32->isRunning()){ + qDebug()<<"start STM32 tread"; + m_serialThreadSTM32->start(); + } + flagOfSerialThreadStratEn = false; + } + + if(pulse_10s){ + if(!m_thread->isRunning()) + m_thread->start(); + sysPara->status.delay10s ++; + if(sysPara->status.delay10s == 10){ + pulse_100s = 1; + sysPara->status.delay10s = 0; + +// if(sysPara->status.flagOfPowerOnMode && (ui->tabMainWindow->getCurrPrintStatus() != 1)) + if(sysPara->status.flagOfPowerOnMode) + { + qDebug()<<"waitPowerOffTime: "<status.waitPowerOffTime; + LogInfo::setRunStatusText(tr("waitPowerOffTime: %1").arg(sysPara->status.waitPowerOffTime)); + if(sysPara->status.waitPowerOffTime) + { + sysPara->status.waitPowerOffTime--; + if(!sysPara->status.waitPowerOffTime) + { + ui->tabMainWindow->_on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机")); + ui->tabMainWindow->setRunStatus(tr("准备关机")); + } + } + } + } + + } + + /*------------------------------------------------------*/ + if(pulse_100ms) { + sysPara->devOp->stm32Rd(0x07,(unsigned char *)&PulseCnt,2);//读取脉冲个数低字节 + sysPara->devOp->readFgaStatus(); + } + + /**************桂澳增加超速提示*****************************/ + static int logCtrl = 0; + if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER || sysPara->para.eleEyeTriggerSynPrintEn) + && sysPara->status.lesslen_warn == 1){ //置1表示超速了 + if(logCtrl++ % 500 == 0){ + LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!")); + qDebug()<<"速度过快,请检查是否漏喷!!!"; + } + + /*if(msgBox1->isHidden()){ //桂澳的超速提示先保留 + msgBox1->setText(tr("速度过快,请检查是否漏喷!!!")); + msgBox1->show(); + LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!")); + qDebug()<<"速度过快,请检查是否漏喷!!!"; + }*/ + sysPara->devOp->controlRedLight(true); + sysPara->devOp->controlGreenLight(false); + } + else{ + if(!msgBox1->isHidden()) + sysPara->devOp->controlRedLight(false); + } + + + sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2); + if(!sysPara->para.gearPumpEnable) + sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍 + + /*-------------------------------------------------------*/ + bool lostCommuFlag = 1; + if(sysPara->status.fpgaVersionNum != 0) + lostCommuFlag = 0; + + if(sysPara->status.delay10ms%5 == 0) + {//复位发送打印数据 + if((ui->tabMainWindow->getCurrPrintStatus() == 1)&&sysPara->para.ResetSendData) + { + static bool oneTimeFlag = false; + if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据 + { + oneTimeFlag = true; + ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + //复位重设起始值 + if(sysPara->para.cnt1ResetToInitValue) + { + sysPara->para.cnt1CurrValue = sysPara->para.cnt1StartValue; + sysPara->status.cnt1CurrentValueInitDoneFlag = false; + sysPara->devOp->writeFpgaCalandar(0); + } + } + if(sysPara->status.productCnt != 0) + { + oneTimeFlag = false; + } + } + static unsigned int lastProductCount=0; + if(sysPara->status.productCnt != lastProductCount || sysPara->status.printDoneFlag) + { + sysPara->status.printDoneFlag = false; + lastProductCount = sysPara->status.productCnt; + sysPara->modbusStatus.printFinishFlag = 1; + memcpy((void*)(&sysPara->modbusStatus.orderCode), (void*)(&sysPara->modbusParas.QRcode_buf), 2);//写返回序列号 + ui->tabMainWindow->UpdateDateTimeQRCode(QDateTime::currentDateTime().toString("hh:mm")); + } + if (modbus->getModbusStatus() == 1) { + refreshModbusStatus(); + } + } + + if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0) + { + if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){ + sysPara->status.selfCheckDone = true; + ui->tabMainWindow->updatePrintDisplayLabel(); + sysPara->status.flagOfAbnormalStatus = true; + + static bool onceLog = true; + if(onceLog) { + LogInfo::setRunStatusText(tr("打印过程中死机了!!!")); + qDebug()<<"打印过程中死机了!!!"; + onceLog = false; + + ui->tabMainWindow->updatePrintDisplayLabel(); + } + + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + + } + if(!sysPara->status.selfCheckDone) + { + /*开机自检*/ + autoControlValvePump(); + if(pulse_100ms){ + pressureAdj(); + } + /*-----------------------------------------------------*/ + if(!sysPara->status.selfCheckCnt) { + LogInfo::setRunStatusText(tr("开始自检,请等待60秒...............")); + ui->tabMainWindow->enableReclaimCtrlButton(false); + ui->tabMainWindow->enablePrintButton(false); + sysPara->devOp->mainInkCtrl(); + sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1 + sysPara->saveParaToFile(); // 保存开机次数值 + + sysPara->status.lastProductCnt = sysPara->status.productCnt ; //这会让产品计数显示出来 + + ui->tabMainWindow->updateTotalCnt(0); + + + } + if((++sysPara->status.selfCheckCnt % 100) == 0){ + ui->tabMainWindow->setRunStatus(tr("开始自检,请等待%1秒...............").arg((MAX_SELF_CHECK_CNT - sysPara->status.selfCheckCnt)/100)); + } + + if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) + { + sysPara->status.selfCheckDone = 1; + u = (float)sysPara->para.gearPumpValue; + // 自检完成后管道恢复正常阻力,重置状态机让压力重新平稳收敛 + // 不清零 u,从当前控制字开始,避免突变 + if(u > 40.0f) { + m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态 + } else { + m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始 + } + m_stateChangeCount = 0; + m_adjSkip = 0; + m_lastActualPressure = 0; + m_bufValidCount = 0; + for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; + m_bufIdx = 0; + LogInfo::setRunStatusText(tr("自检完成!!!")); + ui->tabMainWindow->setRunStatus(tr("自检完成!!!")); + qDebug()<<"自检完成!!!"; + ui->tabPrintSetting->PrintSettingLog(); + ui->tabMainWindow->enableReclaimCtrlButton(true); + sysPara->devOp->mainInkCtrl(); + sysPara->status.canRunAirPushing = true; + + if(sysPara->para.Reciclar) + test_flag = 1; + } + else { + if((sysPara->status.selfCheckCnt % 200) == 0) + // sysPara->devOp->controlReclaimTankOpen(false); + ui->tabMainWindow->enableReclaimCtrlButton(false); + } + + } + else{ + // 开机自检完成的前提下 + if (!sysPara->status.airPushing || ui->tabMainWindow->m_2sFlag) { + autoControlValvePump(); + } + // 检测回收泵模式切换,切换时重置泄漏保护学习状态和软启动状态 + if(m_lastReclaimMode != sysPara->para.flagOfReclaimPumEnable) + { + m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable; + gearPumpRunNormalFlag = false; // 泄漏保护重新学习 + gearPumpRunNormalValue = 0.0f; + // 重置隔膜泵状态机,适应新模式 + m_pumpState = DPUMP_STOPPED; + m_stateChangeCount = 0; + m_adjSkip = 0; + m_lastActualPressure = 0; + m_bufValidCount = 0; + for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0; + m_bufIdx = 0; + } + if(pulse_100ms && sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag ) { + pressureAdj(); + + } + } + } + else{ + static bool flag = 1; + if(delay3s){ + if(flag){ + flag = 0; + LogInfo::setRunStatusText(tr("缺少墨水,喷码机不能正常工作!")); + qDebug()<<"缺少墨水,喷码机不能正常工作!"; + } + ui->tabMainWindow->setRunStatus(tr("缺少墨水,喷码机不能正常工作!")); + } + } + /*----------------------------控制温度--------------------------------------*/ + if(pulse_300ms){ + autoControlHeater(); + sysPara->devOp->readSyncCounterAtZero(); + } + + sysPara->status.lostCommuFlag = lostCommuFlag; //务必放在后面 + static unsigned int lastProductCnt =0; + static int lastalterMode=-1; + if(sysPara->para.alterPrint.enable) + { + sysPara->para.AlterMode=sysPara->status.AlterMode; // 电眼触发交替功能:新增这一行 + if( (sysPara->para.AlterMode!=lastalterMode) + || (lastProductCnt != sysPara->status.productCnt) + ) + { + ui->tabMainWindow->alterDataPrint (sysPara->para.AlterMode); + } + } + else sysPara->para.AlterMode=0; + lastalterMode = sysPara->para.AlterMode; + lastProductCnt = sysPara->status.productCnt; + ui->tabMainWindow->CheckStatus(pulse_300ms); // + /*----------------------------------界面更新状态---------------------------------------*/ +#ifdef __RFID_CARD + static bool flag6 = true; + unsigned int addr = ui->tabPrintSetting->dlgInputAddr->jd.addr; + if(pulse_10s && flag6){ //初始化刷卡模块 + qDebug()<<"初始化刷卡模块"; + LogInfo::setRunStatusText(QString("jd.addr:%1").arg(addr)); + flag6 = false; + if (manager_rfid) + manager_rfid->initRFIDMoudle(addr, sysPara); + } + + if(pulse_300ms){ + if (manager_rfid) + manager_rfid->handleCheck(addr); + } + +#endif + if(pulse_300ms){ + sysPara->devOp->readCalandarDat(); //务必读一下此数据 + if(sysPara->status.RandomNum>0) + sysPara->devOp->Read_RanddomFromFpga(); +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + cnt1GroupCheck();//分段计米 +#endif + cntGroupCheck();//分段计米 + + QWidget *widget = this->currentWidget(); + static bool read_flag = false; + if(widget == ui->tabMainWindow && pulse_100ms) { + ui->tabMainWindow->updateSysStatusToUI(); + } + else if(widget == ui->tabTriggerMode){ + ui->tabTriggerMode->updateSysStatusToUI(); + if(sysPara->status.fpgaVersionNum != 0){ + QString FpgaVersion; + if((sysPara->status.fpgaVersionNum>>12) == 8 || (sysPara->status.fpgaVersionNum>>12) == 6) + FpgaVersion = "72"; + else if((sysPara->status.fpgaVersionNum>>12) == 2 || (sysPara->status.fpgaVersionNum>>12) == 1){ + if(sysPara->para.flagOfFastMode) + FpgaVersion = "66"; + else + FpgaVersion = "67"; + } + FpgaVersion += QString("_F%1.%2.%3").arg(sysPara->status.fpgaVersionNum >> 12) + .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff); + ui->tabTriggerMode->setBuildTime(QString(" No%1").arg(FpgaVersion)); + } + + } + else if(widget == ui->tabPrintSetting) + { + ui->tabPrintSetting->updateSysStatusToUI(); + if(!read_flag) + { + emit sendPicScene(ui->tabMainWindow->getPicScene()); + } + read_flag = true; + } + else if(widget == ui->tabSystemSetting){ + + ui->tabSystemSetting->updateSysStatusToUI(); + } + else if(widget == ui->tabSystemManage){ + ui->tabSystemManage->updateSysStatusToUI(); + } + else if(widget == ui->tabOtherInfo){ + ui->tabOtherInfo->updateSysStatusToUI(); + } + else if(widget == ui->tabNetworkManager){ + if(!sysPara->status.bLanConfigManual) + { + ui->tabNetworkManager->updateSysStatusToUI(); + } + } + if(widget != ui->tabPrintSetting) + { + read_flag = false; + } + + // 20140306 + static int last_lesslen_warn=0,lesslen_cnt=0; + if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) + { + if(last_lesslen_warn==0) + { + last_lesslen_warn =lesslen_cnt; + if(lesslen_cnt<60)lesslen_cnt +=6; + if(lesslen_cnt>40) sysPara->devOp->resumeFault(); + + if(sysPara->para.speedoverPaushPrint) { + ui->tabMainWindow->on_pushButtonPausePrint_pressed();// 2014-03-19 + // emit OnSpeedOver(2);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); + ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全,自动暂停喷印!!!")); + + } + else { + // emit OnSpeedOver(1);//QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快!无法喷印完全!!!")); + ui->tabMainWindow->setRunStatus(tr("喷印速度过快!无法喷印完全!!!")); + } + + } + } + else { last_lesslen_warn=0;lesslen_cnt=30;} + + if(last_lesslen_warn) last_lesslen_warn--; + + } + + if(pulse_100ms && sysPara->status.selfCheckDone){ + detectAndcontrolReclaimTank(); //控制回收槽 + } + + /*---------------------------------处理警告--------------------------------------------*/ + if(pulse_1s){ + if(sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone && gearPumpRunNormalFlag) + { + if((sysPara->status.PRESSURE < (sysPara->para.pressure -8)) || (sysPara->status.PRESSURE > (sysPara->para.pressure +8))) + { + LogInfo::setRunStatusText(tr("压力波动超过设定的5个值.")); + } + } + + static bool logFlag1 = true; + if(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN && logFlag1){ + logFlag1 = false; + LogInfo::setRunStatusText(tr("溶剂液位报警! %1").arg(sysPara->RFIDPara.solventNumber)); + qDebug()<<"溶剂液位报警! "<RFIDPara.solventNumber; + } + +#ifdef __RFID_CARD + /*****************墨水刷卡控制start**********************************************/ + /*墨水刷卡新的控制逻辑*/ + /* 1.任何时候,打印墨点数达到2.3billion之后,提示24小时内刷卡,否则禁止使用机器*/ + /*2.当墨水液位后,持续提示刷卡,24小时后如果还没有刷卡,禁止使用机器*/ + static bool logFlag4 = 1; + static int warnNum1 = 0; + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) + warnNum1 = 0; + if((sysPara->status.statWarn & WARN_STATUS_INK_WARN) || sysPara->para.RFIDInkWarn){ + if(!sysPara->para.RFIDInkWarn){ + if(++warnNum1 >6){ + sysPara->para.RFIDInkWarn = true; + QDateTime curDateTime = QDateTime::currentDateTime(); + QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); + if(sysPara->para.inkWarnDate == 0){ + sysPara->para.inkWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.inkWarnTime = strCurDateTime.mid(6,6).toInt(); + } + sysPara->saveParaToFile(); + } + else{ + LogInfo::setRunStatusText(tr("detect Ink warning cnt: %1").arg(warnNum1)); + qDebug()<<"检测到墨水液位次数:"<status.flagOfNeedInkCard = true; + if(logFlag4){ + logFlag4 = 0; + QString strDate = QString::number(sysPara->para.inkWarnDate); + QString strTime = QString::number(sysPara->para.inkWarnTime); + QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); + QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); + QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); + QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); + QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); + QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + LogInfo::setRunStatusText(tr("ink Warning at: %1").arg(strDateTime)); + qDebug()<<"ink Warning at:"<RFIDPara.PrintInkDots >= MAX_INK_DOTS || sysPara->para.RFIDInkWarn){ + sysPara->status.flagOfNeedInkCard = true; + if(sysPara->RFIDPara.InkRFIDCnt == 0){ + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + msgtest->show(); + ui->tabMainWindow->setRunStatus(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡,否则机器将在24小时后禁止使用!")); + } + int timeRemain = (MAX_INK_RFIDTIME - sysPara->RFIDPara.InkRFIDCnt)/60; + if(timeRemain > 60){ + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); + else + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1小时后禁止使用!").arg(timeRemain/60)); + } + else if(timeRemain > 0){ + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS) + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + else + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + } + if(sysPara->RFIDPara.InkRFIDCnt % 300 == 0) + sysPara->saveRFIDPara(); + if(++sysPara->RFIDPara.InkRFIDCnt >= MAX_INK_RFIDTIME) + sysPara->status.flagOfInkMaxDot = true; + } + + if(sysPara->status.flagOfInkMaxDot){ + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + static bool logFlag2= true; + if(sysPara->RFIDPara.PrintInkDots >= MAX_INK_DOTS){ + ui->tabMainWindow->setRunStatus(tr("1.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + if(logFlag2){ + logFlag2 = false; + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + qDebug()<<"打印墨点已达到2.3billion,请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; + } + } + else{ + ui->tabMainWindow->setRunStatus(tr("2.请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + if(logFlag2){ + logFlag2 = false; + msgtest->setText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!")); + qDebug()<<"请使用原厂墨水,然后刷墨水卡以恢复机器的正常功能!"; + } + } + } + /*****************墨水刷卡控制end**********************************************/ + + /*****************溶剂刷卡控制start**********************************************/ + /*溶剂刷卡新的控制逻辑*/ + /* 1.任何时候,混合阀打开次数达到360次,提示2小时关机,必须刷卡才能恢复*/ + /*2.溶剂液位报警后,提示刷卡,允许有10次的混合阀打开次数,必须刷卡才能恢复*/ + if(sysPara->RFIDPara.solventNumber >= MAX_SOLV_OPENNUM){ //混合阀打开次数达到360次 + sysPara->status.flagOfNeedSolventCard = true; + if(sysPara->RFIDPara.SOLVRFIDCnt == 0){ + msgtest->setText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在2小时后禁止使用!")); + } + int timeRemain = (MAX_SOLV_RFIDTIME - sysPara->RFIDPara.SOLVRFIDCnt)/60; + if(timeRemain > 0) + ui->tabMainWindow->setRunStatus(tr("请使用原厂溶剂,然后刷溶剂卡,否则机器将在%1分钟后禁止使用!").arg(timeRemain)); + if(sysPara->RFIDPara.SOLVRFIDCnt % 300 == 0) + sysPara->saveRFIDPara(); + if(++sysPara->RFIDPara.SOLVRFIDCnt >= MAX_SOLV_RFIDTIME) + sysPara->status.flagOfSolventMaxNum = true; + } + + static bool logFlag5 = 1; + static int warnNum2 = 0; + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) + warnNum2 = 0; + if((sysPara->status.statWarn & WARN_STATUS_SOLV_WARN) || sysPara->para.RFIDSolventWarn){ + if(!sysPara->para.RFIDSolventWarn){ + if(++warnNum2 > 6){ + sysPara->para.RFIDSolventWarn = true; + sysPara->para.RFIDSolventWarnMixCnt = 0; + LogInfo::setRunStatusText(tr("请添加原厂溶剂,然后刷溶剂卡!")); + qDebug()<<"请添加原厂溶剂,然后刷溶剂卡,否则将会在打开10次混合阀之后禁用喷码机!"; + QDateTime curDateTime = QDateTime::currentDateTime(); + QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); + if(sysPara->para.solventWarnDate == 0){ + sysPara->para.solventWarnDate = strCurDateTime.mid(0,6).toInt(); + sysPara->para.solventWarnTime = strCurDateTime.mid(6,6).toInt(); + } + sysPara->saveParaToFile(); + } + else{ + LogInfo::setRunStatusText(tr("detect solvent warning cnt: %1").arg(warnNum2)); + qDebug()<<"检测到溶剂液位次数:"<status.flagOfNeedSolventCard = true; + ui->tabMainWindow->setRunStatus(tr("请添加原厂溶剂,然后刷溶剂卡!")); + if(logFlag5){ + logFlag5 = 0; + QString strDate = QString::number(sysPara->para.solventWarnDate); + QString strTime = QString::number(sysPara->para.solventWarnTime); + QString str1 = QString::number(strDate.mid(0,2).toInt()).rightJustified(2,'0'); + QString str2 = QString::number(strDate.mid(2,2).toInt()).rightJustified(2,'0'); + QString str3 = QString::number(strDate.mid(4,2).toInt()).rightJustified(2,'0'); + QString str4 = QString::number(strTime.mid(0,2).toInt()).rightJustified(2,'0'); + QString str5 = QString::number(strTime.mid(2,2).toInt()).rightJustified(2,'0'); + QString str6 = QString::number(strTime.mid(4,2).toInt()).rightJustified(2,'0'); + QString strDateTime = str1 + "-" + str2 + "-" + str3 + " " + str4 + ":" + str5 + ":" + str6; + LogInfo::setRunStatusText(tr("solvent Warning at: %1").arg(strDateTime)); + qDebug()<<"solvent Warning at:"<para.RFIDSolventWarnMixCnt >= 10) + sysPara->status.flagOfSolventMaxNum = true; + + if(sysPara->status.flagOfSolventMaxNum){ + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + static bool logFlag3 = true; + if(sysPara->para.RFIDSolventWarnMixCnt>=10){ + ui->tabMainWindow->setRunStatus(tr("请刷溶剂卡以恢复机器的正常功能")); + if(logFlag3){ + logFlag3 = false; + msgtest->setText(tr("请刷溶剂卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请刷溶剂卡以恢复机器的正常功能")); + qDebug()<<"溶剂液位报警后已经打开混合阀10次,请刷卡以恢复机器的正常功能"; + } + } + else{ + ui->tabMainWindow->setRunStatus(tr("请刷溶剂卡以恢复机器的正常功能")); + if(logFlag3){ + logFlag3 = false; + msgtest->setText(tr("请刷溶剂卡以恢复机器的正常功能!")); + msgtest->show(); + LogInfo::setRunStatusText(tr("请刷溶剂卡以恢复机器的正常功能")); + qDebug()<<"已经打开混合阀360次,请刷卡以恢复机器的正常功能"; + } + } + } + /*****************溶剂刷卡控制end**********************************************/ +#endif + + static bool resumeFlag = false; + if(lostCommuFlag || ui->tabMainWindow->updatePhaseIndicatorLight() || (sysPara->status.statWarn & (WARN_STATUS_POWER_MON|WARN_STATUS_INK_WARN|WARN_STATUS_SUMP_WARN + |WARN_STATUS_SOLV_WARN|WARN_STATUS_POWER_MON)) || (sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) ||sysPara->status.lastHighVoltageFault) + { //updatePhaseIndicatorLight()务必放前面 + sysPara->status.beeperOnFlag = true; + if(sysPara->status.gearPumpRunStopFlag && pushButtonStartFlag) + { + ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!")); + } + if(!resumeFlag) + { + resumeFlag = true; + pulse_4s = 0; + if(!sysPara->status.lastHighVoltageFault) + { + ui->tabMainWindow->onLabelFaultRusumePressed(); + } + } + } + else { + sysPara->status.beeperOnFlag = false; + sysPara->devOp->controlBeeper(false); + if(pulse_4s >= 20) + { + pulse_4s = 0; + resumeFlag = false; + } + } + + if(sysPara->status.beeperOnFlag){ //报警会时有时无 + sysPara->devOp->controlBeeper(!sysPara->devOp->isBeeperEnable()); + } + + if((sysPara->status.statWarn & (WARN_STATUS_POWER_MON)) + ||sysPara->status.lastwarmInkPump||sysPara->status.lastwarmInkPump||sysPara->status.mainInkPumpError + ||sysPara->status.compressPumpError||sysPara->status.lastPhaseFault||sysPara->status.lastRecycleWarn||sysPara->status.lastHighVoltageFault) + { //2013-12-12故障报警灯 杨 + sysPara->status.RedLightOnFlag = true; + + } + else { + sysPara->status.RedLightOnFlag = false; + sysPara->devOp->controlRedLight(false); + //sysPara->devOp->controlRedLight(true); + } + if(sysPara->status.RedLightOnFlag){ //报警会时有时无 + sysPara->devOp->controlRedLight(!sysPara->devOp->isRedLightEnable()); + } + if((sysPara->status.statWarn & (WARN_STATUS_INK_WARN|WARN_STATUS_SOLV_WARN |WARN_STATUS_RECYCLE_FAULT|WARN_STATUS_SUMP_WARN)) + && !sysPara->status.RedLightOnFlag){ + //if(!sysPara->status.RedLightOnFlag){ + sysPara->status.YellowLightOnFlag = true; + } + else { + sysPara->status.YellowLightOnFlag = false; + sysPara->devOp->controlYellowLight(false); + //sysPara->devOp->controlYellowLight(true); + } + if(sysPara->status.YellowLightOnFlag){ //报警会时有时无 + sysPara->devOp->controlYellowLight(!sysPara->devOp->isYellowLightEnable()); + } + + if(sysPara->status.waitHightVolOff>0){ + sysPara->status.waitHightVolOff--; + if(sysPara->status.waitHightVolOff==0){ + sysPara->devOp->highVoltageCtrl(0); + ui->tabMainWindow->setRunStatus(tr("停止打印,自动关闭高压.")); + } + } + + }// 1s + +#ifdef WARNING + static int pre_pressed=0,pre_hvcurrent=0,press_err_cnt=0; + if(pulse_1s) + { + if((pre_pressed > sysPara->status.PRESSURE+70)) + { + if(++press_err_cnt>3) + { + LogInfo::setRunStatusText(tr("压力异常:上次压力值%1,当前压力值%2").arg(pre_pressed).arg(sysPara->status.PRESSURE)); + } + } + else + { + press_err_cnt = 0; + } + pre_pressed = sysPara->status.PRESSURE; + + + } + + if(pulse_100ms) + { + if(pre_hvcurrent>150 && ( sysPara->status.HV_DETOUT> pre_hvcurrent+20) && (sysPara->status.waitHightVolOn==8 || sysPara->status.waitHightVolOff==1) && sysPara->status.isPrinting ) + pre_hvcurrent = sysPara->status.HV_DETOUT; + + if(sysPara->status.waitHightVolOn<8)sysPara->status.waitHightVolOn++; + if(sysPara->status.isPrinting==0) sysPara->status.waitHightVolOn=0; + } +#endif + if(sysPara->devOp->color_flag ==3){ + sysPara->devOp->color_flag = 0; + pulse_30s = 0; + } + else if(pulse_1s && sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone + && (!sysPara->status.statWarn) && !sysPara->status.powerOffAppending){ + // 隔膜泵速度告警逻辑:检测转速是否异常超过最大工作转速 + // 最大工作转速对应的RPM约为:300 * 60 * 1000 / (500 * 2) = 1800 RPM + // 给予余量,告警阈值设为2200 RPM + const int MAX_SPEED_ALARM = 2200; + + if(sysPara->status.gearPumpRunSpeed <= MAX_SPEED_ALARM) + { + pulse_30s = 0; + } + else{ + pulse_30s++; + if(pulse_30s >= 30){ + sysPara->status.flagOfSpeedAlarm = true; + sysPara->devOp->color_flag = 2; + if(pulse_30s % 500 == 0){ + LogInfo::setRunStatusText(tr("泵转速异常过高,请立即停机并联系供应商!")); + qDebug()<<"泵转速异常过高,请立即停机并联系供应商!"; + } + ui->tabMainWindow->setRunStatus(tr("泵转速异常过高,请立即停机并联系供应商!")); + sysPara->devOp->controlRedLight(true); + if(sysPara->status.isPrinting) + ui->tabMainWindow->on_pushButtonStopPrint_pressed(); + } + if(pulse_30s % 10 == 0) + qDebug()<<"粘度: "<status.viscosity); + } + } + else if(sysPara->status.statWarn & 0xFE){ + sysPara->devOp->color_flag = 3; + pulse_30s = 0; + } + } + + //测试代码,发布模式自动忽略 + +} + +void InkJetPrinter::autoControlHeater(){ + //100ms + static int tempDly=1830; + if(sysPara->para.heatTime == 0) + sysPara->para.heatTime = 5; + int maxHeatTime = sysPara->para.heatTime * 600; + if(sysPara->para.flagOfContinueHeat) + maxHeatTime = 60* 600; + if(tempDly) tempDly--; + if(tempDly>=1800) + { + if(tempDly==1800) + { + sysPara->status.indoorTemperature = sysPara->status.TEMP_ADIN/4; + sysPara->devOp->pumpValveCtrl(1); + if(sysPara->status.indoorTemperature-35>0) + ui->tabSystemSetting->updateViscosityAdjust((sysPara->status.indoorTemperature-35)); + else + ui->tabSystemSetting->updateViscosityAdjust(0); + } + return; + } + if(sysPara->status.TEMP_ADIN/4 < sysPara->para.temperature && sysPara->status.heaterONTimeCnt < MAX_HEATER_TIME){ + if(tempDly==0) sysPara->status.heaterONTimeCnt ++; +// if(!sysPara->devOp->isHearterEnable()) + sysPara->devOp->controlHeater(true); + + if(sysPara->status.heaterONTimeCnt == maxHeatTime) + { + if(sysPara->status.TEMP_ADIN/4 < (sysPara->para.temperature - 2)){ + LogInfo::setRunStatusText(tr("警告:加热器长时间无法达到预期温度,故障或设置错误!")); + ui->tabMainWindow->setRunStatus("加热器长时间无法达到预期温度,故障或设置错误!");//20150105 no check + sysPara->devOp->controlHeater(false); + } + else + sysPara->status.heaterONTimeCnt = 0; + } + } + else if(sysPara->status.TEMP_ADIN/4 >= (sysPara->para.temperature + 2)){ + if(sysPara->status.heaterONTimeCnt < maxHeatTime) + { + sysPara->status.heaterONTimeCnt = 0; + } +// if(sysPara->devOp->isHearterEnable()) + sysPara->devOp->controlHeater(false); + } +} + +void InkJetPrinter::cnt1GroupCheck(void) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + static unsigned char lastGroupRunningIndex = 0; + if(sysPara->para.cnt1ByGroupEnalbe) + { + + + sysPara->devOp->ReadCnt1GroupStatus(); + if(lastGroupRunningIndex == sysPara->status.cnt1GroupRunningIndex) + return; + lastGroupRunningIndex = sysPara->status.cnt1GroupRunningIndex; + + emit updateCnt1GroupDisp(1); + } +#endif +} + +void InkJetPrinter::cntGroupCheck() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + static unsigned char mlastGroupRunningIndex = 0; + if(sysPara->para.cnt1ByGroupEnalbe) + { + sysPara->devOp->ReadCnt1GroupStatus(); + if(mlastGroupRunningIndex != sysPara->status.cnt1GroupRunningIndex) { + mlastGroupRunningIndex = sysPara->status.cnt1GroupRunningIndex; + LogInfo::setRunStatusText("Next cnt1 group index: " + QString::number(sysPara->status.cnt1GroupRunningIndex)); + } + } +#endif + +#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ + if(sysPara->para.cnt2ByGroupEnalbe) + { + sysPara->devOp->ReadCnt2GroupStatus(); + if(mlastGroupRunningIndex != sysPara->status.cnt2GroupRunningIndex) { + mlastGroupRunningIndex = sysPara->status.cnt2GroupRunningIndex; + LogInfo::setRunStatusText("Next cnt2 group index: " + QString::number(sysPara->status.cnt2GroupRunningIndex)); + } + } +#endif + emit sig_updateDisp(1); +} + +void InkJetPrinter::autoControlCycleValve() +{ + if(!sysPara->status.selfCheckDone || (sysPara->status.flagOfPowerOnMode && sysPara->para.gearPumpEnable)){ + // if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 //定时开机循环时隔膜泵不开关循环阀 + // sysPara->devOp->controlCycleValve(true); + // } + cycleValveRunForSelfCheck(); + if(sysPara->status.flagOfPowerOnMode) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); + } + } + } + else { + if(sysPara->status.cycleValveOpenCntAfterSWintOff){ // 开循环阀 + if(!sysPara->devOp->isCycleValveOpen()){ + sysPara->devOp->controlCycleValve(true); + } + sysPara->status.cycleValveOpenCntAfterSWintOff --; + } + else if(sysPara->devOp->isCycleValveOpen()){ // 关循环阀 + sysPara->devOp->controlCycleValve(false); + } + } +} + +void InkJetPrinter::autoControlValvePump(void) +{ + if(sysPara){ + if(!sysPara->status.isPumpValveControledByHand){ + + /*---------------------------------供墨阀--------------------------------------------*/ + bool enableFlag = ((sysPara->status.statWarn & WARN_STATUS_INK_SWINT) + || (sysPara->status.lastRecycleWarn && sysPara->para.RecycleWarnAction) // 2017.8.15版本回收故障关供墨阀问题 + || ( sysPara->status.HVFaultCloseEn ) //高压故障关闭墨线 + )?false:true; //墨线开关 + + if(enableFlag != sysPara->devOp->isInkValveOpen()){ + if(enableFlag == false) { //关闭供墨阀的顺序 先开循环阀后关闭供墨阀间 + if (sysPara->status.cycleValveOpenCntAfterSWintOff == 0) { + sysPara->status.cycleValveOpenCntAfterSWintOff = MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF; + } + if (sysPara->status.cycleValveOpenCntAfterSWintOff < 60) { //在准备关闭循环阀的时候关闭供墨阀 + sysPara->devOp->controlInkValve(enableFlag); //关供墨 + sysPara->devOp->controlInkValvePWM(enableFlag); //关供墨 + } + } + else { //开供墨阀 + if(!sysPara->devOp->isReclaimPumpOpen()) //开供墨阀之前要判断回收泵有没有开,没开就提前打开 + { + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + } + if(!ui->tabMainWindow->m_2sFlag) + { + sysPara->devOp->controlInkValve(enableFlag); + sysPara->devOp->controlInkValvePWM(enableFlag); + } + } + } + + if(!sysPara->status.selfCheckDone) { + if(!sysPara->devOp->isCycleValveOpen()) { + sysPara->devOp->controlCycleValve(false); + } + } + else { + autoControlCycleValve(); + } + + /*----------------------------------泄压阀-------------------------------------------*/ + //===================================================================================================== + if(sysPara->status.PRESSURE - sysPara->para.pressure > MAX_PRESSURE_RELEASE_DIFF) + sysPara->status.pressureOverFlowCnt ++; + else + sysPara->status.pressureOverFlowCnt = 0; + + if(( + sysPara->status.releaseValveOpenApending || + sysPara->status.pressureOverFlowCnt > 2 + ) //防止干扰和误动作 + && !sysPara->status.releaseValveDelayCnt) + { + if(!sysPara->devOp->isReleaseValveOpen()) + { //泄压阀 + sysPara->devOp->controlReleaseValve(true); + } + sysPara->status.releaseValveDelayCnt = MAX_RELEASE_VALVE_DELAY_CNT; + sysPara->status.releaseValveOpenApending = true; + } + else + { + if(sysPara->devOp->isReleaseValveOpen()) + { // + //sysPara->devOp->controlReleaseValve(false); + } + + if(sysPara->status.releaseValveDelayCnt) + sysPara->status.releaseValveDelayCnt --; + if(sysPara->status.PRESSURE < sysPara->para.pressure) + { + sysPara->status.releaseValveOpenApending = false; + if(sysPara->devOp->isReleaseValveOpen()){ sysPara->devOp->controlReleaseValve(false); + + } + } + } + + /*-----------------------------------主墨泵------------------------------------------*/ + if(sysPara->status.SEPTAL_POSITION < (sysPara->para.septalPostion - DIFF_SEPTAL_POSITION)) + sysPara->status.septalPositionOverFlowCnt ++; + else + sysPara->status.septalPositionOverFlowCnt = 0; + if(sysPara->status.septalPositionOverFlowCnt > 2 && !sysPara->status.mainInkPumpError){ //主墨泵 + if(!sysPara->devOp->isMainInkPumpOpen()){ + sysPara->devOp->controlMainInkPump(true); + sysPara->status.mainInkPumpRunTmCnt = 0; + } + else if(sysPara->status.selfCheckDone){ + if(sysPara->status.mainInkPumpRunTmCnt < MAX_MAIN_INK_PUMP_RUN_TIME){ // + sysPara->status.mainInkPumpRunTmCnt ++; + } + else { + if(!sysPara->para.gearPumpEnable) + { + sysPara->status.mainInkPumpError = true; + sysPara->devOp->controlMainInkPump(false); + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!主墨泵故障")); + ui->tabMainWindow->setRunStatus(tr("主墨泵故障!!!")); + } + } + } + } + else if(sysPara->status.SEPTAL_POSITION > sysPara->para.septalPostion){ + if(sysPara->devOp->isMainInkPumpOpen()) + sysPara->devOp->controlMainInkPump(false); + } + /*-----------------------------------压缩机------------------------------------------*/ + + if((sysPara->para.pressure - sysPara->status.PRESSURE > MAX_PRESSURE_DIFF) && !sysPara->status.compressPumpError){ //压缩机 + if(!sysPara->devOp->isCompressPumpOpen()){ + sysPara->devOp->controlCompressPump(true); + sysPara->status.compressPumpRunTmCnt = 0; + } + else if(sysPara->status.selfCheckDone){ + if(sysPara->status.compressPumpRunTmCnt < MAX_COMPRESS_PUMP_RUN_TIME){ //如果长时间开压缩机,考虑设备故障 + sysPara->status.compressPumpRunTmCnt ++; + } + else { + sysPara->status.compressPumpError = true; + sysPara->devOp->controlCompressPump(false); + if(!sysPara->para.gearPumpEnable) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!压缩机故障")); + ui->tabMainWindow->setRunStatus(tr("压缩机故障!!!")); + } + + } + } + } + else if(sysPara->para.pressure <= sysPara->status.PRESSURE){ //压力到达预期的压力 + if(sysPara->devOp->isCompressPumpOpen()) + sysPara->devOp->controlCompressPump(false); + } + + /*------------------------------------粘度泵,混合阀-----------------------------------------*/ + + /*-----------------------------每30s打开一次粘度泵以及相关处理--------------------------------------*/ + static bool hasDetectedBellow = false; // 检测到下位灯 + static bool hasDetectedTop = false; // 检测到上位灯 + static int viscosity_low = 0; //统计粘度连续偏低10%次数 + static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数 + static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数 + static bool flag = 0; + + if(sysPara->status.cycleValveOpenCntAfterSWintOff) { //关闭墨线的时候要提前开粘度泵 + sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100; + } + ++sysPara->status.viscosityDelayCnt; + int mixer_open_threshold = (105*sysPara->para.viscosity)/100; + int viscosity_faulty_threshold =(113*sysPara->para.viscosity)/100; + if(sysPara->status.viscosityDelayCnt >= sysPara->para.viscosityPumpInterval*100 && flag == 0) + { + flag=1; + if (!sysPara->devOp->isViscosityPumpOpen()) + { + sysPara->devOp->controlViscosityPump(true); + viscosity_timer->start(10000); + qDebug()<<"粘度: "<status.viscosity); + } + if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold)) + { + sysPara->status.viscosityFault = 0; + viscosity_low=0; + Mixing_valve_open = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100) + { + viscosity_low++; + viscosity_faulty_num = 0; + Mixing_valve_open = 0; + } + if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold) + { + Mixing_valve_open++; + viscosity_low = 0; + viscosity_faulty_num = 0; + } + if(sysPara->status.viscosity > viscosity_faulty_threshold){ + Mixing_valve_open++; + viscosity_faulty_num++; + viscosity_low = 0; + } + + if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { // + sysPara->devOp->controlMixValve(true); + Mixing_valve_open = 0; + LogInfo::setRunStatusText(tr("添加溶剂:")+QString::number(sysPara->status.viscosity)); + qDebug()<<"添加溶剂"; + } + + if(viscosity_low >= 60) + { + LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度值偏低"; + sysPara->status.viscosityFault = 2; + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); + } + } + if(viscosity_faulty_num >= 5) + { + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity)); + qDebug()<<"粘度偏大故障"; + sysPara->status.viscosityFault = 1; + } + + } + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1) + { + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); + } + } + + if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1) + { + if (sysPara->devOp->isViscosityPumpOpen()) { + sysPara->devOp->controlViscosityPump(false); + } + sysPara->status.viscosityDelayCnt = 0; + flag=0; + } + + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位 + viscosity_timer->stop(); + } + + if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) { + static int detectBelow = 0; + if (++detectBelow%400 == 0) { + if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY) + { + if(sysPara->status.rWarnViscoReady>=15){ + sysPara->status.viscosityFault = 1; + sysPara->status.viscosity=0; + if(!firstTime) + qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity); + // LogInfo::setRunStatusText(tr("错误!粘度计下位灯故障.")+QString::number(sysPara->status.viscosity)); + hasDetectedBellow = true; + } + else sysPara->status.rWarnViscoReady++; + } + else { + sysPara->status.rWarnViscoReady = 0; + sysPara->status.viscosityFault = 0; + } + } + } + if(hasDetectedBellow && hasDetectedTop) + { + if(sysPara->devOp->isMixValveOpen()) { // + sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀 + } + } + if(sysPara->status.viscosityFault==0) + { + hasDetectedBellow = false; + hasDetectedTop = false; + } + // } + /*-----------------------------------回收泵------------------------------------------*/ + + if(!sysPara->status.autoCtlReclaimAfterSWintOff) + { + if(!sysPara->devOp->isReclaimPumpOpen() ){ //回收泵 + // ui->tabMainWindow->setRunStatus(tr("全速回收泵!!!")); + sysPara->status.reclaimPumpFullSpeedCnt = 0; + sysPara->devOp->controlReclaimPump(true,true); //先全速,后降速 + } + else if(sysPara->status.reclaimPumpFullSpeedCnt <= RECLAIM_PUMP_FULL_SPEED_CNT){ + sysPara->status.reclaimPumpFullSpeedCnt ++; + if(sysPara->status.reclaimPumpFullSpeedCnt == RECLAIM_PUMP_FULL_SPEED_CNT){ //降速 + // ui->tabMainWindow->setRunStatus(tr("降速回收泵!!!")); + sysPara->devOp->controlReclaimPump(true,false); + } + } + } + /*-----------------------------------------------------------------------------*/ + } + } +} +//========================== +// 放在10ms的定时器运行,但和粘度泵工作周期一致 +void InkJetPrinter::checkMixValveOpen(){ + //混合阀 + if(sysPara->status.viscosity>40000){ + sysPara->status.viscosityMaxFaultCnt++; + if(sysPara->status.viscosityMaxFaultCnt>5) + { + sysPara->status.viscosityMaxFaultCnt=0; + if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("粘度检测异常,粘度值太大!!!")); + sysPara->status.viscosityFault=1; + } + sysPara->status.viscosity=0; + } + int mixer_open_threshold = MAX_VISICOSITY_RATIO*sysPara->para.viscosity/100; + int mixer_open_threshold_high = (MAX_VISICOSITY_RATIO + 11)*sysPara->para.viscosity/100; + if(sysPara->status.viscosity > mixer_open_threshold) + {// 粘度值高报警: 条件@高于设定值的1.05,时间:120个测量周期 + sysPara->status.visocityValueOverflowNum ++; + if(sysPara->status.visocityValueOverflowNum >= (MAX_VISICOSITY_VALUE_OVERFLOW_NUM/3)){ + if((sysPara->status.viscosity >= mixer_open_threshold_high)//超出太多加得快,否则隔三下,加一下 + || ((sysPara->status.visocityValueOverflowNum % 3) == 0)){ + if(!sysPara->devOp->isMixValveOpen()){ // + sysPara->devOp->controlMixValve(true); + LogInfo::setRunStatusText(tr("混合阀打开2:")+QString::number(sysPara->status.viscosity)); + } + } + } + if(sysPara->status.visocityValueOverflowNum > MAX_ALLOW_VISICOSITY_OVERFLOW_NUM){ + if(sysPara->status.viscosityFault ==0 ) + LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")); + + sysPara->status.viscosityFault = 1; + } + } + else if(sysPara->status.viscosity > 90*sysPara->para.viscosity/100){ + // 粘度值正常 + sysPara->status.visocityValueOverflowNum = 0; + sysPara->status.viscosityFault = 0; // 20160922 粘度低报警不能复位问题 + } + else {// 粘度值低报警: 条件@ 低于设定值的0.9,时间:60个测量周期 + sysPara->status.visocityValueOverflowNum ++; + if(sysPara->status.visocityValueOverflowNum > (MAX_ALLOW_VISICOSITY_OVERFLOW_NUM/2)){ + + if(sysPara->status.viscosityFault ==0 ) LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")); + sysPara->status.viscosityFault = 2; + sysPara->status.visocityValueOverflowNum=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM-10; + } + } +} + + +void InkJetPrinter::checkMixValveClose(){ + if(sysPara->devOp->isMixValveOpen()){ // 关闭混合阀 + sysPara->devOp->controlMixValve(false); + } +} + +//在开机自检过程中交替打开和关闭循环阀 +void InkJetPrinter::cycleValveRunForSelfCheck(){ + static int cycleValveOpenCnt = 0; + if (++cycleValveOpenCnt%300 > 150) { + if(!sysPara->devOp->isCycleValveOpen()){ //循环阀 开 + sysPara->devOp->controlCycleValve(true); + } + } + else { + if(sysPara->devOp->isCycleValveOpen()){ //循环阀 关 + sysPara->devOp->controlCycleValve(false); + } + } +} + +void InkJetPrinter::onReclaimTankBlock(){ + if(sysPara){ + ui->tabMainWindow->enableReclaimCtrlButton(true); + sysPara->status.reclaimTankBlockedAppending = true; + if(sysPara->status.powerOffAppending && sysPara->status.powerOffAfterPhaseFaultAppending) + ui->tabMainWindow->checkForPowerOff(); + sysPara->status.powerOffAppending = false; //如果有关机动作,终止 + + } + +} +/* + * + * 控制回收槽 + * + * */ + +void InkJetPrinter::detectAndcontrolReclaimTank(){ + sysPara->status.currReclaimTankPos =10*sysPara->status.curr_reclaimTankTime; + sysPara->status.reclaimTankBlockedAppending =0; + //qDebug()<status.reclaimTankstatus; + // if(sysPara->status.currReclaimTankPos == 0) + // ui->tabMainWindow->setReBootQtUIEnable(false); + // else + // ui->tabMainWindow->setReBootQtUIEnable(true); + + if(sysPara->status.reclaimTankstatus == 0x10) //7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + if(sysPara->devOp->isReclaimTankCloseEnable()) + { + LogInfo::setRunStatusText(tr("电机故障")); + ui->tabMainWindow->setRunStatus(tr("电机故障")); + sysPara->devOp->controlReclaimTankClose(false); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + else { + LogInfo::setRunStatusText(tr("电机故障")); + ui->tabMainWindow->setRunStatus(tr("电机故障!!!")); + if(sysPara->devOp->isReclaimTankOpenEnable()) + sysPara->devOp->controlReclaimTankOpen(false); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + + } + else if(sysPara->status.reclaimTankstatus == 5 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + if(sysPara->devOp->isReclaimTankOpenEnable()) + sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 + sysPara->status.reclainTankReachEnd = true; + /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ + ui->tabMainWindow->setRunStatus(tr("回收槽到头")); + ui->tabMainWindow->enablePrintButton(true); //仅仅在此时能使能打印按钮 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + // sysPara->devOp->highVoltageCtrl(1); + emit reclaimTankOpenDone(); + /*回收槽开关时间校正*/ + sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; + ui->tabSystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime ); + + qDebug()<<"reclaimTankOpenDone currReclaimTankPos:"<status.currReclaimTankPos; + qDebug()<<"reclaimTankOpenDone curr_reclaimTankTime:"<status.curr_reclaimTankTime; + } + else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); + emit reclaimTankBlock(); + } + else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); + sysPara->status.reclaimBlockedCnt = 0; + + } + else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + if(sysPara->devOp->isReclaimTankCloseEnable()) + sysPara->devOp->controlReclaimTankClose(false); //到头,关闭 + /*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/ + ui->tabMainWindow->setRunStatus(tr("回收槽到头")); + //sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零 + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankCloseDone(); + sysPara->status.lastRecycleWarn = 0; + sysPara->status.HVFaultCloseEn=0; + sysPara->status.reclainCloseAppending=false; + sysPara->status.canRunAirPushing = true; //下次开回收槽就执行排气程序 + qDebug()<<"reclaimTankCloseDone currReclaimTankPos:"<status.currReclaimTankPos; + qDebug()<<"reclaimTankCloseDone curr_reclaimTankTime:"<status.curr_reclaimTankTime; + } + else if(sysPara->status.reclaimTankstatus == 0x12 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 + LogInfo::setRunStatusText(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); + ui->tabMainWindow->resetReclaimCtrlButtonText(); + emit reclaimTankBlock(); + } + else // if(sysPara->status.reclaimTankstatus == 7 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 + { + emit setReclaimTankCurrentPos(sysPara->status.currReclaimTankPos); + } +} + +static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable){ + if(enable){ + if(tab->indexOf(page) == -1){ + tab->addTab(page,name); + + } + } + else { + int index = tab->indexOf(page); + if(index != -1) + tab->removeTab(index); + } + +} + +static void controlTabDisplay(QTabWidget *tab,QWidget *page,QString name,int enable,int Pos){ + if(enable){ + if(tab->indexOf(page) == -1){ + tab->insertTab(Pos,page,name); + } + } + else { + int index = tab->indexOf(page); + if(index != -1) + tab->removeTab(index); + } + +} +void InkJetPrinter::onAuthChanged(int auth){ + + controlTabDisplay(this,ui->tabSystemSetting,tr("系统设置"),auth&AUTH_DISPLAY_SYSTEM_SETTING); + controlTabDisplay(this,ui->tabSystemManage,tr("系统管理"),auth&AUTH_DISPLAY_SYSTEM_MANAGE); + controlTabDisplay(this,ui->tabOtherInfo,tr("其他信息"),auth& AUTH_DISPLAY_OTHER_INFO); + controlTabDisplay(this,ui->tabLogInfo,tr("日志信息"),auth&AUTH_DISPLAY_LOG_INFO); + controlTabDisplay(this,ui->tabNetworkManager,tr("网络管理"),auth&AUTH_SUPER_USER1); + + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),auth); + ui->tabPrintSetting->updateAuthorization(auth); + ui->tabSystemSetting->updateAuthorization(auth); + ui->tabNetworkManager->updateAuthorization(auth); +} + +void InkJetPrinter::onConfigChanged(void){ + + sysPara->loadParaFromFile(); +} + +/* + * 这个方法的主要目的是在切换tab时不要弹出输入法 + * + */ + +void InkJetPrinter::onInkJetPrinterCurrentChanged(int index) +{ + QWidget *w = widget(index); + if(w){ + QWidget *subWidget = w->focusWidget(); + if(subWidget) + subWidget->clearFocus(); + } + //if(index == 3||index == 3) //刷新打印设置这个界面 + { + ui->tabPrintSetting->update(); + } + +} + +void InkJetPrinter::closeEvent(QCloseEvent *event) +{ + event->ignore(); +} +void InkJetPrinter::resizeEvent(QResizeEvent *event){ + + event->ignore(); +} + +void InkJetPrinter::onChangeTab(QString) +{ + this->setCurrentIndex (indexOf( ui->tabPicEdit)); +} +void InkJetPrinter::onchangeEditMode(int) +{ + if(sysPara){ + if(sysPara->para.EditMode == PICFILE) { + insertTab(1,ui->tabPicEdit,tr("信息编辑")); + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),0); + } + else if(sysPara->para.EditMode == TXTFILE|| sysPara->para.EditMode == SCENE){ + controlTabDisplay(this,ui->tabPicEdit,tr("信息编辑"),0); + // controlTabDisplay(this,ui->tabZkEdit,tr("图案编辑"),1,1); + } + ui->tabMainWindow->changeEditMode(sysPara->para.EditMode); + } + else{ + + } +} + + +void InkJetPrinter::OnSpeedOver(int mode) +{ + if(mode==2){ + //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); + msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全,自动暂停喷印!!!")); + msgtest->show(); + } + else if(mode==1){ + //emit QMessageBox::warning(NULL,tr("警告"),tr("喷印速度过快或间隔太短!无法喷印完全!!!")); + msgtest->setText(tr("喷印速度过快或间隔太短!无法喷印完全!!!")); + msgtest->show(); + } +} + +void InkJetPrinter::onPrintErrorStatus(QString s,unsigned int res) +{ + if(res==1 || sysPara->status.WorkTimeOut ){ + sysPara->status.WorkTimeOut =1; + sysPara->devOp->printCtrl( PRINT_CTRL_STOP); + //emit QMessageBox::warning(NULL,tr("警告"),s); + msgtest->setText(s); + msgtest->show(); + } + else if(res==2) { + //emit QMessageBox::warning(NULL,tr("警告"),s); + msgtest->setText(s); + msgtest->show(); + } + else if(res==3) { sysPara->status.WorkTimeOut =0; } +} +void InkJetPrinter::OnFinished(int event){ + //msgtest->setText(" ");msgtest->show(); + Q_UNUSED(event); + msgtest->hide(); + +} +void InkJetPrinter::OnBoxFinished(int event){ + //msgtest->setText(" ");msgtest->show(); + Q_UNUSED(event); + msgBox1->hide(); + +} +unsigned char BCDtoHEX(unsigned char BCD) +{ + unsigned char tempData; + + tempData = (BCD >> 4) * 10 + (BCD & 0x0F); + return (tempData); +} +void InkJetPrinter::refreshModbusStatus(void) +{ +#ifdef MODBUS + if (modbus->getModbusStatus() != 1) { + qDebug()<<"refresh get modbus error"; + return; + } + + qint16 fileNameSize = QFileInfo(sysPara->para.lastOpenedFileName).fileName().size(); + if (fileNameSize) { + if (fileNameSize > 100) { + fileNameSize = 100; + } + } + QString str = QFileInfo(sysPara->para.lastOpenedFileName).fileName(); + snprintf((char *)sysPara->modbusStatus.usedFileName, sizeof(sysPara->modbusStatus.usedFileName), "%s",(char *)str.toLatin1().constData()); + sysPara->modbusStatus.printStatus = ui->tabMainWindow->getCurrPrintStatus(); + memcpy(&sysPara->modbusStatus.curCalendarAndDate, &sysPara->status.calandar_and_dat, sizeof(sysPara->status.calandar_and_dat)); + + unsigned char tmp[4]; + memcpy(&tmp,&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,4); + tmp[0] = BCDtoHEX(tmp[0]); + tmp[1] = BCDtoHEX(tmp[1]); + tmp[2] = BCDtoHEX(tmp[2]); + tmp[3] = BCDtoHEX(tmp[3]); + //memcpy(&sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue,&tmp,4); + sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = tmp[3]*1000000 + tmp[2]*10000+ tmp[1]*100 + tmp[0] ; + //sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue).toUInt(0,16); + sysPara->modbusStatus.curCalendarAndDate.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->modbusStatus.curCalendarAndDate.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->modbusStatus.curCalendarAndDate.cnt1End = sysPara->para.cnt1EndValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2End = sysPara->para.cnt2EndValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2Repeat = sysPara->para.cnt2RepeateValue; + sysPara->modbusStatus.curCalendarAndDate.cnt2InitValue = sysPara->para.cnt2StartValue; + sysPara->modbusStatus.productCnt = sysPara->status.productCnt; + + + sysPara->modbusStatus.statWarn = sysPara->status.RedLightOnFlag ; + // 显示正在打印内容的行数和列数 + int wmax = sysPara->status.currPrintRow; + if (sysPara->para.AlterMode) { + wmax = sysPara->status.currAlterPrintRow; + } + sysPara->modbusStatus.mbCurrPrintRow = wmax; + sysPara->modbusStatus.mbCurrPrintCol = sysPara->status.currPrintCol; +#endif +} + +void InkJetPrinter::onModbusWriteCalendar() +{ +#ifdef MODBUS + if (modbus->getModbusStatus() == -1) { + qDebug()<<"get modbus error"; + return; + } + + sysPara->para.cnt1StartValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; + sysPara->para.cnt1EndValue = sysPara->modbusParas.setCalendar.cnt1End; + sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1Repeat; + sysPara->para.cnt1StepValue = sysPara->modbusParas.setCalendar.cnt1Step; + + sysPara->para.cnt2StartValue = sysPara->modbusParas.setCalendar.cnt2InitValue; + sysPara->para.cnt2EndValue = sysPara->modbusParas.setCalendar.cnt2End; + sysPara->para.cnt2StepValue = sysPara->modbusParas.setCalendar.cnt2Repeat; + sysPara->para.cnt2RepeateValue = sysPara->modbusParas.setCalendar.cnt2Step; + + if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x02) { + sysPara->status.cnt2CurrentValueInitDoneFlag = 0; + } + if (sysPara->modbusParas.setCalendar.cntCurrValueInitEnable & 0x01) { + sysPara->status.cnt1CurrentValueInitDoneFlag = 0; + } + sysPara->para.cnt1CurrValue = sysPara->modbusParas.setCalendar.cnt1CurrValue; + sysPara->para.cnt2CurrValue = sysPara->modbusParas.setCalendar.cnt2CurrValue; + sysPara->devOp->writeFpgaCalandar(0); + emit updataPara2UI(); +#endif +} + +void InkJetPrinter::close_jd_timer() +{ + timer->stop(); +} + + +void InkJetPrinter::handlePushButtonStartPressed(bool flag) +{ + pushButtonStartFlag = flag; + + if(flag) + { + PID_init(); + } + sysPara->status.gearPumpRunStopFlag = !flag;//齿轮泵开关 +} + +void InkJetPrinter::handleInitedPID() +{ + PID_init(); +} + +void InkJetPrinter::recievedFile2Save(QString fileName) +{ + //qDebug() << "recieveFile2Save:"<exists(saveName); + if (exist) + { + createfile->remove(saveName); + }//end if + QFile::copy ( sourceName,saveName ); + emit openFile(saveName,false); + //emit startPrint();确认接收到消息立即打印 + //ui->tabMainWindow->getTexteditOption()->onFileOpen(saveName,false); + //ui->tabMainWindow->on_pushButtonStartPrint_pressed(); + } + else { + + } +} + +void InkJetPrinter::viscosity_timerHandler() +{ + if(!firstTime) + qDebug()<<"错误!粘度计故障:检测不到上位灯"; + // LogInfo::setRunStatusText(tr("错误!粘度计故障:检测不到上位灯")); + viscosity_timer->stop(); + firstTime = 0; +} + +void InkJetPrinter::disableTabClick(){ + this->setDisabled(true); + this->setCurrentIndex(0); +} + +void InkJetPrinter::enableInkJetTabClick(bool flag){ + this->setEnabled(flag); +} + +bool InkJetPrinter::eventFilter(QObject *watched, QEvent *event) +{ + + if(sysPara->status.flagOfKeyBoardType) + return QTabWidget::eventFilter(watched,event); + + QSpinBox *qsb=dynamic_cast(watched); + QLineEdit *qle=dynamic_cast(watched); + QTextEdit *qte=dynamic_cast(watched); + QMouseEvent *me = dynamic_cast(event); + switch (event->type()){ + case QEvent::FocusIn: + if(qsb&&!qsb->isReadOnly() + ||qle&&!qle->isReadOnly() + ||qte&&!qte->isReadOnly())myInputMethod->updateHandler(1); + break; + case QEvent::FocusOut: + myInputMethod->updateHandler(2); + break; + } + + return QTabWidget::eventFilter(watched,event); +} + +void InkJetPrinter::sendDataManual(QString cmdstr,QString addrstr,QString datastr,QString lenstr,QString typestr){ + qDebug()<<"sendDataManual!!!"; + bool ok; + quint8 arr[8]={0xAA,0x02,0x03,0x01,0x11,0x00,0x00,0x55}; + int cmd = cmdstr.toInt(&ok,16); + int addr = addrstr.toInt(&ok,16); + int len = lenstr.toInt(&ok,10); + int type = typestr.toInt(&ok,10); + QByteArray data; + data.resize(datastr.length() / 2); + + for (int i = 0; i < datastr.length(); i += 2) { + // 提取每两个字符 + QString byteString = datastr.mid(i, 2); + // 将16进制字符串转换为unsigned char + bool ok; + unsigned char byte = static_cast(byteString.toUInt(&ok, 16)); + data[i / 2] = byte; + } + // quint16 data1[] = {68, 90, 108, 125, 141, 156, 170, 170, 180, 193, 204, 214}; + const char* charData = data.constData(); + + // 转换为 unsigned char 指针 + const unsigned char* unsignedCharData = reinterpret_cast(charData); +} + +void InkJetPrinter::slt_showMsg(QString msg) +{ + msgtest->setText(msg); + msgtest->show(); + LogInfo::setRunStatusText(msg); +} + +/*************************FPGA通过串口读取状态赋值给status-start******************************************/ +void InkJetPrinter::saveFPGAVersionNum(unsigned int data){ + sysPara->status.fpgaVersionNum=data; +} +unsigned char statWarnTempData=0; +void InkJetPrinter::saveFPGAStatus(unsigned char *data){ + quint16 len=data[5]; + len=len<<8; + len+=data[6]; + unsigned char *target= ((unsigned char *)&sysPara->status); + for(int i=0;istatus.dummy != sysPara->status.isPrinting && sysPara->status.selfCheckDone){ + sysPara->status.isPrinting = sysPara->status.dummy; + ui->tabMainWindow->updatePrintDisplayLabel(); + } +} + +void InkJetPrinter::saveFPGAPhaseDetectHighTm(unsigned char *data){ + quint16 len=data[5]; + len=len<<8; + len+=data[6]; + unsigned char *target= ((unsigned char *)&sysPara->status.phaseDetectHighTm); + for(int i=0;istatus.calandar_and_dat); + for(int i=0;istatus.Status_Counter3.cnt3CurrValue); + for(int i=0;istatus.XXXDay); + for(int i=0;idevOp->stopSendDataFPGA = true; + else + sysPara->devOp->stopSendDataFPGA = false; +} + +void InkJetPrinter::stopSendSTM32Data(bool flag){ + if(flag) + sysPara->devOp->stopSendDataSTM32 = true; + else + sysPara->devOp->stopSendDataSTM32 = false; +} + + +/*************************FPGA通过串口读取状态赋值给status-end******************************************/ + + + +//------------------------------------------------------------------------------------------------------------------------------------------ + + + +/*************************STM32通过串口读取状态赋值给status-start******************************************/ +void InkJetPrinter::saveSTM32Status(unsigned char *data){ + unsigned char *target= ((unsigned char *)&sysPara->status)+0x44; + for(int i=0;istatus.reclaimTankstatus); + emit showMotorIsen(sysPara->status.MOTOR_ISEN,sysPara->status.AD_FIXED); +} + +void InkJetPrinter::saveGearPumpVal(unsigned char *data){ + unsigned char *target= ((unsigned char *)&sysPara->para.gearPumpValue); + for(int i=0;ipara.gearPumpValue > 0) + return; + + unsigned char *target= ((unsigned char *)&PulseCnt); + for(int i=0;istatus.stm32Verion); + for(int i=0;istatus.flagOfPowerOnMode = (sysPara->status.stm32Verion>>23) & 0x01; + if(sysPara->status.flagOfPowerOnMode) + sysPara->status.waitPowerOffTime = 18;//半个小时 + else + sysPara->status.waitPowerOffTime = 0; + LogInfo::setRunStatusText(tr("flagOfPowerOnMode: %1").arg(sysPara->status.flagOfPowerOnMode)); + QString STM32Ver = QString("%1.%2.%3").arg((sysPara->status.stm32Verion>>16)&0x7F) + .arg((sysPara->status.stm32Verion>>8) & 0xFF).arg(sysPara->status.stm32Verion&0xFF); + qDebug()<<"STM32Ver:"<status.stm32Time = true; + } + + QString Year = QString::number(datatime[0])+QString::number(datatime[1]); + QString Month = QString("%1").arg(datatime[2], 2, 10, QChar('0')); + QString Day = QString("%1").arg(datatime[3], 2, 10, QChar('0')); + QString Week = QString::number(datatime[4]); + + QString Hour = QString("%1").arg(datatime[5], 2, 10, QChar('0')); + QString Minute = QString("%1").arg(datatime[6], 2, 10, QChar('0')); + QString Second = QString("%1").arg(datatime[7], 2, 10, QChar('0')); + QString date = Year+"-"+Month+"-"+Day+" "+Hour+":"+Minute+":"+Second; + qDebug()<tabSystemManage->PowerOnSetTime(date); + +} + + +/*************************STM32通过串口读取状态赋值给status-end******************************************/ + + +void InkJetPrinter::closedSerial(){ + if(m_serialThreadFPGA->isRunning()){ + m_serialThreadFPGA->quit(); + m_serialThreadFPGA->wait(); + } + if(m_serialThreadSTM32->isRunning()){ + m_serialThreadSTM32->quit(); + m_serialThreadSTM32->wait(); + } + if(serialFPGA) + delete serialFPGA; + if(serialSTM32) + delete serialSTM32; +} + + +static int highPressureCnt = 0; +static unsigned int logCnt = 0; +void InkJetPrinter::checkPressureControl(){ //1s + unsigned int alarmPressure = 0; + if(sysPara->para.pressure <= 700) + alarmPressure = 800; + else + alarmPressure = 950; + + if(sysPara->status.PRESSURE > alarmPressure) + highPressureCnt++; + else + highPressureCnt = 0; + + if(highPressureCnt >= 4 && sysPara->status.PRESSURE > 1000){ + QString str = tr("压力过高,请检查管路是否堵塞,然后点击故障恢复按钮"); + showMessage(str); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + sysPara->status.flagOfPressureFault = true; + } +} + +void InkJetPrinter::showMessage(QString str){ + if(logCnt++ % 30 == 0){ + LogInfo::setRunStatusText(str); + qDebug()<devOp->color_flag = 2; + ui->tabMainWindow->setRunStatus(str); +} + +#ifdef __RFID_CARD +void InkJetPrinter::initRFIDManager() +{ + if (manager_rfid == nullptr) { + manager_rfid = RFIDManager::instance(); + connect(manager_rfid, &RFIDManager::sig_showMsg, + this, &InkJetPrinter::slt_showMsg); + } +} +#endif + +void InkJetPrinter::resetPressureCnt(){ + logCnt = 0; + highPressureCnt = 0; +} + +void InkJetPrinter::pressureAdjustForsystemseeting(){ + pressureAdj(); +} + +void InkJetPrinter::closeSerialFPGA(){ + if(m_serialThreadFPGA->isRunning()){ + m_serialThreadFPGA->quit(); + m_serialThreadFPGA->wait(); + } + + if(serialFPGA) + delete serialFPGA; +} + +void InkJetPrinter::closeSerialSTM32(){ + if(m_serialThreadSTM32->isRunning()){ + m_serialThreadSTM32->quit(); + m_serialThreadSTM32->wait(); + } + if(serialSTM32) + delete serialSTM32; +} + +void InkJetPrinter::restartSerialPort(){ + + closeSerialFPGA(); + closeSerialSTM32(); + + serialFPGA = new Serial("/dev/ttyAS5"); + serialFPGA->moveToThread(m_serialThreadFPGA); + connect(serialFPGA,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); + connect(serialFPGA,SIGNAL(resendFPGAData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendFPGADate(int,int,unsigned char*,int,int))); + connect(sysPara->devOp,SIGNAL(sendSerialDataToFPGA(int,int,unsigned char*,int,int)),serialFPGA,SLOT(sendSerialData(int,int,unsigned char*,int,int)),Qt::QueuedConnection); + connect(serialFPGA,SIGNAL(getFPGAVersion(uint)),this,SLOT(saveFPGAVersionNum(uint))); + connect(m_serialThreadFPGA,&QThread::started,serialFPGA,&Serial::startInitSlot); + connect(serialFPGA,SIGNAL(stopSendData(bool)),this,SLOT(stopSendFPGAData(bool))); + connect(serialFPGA,SIGNAL(getFPGAPhaseDetectHighTm(unsigned char*)),this,SLOT(saveFPGAPhaseDetectHighTm(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGAStatus(unsigned char*)),this,SLOT(saveFPGAStatus(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGACalandarAndDat(unsigned char*)),this,SLOT(saveFPGACalandarAndDat(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGACnt3CurrValue(unsigned char*)),this,SLOT(saveFPGACnt3CurrValue(unsigned char*))); + connect(serialFPGA,SIGNAL(getFPGAXXXDay(unsigned char*)),this,SLOT(saveFPGAXXXDay(unsigned char*))); + connect(serialFPGA,SIGNAL(queueSizeFPGA(int)),ui->tabMainWindow,SLOT(showFPGAqueuesize(int))); + connect(serialFPGA,SIGNAL(queueFPGASizeSIG(int)),ui->tabMainWindow,SLOT(showqueueFPGAsize(int))); + connect(serialFPGA, &Serial::FPGABuildDat, this, [this](int buildTime){ + sysPara->status.build_dat.builTime = quint16(buildTime); + qDebug() << "FPGA build time: " << buildTime; + }); + + serialSTM32 = new Serial("/dev/ttyAS2"); + serialSTM32->moveToThread(m_serialThreadSTM32); + connect(serialSTM32,SIGNAL(sendQueueData(int,int,unsigned char*,int,int)),sysPara->devOp,SLOT(resendSTM32Date(int,int,unsigned char*,int,int))); + connect(sysPara->devOp,SIGNAL(sendSerialDataToSTM32(int,int,unsigned char*,int,int)),serialSTM32,SLOT(sendSerialData(int,int,unsigned char*,int,int))); + connect(serialSTM32,SIGNAL(getSTM32Status(unsigned char*)),this,SLOT(saveSTM32Status(unsigned char*))); + connect(serialSTM32,SIGNAL(getGearPumpVal(unsigned char*)),this,SLOT(saveGearPumpVal(unsigned char*))); + connect(serialSTM32,SIGNAL(getPulseCnt(unsigned char*)),this,SLOT(savePulseCntVal(unsigned char*))); + connect(serialSTM32,SIGNAL(getSTM32Version(unsigned char*)),this,SLOT(saveSTM32Version(unsigned char*))); + connect(serialSTM32,SIGNAL(getSTM32Time(unsigned char*)),this,SLOT(saveSTM32Time(unsigned char*))); + connect(serialSTM32,SIGNAL(stopSendData(bool)),this,SLOT(stopSendSTM32Data(bool))); + connect(serialSTM32,SIGNAL(powerOffReady()),ui->tabMainWindow,SLOT(powerOffConfirmed())); + connect(m_serialThreadSTM32,&QThread::started,serialSTM32,&Serial::startInitSlot); + connect(serialSTM32,SIGNAL(queueSizeSTM32(int)),ui->tabMainWindow,SLOT(showSTM32queuesize(int))); + connect(serialSTM32, &Serial::STM32Connected, this, [this](bool ok, QString errStr){ + if(!ok || !sysPara || !sysPara->devOp) { + return; + } + + QTimer::singleShot(1000, this, [this](){ + sysPara->devOp->highVoltageCtrl(0); + LogInfo::setRunStatusText("High voltage forced off at app boot"); + }); + + }, Qt::QueuedConnection); + + flagOfSerialThreadStratEn = true; +} diff --git a/PrintSetting.cpp b/PrintSetting.cpp index e50450b..5d394e6 100644 --- a/PrintSetting.cpp +++ b/PrintSetting.cpp @@ -1,2350 +1,2350 @@ -#include "PrintSetting.h" -#include "ui_printsetting.h" -#include "SysPara.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "DevOp.h" -#include "Public.h" -#include "LogInfo.h" -#include -#include -#include -#include -#include -#include "myinclude.h" -#include -#include -#include"scene/picscene.h" -#include"scene/pictextitem.h" -#include -#include -#include "rfid/rfidmanager.h" -#include - -PrintSetting::PrintSetting(QWidget *parent) : - QWidget(parent), - ui(new Ui::PrintSetting) -{ - ui->setupUi(this); - ui->comboBoxPrintMode->setView(new QListView()); - - dialogAuthorization = new DialogAuthorization(parent); - dialogAuthVarSet = new DialogAuthorization(parent); - dialogModuleSeletion = new DialogModuleSeletion(parent); - - last_area_end = 0; - area_end = 0; - lockpulse = false; - dialogShowCounter = new DialogShowCounter(parent); - dialogShowCounter->setLCDframe(); - dialogShowCounter->hide(); - connect(dialogShowCounter,SIGNAL(rejected()),this,SLOT(ondialogShowCounterAccepted())); - connect(dialogShowCounter,SIGNAL(accepted()),this,SLOT(ondialogShowCounterAccepted())); - - refresh_timer = new QTimer(); - connect(refresh_timer, SIGNAL(timeout()), this, SLOT(refreshtimerHandler())); - ui->volButton->hide(); - dlgInputAddr = new DlgInputAddr(parent); - - dlgInputAddr->GetAddr(); - dlgInputAddr->vpnConnect(); - dlgInputAddr->hide(); - - dlgvarLen = new DlgVarLength(parent); - - dlgvarLen->hide(); - - connect(dialogAuthorization,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted())); - connect(dialogAuthVarSet,SIGNAL(accepted()),this,SLOT(ondialogAuthVarSetAccepted())); - //connect(this,SIGNAL(authChanged(int )),this,SLOT(showVolDacEdit(int ))); - connect(dlgInputAddr,SIGNAL(changeMac(QString)),ui->labMac,SLOT(setText(QString))); - connect(dlgInputAddr,SIGNAL(changeMac(QString)),this,SLOT(updateMachineMac(QString))); - connect(dlgInputAddr,SIGNAL(changeMac(QString)),this,SLOT(showMachInfo(QString))); - connect(ui->pushButtonVAR,SIGNAL(pressed()),this,SLOT(on_checkVarLenChg())); - connect(dlgvarLen,SIGNAL(on_set()),this,SLOT(on_VarLenSet())); - if(Public::ReadLanguageName()=="Chinese"){ - ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH12.png"))); - }else - { - ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH13.png"))); - } - //ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH12.png"))); - - dialogAuthorization->hide(); - - auth = AUTH_NONE; - //showVolDacEdit(auth); - - // ui->pushTestSysSet->hide(); - - //ui->spinBoxFullColFixVal->hide(); - ui->tabWidget_2->removeTab(1);//去掉高级设置标签 - ui->tabWidget_2->setCurrentIndex(0); - - ui->tabWidget->setCurrentIndex(0); - ui->tabWidget->widget(1)->setStyleSheet("color:blue"); - -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - QStringList headerLabels = QStringList()<tableWidget->setHorizontalHeaderLabels(headerLabels); - ui->tableWidget->setFocusPolicy(Qt::NoFocus); - ui->tableWidget->horizontalHeader()->setHighlightSections(false); - ui->tableWidget->setColumnHidden(3,true);//第3列用来标志是否保存当前行 - QHeaderView* vertivalHeader = ui->tableWidget->verticalHeader(); - vertivalHeader->setFixedWidth(60); - ui->tableWidget->setColumnWidth(2,120); - - //高级设置隐藏选项 - flagOfSpecailSettng = 0; - SpecailSettingsDisplay(); - - //工程模式隐藏选项 - flagOfEngineeringMode = 0; - EngineeringModeDisplay(); - - flagOfModuleDecimal = 0; - ModuleDecimalDisplay(); - - flagOfModuleHide = 0; - ModuleHideDisplay(); - - specailMachineSetting(0); -#else - delete ui->tableWidget; - delete ui->checkBoxGroupCnt1; - delete ui->Cnt3AddRowBtn; - delete ui->Cnt3InsertRowBtn; - delete ui->Cnt3RemoveRowBtn; - delete ui->cnt3RemoveAllRowsBtn; -#endif -#ifdef SPACEFLAG - -#else -#endif - - current_print_col_num=0; - ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); - -} - -PrintSetting::~PrintSetting() -{ - delete ui; - delete dialogAuthorization; - delete refresh_timer; -} - -void PrintSetting::on_checkVarLenChg() -{ - //DlgVarLength dlg; - //bool en = ui->checkVARLEN->isChecked(); - if(sysPara) - { - dialogAuthVarSet->clearAuth(); - dialogAuthVarSet->show(); - } -} -void PrintSetting::on_VarLenSet() -{ - //qDebug()<<"on_set"; - if(sysPara){ - sysPara->para.headLen=dlgvarLen->headLen; - sysPara->para.endLen=dlgvarLen->endLen; - sysPara->para.varLen=dlgvarLen->varLen; - sysPara->para.varLen1=dlgvarLen->varLen1; - sysPara->para.varLenEn = dlgvarLen->varEn; - ui->checkVARLEN->setChecked(dlgvarLen->varEn); - if( sysPara->para.synTriggerPrintLenMm < dlgvarLen->varLen || sysPara->para.synTriggerPrintLenMm < dlgvarLen->varLen1) - { - QMessageBox::information(this,tr("提示:可变长度参数不正确"),tr("要求:调整长度小于喷印间隔")); - } - } -} -void PrintSetting::ondialogAuthVarSetAccepted(){ - QString authString = dialogAuthVarSet->getAuth(); - if(authString == "07710665") - { - dlgvarLen->headLen = sysPara->para.headLen; - dlgvarLen->endLen = sysPara->para.endLen; - dlgvarLen->varLen = sysPara->para.varLen; - dlgvarLen->varLen1 = sysPara->para.varLen1; - dlgvarLen->varEn=sysPara->para.varLenEn; - dlgvarLen->applyUI(sysPara->para.cnt1EndValue - sysPara->para.cnt1StartValue+1);//sysPara->para.synTriggerPrintLenMm - //dlgvarLen->lab_4->setText("ddd"); - dlgvarLen->show(); - dlgvarLen->setFocus(); - //sysPara->para.varLenEn = en; - } -} -void PrintSetting::bindSysPara(SysPara *sysPara){ - this->sysPara =sysPara; - //ui->volDacEdit - //ui->volDacEdit->bindSysPara(sysPara); -#ifdef COUNTER2_BY_GROUP - ui->secionCountPanel->hide(); - ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); - initSection(); -#endif -} - -void PrintSetting::PrintupdateSysParaToUI() -{ - updateSysParaToUI(); -} - -void PrintSetting::updateSysParaToUI(){ - if(sysPara){ - ui->checkVARLEN->setChecked(sysPara->para.varLenEn?1:0); - ui->checkBoxNewAmplifyPlate->setChecked(sysPara->para.newAmplifyPlate); - ui->comBoxExtSrceen->setCurrentIndex(sysPara->para.ExtScreenType); - ui->comBoxExtMeterType->setCurrentIndex(sysPara->para.ExtMeterType); - - ui->checkBoxLeftRightInverse->setChecked(sysPara->para.leftRightInverse); - ui->checkBoxUpDownInverse->setChecked(sysPara->para.upDownInverse); - ui->checkBoxScanInverse->setChecked(sysPara->para.scanInverse); - ui->checkBoxRecycleWarnAction->setChecked(sysPara->para.RecycleWarnAction); - ui->checkBoxPowerOffAfterPhaseFault->setChecked(sysPara->para.powerOffAfterPhaseFault); - ui->checkBoxSuspendAfterPhaseFault->setChecked(!sysPara->para.powerOffAfterPhaseFault); - ui->checkBoxSuspendAfterPhaseFault->setChecked(sysPara->para.suspendAfterPhaseFault); - ui->checkBoxStopCounterMeterAfterFault->setEnabled(sysPara->para.suspendAfterPhaseFault); - ui->checkBoxStopCounterMeterAfterFault->setChecked(sysPara->para.stopCounterMeterAfterFault); - ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); - ui->spinBox_gearPumpSpeedAlarm->setValue(sysPara->para.gearPumpSpeedAlarm); - - /*----------------------------------------*/ - - ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); - ui->spinBoxColRepeatCnt->setValue(sysPara->para.charBold); - ui->spinBoxCnt1EndValue->setValue(sysPara->para.cnt1EndValue); - ui->spinBoxCnt1RepeateCnt->setValue(sysPara->para.cnt1RepeateValue); - ui->spinBoxCnt1StartValue->setValue(sysPara->para.cnt1StartValue); - ui->spinBoxCnt1StepValue->setValue(sysPara->para.cnt1StepValue); - ui->spinBoxCnt1CurrValue->setValue(sysPara->para.cnt1CurrValue); - ui->spinBoxCnt2EndValue->setValue(sysPara->para.cnt2EndValue); - ui->spinBoxCnt2RepeateCnt->setValue(sysPara->para.cnt2RepeateValue); - ui->spinBoxCnt2StartValue->setValue(sysPara->para.cnt2StartValue); - ui->spinBoxCnt2StepValue->setValue(sysPara->para.cnt2StepValue); - ui->spinBoxCnt2CurrValue->setValue(sysPara->para.cnt2CurrValue); - - ui->spinBoxCnt3EndValue->setValue(sysPara->para.cnt3EndValue); - ui->spinBoxCnt3RepeateCnt->setValue(sysPara->para.cnt3RepeateValue); - ui->spinBoxCnt3StartValue->setValue(sysPara->para.cnt3StartValue); - ui->spinBoxCnt3StepValue->setValue(sysPara->para.cnt3StepValue); - ui->spinBoxCnt3CurrValue->setValue(sysPara->para.cnt3CurrValue); - - ui->spinBoxStartVoltage->setValue(sysPara->para.startVoltage); - - ui->spinBoxEndVoltage->setValue(sysPara->para.endVoltage); - - ui->spinBoxHighVoltageValue->setValue(sysPara->para.HighVoltageAmplitude); - - ui->spinBoxReducedPixelNum->setValue(sysPara->para.reducedPixelNumRatio); - ui->comboBoxReducedPixMode->setCurrentIndex(sysPara->para.reducedPixelMode); - ui->spinBoxRowSequenceMode->setValue(sysPara->para.rowSequenceMode); - ui->spinBoxPointVoltageAdjustPos->setValue(sysPara->para.pointVoltageAdjustPos); - ui->spinBoxVoltageAdjustValue->setValue(sysPara->para.PointVoltageAdjustValue); - ui->spinBoxLineEndAdjustPointCnt->setValue(sysPara->para.lineEndAdjustPointCnt); - ui->comboBoxLineEndAdjustPointMode->setCurrentIndex(sysPara->para.lineEndAdjustPointDelay); - ui->spinBoxLastLineEndPointFixedValue->setValue(sysPara->para.lastLineEndPointFixedValue); - // ui->spinBoxFullColFixVal->setValue(sysPara->para.FullColFixVal); - ui->radioButtonFUllColFIxVal->setChecked(sysPara->para.FullColFixVal); - ui->comboBox_selcetVolPara->setCurrentIndex(sysPara->para.currSelectVolPara); - //隐藏功能 - ui->radioButtonSpecialCondition->setChecked(sysPara->para.HiddenFuncEnable); - ui->spinBoxHiddenValue->setValue(sysPara->para.cnt4CurrValue); - ui->spinBoxConditionValue->setValue(sysPara->para.HiddenConditionValue); - ui->spinBoxMeterEnable->setValue(sysPara->para.HiddenMeterEnable); - - // sysPara->status.cnt4CurrValue = sysPara->para.cnt4CurrValue; - sysPara->status.specialVarPrint.SpecialConditionValue = sysPara->para.HiddenConditionValue ; - sysPara->status.specialVarPrint.SpecialVarEnable =sysPara->para.HiddenFuncEnable ; - sysPara->status.specialVarPrint.MeterEnable = sysPara->para.HiddenMeterEnable; - if(sysPara->status.specialVarPrint.SpecialVarEnable) - sysPara->status.specialVarPrint.SpecialVarEnable = 0xFF; - if(sysPara->status.specialVarPrint.MeterEnable) - sysPara->status.specialVarPrint.MeterEnable = 0xFF; - - emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); - if(sysPara->para.HiddenFuncEnable) - { - // emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); - ui->spinBoxdecimalpointnum->setValue(0); - ui->spinBoxdecimalpointnum->setEnabled(false); - - ui->radioButtonSpecialCondition->setEnabled(true); - ui->spinBoxHiddenValue->setEnabled(true); - ui->spinBoxConditionValue->setEnabled(true); - ui->spinBoxMeterEnable->setEnabled(true); - } - - if(!sysPara->para.rrr_nc) - { - if(!sysPara->para.printNumPoint) - ui->spinBoxdecimalpointnum->setValue(0); - else - ui->spinBoxdecimalpointnum->setValue(1); - } - else - { - if(!sysPara->para.printNumPoint) - ui->spinBoxdecimalpointnum->setValue(2); - else - ui->spinBoxdecimalpointnum->setValue(3); - } - - ui->comboBoxIndustry->setCurrentIndex(sysPara->para.industryIndex); - ui->comboBoxRecommendedPrintSpeed->setCurrentIndex(sysPara->para.recommendedPrintSpeed); - ui->comboBoxAlterPrintEnable->setCurrentIndex (sysPara->para.alterPrint.enable );// 修改后的 - if(sysPara->para.alterPrint.enable == 0) - { - ui->spinBoxXStartValue->setEnabled(false); - ui->spinBoxXRepeatTimeValue->setEnabled(false); - ui->spinBoxXGapValue->setEnabled(false); - } - ui->spinBoxXStartValue->setValue (sysPara->para.alterPrint.startValue ); - ui->spinBoxXGapValue->setValue (sysPara->para.alterPrint.repeatValue); - ui->spinBoxXRepeatTimeValue->setValue (sysPara->para.alterPrint.repeatPrintTimes); - ui->spinBoxDistanceTail->setValue(sysPara->para.alterPrint.DistanceTail ); - ui->checkBoxCnt1NatureValue->setChecked ( sysPara->para.Cnt1NatureValue); // - ui->checkBoxSpeedOver->setChecked(sysPara->para.speedoverPaushPrint); - ui->checkSynCntEn->setChecked(sysPara->para.SynCntEn); - ui->checkVol1of8En->setChecked(sysPara->para.Vol1of8En); - ui->checkBoxEleEyeRetrigDis->setChecked( sysPara->para.eleEyeReTrigDisable ); - ui->checkmode0211->setChecked(sysPara->para.mode0211); - ui->resetToCnt1InitValueCheckBox->setChecked(sysPara->para.cnt1ResetToInitValue); - qDebug()<<"checkmode0211:"<para.mode0211; - qDebug()<<"checkVol1of8En:"<para.Vol1of8En; - qDebug()<<"radioButtonFUllColFIxVal:"<para.FullColFixVal; - qDebug()<<"checkBoxCharWidthSet:"<para.charWidthSetEnable; - - //ui->checkBoxPrintOnce->setChecked(sysPara->para.printOnce); - //ui->checkBoxNumPoint->setChecked(sysPara->para.printNumPoint); - ui->checkBoxReciclar->setChecked(sysPara->para.Reciclar); - ui->dacScaledSpinBox->setValue(sysPara->para.dacScale); - ui->checkBoxResetSendData->setChecked(sysPara->para.ResetSendData); - ui->spinBoxJumpStartValue->setValue( sysPara->para.stepPrint.startValue ); - ui->spinBoxJumpEndValue->setValue( sysPara->para.stepPrint.endValue ); - //ui->checkBoxStepPrintEn->setEnabled( sysPara->para.stepPrint.enbale ); - ui->checkBoxStepPrintEn->setChecked( sysPara->para.stepPrint.enbale ); - ui->spinBoxJumpStepValue->setValue(sysPara->para.stepPrint.StepValue); - - - ui->checkProductResetEn->setChecked(sysPara->para.ResetProductCntEn); - ui->checkAllProductResetEn->setChecked(sysPara->para.ResetAllProductCntEn); - ui->checkHVFaultCloseEn->setChecked(sysPara->para.HVFaultCloseEn); - - // 电眼触发计数器动作 选择 - ui->eleCNT1IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x10)?1:0); - ui->radCNT1ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x10)?0:1); - - ui->eleCNT2IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?1:0); - ui->radCNT2ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?0:1); - - ui->eleCNT3IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x40)?1:0); - ui->radCNT3ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x40)?0:1); - - ui->checkBoxGearPumpEnable->setChecked(sysPara->para.gearPumpEnable); - ui->checkBox_ReclaimPumpEnable->setChecked(sysPara->para.flagOfReclaimPumEnable); - ui->checkBoxCharWidthSet->setChecked(sysPara->para.charWidthSetEnable); - ui->checkBoxMagnet->setChecked(sysPara->para.isCheckMagnet); - ui->printfLightCheckBox->setChecked(sysPara->para.isCheckPrintLight); - - ui->phaseHighCntSpinBox->setValue( sysPara->para.phaseHighCnt); - - sysPara->para.bcOption.var1Num=ui->spinBoxCnt1EndValue->text().length(); - sysPara->para.bcOption.var2Num=ui->spinBoxCnt2EndValue->text().length(); - ui->checkBox_FastMode->setChecked(sysPara->para.flagOfFastMode); - - ui->labMac->setText(QString(" Mac:%1").arg(dlgInputAddr->jd.addr)); - sysPara->status.machineMac = dlgInputAddr->jd.addr; - showMachInfo(QString::number(dlgInputAddr->jd.addr)); - - ui->CBDateFormat1->setCurrentIndex(sysPara->para.ExpirySplitMode);//p_var->splitMode - ui->spinBoxExpiryDate->setValue(sysPara->para.ExpiryDay); - //on_spinBoxExpiryDate_valueChanged(sysPara->print.ExpiryVar.); - ui->checkBoxSaveCNTStateValue->setCheckState(sysPara->para.isCntSaveStateValue ? Qt::Checked : Qt::Unchecked); - - flagOfModuleDecimal = sysPara->para.flagOfModuleDecimal; - ModuleDecimalDisplay(); - flagOfModuleHide = sysPara->para.flagOfModuleHide; - ModuleHideDisplay(); - displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); - -#ifdef COUNTER2_BY_GROUP - SectionalManager::instance()->emitLoadUI(); -#else - LoadCnt1GroupSettingsToUI(); -#endif - if(sysPara->para.mode0211 || sysPara->para.FullColFixVal) - { - ui->spinBoxStartVoltage->setEnabled(false); - ui->spinBoxEndVoltage->setEnabled(false); - } -// if(sysPara->para.flagOfCnt1GroupDisp) -// { -// //edit@12-03 -// const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9); -// if(-1==indexTab) { -// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); -// } -// } - if(sysPara->para.flagOfstepPrint) - { - //edit@12-03 - const int indexTab=ui->tabWidget->indexOf(ui->tab_6); - if(-1==indexTab) - ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); - } - } -} - -#include "VerBVersion.h" -void PrintSetting::showMachInfo(QString Mac) -{ - QString VernonBach; - VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); - VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER; -} -void PrintSetting::showRemoteControl(QString SuperNodeIP,QString EdgeIP) -{ - QString VernonBach; - VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); - VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER; -} - -void PrintSetting::applyUIPara(){ - if(sysPara){ - LogInfo::setRunStatusText(tr("addr: %1").arg(addr)); - LogInfo::setRunStatusText(tr("data: %1").arg(data)); - LogInfo::setRunStatusText(tr("len: %1").arg(len)); - - sysPara->para.ExtScreenType = ui->comBoxExtSrceen->currentIndex(); - sysPara->para.ExtMeterType = ui->comBoxExtMeterType->currentIndex(); - sysPara->para.gearPumpSpeedAlarm = ui->spinBox_gearPumpSpeedAlarm->value(); - if(sysPara->para.ExtScreenType==0) - { - sysPara->status.ExtScreenEn =0; - } - ui->spinBoxColDelay->setEnabled(1); - sysPara->para.varLenEn = ui->checkVARLEN->isChecked(); - sysPara->para.checkSpace = 0;//ui->checkSpace->isChecked(); - sysPara->para.leftRightInverse = ui->checkBoxLeftRightInverse->isChecked(); - sysPara->para.upDownInverse = ui->checkBoxUpDownInverse->isChecked(); - sysPara->para.scanInverse = ui->checkBoxScanInverse->isChecked(); - sysPara->para.currPrintMode = ui->comboBoxPrintMode->currentIndex(); - sysPara->para.currSelectVolPara = ui->comboBox_selcetVolPara->currentIndex(); - sysPara->para.suspendAfterPhaseFault = ui->checkBoxSuspendAfterPhaseFault->isChecked(); - sysPara->para.powerOffAfterPhaseFault = ui->checkBoxPowerOffAfterPhaseFault->isChecked(); - sysPara->para.RecycleWarnAction = ui->checkBoxRecycleWarnAction->isChecked(); - sysPara->para.stopCounterMeterAfterFault = ui->checkBoxStopCounterMeterAfterFault->isChecked(); - sysPara->para.printColDelay = ui->spinBoxColDelay->value(); - sysPara->para.cnt1EndValue = ui->spinBoxCnt1EndValue->value(); - sysPara->para.cnt1RepeateValue = ui->spinBoxCnt1RepeateCnt->value(); - sysPara->para.cnt1StartValue = ui->spinBoxCnt1StartValue->value(); - sysPara->para.cnt1StepValue = ui->spinBoxCnt1StepValue->value(); - sysPara->para.cnt1CurrValue = ui->spinBoxCnt1CurrValue->value(); //这个值设置没关系,在关机前还会再此被设置 - sysPara->para.cnt2EndValue = ui->spinBoxCnt2EndValue->value(); - sysPara->para.cnt2RepeateValue = ui->spinBoxCnt2RepeateCnt->value(); - sysPara->para.cnt2StartValue = ui->spinBoxCnt2StartValue->value(); - sysPara->para.cnt2StepValue = ui->spinBoxCnt2StepValue->value(); - sysPara->para.cnt2CurrValue = ui->spinBoxCnt2CurrValue->value(); - - sysPara->para.newAmplifyPlate = ui->checkBoxNewAmplifyPlate->isChecked(); - sysPara->para.cnt3EndValue = ui->spinBoxCnt3EndValue->value(); - sysPara->para.cnt3RepeateValue = ui->spinBoxCnt3RepeateCnt->value(); - sysPara->para.cnt3StartValue = ui->spinBoxCnt3StartValue->value(); - sysPara->para.cnt3StepValue = ui->spinBoxCnt3StepValue->value(); - sysPara->para.cnt3CurrValue = ui->spinBoxCnt3CurrValue->value(); - - sysPara->para.startVoltage = ui->spinBoxStartVoltage->value(); - sysPara->para.endVoltage = ui->spinBoxEndVoltage->value(); - sysPara->para.charBold = ui->spinBoxColRepeatCnt->value(); - sysPara->para.HighVoltageAmplitude = ui->spinBoxHighVoltageValue->value(); - sysPara->devOp->setHighVoltageAmplitudetoSTM32(); - sysPara->status.cnt1CurrentValueInitDoneFlag = !ui->checkBoxResetCnt1CurrValue->isChecked(); - sysPara->status.cnt2CurrentValueInitDoneFlag = !ui->checkBoxResetCnt2CurrValue->isChecked(); - sysPara->status.cnt3CurrentValueInitDoneFlag = !ui->checkBoxResetCnt3CurrValue->isChecked(); - //将vx4的分段计米功能迁移了,这个应用设置后续会删除 hlp todo 0602 -#ifndef COUNTER2_BY_GROUP - if(sysPara->para.cnt1ByGroupEnalbe) - ApplyCnt1GroupSetting(); -#endif - - sysPara->para.flagOfFastMode = ui->checkBox_FastMode->isChecked(); - if(sysPara->para.flagOfFastMode){ - if(ui->comboBoxPrintMode->count()>=3){ - ui->comboBoxPrintMode->setItemText(0,tr("超高速")); - ui->comboBoxPrintMode->setItemText(1,tr("高速")); - ui->comboBoxPrintMode->removeItem(2); - } - }else{ - if(ui->comboBoxPrintMode->count()<3){ - ui->comboBoxPrintMode->setItemText(0,tr("快速")); - ui->comboBoxPrintMode->setItemText(1,tr("标准")); - ui->comboBoxPrintMode->addItem(tr("慢速")); - } - } - - if(sysPara->para.EditMode==TXTFILE) - { - sysPara->status.specialVarPrint.SpecialVarEnable = ui->radioButtonSpecialCondition->isChecked(); - sysPara->status.cnt4CurrValue = ui->spinBoxHiddenValue->value(); - sysPara->status.specialVarPrint.MeterEnable = ui ->spinBoxMeterEnable->value(); - sysPara ->status.specialVarPrint.SpecialConditionValue = ui->spinBoxConditionValue->value(); - if(sysPara->status.specialVarPrint.SpecialVarEnable) - sysPara->status.specialVarPrint.SpecialVarEnable = 0xFF; - if(sysPara->status.specialVarPrint.MeterEnable) - sysPara->status.specialVarPrint.MeterEnable = 0xFF; - - sysPara->para.cnt4CurrValue = sysPara->status.cnt4CurrValue; - sysPara->para.HiddenConditionValue = sysPara->status.specialVarPrint.SpecialConditionValue; - sysPara->para.HiddenFuncEnable = sysPara->status.specialVarPrint.SpecialVarEnable; - sysPara->para.HiddenMeterEnable = sysPara->status.specialVarPrint.MeterEnable; - - } - - sysPara->devOp->writeFpgaCalandar(0); - - sysPara->para.reducedPixelNumRatio = ui->spinBoxReducedPixelNum->value(); - sysPara->para.reducedPixelMode = ui->comboBoxReducedPixMode->currentIndex(); - sysPara->para.rowSequenceMode = ui->spinBoxRowSequenceMode->value(); - - sysPara->para.pointVoltageAdjustPos = ui->spinBoxPointVoltageAdjustPos->value(); - sysPara->para.PointVoltageAdjustValue = ui->spinBoxVoltageAdjustValue->value(); - - sysPara->para.lineEndAdjustPointCnt = ui->spinBoxLineEndAdjustPointCnt->value(); - sysPara->para.lineEndAdjustPointDelay = ui->comboBoxLineEndAdjustPointMode->currentIndex(); - sysPara->para.lastLineEndPointFixedValue = ui->spinBoxLastLineEndPointFixedValue->value(); - - sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked();//2020/3/2 - sysPara->para.dacScale = ui->dacScaledSpinBox->value(); - - sysPara->para.industryIndex = ui->comboBoxIndustry->currentIndex(); - sysPara->para.recommendedPrintSpeed = ui->comboBoxRecommendedPrintSpeed->currentIndex(); - - if(ui->eleCNT1IncEn->isChecked()) - sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x10); // CNT1 +1 - else - sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xef); // CNT1 = current - - if(ui->eleCNT2IncEn->isChecked()) - sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x20); // CNT2 +1 - else - sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xdf); // CNT2 = current - - if(ui->eleCNT3IncEn->isChecked()) - sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x40); // CNT3 +1 - else - sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xbf); // CNT3 = current - sysPara->para.alterPrint.enable =ui->comboBoxAlterPrintEnable->currentIndex();// 修改后的 - if(sysPara->para.alterPrint.enable) - sysPara->para.textEditLineSpace = 0; - sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; - sysPara->para.alterPrint.startValue = ui->spinBoxXStartValue->value (); - sysPara->para.alterPrint.repeatValue = ui->spinBoxXGapValue->value (); - sysPara->para.alterPrint.repeatPrintTimes =ui->spinBoxXRepeatTimeValue->value (); - sysPara->para.alterPrint.DistanceTail =ui->spinBoxDistanceTail->value (); - if( sysPara->para.alterPrint.startValue>= sysPara->para.alterPrint.repeatValue ) - { - sysPara->para.alterPrint.startValue =sysPara->para.alterPrint.repeatValue -1; - ui->spinBoxXStartValue->setValue (sysPara->para.alterPrint.startValue); - - - - QMessageBox::information(this,tr("提示:交替参数不正确"),tr("要求:起始位置<交替间隔")); - } - if( sysPara->para.alterPrint.repeatPrintTimes+sysPara->para.alterPrint.startValue - > sysPara->para.alterPrint.repeatValue ) - { - sysPara->para.alterPrint.repeatPrintTimes =sysPara->para.alterPrint.repeatValue -sysPara->para.alterPrint.startValue-1; - ui->spinBoxXRepeatTimeValue->setValue (sysPara->para.alterPrint.repeatPrintTimes); - - QMessageBox::information(this,tr("提示:交替参数不正确"),tr("要求:(重复次数+起始位置)<交替间隔")); - } - - sysPara->para.Cnt1NatureValue = ui->checkBoxCnt1NatureValue->isChecked (); // - sysPara->para.speedoverPaushPrint = ui->checkBoxSpeedOver->isChecked(); - sysPara->para.SynCntEn = ui->checkSynCntEn->isChecked(); - sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked();//打印优化 - sysPara->para.mode0211 = ui->checkmode0211->isChecked();//添加0211模式 - sysPara->para.cnt1ResetToInitValue = ui->resetToCnt1InitValueCheckBox->isChecked();// 电眼复位时,复位起始值或当前值 - //sysPara->para.printOnce = ui->checkBoxPrintOnce->isChecked();// 每条信息只喷一次 -// sysPara->para.printOnce = 0;// 每条信息只喷一次 - //sysPara->para.printNumPoint = ui->checkBoxNumPoint->isChecked();// 每条信息只喷一次 - sysPara->para.Reciclar = ui->checkBoxReciclar->isChecked();//sysPara->para.Reciclar = 0; // - switch(ui->spinBoxdecimalpointnum->value()) - //20240625修改小数点位数可选0-3位,FPGA原参数a44d 地址第6号位为 是否打印小数使能信号,1为打印小数,0为不打印小数。 - //更改为: - // a44d 地址第6号位和第7号位为 打印显示小数位数; - // 第7,6变量为 11 打印3位小数, - // 第7,6变量为 10 打印2位小数, - // 第7,6变量为 01 打印1位小数, - // 第7,6变量为 00 打印0位小数, - { - case 0: - ui->radioButtonSpecialCondition->setEnabled(true); - sysPara->para.printNumPoint = 0; - sysPara->para.rrr_nc = 0; - break; - case 1: - ui->radioButtonSpecialCondition->setEnabled(false); - ui->spinBoxMeterEnable->setValue(0); - sysPara->para.printNumPoint = 1; - sysPara->para.rrr_nc = 0; - break; - case 2: - ui->radioButtonSpecialCondition->setEnabled(false); - ui->spinBoxMeterEnable->setValue(0); - sysPara->para.printNumPoint = 0; - sysPara->para.rrr_nc = 1; - break; - case 3: - ui->radioButtonSpecialCondition->setEnabled(false); - ui->spinBoxMeterEnable->setValue(0); - sysPara->para.printNumPoint = 1; - sysPara->para.rrr_nc = 1; - break; - default: - sysPara->para.printNumPoint = 0; - sysPara->para.rrr_nc = 0; - break; - } - sysPara->para.stepPrint.startValue = ui->spinBoxJumpStartValue->value(); - sysPara->para.stepPrint.endValue = ui->spinBoxJumpEndValue->value(); - sysPara->para.stepPrint.enbale = ui->checkBoxStepPrintEn->isChecked(); - sysPara->para.stepPrint.StepValue = ui->spinBoxJumpStepValue->value(); - sysPara->para.ResetSendData = ui->checkBoxResetSendData->isChecked(); - sysPara->para.eleEyeReTrigDisable = ui->checkBoxEleEyeRetrigDis->isChecked(); - - sysPara->para.ResetAllProductCntEn = ui->checkAllProductResetEn->isChecked(); - sysPara->para.ResetProductCntEn = ui->checkProductResetEn->isChecked(); - sysPara->para.HVFaultCloseEn = ui->checkHVFaultCloseEn->isChecked(); - sysPara->para.gearPumpEnable = ui->checkBoxGearPumpEnable->isChecked(); - sysPara->para.flagOfReclaimPumEnable = ui->checkBox_ReclaimPumpEnable->isChecked(); - sysPara->para.phaseHighCnt = ui->phaseHighCntSpinBox->value(); - sysPara->para.charWidthSetEnable = ui->checkBoxCharWidthSet->isChecked(); - sysPara->para.isCheckMagnet = ui->checkBoxMagnet->isChecked(); - sysPara->para.isCheckPrintLight = ui->printfLightCheckBox->isChecked(); - LogInfo::setRunStatusText(tr("sysPara->para.isCheckPrintLight: %1").arg(sysPara->para.isCheckPrintLight)); - - sysPara->para.bcOption.var1Num=ui->spinBoxCnt1EndValue->text().length(); - sysPara->para.bcOption.var2Num=ui->spinBoxCnt2EndValue->text().length(); -// sysPara->para.bcOption.var3Num=ui->spinBoxCnt2EndValue_2->text().length(); - - //qDebug()<<"sysPara->para.bcOption.varNum"<para.bcOption.var1Num<para.bcOption.var2Num; - sysPara->para.ExpiryDay = ui->spinBoxExpiryDate->value(); - sysPara->para.ExpirySplitMode = ui->CBDateFormat1->currentIndex(); - ui->resetToCnt1InitValueCheckBox->isChecked(); - //qDebug()<print.ExpiryDay; - if(sysPara->devOp->writeFpgaPrintPara() != -1) // save para to disk file. - QMessageBox::information(this,tr("提示"),tr("应用成功")); - //ui->labelCnt1CurrValueTxt->setEnabled(false); -// ui->labelCnt2CurrValueTxt->setEnabled(false); - ui->spinBoxCnt1CurrValue->setEnabled(false); - ui->spinBoxCnt2CurrValue->setEnabled(false); - ui->spinBoxCnt3CurrValue->setEnabled(false); - - ui->checkBoxResetCnt1CurrValue->setChecked(false); - ui->checkBoxResetCnt2CurrValue->setChecked(false); - ui->checkBoxResetCnt3CurrValue->setChecked(false); - - emit checkPrintIntervalSignal(); - } - - -} - -void PrintSetting::updateSysStatusToUI(){ - if(sysPara){ - - ui->labelCnt1CurrValue->setText(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16)); - ui->labelCnt2CurrValue->setText(QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16)); - ui->labelCnt3CurrValue->setText(QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16)); - - int rDay= sysPara->para.openInkLineTime/24/3600; - long tmp = sysPara->para.openInkLineTime%(24*3600); - int rHour = tmp/3600; tmp =tmp%3600; - int rMinute = tmp/60; - int rSecond=tmp%60; - QString s=""; - //s.sprintf(tr("%4d天 %02d:%02d:%02d").toUtf8(), rDay,rHour,rMinute,rSecond);ui->labOpenInkLineTime->setText(s); - s.sprintf(("%6d:%02d:%02d"), rDay*24+rHour,rMinute,rSecond);ui->labOpenInkLineTime->setText(s); - ui->label_MaintenanceTime->setText(QString::number(dlgInputAddr->repairTimeLess,10)+tr("小时")); - //ui->labOpenInkLineTime->setText(tr("%1天 %2:%3:%4").arg(rDay).arg(rHour).arg(rMinute).arg(rSecond)); - ui->labTrunOnPowerCnt->setText(QString::number(sysPara->para.TrunOnPowerCnt,10)); - } -} -void PrintSetting::on_pushButtonClearRunTime_pressed(){ - sysPara->para.openInkLineTime=0; - sysPara->para.TrunOnPowerCnt=0; - sysPara->saveParaToFile(); - -} - -void PrintSetting::on_pushButtonApply_pressed() -{ - applyUIPara(); - emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); - autoUpdateFontWidth(sysPara->status.textEditTotalCol); - PrintSettingLog(); - SectionalManager::instance()->emitApplySetting(); -} - -void PrintSetting::PrintSettingLog(){ - //qDebug()<comboBoxPrintMode->currentIndex()); - qDebug()<spinBoxColDelay->value()); - qDebug()<spinBoxColRepeatCnt->value()); - qDebug()<spinBoxStartVoltage->value()); - qDebug()<spinBoxEndVoltage->value()); - qDebug()<spinBoxHighVoltageValue->value()); - qDebug()<checkBoxRecycleWarnAction->isChecked()); - qDebug()<checkBoxPowerOffAfterPhaseFault->isChecked()); - qDebug()<checkSynCntEn->isChecked()); - qDebug()<checkHVFaultCloseEn->isChecked()); - qDebug()<checkBoxSpeedOver->isChecked()); - qDebug()<checkBoxSuspendAfterPhaseFault->isChecked()); - qDebug()<checkmode0211->isChecked()); - qDebug()<checkVol1of8En->isChecked()); - qDebug()<checkBoxCnt1NatureValue->isChecked()); - qDebug()<checkBoxStopCounterMeterAfterFault->isChecked()); - qDebug()<checkBoxEleEyeRetrigDis->isChecked()); - qDebug()<radioButtonFUllColFIxVal->isChecked()); - qDebug()<checkBoxUpDownInverse->isChecked()); - qDebug()<checkBoxLeftRightInverse->isChecked()); - qDebug()<comboBoxIndustry->currentIndex()); - qDebug()<comboBoxRecommendedPrintSpeed->currentIndex()); - qDebug()<checkBoxMagnet->isChecked()); - qDebug()<checkBoxCharWidthSet->isChecked()); - qDebug()<checkBoxGearPumpEnable->isChecked()); - qDebug()<checkBoxResetSendData->isChecked()); - qDebug()<spinBoxCnt1StartValue->value()); - qDebug()<spinBoxCnt1EndValue->value()); - qDebug()<spinBoxCnt1RepeateCnt->value()); - qDebug()<spinBoxCnt1StepValue->value()); - qDebug()<spinBoxCnt1CurrValue->value()); - qDebug()<checkBoxResetCnt1CurrValue->isChecked()); - //qDebug()<checkBoxNumPoint->isChecked()); - qDebug()<checkVARLEN->isChecked()); - qDebug()<resetToCnt1InitValueCheckBox->isChecked()); - qDebug()<CBDateFormat1->currentIndex()); - qDebug()<checkBoxSaveCNTStateValue->isChecked()); - qDebug()<spinBoxExpiryDate->value()); - qDebug()<checkBoxCircleProductCnt->isChecked()); - qDebug()<spinBoxCnt2StartValue->value()); - qDebug()<spinBoxCnt2EndValue->value()); - qDebug()<spinBoxCnt2RepeateCnt->value()); - qDebug()<spinBoxCnt2StepValue->value()); - qDebug()<spinBoxCnt2CurrValue->value()); - qDebug()<checkBoxResetCnt2CurrValue->isChecked()); - qDebug()<spinBoxXStartValue->value()); - qDebug()<spinBoxXGapValue->value()); - qDebug()<spinBoxXRepeatTimeValue->value()); - qDebug()<comboBoxAlterPrintEnable->currentIndex()); - qDebug()<para.HiddenFuncEnable); - if(ui->radioButtonSpecialCondition->isChecked()){ - qDebug()<spinBoxHiddenValue->value()); - qDebug()<spinBoxConditionValue->value()); - qDebug()<spinBoxMeterEnable->value()); - - } - -} - - -void PrintSetting::on_checkBoxResetCnt1CurrValue_released() -{ - bool checked = ui->checkBoxResetCnt1CurrValue->isChecked(); - ui->spinBoxCnt1CurrValue->setEnabled(checked); -} - -void PrintSetting::on_checkBoxResetCnt2CurrValue_released() -{ - bool checked = ui->checkBoxResetCnt2CurrValue->isChecked(); - ui->spinBoxCnt2CurrValue->setEnabled(checked); -} - -void PrintSetting::on_checkBoxResetCnt3CurrValue_released() -{ - bool checked = ui->checkBoxResetCnt3CurrValue->isChecked(); - ui->spinBoxCnt3CurrValue->setEnabled(checked); -} - -void PrintSetting::on_checkBoxSaveCNTStateValue_released() -{ - bool checked = ui->checkBoxSaveCNTStateValue->isChecked(); - sysPara->para.isCntSaveStateValue = checked; -} - -void PrintSetting::on_checkBoxCircleProductCnt_released() -{ - bool checked = ui->checkBoxCircleProductCnt->isChecked(); - sysPara->status.circleProductCnt = checked; -} - -void PrintSetting::on_dialogModPasswdAccepted() -{ - QString authString = dialogModPasswd->getModPasswd(); - if(authString == "987456123") - { - qDebug()<< "right choice"; - modify_vol = true; - ui->volButton->setText("取消授权"); - ui->spinBoxHighVoltageValue->setEnabled(true); - ui->spinBoxStartVoltage->setEnabled(true); - } - else - { - QMessageBox::critical(this,tr("错误"),tr("授权码:") + authString + tr(" 错误")); - } - -} - - -void PrintSetting::ondialogAuthorizationAccepted(){ - QString authString = dialogAuthorization->getAuth(); - if(authString == "nnyp"){ - auth = AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE - | AUTH_SUPER_USER1\ - //edit@11-28 - |AUTH_SUPER_USER2|AUTH_DISPLAY_OTHER_INFO; - SpecailSettingsDisplay(); - EngineeringModeDisplay(); - ModuleDecimalDisplay(); - ModuleHideDisplay(); - displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); -// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9); -// if(sysPara->para.flagOfCnt1GroupDisp) -// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); -// else -// ui->tabWidget_2->removeTab(indexTab1); - const int indexTab2=ui->tabWidget->indexOf(ui->tab_6); - if(sysPara->para.flagOfstepPrint) - ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); - else - ui->tabWidget->removeTab(indexTab2); - } - else if(authString == "by2016"){ - //edit@11-28 - auth = \ - AUTH_DISPLAY_LOG_INFO - //AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE - //| AUTH_DISPLAY_OTHER_INFO - | AUTH_SUPER_USER1 - |AUTH_SUPER_USER2 - ; - SpecailSettingsDisplay(); - EngineeringModeDisplay(); - ModuleDecimalDisplay(); - ModuleHideDisplay(); - displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); -// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9); -// if(sysPara->para.flagOfCnt1GroupDisp) -// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); -// else -// ui->tabWidget_2->removeTab(indexTab1); - const int indexTab2=ui->tabWidget->indexOf(ui->tab_6); - if(sysPara->para.flagOfstepPrint) - ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); - else - ui->tabWidget->removeTab(indexTab2); - } - - else if(authString == "07710665"){ - flagOfSpecailSettng = !flagOfSpecailSettng; - SpecailSettingsDisplay(); - displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); - } - else if(authString == "nnyp0998"){ - flagOfEngineeringMode =true; - //edit@11-28 - flagOfSpecailSettng =true;// !flagOfSpecailSettng; - - auth = AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE - | AUTH_DISPLAY_LOG_INFO | AUTH_DISPLAY_OTHER_INFO| AUTH_SUPER_USER1 |AUTH_SUPER_USER2; - SpecailSettingsDisplay(); - EngineeringModeDisplay(); - engineerMode(true); - //edit@11-30 - ModuleDecimalHideDisplay(sysPara->para.HiddenFuncEnable); - specailMachineSetting(1); - } - - else if(authString == "111"){ - unsigned short type; - if(dialogModuleSeletion->exec() == QDialog::Accepted){ - type = dialogModuleSeletion->getModuleType(); - sysPara->para.moduleSelection = type; - if(type & 1) - flagOfModuleDecimal = true; - else - flagOfModuleDecimal = false; - sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; - ModuleDecimalDisplay(); - ModuleHideDisplay(); - sysPara->para.flagOfModuleHide = flagOfModuleHide; - - if(type & 1<<1) - flagOfModuleHide = true; - else - flagOfModuleHide = false; - sysPara->para.flagOfModuleHide = flagOfModuleHide; - ModuleHideDisplay(); - ModuleDecimalDisplay(); - sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; - - if(type & 1<<2) - sysPara->para.flagOfCnt1GroupDisp = true; - else - sysPara->para.flagOfCnt1GroupDisp = false; -// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9); -// if(sysPara->para.flagOfCnt1GroupDisp) -// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); -// else -// ui->tabWidget_2->removeTab(indexTab1); - - if (type & 1<<3) - sysPara->para.flagOfstepPrint = true; - else - sysPara->para.flagOfstepPrint = false; - const int indexTab2=ui->tabWidget->indexOf(ui->tab_6); - if(sysPara->para.flagOfstepPrint) - ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); - else - ui->tabWidget->removeTab(indexTab2); - - if(type & 1<<4) - sysPara->para.flagOfAdjustVoltage = true; - else{ - sysPara->para.flagOfAdjustVoltage = false; - setForAdjustVoltage(); - } - displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); - } - } - else if(authString == "07710221"){ - flagOfModuleDecimal = !flagOfModuleDecimal; - sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; - ModuleDecimalDisplay(); - ModuleHideDisplay(); - sysPara->para.flagOfModuleHide = flagOfModuleHide; - - }else if(authString == "07710331"){ - flagOfModuleHide = !flagOfModuleHide; - sysPara->para.flagOfModuleHide = flagOfModuleHide; - ModuleHideDisplay(); - ModuleDecimalDisplay(); - sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; - } -//edit@11-29 输入密码显示,再次输入隐藏 - else if(authString == "07710441"){ - //edit@12-03 -// const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9); -// if(sysPara->para.flagOfCnt1GroupDisp) -// ui->tabWidget_2->removeTab(indexTab); -// else -// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); - sysPara->para.flagOfCnt1GroupDisp=!sysPara->para.flagOfCnt1GroupDisp; - - } -//edit@11-29 输入密码显示,再次输入隐藏 - else if(authString == "07710551"){ - - //edit@12-03 - const int indexTab=ui->tabWidget->indexOf(ui->tab_6); - if(sysPara->para.flagOfstepPrint) - ui->tabWidget->removeTab(indexTab); - else - ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); - sysPara->para.flagOfstepPrint=!sysPara->para.flagOfstepPrint; - } - - else if(dlgInputAddr->checkSupperInit(authString) ) - { - sysPara->status.WorkTimeOut=0; - dlgInputAddr->SetNewJm(1); - sysPara->para.varLen=0; - sysPara->para.varLen1=0; -#ifdef __RFID_CARD -// RFIDManager::instance()->setICReaderModeFlag = true; -// MySleep(300); -// QMessageBox::warning(0,tr("提示"),tr("软件初始化完成.") ); -// RFIDManager::instance()->setRFIDReaderWorkMode(); -// RFIDManager::instance()->setRFIDReaderKey(dlgInputAddr->jd.addr,1); -// RFIDManager::instance()->setICReaderModeFlag = false; -// RFIDManager::instance()->initRFIDMoudle(dlgInputAddr->jd.addr); -#endif - } - else if((authString.left(4) == "nnyp") && ( dlgInputAddr->checkSupperJm(authString.mid(4)))) - { -#ifdef __RFID_CARD - memset(&sysPara->RFIDPara,0,sizeof(sysPara->RFIDPara)); - sysPara->saveRFIDPara(); - - sysPara->para.RFIDInkWarn = false; - sysPara->status.flagOfInkMaxDot = false; - sysPara->status.flagOfNeedInkCard = false; - - sysPara->para.RFIDSolventWarn = 0; - sysPara->para.RFIDSolventWarnMixCnt = 0; - sysPara->para.inkWarnDate = 0; - sysPara->para.inkWarnTime = 0; - sysPara->para.solventWarnDate = 0; - sysPara->para.solventWarnTime = 0; - sysPara->status.flagOfSolventMaxNum = false; - sysPara->status.flagOfNeedSolventCard = false; - qDebug()<<"RFID卡清零"; - sysPara->saveParaToFile(); - QMessageBox::warning(0,tr("提示"),tr("RFID卡清零!") ); -#endif - } - else if( dlgInputAddr->checkSupperJm(authString)) - { - sysPara->status.WorkTimeOut=0; - dlgInputAddr->ReadJm(); - dlgInputAddr->show(); - ui->labMac->setText(QString("Mac:%1").arg(dlgInputAddr->jd.addr)); - } - else if(dlgInputAddr->checWhJm(authString)) // 0xa001 - { - sysPara->status.WorkTimeOut=0; - QMessageBox::warning(this,tr("提示"),tr("喷码机维护设置成功!"),QMessageBox::Ok); - specailMachineSetting(1); - } - else if(dlgInputAddr->checkSysJm(authString)) - { - dlgInputAddr->SaveJm(); - dlgInputAddr->show(); - ui->labMac->setText(QString("Mac:%1").arg(dlgInputAddr->jd.addr)); - sysPara->status.WorkTimeOut=0; - QMessageBox::warning(this,tr( "提示"),tr("系统维护设置成功!") ,QMessageBox::Ok); - } - else if(authString == "vbip") - { - dlgInputAddr->setNodeIpAndPrivateIp(false); - dlgInputAddr->show(); - } - else { - auth = AUTH_NONE; - QMessageBox::critical(this,tr("错误"),tr("密码:") + authString + tr(" 不存在")); - } - emit authChanged(auth); - if(auth == AUTH_NONE ) {sysPara->status.adjHightVolInitEN=0;sysPara->status.updateSoftEN=0;} - ui->pushButtonAuth->setText((auth == AUTH_NONE)?tr("输入密码"):tr("取消授权")); -} - -void PrintSetting::SpecailSettingsDisplay() -{ - if(flagOfSpecailSettng) - { - const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11); - if (indexTab == -1) - ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); - ui->comboBoxIndustry->setVisible(1); - ui->checkBoxNewAmplifyPlate->setVisible(1); -// ui->labelRecommendedPrintSpeed->setVisible(1); - ui->comboBoxRecommendedPrintSpeed->setVisible(1); - ui->checkBoxPrintOnce->setVisible(1); - ui->checkBoxReciclar->setVisible(1); - ui->lockoulsepushButton->setVisible(1); - ui->pushButtonRecommendedSetting->setVisible(1); - ui->checkBox_FastMode->setVisible(1); - } - else - { - if(flagOfEngineeringMode) - ui->tabWidget_2->removeTab(5); -// else -// ui->tabWidget_2->removeTab(4); - ui->comboBoxIndustry->hide(); - ui->checkBoxNewAmplifyPlate->hide(); -// ui->labelRecommendedPrintSpeed->hide(); - ui->comboBoxRecommendedPrintSpeed->hide(); - ui->checkBoxPrintOnce->hide(); - ui->checkBoxReciclar->hide(); - ui->lockoulsepushButton->hide(); - ui->pushButtonRecommendedSetting->hide(); - ui->checkBox_FastMode->hide(); - } - -} -void PrintSetting::EngineeringModeDisplay() -{ - if(flagOfEngineeringMode) - { -#ifdef COUNTER2_BY_GROUP - ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); - ui->tabWidget_2->addTab(sectionalWid, tr("分段计数")); -#endif - - if(flagOfSpecailSettng) { - const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11); - if (indexTab == -1) - ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); - } - - ui->tabWidget->addTab(ui->tab_8,tr("计数器3设置")); - ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); - ui->checkBoxSpeedOver->setVisible(1); - ui->checkBoxSuspendAfterPhaseFault->setVisible(1); - ui->checkmode0211->setVisible(1); - ui->checkVol1of8En->setVisible(1); - ui->checkBoxStopCounterMeterAfterFault->setVisible(1); - ui->checkBoxEleEyeRetrigDis->setVisible(1); - ui->radioButtonFUllColFIxVal->setVisible(1); - ui->checkBoxCharWidthSet->setVisible(1); - ui->radioCNT3->setVisible(1); - ui->radioButtonSpecialCondition->setVisible(1); - ui->label_7->setVisible(1); - ui->label_6->setVisible(1); - ui->label_34->setVisible(1); - ui->label_35->setVisible(1); - ui->spinBoxdecimalpointnum->setVisible(1); - ui->spinBoxHiddenValue->setVisible(1); - ui->radioButtonSpecialCondition->setVisible(1); - ui->spinBoxConditionValue->setVisible(1); - ui->spinBoxMeterEnable->setVisible(1); - } - else - { - if(flagOfSpecailSettng) - { - ui->tabWidget_2->removeTab(5); - const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11); - if (indexTab == -1) - ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); - } else { -// ui->tabWidget_2->removeTab(4); - } - - ui->tabWidget->removeTab(3); - ui->tabWidget->removeTab(2); - ui->checkBoxSpeedOver->hide(); - ui->checkBoxSuspendAfterPhaseFault->hide(); - ui->checkmode0211->hide(); - ui->checkVol1of8En->hide(); - ui->checkBoxStopCounterMeterAfterFault->hide(); - ui->checkBoxEleEyeRetrigDis->hide(); - ui->radioButtonFUllColFIxVal->hide(); - ui->checkBoxCharWidthSet->hide(); - ui->radioCNT3->hide(); - ui->radioButtonSpecialCondition->hide(); - ui->label_7->hide(); - ui->label_6->hide(); - ui->label_34->hide(); - ui->label_35->hide(); - ui->spinBoxdecimalpointnum->hide(); - ui->spinBoxHiddenValue->hide(); - ui->radioButtonSpecialCondition->hide(); - ui->spinBoxConditionValue->hide(); - ui->spinBoxMeterEnable->hide(); - } - ModuleDecimalDisplay(); - ModuleHideDisplay(); -} - -void PrintSetting::ModuleDecimalDisplay() -{ - if(flagOfModuleDecimal){ - ui->label_35->setVisible(1); - ui->spinBoxdecimalpointnum->setVisible(1); - flagOfModuleHide = 0; - ui->radioButtonSpecialCondition->setChecked(0); - }else{ - ui->spinBoxdecimalpointnum->setValue(0); - ui->spinBoxdecimalpointnum->setEnabled(0); - ui->radioButtonSpecialCondition->setEnabled(1); - ui->label_35->hide(); - ui->spinBoxdecimalpointnum->hide(); - } -} - -void PrintSetting::ModuleHideDisplay() -{ - if(flagOfModuleHide && sysPara){ - ui->label_7->setVisible(1); - ui->label_6->setVisible(1); - ui->label_34->setVisible(1); - ui->spinBoxHiddenValue->setVisible(1); - ui->radioButtonSpecialCondition->setVisible(1); - ui->spinBoxConditionValue->setVisible(1); - ui->spinBoxMeterEnable->setVisible(1); - flagOfModuleDecimal = 0; - ui->spinBoxdecimalpointnum->setValue(0); - sysPara->para.rrr_nc = 0; - sysPara->para.printNumPoint = 0; - }else{ - ui->radioButtonSpecialCondition->setChecked(0); - ui->spinBoxdecimalpointnum->setEnabled(1); - ui->label_7->hide(); - ui->label_6->hide(); - ui->label_34->hide(); - ui->spinBoxHiddenValue->hide(); - ui->radioButtonSpecialCondition->hide(); - ui->spinBoxConditionValue->hide(); - ui->spinBoxMeterEnable->hide(); - } -} - -void PrintSetting::on_checkBoxSuspendAfterPhaseFault_clicked() -{ - ui->checkBoxStopCounterMeterAfterFault->setEnabled(ui->checkBoxSuspendAfterPhaseFault->isChecked()); -} - -void PrintSetting::on_checkBoxPowerOffAfterPhaseFault_clicked() -{ - ui->checkBoxStopCounterMeterAfterFault->setEnabled(!ui->checkBoxPowerOffAfterPhaseFault->isChecked() && ui->checkBoxSuspendAfterPhaseFault->isChecked()); - ui->checkBoxSuspendAfterPhaseFault->setEnabled(!ui->checkBoxPowerOffAfterPhaseFault->isChecked()); - -} -#include -#include - -#include - -void PrintSetting::on_pushButtonAuth_pressed() -{ - if(auth == AUTH_NONE){ - dialogAuthorization->clearAuth(); - dialogAuthorization->show(); - } - else { - emit authChanged(AUTH_NONE); - auth = AUTH_NONE; - sysPara->status.adjHightVolInitEN=0;sysPara->status.updateSoftEN=0; - ui->pushButtonAuth->setText(tr("输入密码")); - //edit@11-28 - flagOfEngineeringMode = false; - flagOfSpecailSettng = false; - //qDebug()<updateSysParaToUI(); - specailMachineSetting(0); - engineerMode(false); - } -} - -void PrintSetting::updateAuthorization(int auth){ - //ui->dacScaledSpinBox->setEnabled(auth & AUTH_SUPER_USER1); - ui->checkBoxScanInverse->setEnabled(auth & AUTH_SUPER_USER1); -// ui->labelVoltageAdjustPos->setEnabled(auth & AUTH_SUPER_USER1); -// ui->spinBoxPointVoltageAdjustPos->setEnabled(auth & AUTH_SUPER_USER1); - ui->labelReducedPixelNum->setEnabled(auth & AUTH_SUPER_USER1); - ui->spinBoxReducedPixelNum->setEnabled(auth & AUTH_SUPER_USER1); -// ui->labelVoltageAdjustValue->setEnabled(auth & AUTH_SUPER_USER1); -// ui->spinBoxVoltageAdjustValue->setEnabled(auth & AUTH_SUPER_USER1); - ui->labelRowSequenceMode->setEnabled(auth & AUTH_SUPER_USER1); - ui->spinBoxRowSequenceMode->setEnabled(auth & AUTH_SUPER_USER1); -// ui->labelReducedPixMode->setEnabled(auth & AUTH_SUPER_USER1); -// ui->comboBoxReducedPixMode->setEnabled(auth & AUTH_SUPER_USER1); -// ui->labelLineEndAdjustPointCnt->setEnabled(auth & AUTH_SUPER_USER1); -// ui->spinBoxLineEndAdjustPointCnt->setEnabled(auth & AUTH_SUPER_USER1); -// ui->labelLineEndAdjustPointMode->setEnabled(auth & AUTH_SUPER_USER1); -// ui->comboBoxLineEndAdjustPointMode->setEnabled(auth & AUTH_SUPER_USER1); -// ui->spinBoxLastLineEndPointFixedValue->setEnabled(auth & AUTH_SUPER_USER1); -// ui->labelLastLineEndPointFixedValue->setEnabled(auth & AUTH_SUPER_USER1); - ui->pushButtonClearRunTime->setEnabled(auth & AUTH_SUPER_USER1); // 透明按钮 - //ui->volDacEdit->updateAuthorization (auth); -} - -void PrintSetting::on_spinBoxLastLineEndPointFixedValue_valueChanged(int arg1) -{ - if(sysPara){ - sysPara->devOp->setLastLineEndPointFixedValue(arg1); - } -} - -void PrintSetting::on_pushButtonRecommendedSetting_clicked() -{ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认使用推荐设置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - /*----------------------------设置参数,然后更新到界面-----------------------------*/ - int industry = ui->comboBoxIndustry->currentIndex(); - int speed = ui->comboBoxRecommendedPrintSpeed->currentIndex(); - ui->comboBoxPrintMode->setCurrentIndex((industry?1:0) + speed + 1); - ui->spinBoxVoltageAdjustValue->setValue(0); - ui->comboBoxReducedPixMode->setCurrentIndex(0); - ui->spinBoxReducedPixelNum->setValue((speed == 0)?55:((speed == 1)?30:0)); - ui->spinBoxRowSequenceMode->setValue(1); - ui->checkBoxScanInverse->setChecked(false); - ui->spinBoxLineEndAdjustPointCnt->setValue(2); - ui->comboBoxLineEndAdjustPointMode->setCurrentIndex((industry?3:1) + speed + 1); - ui->spinBoxLastLineEndPointFixedValue->setValue((speed < 2)?-20:0); - on_pushButtonApply_pressed(); - } -} - -void PrintSetting::showVolDacEdit(int auth){ -/* - if((auth&AUTH_SUPER_USER2)) - { - if(ui->tabWidget_2->indexOf (ui->tab_8)==-1) - ui->tabWidget_2->addTab (ui->tab_8,tr("点距电压微调")); - } - else { - if(ui->tabWidget_2->indexOf (ui->tab_8)!=-1) - ui->tabWidget_2->removeTab (ui->tabWidget_2->indexOf (ui->tab_8));//ui->tabWidget_2->indexOf (ui->tab_8) - } - */ -} - - -void PrintSetting::on_pushOnlyCNT1Clear_pressed(){ - sysPara->devOp->clearProductCnt(1<<2); // 计数器1单独清零 - //sysPara->para.totalProductCnt += sysPara->status.productCnt; - //qDebug()<<"only1"; -} - -void PrintSetting::on_pushOnlyCNT2Clear_pressed(){ - sysPara->devOp->clearProductCnt(1<<3);// 计数器2单独清零 - //qDebug()<<"only2"; -} -void PrintSetting::on_pushButtonRanddomBackUP_pressed(){ - QMessageBox::StandardButton ret; - - QFile f1("/home/plg/Xrand2.txt"); - QString str; - //f1.open(QFile::ReadWrite); - int len = f1.size(); - - if(f1.size()<100 ) - { - ret = QMessageBox::warning(this, tr("提示"), - tr("随机码文件为空,不需要导出"), - QMessageBox::Ok ); - //f1.close(); - return; - } - //f1.close(); - - ret = QMessageBox::warning(this, tr("提示"), - tr("随机码文本将展出到U盘,请插入U盘"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - - LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); - sysPara->devOp->RandTxtBakup(1); - LogInfo::setRunStatusText("随机码文件导出完成."); - - } - -} - -void PrintSetting::on_spinBoxExpiryDate_valueChanged(int arg1) -{ - QDate curDate= QDate::currentDate().addDays(arg1); - //ui->CBDateFormat1->clear(); - QString DateTime;QString format; - -// str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day()); -// ui->CBDateFormat1->setItemText(0,str);//ui->CBDateFormat1->addItem(str); -// str.sprintf("%04d/%02d/%02d",curDate.year(),curDate.month(),curDate.day()); -// ui->CBDateFormat1->setItemText(1,str);//ui->CBDateFormat1->addItem(str); -// str.sprintf("%04d%02d%02d",curDate.year(),curDate.month(),curDate.day()); -// ui->CBDateFormat1->setItemText(2,str);//ui->CBDateFormat1->addItem(str); - ui->CBDateFormat1->count(); - for(int i=0;i < ui->CBDateFormat1->count();++i) { - format = ui->CBDateFormat1->itemText(i); - DateTime = QDateTime::currentDateTime().toString(format); - ui->CBDateFormat1->setItemText(i,DateTime); - //qDebug()<CBDateFormat1->addItem(str.toLocal8Bit()); - - //ui->CBDateFormat1->setCurrentIndex(sysPara->para.ExpirySplitMode);//p_var->splitMode - //sysPara->para.ExpiryDay = arg1; -} - -void PrintSetting::on_CBDateFormat1_currentIndexChanged(int index) -{ - sysPara->para.ExpirySplitMode = index; -} - -#if(1) -void PrintSetting::updateCnt1GroupsTblWgt() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - QPalette Palette; - QLineEdit *pLineEdit; - int rowCnt=ui->tableWidget->rowCount(); - //int rowCnt=sysPara->para.Cnt1ByGroup.cnt1GroupCnt; - - //qDebug()<<"updateCnt1GroupsTblWgt count"<status.cnt1GroupRunningIndex; - for(int i=0;itableWidget->cellWidget(i,j); - Palette = pLineEdit->palette(); - if(sysPara->para.cnt1ByGroupEnalbe && (i == sysPara->status.cnt1GroupRunningIndex)) - { - Palette.setColor(QPalette::Normal,QPalette::Base, Qt::green); - } - else - { - Palette.setColor(QPalette::Normal,QPalette::Base, Qt::lightGray); - } - pLineEdit->setPalette(Palette); - } - } -#endif -} - -void PrintSetting::onUpdateCnt1GroupDisp(bool bChangeToNext) -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - if(bChangeToNext)//循环数走完 - { - //改变当前执行的分段的背景颜色 - updateCnt1GroupsTblWgt(); - } -#endif -} - -void PrintSetting::LoadCnt1GroupSettingsToUI() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - QLineEdit *pLineEdit; - ui->checkBoxGroupCnt1->setChecked(sysPara->para.cnt1ByGroupEnalbe); - on_checkBoxGroupCnt1_clicked(sysPara->para.cnt1ByGroupEnalbe); - //qDebug()<<"LoadCnt1GroupSettingsToUI:cnt1GroupCnt "<para.Cnt1ByGroup.cnt1GroupCnt; - ui->tableWidget->setRowCount(sysPara->para.Cnt1ByGroup.cnt1GroupCnt); - QRegExp regx("[0-9]+$"); - QValidator *validator = new QRegExpValidator(regx, this); - QRegExp regxLoop("[1-9][0-9]+$"); - QValidator *validatorLoop = new QRegExpValidator(regxLoop, this); - for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) - { - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue)); - pLineEdit->setValidator(validator); - ui->tableWidget->setCellWidget(i,0,pLineEdit); - - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue)); - pLineEdit->setValidator(validator); - ui->tableWidget->setCellWidget(i,1,pLineEdit); - - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes)); - pLineEdit->setValidator(validatorLoop); - ui->tableWidget->setCellWidget(i,2,pLineEdit); - } - updateCnt1GroupsTblWgt(); -#endif -} -void PrintSetting::ApplyCnt1GroupSetting() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - QLineEdit *pLineEdit; - sysPara->para.cnt1ByGroupEnalbe = ui->checkBoxGroupCnt1->isChecked(); - sysPara->para.Cnt1ByGroup.cnt1GroupCnt=ui->tableWidget->rowCount(); - if(sysPara->para.cnt1ByGroupEnalbe && sysPara->para.Cnt1ByGroup.cnt1GroupCnt==0) - { - sysPara->para.cnt1ByGroupEnalbe=false; - ui->checkBoxGroupCnt1->setChecked(false); - on_checkBoxGroupCnt1_clicked(false); - } - //qDebug()<<"ApplyCnt1GroupSetting:cnt1GroupCnt "<para.Cnt1ByGroup.cnt1GroupCnt; - - for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) - { - pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,0); - sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue = pLineEdit->text().toInt(); - - pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,1); - sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue = pLineEdit->text().toInt(); - - pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,2); - sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes = pLineEdit->text().toInt(); - } - sysPara->devOp->writeCnt1GroupSetting(1); - sysPara->saveParaToFile(); - //改变当前执行的分段的背景颜色 - updateCnt1GroupsTblWgt(); -#endif -} - -void PrintSetting::rowWidgetCreate(int rowIndex) -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - QLineEdit* pLineEdit; - QRegExp regx("[0-9]+$"); - QValidator *validator = new QRegExpValidator(regx, this); - QRegExp regxLoop("[1-9][0-9]+$"); - QValidator *validatorLoop = new QRegExpValidator(regxLoop, this); - for(int i=0;i<3;i++) - { - if(i==3) - { - //ui->tableWidget->item(rowIndex,i)->setCheckState(Qt::Unchecked); - } - else { - if(i<2) - { - pLineEdit = new QLineEdit(tr("0")); - pLineEdit->setValidator(validator); - } - else if(i==2) - { - pLineEdit = new QLineEdit(tr("1")); - pLineEdit->setValidator(validatorLoop); - } - ui->tableWidget->setCellWidget(rowIndex,i,pLineEdit); - } - } -#endif -} - -void PrintSetting::on_checkBoxGroupCnt1_clicked(bool checked) -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - if(checked) - { - ui->spinBoxCnt1StartValue->setEnabled(false); - ui->spinBoxCnt1EndValue->setEnabled(false); -// ui->checkBoxResetCnt1CurrValue->setEnabled(false); - } - else - { - ui->spinBoxCnt1StartValue->setEnabled(true); - ui->spinBoxCnt1EndValue->setEnabled(true); - ui->checkBoxResetCnt1CurrValue->setEnabled(true); - } -#endif -} - -void PrintSetting::on_Cnt3AddRowBtn_pressed() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - int rowCnt=ui->tableWidget->rowCount(); - if(rowCnt>=MAX_CNT1_GROUPS_NUM) - { - return; - } - //sysPara->para.cnt1GroupCnt++; - ui->tableWidget->setRowCount(rowCnt+1); - rowWidgetCreate(rowCnt); -#endif -} - -void PrintSetting::on_Cnt3InsertRowBtn_pressed() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - int rowIndex=ui->tableWidget->currentRow(); - int rowCnt=ui->tableWidget->rowCount(); - if(rowIndex<0||rowCnt>=MAX_CNT1_GROUPS_NUM) - { - //qDebug()<<"max counter1 groups num is "<tableWidget->insertRow(rowIndex+1); - rowWidgetCreate(rowIndex+1); -#endif -} - -void PrintSetting::on_Cnt3RemoveRowBtn_pressed() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - int rowIndex=ui->tableWidget->currentRow(); - if(rowIndex<0) - { - return; - } - QMessageBox::StandardButton ret; - if(rowIndex==sysPara->status.cnt1GroupRunningIndex) - { - QMessageBox::warning(this, tr("错误"), - tr("正在打印第%1组设置,不可删除").arg(rowIndex+1), - QMessageBox::Ok); - return; - } - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认删除第%1组设置?").arg(rowIndex+1), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - ui->tableWidget->removeRow(rowIndex); - } -#endif -} - -void PrintSetting::on_cnt3RemoveAllRowsBtn_pressed() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认删除全部设置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - int rowCnt=ui->tableWidget->rowCount(); - for(int i=rowCnt-1;i>=0;i--) - { - ui->tableWidget->removeRow(i); - } - } -#endif -} -#endif -void PrintSetting::on_comboBoxAlterPrintEnable_currentIndexChanged(int index) -{ - if(index==0) - { - ui->spinBoxXStartValue->setEnabled(false); - ui->spinBoxXRepeatTimeValue->setEnabled(false); - ui->spinBoxXGapValue->setEnabled(false); - } - else - { - ui->spinBoxXStartValue->setEnabled(true); - ui->spinBoxXRepeatTimeValue->setEnabled(true); - ui->spinBoxXGapValue->setEnabled(true); - } - if(index==3) - { - ui->spinBoxDistanceTail->setEnabled(true); - } - else - { - ui->spinBoxDistanceTail->setEnabled(false); - } -} - -void PrintSetting::on_checkVol1of8En_clicked(bool checked) -{ - if(checked && ui->checkmode0211->checkState()) - { - - ui->checkmode0211->setChecked(false); - } -} - -void PrintSetting::on_checkmode0211_clicked(bool checked) -{ - if(checked && ui->checkVol1of8En->checkState()) - { - ui->checkVol1of8En->setChecked(false); - } - if(checked && ui->radioButtonFUllColFIxVal->checkState()) - { - ui->radioButtonFUllColFIxVal->setChecked(false); - } - //sysPara->para.Vol1of8En = !checked;//打印优化 - if(!checked && ui->radioButtonFUllColFIxVal->checkState() == false) - { - ui->spinBoxStartVoltage->setEnabled(true); - ui->spinBoxEndVoltage->setEnabled(true); - } - else - { - ui->spinBoxStartVoltage->setEnabled(false); - ui->spinBoxEndVoltage->setEnabled(false); - } -} - - - -void PrintSetting::on_volButton_clicked() -{ - if(!modify_vol) - { - dialogModPasswd->clearAuth(); - dialogModPasswd->show(); - }else - { - modify_vol = false; - ui->volButton->setText("修改授权"); - ui->spinBoxHighVoltageValue->setEnabled(false); - ui->spinBoxStartVoltage->setEnabled(false); - } -} - - -void PrintSetting::on_spinBoxColDelay_valueChanged(int arg1) -{ - if(!sysPara->para.charWidthSetEnable) - { - if(arg1 == 0) - { - - QMessageBox::warning(this, tr("警告"), - tr("字体宽度不能为0"), - QMessageBox::Ok | QMessageBox::Cancel); - ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); - } - } - else - { - sysPara->para.printColDelay = arg1; - } -} - -void PrintSetting::on_radioButtonFUllColFIxVal_clicked(bool checked) -{ - if(!checked && ui->checkmode0211->checkState() == false) - { - ui->spinBoxStartVoltage->setEnabled(true); - ui->spinBoxEndVoltage->setEnabled(true); - } - else - { - ui->spinBoxStartVoltage->setEnabled(false); - ui->spinBoxEndVoltage->setEnabled(false); - } - if(checked && ui->checkmode0211->checkState()) - { - - ui->checkmode0211->setChecked(false); - } -} - - - -void PrintSetting::on_metreCountButton_clicked() -{ -// sysPara->status.calandar_and_dat.cnt1CurrValue = 123; - dialogShowCounter->show(); - dialogShowCounter->init_arg(); - refresh_timer->start(500); -// qDebug()<<"asdasd"; -// sysPara->status.calandar_and_dat.cnt2CurrValue; -} -void PrintSetting::ondialogShowCounterAccepted(void) -{ - refresh_timer->stop(); -// qDebug()<<"refresh_timer stop"; -} - -void PrintSetting::updateUIForSpecialCondition() -{ - if(sysPara->para.EditMode == TXTFILE) - { - ui->radioButtonSpecialCondition->setEnabled(true); - } - -} - -void PrintSetting::on_radioButtonSpecialCondition_clicked(bool checked) -{ - if(sysPara->para.EditMode==TXTFILE) - { - ui->spinBoxHiddenValue->setEnabled(checked); - ui->spinBoxMeterEnable->setEnabled(checked); - ui->spinBoxConditionValue->setEnabled(checked); - ui->spinBoxdecimalpointnum->setValue(0); - ui->spinBoxdecimalpointnum->setEnabled(!checked); - } -} - -void PrintSetting::refreshtimerHandler(void) -{ - int bcdTodec = 0; - int resetmetre = 0; -// int cn1StartValue = ui->spinBoxCnt1StartValue->value(); -// int cn1EndValue = ui->spinBoxCnt1EndValue->value(); - - resetmetre = dialogShowCounter->getResetMetreState(area_end); - - if(last_area_end != area_end){ - //qDebug() << "set spinBoxCnt1StartValue"; - last_area_end = area_end; - ui->spinBoxCnt1StartValue->setValue(0); - ui->spinBoxCnt1EndValue->setValue(area_end); - sysPara->para.cnt1EndValue = area_end; - } - - - if(true == resetmetre){ - if(sysPara){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否立即重新计米?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt = 0; - } - - } - resetmetre = false; - } - - //bcdTodec = sysPara->status.calandar_and_dat.cnt1CurrValue - (sysPara->status.calandar_and_dat.cnt1CurrValue>>4)*6; - //dialogShowCounter->refreshdate(sysPara->status.productCnt,cn1StartValue,cn1EndValue,bcdTodec); - int currValue1 = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); - int currCnt1GroupIndex = sysPara->status.cnt1GroupRunningIndex; - int currCnt1GroupLoop = sysPara->status.cnt1GroupCurrentLoop; - int cnt1StartValue = sysPara->para.Cnt1ByGroup.cnt1GroupSettings[currCnt1GroupIndex].StartValue; - int cnt1EndValue = sysPara->para.Cnt1ByGroup.cnt1GroupSettings[currCnt1GroupIndex].EndValue; - - dialogShowCounter->refreshdate(currValue1, cnt1StartValue, cnt1EndValue, currCnt1GroupIndex, currCnt1GroupLoop); -} - -void PrintSetting::on_lockoulsepushButton_clicked() -{ - if(lockpulse){ - ui->lockoulsepushButton->setText(tr("锁定脉冲计数")); - lockpulse = false; - }else{ - ui->lockoulsepushButton->setText(tr("解锁脉冲计数")); - lockpulse = true; - } - -} - -void PrintSetting::on_spinBoxCnt1EndValue_valueChanged(int arg1) -{ - if(lockpulse){ - sysPara->para.productCntPerOutputPulse = arg1; - // qDebug()<< "emit change_OutputPulse()"; - emit change_OutputPulse(); - } - -} - -#if(1) -void PrintSetting::moveRow( int nFrom, int nTo) -{ - int StartValue,EndValue,LoopTimes; - - int To_StartValue,To_EndValue,To_LoopTimes; - QLineEdit *pLineEdit; - - - if( nFrom == nTo ) { - return; - } - if( nFrom < 0 || nTo < 0 ) { - return; - } - int nRowCount = ui->tableWidget->rowCount(); - if( nFrom >= nRowCount || nTo >= nRowCount ) return; - - pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,0); - StartValue = pLineEdit->text().toInt(); - - pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,1); - EndValue = pLineEdit->text().toInt(); - - pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,2); - LoopTimes = pLineEdit->text().toInt(); - -// qDebug()<<"StartValue="<setText(QString::number(StartValue)); - pLineEdit->setValidator(validator); - ui->tableWidget->setCellWidget(nTo,0,pLineEdit); - - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(EndValue)); - pLineEdit->setValidator(validator); - ui->tableWidget->setCellWidget(nTo,1,pLineEdit); - - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(LoopTimes)); - pLineEdit->setValidator(validatorLoop); - ui->tableWidget->setCellWidget(nTo,2,pLineEdit); - - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(To_StartValue)); - pLineEdit->setValidator(validator); - ui->tableWidget->setCellWidget(nFrom,0,pLineEdit); - - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(To_EndValue)); - pLineEdit->setValidator(validator); - ui->tableWidget->setCellWidget(nFrom,1,pLineEdit); - - pLineEdit = new QLineEdit; - pLineEdit->setText(QString::number(To_LoopTimes)); - pLineEdit->setValidator(validatorLoop); - ui->tableWidget->setCellWidget(nFrom,2,pLineEdit); - - ui->tableWidget->selectRow(nTo); -// ui->tableWidget->clearFocus(); -// ui->tabWidget->focusPolicy(); -} -//调用 -void PrintSetting::on_moveUp_clicked() -{ - moveRow(ui->tableWidget->currentRow(),ui->tableWidget->currentRow() - 1); -} - -void PrintSetting::on_moveDown_clicked() -{ - moveRow(ui->tableWidget->currentRow(),ui->tableWidget->currentRow() + 1); -} - -void PrintSetting::on_pushButtonUpRow_clicked() -{ - on_moveUp_clicked(); -} - -void PrintSetting::on_pushButtonDownRow_clicked() -{ - on_moveDown_clicked(); -} -#endif - -void PrintSetting::on_pushOnlyCNT3Clear_pressed() -{ - sysPara->devOp->clearProductCnt(1<<4);// 计数器3单独清零 -} - -void PrintSetting::setCNT1BackColor(bool flag) -{ - if(flag) - { - ui->radioCNT1->setCheckable(true); - ui->radioCNT1->setChecked(true); - } - else - { - ui->radioCNT1->setChecked(false); - ui->radioCNT1->setCheckable(false); - } -// if(flag) -// { -// //ui->tabWidget->widget(0)->setStyleSheet("QTabBar::tab{background-color:rgb(255, 0, 0);}"); //设置选中背景色 -// ui->radioCNT1->setChecked(flag); -// } -// else -// { -// //ui->tabWidget->widget(0)->setStyleSheet("QTabBar::tab{background-color:rgb(239, 239, 239);}"); //设置选中背景色 -// ui->radioCNT1->setChecked(flag); -// } -} - -void PrintSetting::setCNT2BackColor(bool flag) -{ - if(flag) - { - ui->radioCNT2->setCheckable(true); - ui->radioCNT2->setChecked(true); - } - else - { - ui->radioCNT2->setChecked(false); - ui->radioCNT2->setCheckable(false); - } -} - -void PrintSetting::setCNT3BackColor(bool flag) -{ - if(flag) - { - ui->radioCNT3->setCheckable(true); - ui->radioCNT3->setChecked(true); - } - else - { - ui->radioCNT3->setChecked(false); - ui->radioCNT3->setCheckable(false); - } -} - -void PrintSetting::getFpgaVersionSetDisable(){ - qDebug()<<"getFpgaVersionSetDisable"; - sysPara->devOp->readFpgaVersionNum(); - int FPGAVersion =sysPara->status.build_dat.builTime; - unsigned int type = sysPara->status.fpgaVersionNum >> 12; - - LogInfo::setRunStatusText(tr("builTime:%1").arg(FPGAVersion)); - LogInfo::setRunStatusText(tr("fpgaVersionNum: %1").arg(sysPara->status.fpgaVersionNum)); - LogInfo::setRunStatusText(tr("FPGAType: %1").arg(type)); - - if(type == 1 || type == 2) - FPGAVersion = 67; - else if(type == 6 || type == 8) - FPGAVersion = 72; - - if (FPGAVersion == 67){ - sysPara->status.flagOfNo67FPGA = 1; - ui->checkBox_FastMode->setEnabled(true); - if(!sysPara->para.flagOfFastMode) - uiSettingForNo67(); - else - uiSettingForNo66(); - } - else{ - uiSettingForNo72(); - } - - - - /****************VX4使用,VX5不需要 - else if(sysPara->status.FPGAVersionType == 1) - uiSettingForNo66(); - else if(sysPara->status.FPGAVersionType == 2) - uiSettingForNo67(); - else if(FPGAVersion == 72) - uiSettingForNo72(); - else if(FPGAVersion == 73) - uiSettingForNo73();*/ - - qDebug()<<"checkmode0211:"<checkmode0211->isChecked(); - qDebug()<<"charWidthSetEnable:"<checkBoxCharWidthSet->isChecked(); - qDebug()<<"Vol1of8En:"<checkVol1of8En->isChecked(); - qDebug()<<"FullColFixVal:"<radioButtonFUllColFIxVal->isChecked(); - - sysPara->para.mode0211 = ui->checkmode0211->isChecked();//添加0211模式 - sysPara->para.charWidthSetEnable = ui->checkBoxCharWidthSet->isChecked(); - sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked();//打印优化 - sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked();//2020/3/2 - -} - -void PrintSetting::resizeEvent(QResizeEvent *event) -{ - #ifdef COUNTER2_BY_GROUP - if(event->size().width() > 0) - { - // 将 widget_2 移动到其父级中间 - ui->widget_2->move(ui->widget_2->parentWidget()->width() / 2 - ui->widget_2->width() / 2, ui->widget_2->y()); - } - #endif - - QWidget::resizeEvent(event); -} - - void PrintSetting::uiSettingForNo66(){ - ui->checkBox_FastMode->setChecked(true); - if(sysPara->para.currPrintMode>1) - ui->comboBoxPrintMode->setCurrentIndex(0); - ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); - ui->checkBoxCharWidthSet->setChecked(true); - ui->checkVol1of8En->setChecked(true); - ui->radioButtonFUllColFIxVal->setChecked(true); - ui->checkmode0211->setChecked(false); - ui->comboBoxPrintMode->setItemText(0,tr("超高速")); - ui->comboBoxPrintMode->setItemText(1,tr("高速")); - if(ui->comboBoxPrintMode->count()>2) - ui->comboBoxPrintMode->removeItem(2); - } - - void PrintSetting::uiSettingForNo67(){ - ui->checkBox_FastMode->setEnabled(true); - if(!sysPara->para.flagOfFastMode){ - ui->checkBox_FastMode->setChecked(false); - if(sysPara->para.currPrintMode>2) - ui->comboBoxPrintMode->setCurrentIndex(0); - ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); - ui->checkBoxCharWidthSet->setChecked(true); - ui->checkVol1of8En->setChecked(true); - ui->radioButtonFUllColFIxVal->setChecked(true); - ui->checkmode0211->setChecked(false); - if(ui->comboBoxPrintMode->count()<=2){ - ui->comboBoxPrintMode->setItemText(0,tr("快速")); - ui->comboBoxPrintMode->setItemText(1,tr("标准")); - ui->comboBoxPrintMode->addItem(tr("慢速")); - } - } - } - void PrintSetting::uiSettingForNo72(){ - sysPara->status.flagOfNo67FPGA = 0; - sysPara->para.flagOfFastMode=false; - ui->checkBox_FastMode->setChecked(false); - ui->checkBox_FastMode->setEnabled(false); - ui->comboBoxPrintMode->setCurrentIndex(1); - ui->comboBoxPrintMode->setEnabled(true); - ui->checkBoxCharWidthSet->setChecked(false); - ui->checkVol1of8En->setChecked(false); - ui->radioButtonFUllColFIxVal->setChecked(false); - ui->checkmode0211->setChecked(true); - if(ui->comboBoxPrintMode->count()<=2){ - ui->comboBoxPrintMode->setItemText(0,tr("快速")); - ui->comboBoxPrintMode->setItemText(1,tr("标准")); - ui->comboBoxPrintMode->addItem(tr("慢速")); - } - } - - void PrintSetting::uiSettingForNo73() - { - sysPara->status.flagOfNo67FPGA = 0; - sysPara->para.flagOfFastMode=false; - ui->checkBox_FastMode->setChecked(false); - ui->checkBox_FastMode->setEnabled(false); - ui->checkBoxCharWidthSet->setChecked(false); - ui->checkVol1of8En->setChecked(false); - ui->radioButtonFUllColFIxVal->setChecked(false); - ui->checkmode0211->setChecked(false); - if(ui->comboBoxPrintMode->count()<=2){ - ui->comboBoxPrintMode->setItemText(0,tr("快速")); - ui->comboBoxPrintMode->setItemText(1,tr("标准")); - ui->comboBoxPrintMode->addItem(tr("慢速")); - } - } - -//67 触发-同步器触发-字符宽度 - void PrintSetting::setDisableFontWidth(bool flag){ - if(sysPara->para.charWidthSetEnable && flag){ - ui->spinBoxColDelay->setValue(0); - ui->spinBoxColDelay->setEnabled(true); - }else - { - ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); - ui->spinBoxColDelay->setEnabled(true); - } - } - -//72 打印设置->常用设置->字体宽度 -void PrintSetting::autoUpdateFontWidth(const unsigned int totalCol) -{ - return; - if(totalCol == 0) return; - if(!sysPara->status.selfCheckDone && !TEST_MODE) return;//自检完成之前不检查 - if(sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME) return;//延迟触发模式不检查 - if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL - ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - && !sysPara->para.eleEyeTriggerSynPrintEn)) return;//电眼触发非同步打印模式不检查 - - - -#define MIN_CHAR_WIDTH 0.1 //0.1mm/列 -#define MAX_CHAR_WIDTH 4.0 //4.0mm/列 - float printInterval; - int currPrintCol; - float Cur_Col_Width; - float MAX_COL_DELAY; - int MIN_COL_DELAY; - float Cur_Max_ColDelay; - int Cur_Col_Delay; - if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)) - { - printInterval = (int )sysPara->para.synTriggerPrintLenMm; - } - else if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL - ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - && sysPara->para.eleEyeTriggerSynPrintEn)) - { - printInterval = sysPara->para.elecEyeTriggerInterval; - } - currPrintCol = totalCol + BLANK_COL_NUM; - qDebug()<<"printInterval: "<para.printColDelay; -#define MIN_COL_WIDTH 0.11 -#define MAX_COL_WIDTH 0.81 - Cur_Col_Width = printInterval/currPrintCol; - Cur_Col_Delay = sysPara->para.printColDelay; - if(sysPara->status.build_dat.builTime == 67){ - float Col_Width = (MIN_CHAR_WIDTH +Cur_Col_Delay*(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100)*currPrintCol; - MIN_COL_DELAY = 1; - MAX_COL_DELAY = (MAX_COL_WIDTH - MIN_CHAR_WIDTH)/0.039;//(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100=0.039 - Cur_Max_ColDelay = (Cur_Col_Width - MIN_CHAR_WIDTH)/0.039; - } - else{ - MIN_COL_DELAY = (int)(sysPara->para.synPulseNumPerMm*MIN_COL_WIDTH); - MAX_COL_DELAY = sysPara->para.synPulseNumPerMm*MAX_COL_WIDTH; - Cur_Max_ColDelay = sysPara->para.synPulseNumPerMm*Cur_Col_Width; - } - - if(Cur_Max_ColDelay < 1){ - QMessageBox::information(this,tr("提示"),tr("喷印间隔太小,无法正常打印!!!")); - return; - } - if(Cur_Col_Delay == 0){ - QMessageBox::information(this,tr("提示"),tr("字体宽度为0!!!")); - return; - } - - if(Cur_Max_ColDelay > MAX_COL_DELAY) - Cur_Max_ColDelay = MAX_COL_DELAY; - - if(Cur_Col_Delay > (int)Cur_Max_ColDelay){ - int oldColDelay = sysPara->para.printColDelay; - sysPara->para.printColDelay = (int)Cur_Max_ColDelay; - ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); - if(sysPara)sysPara->saveParaToFile (); - QMessageBox::information(this,tr("提示"),tr("原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)!") - .arg(oldColDelay).arg(Cur_Max_ColDelay)); - } - if(sysPara->para.printColDelay < MIN_COL_DELAY){ - QMessageBox::information(this,tr("提示"),tr("字体宽度太小,打印字体将会被严重压缩!\n建议最小字体宽度为:%1\n建议最小喷印间隔为:%2") - .arg(MIN_COL_DELAY).arg(currPrintCol*MIN_COL_WIDTH)); - } -} - -void PrintSetting::on_checkBox_FastMode_clicked() -{ - bool flag = ui->checkBox_FastMode->isChecked(); - if(flag){ - ui->spinBoxReducedPixelNum->setValue(60); - }else{ - ui->spinBoxReducedPixelNum->setValue(0); - } -} -//edit@11-30 小数点和隐藏值模块都显示,仅做展示。 -void PrintSetting::ModuleDecimalHideDisplay(const bool bEnabled) -{ - //工程模式下,隐藏值界面控件-全部显示 - ui->label_7->setVisible(1); - ui->label_6->setVisible(1); - ui->label_34->setVisible(1); - ui->radioButtonSpecialCondition->setVisible(1); - ui->spinBoxHiddenValue->setVisible(1); - ui->spinBoxMeterEnable->setVisible(1); - ui->spinBoxConditionValue->setVisible(1); - ui->spinBoxHiddenValue->setEnabled(bEnabled); - ui->spinBoxMeterEnable->setEnabled(bEnabled); - ui->spinBoxConditionValue->setEnabled(bEnabled); - ui->radioButtonSpecialCondition->setChecked(bEnabled); - - //工程模式下,小数点界面控件--全部显示 - ui->label_35->setVisible(1); - ui->spinBoxdecimalpointnum->setVisible(1); - ui->spinBoxdecimalpointnum->setEnabled(!bEnabled); - -} - -void PrintSetting::specailMachineSetting(bool enable){ - ui->checkBox_ReclaimPumpEnable->setEnabled(enable); - ui->spinBox_gearPumpSpeedAlarm->setEnabled(enable); -} - -void PrintSetting::displayForAdjustVoltage(bool flag){ - ui->checkVol1of8En->setVisible(flag); - ui->radioButtonFUllColFIxVal->setVisible(flag); -} - - void PrintSetting::setForAdjustVoltage(){ - ui->checkVol1of8En->setChecked(true); - ui->radioButtonFUllColFIxVal->setChecked(true); - sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked(); - sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked(); - - ui->spinBoxStartVoltage->setValue(30); - ui->spinBoxStartVoltage->setEnabled(false); - ui->spinBoxEndVoltage->setValue(75); - ui->spinBoxEndVoltage->setEnabled(false); - sysPara->para.startVoltage = 30; - sysPara->para.endVoltage = 75; - } - -void PrintSetting::on_spinBox_1_valueChanged(int arg1) -{ - sysPara->devOp->controlInkValvePWMSTM32(arg1); -} -unsigned char dataofMotorCtrl[1]; -void PrintSetting::on_pushButton_2_pressed() -{ - dataofMotorCtrl[0]=0x12; - sysPara->devOp->stm32Wr(0x01,dataofMotorCtrl,1); -} - -void PrintSetting::on_pushButton_3_pressed() -{ - dataofMotorCtrl[0]=0x11; - sysPara->devOp->stm32Wr(0x01,dataofMotorCtrl,1); -} - -void PrintSetting::on_pushButton_4_pressed() -{ - dataofMotorCtrl[0]=0x10; - sysPara->devOp->stm32Wr(0x01,dataofMotorCtrl,1); -} - -void PrintSetting::slt_updateCntShow(bool checked) -{ - ui->spinBoxCnt1StartValue->setEnabled(!checked); - ui->spinBoxCnt1EndValue->setEnabled(!checked); - ui->spinBoxCnt2StartValue->setEnabled(!checked); - ui->spinBoxCnt2EndValue->setEnabled(!checked); - if (!checked) - ui->checkBoxResetCnt1CurrValue->setEnabled(true); - if (checked) { - ui->spinBoxCnt1StepValue->setValue(-1); - ui->spinBoxCnt2StepValue->setValue(-1); - } -} - -void PrintSetting::initSection() -{ - if (sectionalWid == nullptr) { - sectionalWid = new SectionalWid(this); - sectionalWid->bindSysPara(sysPara); - ui->tabWidget_2->addTab(sectionalWid, tr("分段计数")); - connect(SectionalManager::instance(), &SectionalManager::sig_updateCntShow, - this, &PrintSetting::slt_updateCntShow); -// SectionalManager::instance()->emitLoadUI(); - } /*else { - ui->tabWidget_2->addTab(sectionalWid, tr("分段计数")); - }*/ -} - -int tempReclaimTankStatus = 0; -void PrintSetting::showReclaimTankstatusslot(unsigned char data) -{ - - QString str(""); - QString str1 = QString::number(data); - switch (data) { - case 0x06:str="关闭成功"; - break; - case 0x05:str="打开成功"; - break; - case 0x03:str="关闭"; - break; - case 0x02:str="正在关"; - break; - case 0x01:str="正在开"; - break; - case 0x10:str="故障"; - break; - default: - break; - } - tempReclaimTankStatus = data; -} - -void PrintSetting::showMotorIsenVal(int data,int data1) -{ - QString str = QString::number(data); - QString str1 = QString::number(data1); -} - -void PrintSetting::updateMachineMac(QString mac){ - bool ok; - int macValue = mac.toInt(&ok); - if (!ok || macValue < 0 || macValue > 999) { - return; - } - sysPara->status.machineMac = macValue; - -// sysPara->status.machineMac = mac.toInt(); -} +#include "PrintSetting.h" +#include "ui_printsetting.h" +#include "SysPara.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "DevOp.h" +#include "Public.h" +#include "LogInfo.h" +#include +#include +#include +#include +#include +#include "myinclude.h" +#include +#include +#include"scene/picscene.h" +#include"scene/pictextitem.h" +#include +#include +#include "rfid/rfidmanager.h" +#include + +PrintSetting::PrintSetting(QWidget *parent) : + QWidget(parent), + ui(new Ui::PrintSetting) +{ + ui->setupUi(this); + ui->comboBoxPrintMode->setView(new QListView()); + + dialogAuthorization = new DialogAuthorization(parent); + dialogAuthVarSet = new DialogAuthorization(parent); + dialogModuleSeletion = new DialogModuleSeletion(parent); + + last_area_end = 0; + area_end = 0; + lockpulse = false; + dialogShowCounter = new DialogShowCounter(parent); + dialogShowCounter->setLCDframe(); + dialogShowCounter->hide(); + connect(dialogShowCounter,SIGNAL(rejected()),this,SLOT(ondialogShowCounterAccepted())); + connect(dialogShowCounter,SIGNAL(accepted()),this,SLOT(ondialogShowCounterAccepted())); + + refresh_timer = new QTimer(); + connect(refresh_timer, SIGNAL(timeout()), this, SLOT(refreshtimerHandler())); + ui->volButton->hide(); + dlgInputAddr = new DlgInputAddr(parent); + + dlgInputAddr->GetAddr(); + dlgInputAddr->vpnConnect(); + dlgInputAddr->hide(); + + dlgvarLen = new DlgVarLength(parent); + + dlgvarLen->hide(); + + connect(dialogAuthorization,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted())); + connect(dialogAuthVarSet,SIGNAL(accepted()),this,SLOT(ondialogAuthVarSetAccepted())); + //connect(this,SIGNAL(authChanged(int )),this,SLOT(showVolDacEdit(int ))); + connect(dlgInputAddr,SIGNAL(changeMac(QString)),ui->labMac,SLOT(setText(QString))); + connect(dlgInputAddr,SIGNAL(changeMac(QString)),this,SLOT(updateMachineMac(QString))); + connect(dlgInputAddr,SIGNAL(changeMac(QString)),this,SLOT(showMachInfo(QString))); + connect(ui->pushButtonVAR,SIGNAL(pressed()),this,SLOT(on_checkVarLenChg())); + connect(dlgvarLen,SIGNAL(on_set()),this,SLOT(on_VarLenSet())); + if(Public::ReadLanguageName()=="Chinese"){ + ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH12.png"))); + }else + { + ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH13.png"))); + } + //ui->labelZFGD->setPixmap(QPixmap(QString::fromUtf8(":/image/AH12.png"))); + + dialogAuthorization->hide(); + + auth = AUTH_NONE; + //showVolDacEdit(auth); + + // ui->pushTestSysSet->hide(); + + //ui->spinBoxFullColFixVal->hide(); + ui->tabWidget_2->removeTab(1);//去掉高级设置标签 + ui->tabWidget_2->setCurrentIndex(0); + + ui->tabWidget->setCurrentIndex(0); + ui->tabWidget->widget(1)->setStyleSheet("color:blue"); + +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QStringList headerLabels = QStringList()<tableWidget->setHorizontalHeaderLabels(headerLabels); + ui->tableWidget->setFocusPolicy(Qt::NoFocus); + ui->tableWidget->horizontalHeader()->setHighlightSections(false); + ui->tableWidget->setColumnHidden(3,true);//第3列用来标志是否保存当前行 + QHeaderView* vertivalHeader = ui->tableWidget->verticalHeader(); + vertivalHeader->setFixedWidth(60); + ui->tableWidget->setColumnWidth(2,120); + + //高级设置隐藏选项 + flagOfSpecailSettng = 0; + SpecailSettingsDisplay(); + + //工程模式隐藏选项 + flagOfEngineeringMode = 0; + EngineeringModeDisplay(); + + flagOfModuleDecimal = 0; + ModuleDecimalDisplay(); + + flagOfModuleHide = 0; + ModuleHideDisplay(); + + specailMachineSetting(0); +#else + delete ui->tableWidget; + delete ui->checkBoxGroupCnt1; + delete ui->Cnt3AddRowBtn; + delete ui->Cnt3InsertRowBtn; + delete ui->Cnt3RemoveRowBtn; + delete ui->cnt3RemoveAllRowsBtn; +#endif +#ifdef SPACEFLAG + +#else +#endif + + current_print_col_num=0; + ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); + +} + +PrintSetting::~PrintSetting() +{ + delete ui; + delete dialogAuthorization; + delete refresh_timer; +} + +void PrintSetting::on_checkVarLenChg() +{ + //DlgVarLength dlg; + //bool en = ui->checkVARLEN->isChecked(); + if(sysPara) + { + dialogAuthVarSet->clearAuth(); + dialogAuthVarSet->show(); + } +} +void PrintSetting::on_VarLenSet() +{ + //qDebug()<<"on_set"; + if(sysPara){ + sysPara->para.headLen=dlgvarLen->headLen; + sysPara->para.endLen=dlgvarLen->endLen; + sysPara->para.varLen=dlgvarLen->varLen; + sysPara->para.varLen1=dlgvarLen->varLen1; + sysPara->para.varLenEn = dlgvarLen->varEn; + ui->checkVARLEN->setChecked(dlgvarLen->varEn); + if( sysPara->para.synTriggerPrintLenMm < dlgvarLen->varLen || sysPara->para.synTriggerPrintLenMm < dlgvarLen->varLen1) + { + QMessageBox::information(this,tr("提示:可变长度参数不正确"),tr("要求:调整长度小于喷印间隔")); + } + } +} +void PrintSetting::ondialogAuthVarSetAccepted(){ + QString authString = dialogAuthVarSet->getAuth(); + if(authString == "07710665") + { + dlgvarLen->headLen = sysPara->para.headLen; + dlgvarLen->endLen = sysPara->para.endLen; + dlgvarLen->varLen = sysPara->para.varLen; + dlgvarLen->varLen1 = sysPara->para.varLen1; + dlgvarLen->varEn=sysPara->para.varLenEn; + dlgvarLen->applyUI(sysPara->para.cnt1EndValue - sysPara->para.cnt1StartValue+1);//sysPara->para.synTriggerPrintLenMm + //dlgvarLen->lab_4->setText("ddd"); + dlgvarLen->show(); + dlgvarLen->setFocus(); + //sysPara->para.varLenEn = en; + } +} +void PrintSetting::bindSysPara(SysPara *sysPara){ + this->sysPara =sysPara; + //ui->volDacEdit + //ui->volDacEdit->bindSysPara(sysPara); +#ifdef COUNTER2_BY_GROUP + ui->secionCountPanel->hide(); + ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); + initSection(); +#endif +} + +void PrintSetting::PrintupdateSysParaToUI() +{ + updateSysParaToUI(); +} + +void PrintSetting::updateSysParaToUI(){ + if(sysPara){ + ui->checkVARLEN->setChecked(sysPara->para.varLenEn?1:0); + ui->checkBoxNewAmplifyPlate->setChecked(sysPara->para.newAmplifyPlate); + ui->comBoxExtSrceen->setCurrentIndex(sysPara->para.ExtScreenType); + ui->comBoxExtMeterType->setCurrentIndex(sysPara->para.ExtMeterType); + + ui->checkBoxLeftRightInverse->setChecked(sysPara->para.leftRightInverse); + ui->checkBoxUpDownInverse->setChecked(sysPara->para.upDownInverse); + ui->checkBoxScanInverse->setChecked(sysPara->para.scanInverse); + ui->checkBoxRecycleWarnAction->setChecked(sysPara->para.RecycleWarnAction); + ui->checkBoxPowerOffAfterPhaseFault->setChecked(sysPara->para.powerOffAfterPhaseFault); + ui->checkBoxSuspendAfterPhaseFault->setChecked(!sysPara->para.powerOffAfterPhaseFault); + ui->checkBoxSuspendAfterPhaseFault->setChecked(sysPara->para.suspendAfterPhaseFault); + ui->checkBoxStopCounterMeterAfterFault->setEnabled(sysPara->para.suspendAfterPhaseFault); + ui->checkBoxStopCounterMeterAfterFault->setChecked(sysPara->para.stopCounterMeterAfterFault); + ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); + ui->spinBox_gearPumpSpeedAlarm->setValue(sysPara->para.gearPumpSpeedAlarm); + + /*----------------------------------------*/ + + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + ui->spinBoxColRepeatCnt->setValue(sysPara->para.charBold); + ui->spinBoxCnt1EndValue->setValue(sysPara->para.cnt1EndValue); + ui->spinBoxCnt1RepeateCnt->setValue(sysPara->para.cnt1RepeateValue); + ui->spinBoxCnt1StartValue->setValue(sysPara->para.cnt1StartValue); + ui->spinBoxCnt1StepValue->setValue(sysPara->para.cnt1StepValue); + ui->spinBoxCnt1CurrValue->setValue(sysPara->para.cnt1CurrValue); + ui->spinBoxCnt2EndValue->setValue(sysPara->para.cnt2EndValue); + ui->spinBoxCnt2RepeateCnt->setValue(sysPara->para.cnt2RepeateValue); + ui->spinBoxCnt2StartValue->setValue(sysPara->para.cnt2StartValue); + ui->spinBoxCnt2StepValue->setValue(sysPara->para.cnt2StepValue); + ui->spinBoxCnt2CurrValue->setValue(sysPara->para.cnt2CurrValue); + + ui->spinBoxCnt3EndValue->setValue(sysPara->para.cnt3EndValue); + ui->spinBoxCnt3RepeateCnt->setValue(sysPara->para.cnt3RepeateValue); + ui->spinBoxCnt3StartValue->setValue(sysPara->para.cnt3StartValue); + ui->spinBoxCnt3StepValue->setValue(sysPara->para.cnt3StepValue); + ui->spinBoxCnt3CurrValue->setValue(sysPara->para.cnt3CurrValue); + + ui->spinBoxStartVoltage->setValue(sysPara->para.startVoltage); + + ui->spinBoxEndVoltage->setValue(sysPara->para.endVoltage); + + ui->spinBoxHighVoltageValue->setValue(sysPara->para.HighVoltageAmplitude); + + ui->spinBoxReducedPixelNum->setValue(sysPara->para.reducedPixelNumRatio); + ui->comboBoxReducedPixMode->setCurrentIndex(sysPara->para.reducedPixelMode); + ui->spinBoxRowSequenceMode->setValue(sysPara->para.rowSequenceMode); + ui->spinBoxPointVoltageAdjustPos->setValue(sysPara->para.pointVoltageAdjustPos); + ui->spinBoxVoltageAdjustValue->setValue(sysPara->para.PointVoltageAdjustValue); + ui->spinBoxLineEndAdjustPointCnt->setValue(sysPara->para.lineEndAdjustPointCnt); + ui->comboBoxLineEndAdjustPointMode->setCurrentIndex(sysPara->para.lineEndAdjustPointDelay); + ui->spinBoxLastLineEndPointFixedValue->setValue(sysPara->para.lastLineEndPointFixedValue); + // ui->spinBoxFullColFixVal->setValue(sysPara->para.FullColFixVal); + ui->radioButtonFUllColFIxVal->setChecked(sysPara->para.FullColFixVal); + ui->comboBox_selcetVolPara->setCurrentIndex(sysPara->para.currSelectVolPara); + //隐藏功能 + ui->radioButtonSpecialCondition->setChecked(sysPara->para.HiddenFuncEnable); + ui->spinBoxHiddenValue->setValue(sysPara->para.cnt4CurrValue); + ui->spinBoxConditionValue->setValue(sysPara->para.HiddenConditionValue); + ui->spinBoxMeterEnable->setValue(sysPara->para.HiddenMeterEnable); + + // sysPara->status.cnt4CurrValue = sysPara->para.cnt4CurrValue; + sysPara->status.specialVarPrint.SpecialConditionValue = sysPara->para.HiddenConditionValue ; + sysPara->status.specialVarPrint.SpecialVarEnable =sysPara->para.HiddenFuncEnable ; + sysPara->status.specialVarPrint.MeterEnable = sysPara->para.HiddenMeterEnable; + if(sysPara->status.specialVarPrint.SpecialVarEnable) + sysPara->status.specialVarPrint.SpecialVarEnable = 0xFF; + if(sysPara->status.specialVarPrint.MeterEnable) + sysPara->status.specialVarPrint.MeterEnable = 0xFF; + + emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); + if(sysPara->para.HiddenFuncEnable) + { + // emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); + ui->spinBoxdecimalpointnum->setValue(0); + ui->spinBoxdecimalpointnum->setEnabled(false); + + ui->radioButtonSpecialCondition->setEnabled(true); + ui->spinBoxHiddenValue->setEnabled(true); + ui->spinBoxConditionValue->setEnabled(true); + ui->spinBoxMeterEnable->setEnabled(true); + } + + if(!sysPara->para.rrr_nc) + { + if(!sysPara->para.printNumPoint) + ui->spinBoxdecimalpointnum->setValue(0); + else + ui->spinBoxdecimalpointnum->setValue(1); + } + else + { + if(!sysPara->para.printNumPoint) + ui->spinBoxdecimalpointnum->setValue(2); + else + ui->spinBoxdecimalpointnum->setValue(3); + } + + ui->comboBoxIndustry->setCurrentIndex(sysPara->para.industryIndex); + ui->comboBoxRecommendedPrintSpeed->setCurrentIndex(sysPara->para.recommendedPrintSpeed); + ui->comboBoxAlterPrintEnable->setCurrentIndex (sysPara->para.alterPrint.enable );// 修改后的 + if(sysPara->para.alterPrint.enable == 0) + { + ui->spinBoxXStartValue->setEnabled(false); + ui->spinBoxXRepeatTimeValue->setEnabled(false); + ui->spinBoxXGapValue->setEnabled(false); + } + ui->spinBoxXStartValue->setValue (sysPara->para.alterPrint.startValue ); + ui->spinBoxXGapValue->setValue (sysPara->para.alterPrint.repeatValue); + ui->spinBoxXRepeatTimeValue->setValue (sysPara->para.alterPrint.repeatPrintTimes); + ui->spinBoxDistanceTail->setValue(sysPara->para.alterPrint.DistanceTail ); + ui->checkBoxCnt1NatureValue->setChecked ( sysPara->para.Cnt1NatureValue); // + ui->checkBoxSpeedOver->setChecked(sysPara->para.speedoverPaushPrint); + ui->checkSynCntEn->setChecked(sysPara->para.SynCntEn); + ui->checkVol1of8En->setChecked(sysPara->para.Vol1of8En); + ui->checkBoxEleEyeRetrigDis->setChecked( sysPara->para.eleEyeReTrigDisable ); + ui->checkmode0211->setChecked(sysPara->para.mode0211); + ui->resetToCnt1InitValueCheckBox->setChecked(sysPara->para.cnt1ResetToInitValue); + qDebug()<<"checkmode0211:"<para.mode0211; + qDebug()<<"checkVol1of8En:"<para.Vol1of8En; + qDebug()<<"radioButtonFUllColFIxVal:"<para.FullColFixVal; + qDebug()<<"checkBoxCharWidthSet:"<para.charWidthSetEnable; + + //ui->checkBoxPrintOnce->setChecked(sysPara->para.printOnce); + //ui->checkBoxNumPoint->setChecked(sysPara->para.printNumPoint); + ui->checkBoxReciclar->setChecked(sysPara->para.Reciclar); + ui->dacScaledSpinBox->setValue(sysPara->para.dacScale); + ui->checkBoxResetSendData->setChecked(sysPara->para.ResetSendData); + ui->spinBoxJumpStartValue->setValue( sysPara->para.stepPrint.startValue ); + ui->spinBoxJumpEndValue->setValue( sysPara->para.stepPrint.endValue ); + //ui->checkBoxStepPrintEn->setEnabled( sysPara->para.stepPrint.enbale ); + ui->checkBoxStepPrintEn->setChecked( sysPara->para.stepPrint.enbale ); + ui->spinBoxJumpStepValue->setValue(sysPara->para.stepPrint.StepValue); + + + ui->checkProductResetEn->setChecked(sysPara->para.ResetProductCntEn); + ui->checkAllProductResetEn->setChecked(sysPara->para.ResetAllProductCntEn); + ui->checkHVFaultCloseEn->setChecked(sysPara->para.HVFaultCloseEn); + + // 电眼触发计数器动作 选择 + ui->eleCNT1IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x10)?1:0); + ui->radCNT1ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x10)?0:1); + + ui->eleCNT2IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?1:0); + ui->radCNT2ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x20)?0:1); + + ui->eleCNT3IncEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x40)?1:0); + ui->radCNT3ResetEn->setChecked( (sysPara->para.eleEyeClearCntInSynMode & 0x40)?0:1); + + ui->checkBoxGearPumpEnable->setChecked(sysPara->para.gearPumpEnable); + ui->checkBox_ReclaimPumpEnable->setChecked(sysPara->para.flagOfReclaimPumEnable); + ui->checkBoxCharWidthSet->setChecked(sysPara->para.charWidthSetEnable); + ui->checkBoxMagnet->setChecked(sysPara->para.isCheckMagnet); + ui->printfLightCheckBox->setChecked(sysPara->para.isCheckPrintLight); + + ui->phaseHighCntSpinBox->setValue( sysPara->para.phaseHighCnt); + + sysPara->para.bcOption.var1Num=ui->spinBoxCnt1EndValue->text().length(); + sysPara->para.bcOption.var2Num=ui->spinBoxCnt2EndValue->text().length(); + ui->checkBox_FastMode->setChecked(sysPara->para.flagOfFastMode); + + ui->labMac->setText(QString(" Mac:%1").arg(dlgInputAddr->jd.addr)); + sysPara->status.machineMac = dlgInputAddr->jd.addr; + showMachInfo(QString::number(dlgInputAddr->jd.addr)); + + ui->CBDateFormat1->setCurrentIndex(sysPara->para.ExpirySplitMode);//p_var->splitMode + ui->spinBoxExpiryDate->setValue(sysPara->para.ExpiryDay); + //on_spinBoxExpiryDate_valueChanged(sysPara->print.ExpiryVar.); + ui->checkBoxSaveCNTStateValue->setCheckState(sysPara->para.isCntSaveStateValue ? Qt::Checked : Qt::Unchecked); + + flagOfModuleDecimal = sysPara->para.flagOfModuleDecimal; + ModuleDecimalDisplay(); + flagOfModuleHide = sysPara->para.flagOfModuleHide; + ModuleHideDisplay(); + displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); + +#ifdef COUNTER2_BY_GROUP + SectionalManager::instance()->emitLoadUI(); +#else + LoadCnt1GroupSettingsToUI(); +#endif + if(sysPara->para.mode0211 || sysPara->para.FullColFixVal) + { + ui->spinBoxStartVoltage->setEnabled(false); + ui->spinBoxEndVoltage->setEnabled(false); + } +// if(sysPara->para.flagOfCnt1GroupDisp) +// { +// //edit@12-03 +// const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9); +// if(-1==indexTab) { +// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); +// } +// } + if(sysPara->para.flagOfstepPrint) + { + //edit@12-03 + const int indexTab=ui->tabWidget->indexOf(ui->tab_6); + if(-1==indexTab) + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + } + } +} + +#include "VerBVersion.h" +void PrintSetting::showMachInfo(QString Mac) +{ + QString VernonBach; + VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); + VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER; +} +void PrintSetting::showRemoteControl(QString SuperNodeIP,QString EdgeIP) +{ + QString VernonBach; + VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); + VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER; +} + +void PrintSetting::applyUIPara(){ + if(sysPara){ + LogInfo::setRunStatusText(tr("addr: %1").arg(addr)); + LogInfo::setRunStatusText(tr("data: %1").arg(data)); + LogInfo::setRunStatusText(tr("len: %1").arg(len)); + + sysPara->para.ExtScreenType = ui->comBoxExtSrceen->currentIndex(); + sysPara->para.ExtMeterType = ui->comBoxExtMeterType->currentIndex(); + sysPara->para.gearPumpSpeedAlarm = ui->spinBox_gearPumpSpeedAlarm->value(); + if(sysPara->para.ExtScreenType==0) + { + sysPara->status.ExtScreenEn =0; + } + ui->spinBoxColDelay->setEnabled(1); + sysPara->para.varLenEn = ui->checkVARLEN->isChecked(); + sysPara->para.checkSpace = 0;//ui->checkSpace->isChecked(); + sysPara->para.leftRightInverse = ui->checkBoxLeftRightInverse->isChecked(); + sysPara->para.upDownInverse = ui->checkBoxUpDownInverse->isChecked(); + sysPara->para.scanInverse = ui->checkBoxScanInverse->isChecked(); + sysPara->para.currPrintMode = ui->comboBoxPrintMode->currentIndex(); + sysPara->para.currSelectVolPara = ui->comboBox_selcetVolPara->currentIndex(); + sysPara->para.suspendAfterPhaseFault = ui->checkBoxSuspendAfterPhaseFault->isChecked(); + sysPara->para.powerOffAfterPhaseFault = ui->checkBoxPowerOffAfterPhaseFault->isChecked(); + sysPara->para.RecycleWarnAction = ui->checkBoxRecycleWarnAction->isChecked(); + sysPara->para.stopCounterMeterAfterFault = ui->checkBoxStopCounterMeterAfterFault->isChecked(); + sysPara->para.printColDelay = ui->spinBoxColDelay->value(); + sysPara->para.cnt1EndValue = ui->spinBoxCnt1EndValue->value(); + sysPara->para.cnt1RepeateValue = ui->spinBoxCnt1RepeateCnt->value(); + sysPara->para.cnt1StartValue = ui->spinBoxCnt1StartValue->value(); + sysPara->para.cnt1StepValue = ui->spinBoxCnt1StepValue->value(); + sysPara->para.cnt1CurrValue = ui->spinBoxCnt1CurrValue->value(); //这个值设置没关系,在关机前还会再此被设置 + sysPara->para.cnt2EndValue = ui->spinBoxCnt2EndValue->value(); + sysPara->para.cnt2RepeateValue = ui->spinBoxCnt2RepeateCnt->value(); + sysPara->para.cnt2StartValue = ui->spinBoxCnt2StartValue->value(); + sysPara->para.cnt2StepValue = ui->spinBoxCnt2StepValue->value(); + sysPara->para.cnt2CurrValue = ui->spinBoxCnt2CurrValue->value(); + + sysPara->para.newAmplifyPlate = ui->checkBoxNewAmplifyPlate->isChecked(); + sysPara->para.cnt3EndValue = ui->spinBoxCnt3EndValue->value(); + sysPara->para.cnt3RepeateValue = ui->spinBoxCnt3RepeateCnt->value(); + sysPara->para.cnt3StartValue = ui->spinBoxCnt3StartValue->value(); + sysPara->para.cnt3StepValue = ui->spinBoxCnt3StepValue->value(); + sysPara->para.cnt3CurrValue = ui->spinBoxCnt3CurrValue->value(); + + sysPara->para.startVoltage = ui->spinBoxStartVoltage->value(); + sysPara->para.endVoltage = ui->spinBoxEndVoltage->value(); + sysPara->para.charBold = ui->spinBoxColRepeatCnt->value(); + sysPara->para.HighVoltageAmplitude = ui->spinBoxHighVoltageValue->value(); + sysPara->devOp->setHighVoltageAmplitudetoSTM32(); + sysPara->status.cnt1CurrentValueInitDoneFlag = !ui->checkBoxResetCnt1CurrValue->isChecked(); + sysPara->status.cnt2CurrentValueInitDoneFlag = !ui->checkBoxResetCnt2CurrValue->isChecked(); + sysPara->status.cnt3CurrentValueInitDoneFlag = !ui->checkBoxResetCnt3CurrValue->isChecked(); + //将vx4的分段计米功能迁移了,这个应用设置后续会删除 hlp todo 0602 +#ifndef COUNTER2_BY_GROUP + if(sysPara->para.cnt1ByGroupEnalbe) + ApplyCnt1GroupSetting(); +#endif + + sysPara->para.flagOfFastMode = ui->checkBox_FastMode->isChecked(); + if(sysPara->para.flagOfFastMode){ + if(ui->comboBoxPrintMode->count()>=3){ + ui->comboBoxPrintMode->setItemText(0,tr("超高速")); + ui->comboBoxPrintMode->setItemText(1,tr("高速")); + ui->comboBoxPrintMode->removeItem(2); + } + }else{ + if(ui->comboBoxPrintMode->count()<3){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + + if(sysPara->para.EditMode==TXTFILE) + { + sysPara->status.specialVarPrint.SpecialVarEnable = ui->radioButtonSpecialCondition->isChecked(); + sysPara->status.cnt4CurrValue = ui->spinBoxHiddenValue->value(); + sysPara->status.specialVarPrint.MeterEnable = ui ->spinBoxMeterEnable->value(); + sysPara ->status.specialVarPrint.SpecialConditionValue = ui->spinBoxConditionValue->value(); + if(sysPara->status.specialVarPrint.SpecialVarEnable) + sysPara->status.specialVarPrint.SpecialVarEnable = 0xFF; + if(sysPara->status.specialVarPrint.MeterEnable) + sysPara->status.specialVarPrint.MeterEnable = 0xFF; + + sysPara->para.cnt4CurrValue = sysPara->status.cnt4CurrValue; + sysPara->para.HiddenConditionValue = sysPara->status.specialVarPrint.SpecialConditionValue; + sysPara->para.HiddenFuncEnable = sysPara->status.specialVarPrint.SpecialVarEnable; + sysPara->para.HiddenMeterEnable = sysPara->status.specialVarPrint.MeterEnable; + + } + + sysPara->devOp->writeFpgaCalandar(0); + + sysPara->para.reducedPixelNumRatio = ui->spinBoxReducedPixelNum->value(); + sysPara->para.reducedPixelMode = ui->comboBoxReducedPixMode->currentIndex(); + sysPara->para.rowSequenceMode = ui->spinBoxRowSequenceMode->value(); + + sysPara->para.pointVoltageAdjustPos = ui->spinBoxPointVoltageAdjustPos->value(); + sysPara->para.PointVoltageAdjustValue = ui->spinBoxVoltageAdjustValue->value(); + + sysPara->para.lineEndAdjustPointCnt = ui->spinBoxLineEndAdjustPointCnt->value(); + sysPara->para.lineEndAdjustPointDelay = ui->comboBoxLineEndAdjustPointMode->currentIndex(); + sysPara->para.lastLineEndPointFixedValue = ui->spinBoxLastLineEndPointFixedValue->value(); + + sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked();//2020/3/2 + sysPara->para.dacScale = ui->dacScaledSpinBox->value(); + + sysPara->para.industryIndex = ui->comboBoxIndustry->currentIndex(); + sysPara->para.recommendedPrintSpeed = ui->comboBoxRecommendedPrintSpeed->currentIndex(); + + if(ui->eleCNT1IncEn->isChecked()) + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x10); // CNT1 +1 + else + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xef); // CNT1 = current + + if(ui->eleCNT2IncEn->isChecked()) + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x20); // CNT2 +1 + else + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xdf); // CNT2 = current + + if(ui->eleCNT3IncEn->isChecked()) + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode | 0x40); // CNT3 +1 + else + sysPara->para.eleEyeClearCntInSynMode = (sysPara->para.eleEyeClearCntInSynMode & 0xbf); // CNT3 = current + sysPara->para.alterPrint.enable =ui->comboBoxAlterPrintEnable->currentIndex();// 修改后的 + if(sysPara->para.alterPrint.enable) + sysPara->para.textEditLineSpace = 0; + sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; + sysPara->para.alterPrint.startValue = ui->spinBoxXStartValue->value (); + sysPara->para.alterPrint.repeatValue = ui->spinBoxXGapValue->value (); + sysPara->para.alterPrint.repeatPrintTimes =ui->spinBoxXRepeatTimeValue->value (); + sysPara->para.alterPrint.DistanceTail =ui->spinBoxDistanceTail->value (); + if( sysPara->para.alterPrint.startValue>= sysPara->para.alterPrint.repeatValue ) + { + sysPara->para.alterPrint.startValue =sysPara->para.alterPrint.repeatValue -1; + ui->spinBoxXStartValue->setValue (sysPara->para.alterPrint.startValue); + + + + QMessageBox::information(this,tr("提示:交替参数不正确"),tr("要求:起始位置<交替间隔")); + } + if( sysPara->para.alterPrint.repeatPrintTimes+sysPara->para.alterPrint.startValue + > sysPara->para.alterPrint.repeatValue ) + { + sysPara->para.alterPrint.repeatPrintTimes =sysPara->para.alterPrint.repeatValue -sysPara->para.alterPrint.startValue-1; + ui->spinBoxXRepeatTimeValue->setValue (sysPara->para.alterPrint.repeatPrintTimes); + + QMessageBox::information(this,tr("提示:交替参数不正确"),tr("要求:(重复次数+起始位置)<交替间隔")); + } + + sysPara->para.Cnt1NatureValue = ui->checkBoxCnt1NatureValue->isChecked (); // + sysPara->para.speedoverPaushPrint = ui->checkBoxSpeedOver->isChecked(); + sysPara->para.SynCntEn = ui->checkSynCntEn->isChecked(); + sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked();//打印优化 + sysPara->para.mode0211 = ui->checkmode0211->isChecked();//添加0211模式 + sysPara->para.cnt1ResetToInitValue = ui->resetToCnt1InitValueCheckBox->isChecked();// 电眼复位时,复位起始值或当前值 + //sysPara->para.printOnce = ui->checkBoxPrintOnce->isChecked();// 每条信息只喷一次 +// sysPara->para.printOnce = 0;// 每条信息只喷一次 + //sysPara->para.printNumPoint = ui->checkBoxNumPoint->isChecked();// 每条信息只喷一次 + sysPara->para.Reciclar = ui->checkBoxReciclar->isChecked();//sysPara->para.Reciclar = 0; // + switch(ui->spinBoxdecimalpointnum->value()) + //20240625修改小数点位数可选0-3位,FPGA原参数a44d 地址第6号位为 是否打印小数使能信号,1为打印小数,0为不打印小数。 + //更改为: + // a44d 地址第6号位和第7号位为 打印显示小数位数; + // 第7,6变量为 11 打印3位小数, + // 第7,6变量为 10 打印2位小数, + // 第7,6变量为 01 打印1位小数, + // 第7,6变量为 00 打印0位小数, + { + case 0: + ui->radioButtonSpecialCondition->setEnabled(true); + sysPara->para.printNumPoint = 0; + sysPara->para.rrr_nc = 0; + break; + case 1: + ui->radioButtonSpecialCondition->setEnabled(false); + ui->spinBoxMeterEnable->setValue(0); + sysPara->para.printNumPoint = 1; + sysPara->para.rrr_nc = 0; + break; + case 2: + ui->radioButtonSpecialCondition->setEnabled(false); + ui->spinBoxMeterEnable->setValue(0); + sysPara->para.printNumPoint = 0; + sysPara->para.rrr_nc = 1; + break; + case 3: + ui->radioButtonSpecialCondition->setEnabled(false); + ui->spinBoxMeterEnable->setValue(0); + sysPara->para.printNumPoint = 1; + sysPara->para.rrr_nc = 1; + break; + default: + sysPara->para.printNumPoint = 0; + sysPara->para.rrr_nc = 0; + break; + } + sysPara->para.stepPrint.startValue = ui->spinBoxJumpStartValue->value(); + sysPara->para.stepPrint.endValue = ui->spinBoxJumpEndValue->value(); + sysPara->para.stepPrint.enbale = ui->checkBoxStepPrintEn->isChecked(); + sysPara->para.stepPrint.StepValue = ui->spinBoxJumpStepValue->value(); + sysPara->para.ResetSendData = ui->checkBoxResetSendData->isChecked(); + sysPara->para.eleEyeReTrigDisable = ui->checkBoxEleEyeRetrigDis->isChecked(); + + sysPara->para.ResetAllProductCntEn = ui->checkAllProductResetEn->isChecked(); + sysPara->para.ResetProductCntEn = ui->checkProductResetEn->isChecked(); + sysPara->para.HVFaultCloseEn = ui->checkHVFaultCloseEn->isChecked(); + sysPara->para.gearPumpEnable = ui->checkBoxGearPumpEnable->isChecked(); + sysPara->para.flagOfReclaimPumEnable = ui->checkBox_ReclaimPumpEnable->isChecked(); + sysPara->para.phaseHighCnt = ui->phaseHighCntSpinBox->value(); + sysPara->para.charWidthSetEnable = ui->checkBoxCharWidthSet->isChecked(); + sysPara->para.isCheckMagnet = ui->checkBoxMagnet->isChecked(); + sysPara->para.isCheckPrintLight = ui->printfLightCheckBox->isChecked(); + LogInfo::setRunStatusText(tr("sysPara->para.isCheckPrintLight: %1").arg(sysPara->para.isCheckPrintLight)); + + sysPara->para.bcOption.var1Num=ui->spinBoxCnt1EndValue->text().length(); + sysPara->para.bcOption.var2Num=ui->spinBoxCnt2EndValue->text().length(); +// sysPara->para.bcOption.var3Num=ui->spinBoxCnt2EndValue_2->text().length(); + + //qDebug()<<"sysPara->para.bcOption.varNum"<para.bcOption.var1Num<para.bcOption.var2Num; + sysPara->para.ExpiryDay = ui->spinBoxExpiryDate->value(); + sysPara->para.ExpirySplitMode = ui->CBDateFormat1->currentIndex(); + ui->resetToCnt1InitValueCheckBox->isChecked(); + //qDebug()<print.ExpiryDay; + if(sysPara->devOp->writeFpgaPrintPara() != -1) // save para to disk file. + QMessageBox::information(this,tr("提示"),tr("应用成功")); + //ui->labelCnt1CurrValueTxt->setEnabled(false); +// ui->labelCnt2CurrValueTxt->setEnabled(false); + ui->spinBoxCnt1CurrValue->setEnabled(false); + ui->spinBoxCnt2CurrValue->setEnabled(false); + ui->spinBoxCnt3CurrValue->setEnabled(false); + + ui->checkBoxResetCnt1CurrValue->setChecked(false); + ui->checkBoxResetCnt2CurrValue->setChecked(false); + ui->checkBoxResetCnt3CurrValue->setChecked(false); + + emit checkPrintIntervalSignal(); + } + + +} + +void PrintSetting::updateSysStatusToUI(){ + if(sysPara){ + + ui->labelCnt1CurrValue->setText(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16)); + ui->labelCnt2CurrValue->setText(QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16)); + ui->labelCnt3CurrValue->setText(QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16)); + + int rDay= sysPara->para.openInkLineTime/24/3600; + long tmp = sysPara->para.openInkLineTime%(24*3600); + int rHour = tmp/3600; tmp =tmp%3600; + int rMinute = tmp/60; + int rSecond=tmp%60; + QString s=""; + //s.sprintf(tr("%4d天 %02d:%02d:%02d").toUtf8(), rDay,rHour,rMinute,rSecond);ui->labOpenInkLineTime->setText(s); + s.sprintf(("%6d:%02d:%02d"), rDay*24+rHour,rMinute,rSecond);ui->labOpenInkLineTime->setText(s); + ui->label_MaintenanceTime->setText(QString::number(dlgInputAddr->repairTimeLess,10)+tr("小时")); + //ui->labOpenInkLineTime->setText(tr("%1天 %2:%3:%4").arg(rDay).arg(rHour).arg(rMinute).arg(rSecond)); + ui->labTrunOnPowerCnt->setText(QString::number(sysPara->para.TrunOnPowerCnt,10)); + } +} +void PrintSetting::on_pushButtonClearRunTime_pressed(){ + sysPara->para.openInkLineTime=0; + sysPara->para.TrunOnPowerCnt=0; + sysPara->saveParaToFile(); + +} + +void PrintSetting::on_pushButtonApply_pressed() +{ + applyUIPara(); + emit HiddenFunction(ui->radioButtonSpecialCondition->isChecked()); + autoUpdateFontWidth(sysPara->status.textEditTotalCol); + PrintSettingLog(); + SectionalManager::instance()->emitApplySetting(); +} + +void PrintSetting::PrintSettingLog(){ + //qDebug()<comboBoxPrintMode->currentIndex()); + qDebug()<spinBoxColDelay->value()); + qDebug()<spinBoxColRepeatCnt->value()); + qDebug()<spinBoxStartVoltage->value()); + qDebug()<spinBoxEndVoltage->value()); + qDebug()<spinBoxHighVoltageValue->value()); + qDebug()<checkBoxRecycleWarnAction->isChecked()); + qDebug()<checkBoxPowerOffAfterPhaseFault->isChecked()); + qDebug()<checkSynCntEn->isChecked()); + qDebug()<checkHVFaultCloseEn->isChecked()); + qDebug()<checkBoxSpeedOver->isChecked()); + qDebug()<checkBoxSuspendAfterPhaseFault->isChecked()); + qDebug()<checkmode0211->isChecked()); + qDebug()<checkVol1of8En->isChecked()); + qDebug()<checkBoxCnt1NatureValue->isChecked()); + qDebug()<checkBoxStopCounterMeterAfterFault->isChecked()); + qDebug()<checkBoxEleEyeRetrigDis->isChecked()); + qDebug()<radioButtonFUllColFIxVal->isChecked()); + qDebug()<checkBoxUpDownInverse->isChecked()); + qDebug()<checkBoxLeftRightInverse->isChecked()); + qDebug()<comboBoxIndustry->currentIndex()); + qDebug()<comboBoxRecommendedPrintSpeed->currentIndex()); + qDebug()<checkBoxMagnet->isChecked()); + qDebug()<checkBoxCharWidthSet->isChecked()); + qDebug()<checkBoxGearPumpEnable->isChecked()); + qDebug()<checkBoxResetSendData->isChecked()); + qDebug()<spinBoxCnt1StartValue->value()); + qDebug()<spinBoxCnt1EndValue->value()); + qDebug()<spinBoxCnt1RepeateCnt->value()); + qDebug()<spinBoxCnt1StepValue->value()); + qDebug()<spinBoxCnt1CurrValue->value()); + qDebug()<checkBoxResetCnt1CurrValue->isChecked()); + //qDebug()<checkBoxNumPoint->isChecked()); + qDebug()<checkVARLEN->isChecked()); + qDebug()<resetToCnt1InitValueCheckBox->isChecked()); + qDebug()<CBDateFormat1->currentIndex()); + qDebug()<checkBoxSaveCNTStateValue->isChecked()); + qDebug()<spinBoxExpiryDate->value()); + qDebug()<checkBoxCircleProductCnt->isChecked()); + qDebug()<spinBoxCnt2StartValue->value()); + qDebug()<spinBoxCnt2EndValue->value()); + qDebug()<spinBoxCnt2RepeateCnt->value()); + qDebug()<spinBoxCnt2StepValue->value()); + qDebug()<spinBoxCnt2CurrValue->value()); + qDebug()<checkBoxResetCnt2CurrValue->isChecked()); + qDebug()<spinBoxXStartValue->value()); + qDebug()<spinBoxXGapValue->value()); + qDebug()<spinBoxXRepeatTimeValue->value()); + qDebug()<comboBoxAlterPrintEnable->currentIndex()); + qDebug()<para.HiddenFuncEnable); + if(ui->radioButtonSpecialCondition->isChecked()){ + qDebug()<spinBoxHiddenValue->value()); + qDebug()<spinBoxConditionValue->value()); + qDebug()<spinBoxMeterEnable->value()); + + } + +} + + +void PrintSetting::on_checkBoxResetCnt1CurrValue_released() +{ + bool checked = ui->checkBoxResetCnt1CurrValue->isChecked(); + ui->spinBoxCnt1CurrValue->setEnabled(checked); +} + +void PrintSetting::on_checkBoxResetCnt2CurrValue_released() +{ + bool checked = ui->checkBoxResetCnt2CurrValue->isChecked(); + ui->spinBoxCnt2CurrValue->setEnabled(checked); +} + +void PrintSetting::on_checkBoxResetCnt3CurrValue_released() +{ + bool checked = ui->checkBoxResetCnt3CurrValue->isChecked(); + ui->spinBoxCnt3CurrValue->setEnabled(checked); +} + +void PrintSetting::on_checkBoxSaveCNTStateValue_released() +{ + bool checked = ui->checkBoxSaveCNTStateValue->isChecked(); + sysPara->para.isCntSaveStateValue = checked; +} + +void PrintSetting::on_checkBoxCircleProductCnt_released() +{ + bool checked = ui->checkBoxCircleProductCnt->isChecked(); + sysPara->status.circleProductCnt = checked; +} + +void PrintSetting::on_dialogModPasswdAccepted() +{ + QString authString = dialogModPasswd->getModPasswd(); + if(authString == "987456123") + { + qDebug()<< "right choice"; + modify_vol = true; + ui->volButton->setText("取消授权"); + ui->spinBoxHighVoltageValue->setEnabled(true); + ui->spinBoxStartVoltage->setEnabled(true); + } + else + { + QMessageBox::critical(this,tr("错误"),tr("授权码:") + authString + tr(" 错误")); + } + +} + + +void PrintSetting::ondialogAuthorizationAccepted(){ + QString authString = dialogAuthorization->getAuth(); + if(authString == "nnyp"){ + auth = AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE + | AUTH_SUPER_USER1\ + //edit@11-28 + |AUTH_SUPER_USER2|AUTH_DISPLAY_OTHER_INFO; + SpecailSettingsDisplay(); + EngineeringModeDisplay(); + ModuleDecimalDisplay(); + ModuleHideDisplay(); + displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); +// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9); +// if(sysPara->para.flagOfCnt1GroupDisp) +// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); +// else +// ui->tabWidget_2->removeTab(indexTab1); + const int indexTab2=ui->tabWidget->indexOf(ui->tab_6); + if(sysPara->para.flagOfstepPrint) + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + else + ui->tabWidget->removeTab(indexTab2); + } + else if(authString == "by2016"){ + //edit@11-28 + auth = \ + AUTH_DISPLAY_LOG_INFO + //AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE + //| AUTH_DISPLAY_OTHER_INFO + | AUTH_SUPER_USER1 + |AUTH_SUPER_USER2 + ; + SpecailSettingsDisplay(); + EngineeringModeDisplay(); + ModuleDecimalDisplay(); + ModuleHideDisplay(); + displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); +// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9); +// if(sysPara->para.flagOfCnt1GroupDisp) +// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); +// else +// ui->tabWidget_2->removeTab(indexTab1); + const int indexTab2=ui->tabWidget->indexOf(ui->tab_6); + if(sysPara->para.flagOfstepPrint) + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + else + ui->tabWidget->removeTab(indexTab2); + } + + else if(authString == "07710665"){ + flagOfSpecailSettng = !flagOfSpecailSettng; + SpecailSettingsDisplay(); + displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); + } + else if(authString == "nnyp0998"){ + flagOfEngineeringMode =true; + //edit@11-28 + flagOfSpecailSettng =true;// !flagOfSpecailSettng; + + auth = AUTH_DISPLAY_SYSTEM_SETTING | AUTH_DISPLAY_SYSTEM_MANAGE + | AUTH_DISPLAY_LOG_INFO | AUTH_DISPLAY_OTHER_INFO| AUTH_SUPER_USER1 |AUTH_SUPER_USER2; + SpecailSettingsDisplay(); + EngineeringModeDisplay(); + engineerMode(true); + //edit@11-30 + ModuleDecimalHideDisplay(sysPara->para.HiddenFuncEnable); + specailMachineSetting(1); + } + + else if(authString == "111"){ + unsigned short type; + if(dialogModuleSeletion->exec() == QDialog::Accepted){ + type = dialogModuleSeletion->getModuleType(); + sysPara->para.moduleSelection = type; + if(type & 1) + flagOfModuleDecimal = true; + else + flagOfModuleDecimal = false; + sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; + ModuleDecimalDisplay(); + ModuleHideDisplay(); + sysPara->para.flagOfModuleHide = flagOfModuleHide; + + if(type & 1<<1) + flagOfModuleHide = true; + else + flagOfModuleHide = false; + sysPara->para.flagOfModuleHide = flagOfModuleHide; + ModuleHideDisplay(); + ModuleDecimalDisplay(); + sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; + + if(type & 1<<2) + sysPara->para.flagOfCnt1GroupDisp = true; + else + sysPara->para.flagOfCnt1GroupDisp = false; +// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9); +// if(sysPara->para.flagOfCnt1GroupDisp) +// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); +// else +// ui->tabWidget_2->removeTab(indexTab1); + + if (type & 1<<3) + sysPara->para.flagOfstepPrint = true; + else + sysPara->para.flagOfstepPrint = false; + const int indexTab2=ui->tabWidget->indexOf(ui->tab_6); + if(sysPara->para.flagOfstepPrint) + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + else + ui->tabWidget->removeTab(indexTab2); + + if(type & 1<<4) + sysPara->para.flagOfAdjustVoltage = true; + else{ + sysPara->para.flagOfAdjustVoltage = false; + setForAdjustVoltage(); + } + displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage); + } + } + else if(authString == "07710221"){ + flagOfModuleDecimal = !flagOfModuleDecimal; + sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; + ModuleDecimalDisplay(); + ModuleHideDisplay(); + sysPara->para.flagOfModuleHide = flagOfModuleHide; + + }else if(authString == "07710331"){ + flagOfModuleHide = !flagOfModuleHide; + sysPara->para.flagOfModuleHide = flagOfModuleHide; + ModuleHideDisplay(); + ModuleDecimalDisplay(); + sysPara->para.flagOfModuleDecimal = flagOfModuleDecimal; + } +//edit@11-29 输入密码显示,再次输入隐藏 + else if(authString == "07710441"){ + //edit@12-03 +// const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9); +// if(sysPara->para.flagOfCnt1GroupDisp) +// ui->tabWidget_2->removeTab(indexTab); +// else +// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); + sysPara->para.flagOfCnt1GroupDisp=!sysPara->para.flagOfCnt1GroupDisp; + + } +//edit@11-29 输入密码显示,再次输入隐藏 + else if(authString == "07710551"){ + + //edit@12-03 + const int indexTab=ui->tabWidget->indexOf(ui->tab_6); + if(sysPara->para.flagOfstepPrint) + ui->tabWidget->removeTab(indexTab); + else + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + sysPara->para.flagOfstepPrint=!sysPara->para.flagOfstepPrint; + } + + else if(dlgInputAddr->checkSupperInit(authString) ) + { + sysPara->status.WorkTimeOut=0; + dlgInputAddr->SetNewJm(1); + sysPara->para.varLen=0; + sysPara->para.varLen1=0; +#ifdef __RFID_CARD +// RFIDManager::instance()->setICReaderModeFlag = true; +// MySleep(300); +// QMessageBox::warning(0,tr("提示"),tr("软件初始化完成.") ); +// RFIDManager::instance()->setRFIDReaderWorkMode(); +// RFIDManager::instance()->setRFIDReaderKey(dlgInputAddr->jd.addr,1); +// RFIDManager::instance()->setICReaderModeFlag = false; +// RFIDManager::instance()->initRFIDMoudle(dlgInputAddr->jd.addr); +#endif + } + else if((authString.left(4) == "nnyp") && ( dlgInputAddr->checkSupperJm(authString.mid(4)))) + { +#ifdef __RFID_CARD + memset(&sysPara->RFIDPara,0,sizeof(sysPara->RFIDPara)); + sysPara->saveRFIDPara(); + + sysPara->para.RFIDInkWarn = false; + sysPara->status.flagOfInkMaxDot = false; + sysPara->status.flagOfNeedInkCard = false; + + sysPara->para.RFIDSolventWarn = 0; + sysPara->para.RFIDSolventWarnMixCnt = 0; + sysPara->para.inkWarnDate = 0; + sysPara->para.inkWarnTime = 0; + sysPara->para.solventWarnDate = 0; + sysPara->para.solventWarnTime = 0; + sysPara->status.flagOfSolventMaxNum = false; + sysPara->status.flagOfNeedSolventCard = false; + qDebug()<<"RFID卡清零"; + sysPara->saveParaToFile(); + QMessageBox::warning(0,tr("提示"),tr("RFID卡清零!") ); +#endif + } + else if( dlgInputAddr->checkSupperJm(authString)) + { + sysPara->status.WorkTimeOut=0; + dlgInputAddr->ReadJm(); + dlgInputAddr->show(); + ui->labMac->setText(QString("Mac:%1").arg(dlgInputAddr->jd.addr)); + } + else if(dlgInputAddr->checWhJm(authString)) // 0xa001 + { + sysPara->status.WorkTimeOut=0; + QMessageBox::warning(this,tr("提示"),tr("喷码机维护设置成功!"),QMessageBox::Ok); + specailMachineSetting(1); + } + else if(dlgInputAddr->checkSysJm(authString)) + { + dlgInputAddr->SaveJm(); + dlgInputAddr->show(); + ui->labMac->setText(QString("Mac:%1").arg(dlgInputAddr->jd.addr)); + sysPara->status.WorkTimeOut=0; + QMessageBox::warning(this,tr( "提示"),tr("系统维护设置成功!") ,QMessageBox::Ok); + } + else if(authString == "vbip") + { + dlgInputAddr->setNodeIpAndPrivateIp(false); + dlgInputAddr->show(); + } + else { + auth = AUTH_NONE; + QMessageBox::critical(this,tr("错误"),tr("密码:") + authString + tr(" 不存在")); + } + emit authChanged(auth); + if(auth == AUTH_NONE ) {sysPara->status.adjHightVolInitEN=0;sysPara->status.updateSoftEN=0;} + ui->pushButtonAuth->setText((auth == AUTH_NONE)?tr("输入密码"):tr("取消授权")); +} + +void PrintSetting::SpecailSettingsDisplay() +{ + if(flagOfSpecailSettng) + { + const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11); + if (indexTab == -1) + ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); + ui->comboBoxIndustry->setVisible(1); + ui->checkBoxNewAmplifyPlate->setVisible(1); +// ui->labelRecommendedPrintSpeed->setVisible(1); + ui->comboBoxRecommendedPrintSpeed->setVisible(1); + ui->checkBoxPrintOnce->setVisible(1); + ui->checkBoxReciclar->setVisible(1); + ui->lockoulsepushButton->setVisible(1); + ui->pushButtonRecommendedSetting->setVisible(1); + ui->checkBox_FastMode->setVisible(1); + } + else + { + if(flagOfEngineeringMode) + ui->tabWidget_2->removeTab(5); +// else +// ui->tabWidget_2->removeTab(4); + ui->comboBoxIndustry->hide(); + ui->checkBoxNewAmplifyPlate->hide(); +// ui->labelRecommendedPrintSpeed->hide(); + ui->comboBoxRecommendedPrintSpeed->hide(); + ui->checkBoxPrintOnce->hide(); + ui->checkBoxReciclar->hide(); + ui->lockoulsepushButton->hide(); + ui->pushButtonRecommendedSetting->hide(); + ui->checkBox_FastMode->hide(); + } + +} +void PrintSetting::EngineeringModeDisplay() +{ + if(flagOfEngineeringMode) + { +#ifdef COUNTER2_BY_GROUP + ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置")); + ui->tabWidget_2->addTab(sectionalWid, tr("分段计数")); +#endif + + if(flagOfSpecailSettng) { + const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11); + if (indexTab == -1) + ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); + } + + ui->tabWidget->addTab(ui->tab_8,tr("计数器3设置")); + ui->tabWidget->addTab(ui->tab_6,tr("跳米设置")); + ui->checkBoxSpeedOver->setVisible(1); + ui->checkBoxSuspendAfterPhaseFault->setVisible(1); + ui->checkmode0211->setVisible(1); + ui->checkVol1of8En->setVisible(1); + ui->checkBoxStopCounterMeterAfterFault->setVisible(1); + ui->checkBoxEleEyeRetrigDis->setVisible(1); + ui->radioButtonFUllColFIxVal->setVisible(1); + ui->checkBoxCharWidthSet->setVisible(1); + ui->radioCNT3->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->label_7->setVisible(1); + ui->label_6->setVisible(1); + ui->label_34->setVisible(1); + ui->label_35->setVisible(1); + ui->spinBoxdecimalpointnum->setVisible(1); + ui->spinBoxHiddenValue->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->spinBoxConditionValue->setVisible(1); + ui->spinBoxMeterEnable->setVisible(1); + } + else + { + if(flagOfSpecailSettng) + { + ui->tabWidget_2->removeTab(5); + const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11); + if (indexTab == -1) + ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放")); + } else { +// ui->tabWidget_2->removeTab(4); + } + + ui->tabWidget->removeTab(3); + ui->tabWidget->removeTab(2); + ui->checkBoxSpeedOver->hide(); + ui->checkBoxSuspendAfterPhaseFault->hide(); + ui->checkmode0211->hide(); + ui->checkVol1of8En->hide(); + ui->checkBoxStopCounterMeterAfterFault->hide(); + ui->checkBoxEleEyeRetrigDis->hide(); + ui->radioButtonFUllColFIxVal->hide(); + ui->checkBoxCharWidthSet->hide(); + ui->radioCNT3->hide(); + ui->radioButtonSpecialCondition->hide(); + ui->label_7->hide(); + ui->label_6->hide(); + ui->label_34->hide(); + ui->label_35->hide(); + ui->spinBoxdecimalpointnum->hide(); + ui->spinBoxHiddenValue->hide(); + ui->radioButtonSpecialCondition->hide(); + ui->spinBoxConditionValue->hide(); + ui->spinBoxMeterEnable->hide(); + } + ModuleDecimalDisplay(); + ModuleHideDisplay(); +} + +void PrintSetting::ModuleDecimalDisplay() +{ + if(flagOfModuleDecimal){ + ui->label_35->setVisible(1); + ui->spinBoxdecimalpointnum->setVisible(1); + flagOfModuleHide = 0; + ui->radioButtonSpecialCondition->setChecked(0); + }else{ + ui->spinBoxdecimalpointnum->setValue(0); + ui->spinBoxdecimalpointnum->setEnabled(0); + ui->radioButtonSpecialCondition->setEnabled(1); + ui->label_35->hide(); + ui->spinBoxdecimalpointnum->hide(); + } +} + +void PrintSetting::ModuleHideDisplay() +{ + if(flagOfModuleHide && sysPara){ + ui->label_7->setVisible(1); + ui->label_6->setVisible(1); + ui->label_34->setVisible(1); + ui->spinBoxHiddenValue->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->spinBoxConditionValue->setVisible(1); + ui->spinBoxMeterEnable->setVisible(1); + flagOfModuleDecimal = 0; + ui->spinBoxdecimalpointnum->setValue(0); + sysPara->para.rrr_nc = 0; + sysPara->para.printNumPoint = 0; + }else{ + ui->radioButtonSpecialCondition->setChecked(0); + ui->spinBoxdecimalpointnum->setEnabled(1); + ui->label_7->hide(); + ui->label_6->hide(); + ui->label_34->hide(); + ui->spinBoxHiddenValue->hide(); + ui->radioButtonSpecialCondition->hide(); + ui->spinBoxConditionValue->hide(); + ui->spinBoxMeterEnable->hide(); + } +} + +void PrintSetting::on_checkBoxSuspendAfterPhaseFault_clicked() +{ + ui->checkBoxStopCounterMeterAfterFault->setEnabled(ui->checkBoxSuspendAfterPhaseFault->isChecked()); +} + +void PrintSetting::on_checkBoxPowerOffAfterPhaseFault_clicked() +{ + ui->checkBoxStopCounterMeterAfterFault->setEnabled(!ui->checkBoxPowerOffAfterPhaseFault->isChecked() && ui->checkBoxSuspendAfterPhaseFault->isChecked()); + ui->checkBoxSuspendAfterPhaseFault->setEnabled(!ui->checkBoxPowerOffAfterPhaseFault->isChecked()); + +} +#include +#include + +#include + +void PrintSetting::on_pushButtonAuth_pressed() +{ + if(auth == AUTH_NONE){ + dialogAuthorization->clearAuth(); + dialogAuthorization->show(); + } + else { + emit authChanged(AUTH_NONE); + auth = AUTH_NONE; + sysPara->status.adjHightVolInitEN=0;sysPara->status.updateSoftEN=0; + ui->pushButtonAuth->setText(tr("输入密码")); + //edit@11-28 + flagOfEngineeringMode = false; + flagOfSpecailSettng = false; + //qDebug()<updateSysParaToUI(); + specailMachineSetting(0); + engineerMode(false); + } +} + +void PrintSetting::updateAuthorization(int auth){ + //ui->dacScaledSpinBox->setEnabled(auth & AUTH_SUPER_USER1); + ui->checkBoxScanInverse->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelVoltageAdjustPos->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxPointVoltageAdjustPos->setEnabled(auth & AUTH_SUPER_USER1); + ui->labelReducedPixelNum->setEnabled(auth & AUTH_SUPER_USER1); + ui->spinBoxReducedPixelNum->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelVoltageAdjustValue->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxVoltageAdjustValue->setEnabled(auth & AUTH_SUPER_USER1); + ui->labelRowSequenceMode->setEnabled(auth & AUTH_SUPER_USER1); + ui->spinBoxRowSequenceMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelReducedPixMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->comboBoxReducedPixMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelLineEndAdjustPointCnt->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxLineEndAdjustPointCnt->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelLineEndAdjustPointMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->comboBoxLineEndAdjustPointMode->setEnabled(auth & AUTH_SUPER_USER1); +// ui->spinBoxLastLineEndPointFixedValue->setEnabled(auth & AUTH_SUPER_USER1); +// ui->labelLastLineEndPointFixedValue->setEnabled(auth & AUTH_SUPER_USER1); + ui->pushButtonClearRunTime->setEnabled(auth & AUTH_SUPER_USER1); // 透明按钮 + //ui->volDacEdit->updateAuthorization (auth); +} + +void PrintSetting::on_spinBoxLastLineEndPointFixedValue_valueChanged(int arg1) +{ + if(sysPara){ + sysPara->devOp->setLastLineEndPointFixedValue(arg1); + } +} + +void PrintSetting::on_pushButtonRecommendedSetting_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认使用推荐设置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + /*----------------------------设置参数,然后更新到界面-----------------------------*/ + int industry = ui->comboBoxIndustry->currentIndex(); + int speed = ui->comboBoxRecommendedPrintSpeed->currentIndex(); + ui->comboBoxPrintMode->setCurrentIndex((industry?1:0) + speed + 1); + ui->spinBoxVoltageAdjustValue->setValue(0); + ui->comboBoxReducedPixMode->setCurrentIndex(0); + ui->spinBoxReducedPixelNum->setValue((speed == 0)?55:((speed == 1)?30:0)); + ui->spinBoxRowSequenceMode->setValue(1); + ui->checkBoxScanInverse->setChecked(false); + ui->spinBoxLineEndAdjustPointCnt->setValue(2); + ui->comboBoxLineEndAdjustPointMode->setCurrentIndex((industry?3:1) + speed + 1); + ui->spinBoxLastLineEndPointFixedValue->setValue((speed < 2)?-20:0); + on_pushButtonApply_pressed(); + } +} + +void PrintSetting::showVolDacEdit(int auth){ +/* + if((auth&AUTH_SUPER_USER2)) + { + if(ui->tabWidget_2->indexOf (ui->tab_8)==-1) + ui->tabWidget_2->addTab (ui->tab_8,tr("点距电压微调")); + } + else { + if(ui->tabWidget_2->indexOf (ui->tab_8)!=-1) + ui->tabWidget_2->removeTab (ui->tabWidget_2->indexOf (ui->tab_8));//ui->tabWidget_2->indexOf (ui->tab_8) + } + */ +} + + +void PrintSetting::on_pushOnlyCNT1Clear_pressed(){ + sysPara->devOp->clearProductCnt(1<<2); // 计数器1单独清零 + //sysPara->para.totalProductCnt += sysPara->status.productCnt; + //qDebug()<<"only1"; +} + +void PrintSetting::on_pushOnlyCNT2Clear_pressed(){ + sysPara->devOp->clearProductCnt(1<<3);// 计数器2单独清零 + //qDebug()<<"only2"; +} +void PrintSetting::on_pushButtonRanddomBackUP_pressed(){ + QMessageBox::StandardButton ret; + + QFile f1("/home/plg/Xrand2.txt"); + QString str; + //f1.open(QFile::ReadWrite); + int len = f1.size(); + + if(f1.size()<100 ) + { + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文件为空,不需要导出"), + QMessageBox::Ok ); + //f1.close(); + return; + } + //f1.close(); + + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文本将展出到U盘,请插入U盘"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + + LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); + sysPara->devOp->RandTxtBakup(1); + LogInfo::setRunStatusText("随机码文件导出完成."); + + } + +} + +void PrintSetting::on_spinBoxExpiryDate_valueChanged(int arg1) +{ + QDate curDate= QDate::currentDate().addDays(arg1); + //ui->CBDateFormat1->clear(); + QString DateTime;QString format; + +// str.sprintf("%04d-%02d-%02d",curDate.year(),curDate.month(),curDate.day()); +// ui->CBDateFormat1->setItemText(0,str);//ui->CBDateFormat1->addItem(str); +// str.sprintf("%04d/%02d/%02d",curDate.year(),curDate.month(),curDate.day()); +// ui->CBDateFormat1->setItemText(1,str);//ui->CBDateFormat1->addItem(str); +// str.sprintf("%04d%02d%02d",curDate.year(),curDate.month(),curDate.day()); +// ui->CBDateFormat1->setItemText(2,str);//ui->CBDateFormat1->addItem(str); + ui->CBDateFormat1->count(); + for(int i=0;i < ui->CBDateFormat1->count();++i) { + format = ui->CBDateFormat1->itemText(i); + DateTime = QDateTime::currentDateTime().toString(format); + ui->CBDateFormat1->setItemText(i,DateTime); + //qDebug()<CBDateFormat1->addItem(str.toLocal8Bit()); + + //ui->CBDateFormat1->setCurrentIndex(sysPara->para.ExpirySplitMode);//p_var->splitMode + //sysPara->para.ExpiryDay = arg1; +} + +void PrintSetting::on_CBDateFormat1_currentIndexChanged(int index) +{ + sysPara->para.ExpirySplitMode = index; +} + +#if(1) +void PrintSetting::updateCnt1GroupsTblWgt() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QPalette Palette; + QLineEdit *pLineEdit; + int rowCnt=ui->tableWidget->rowCount(); + //int rowCnt=sysPara->para.Cnt1ByGroup.cnt1GroupCnt; + + //qDebug()<<"updateCnt1GroupsTblWgt count"<status.cnt1GroupRunningIndex; + for(int i=0;itableWidget->cellWidget(i,j); + Palette = pLineEdit->palette(); + if(sysPara->para.cnt1ByGroupEnalbe && (i == sysPara->status.cnt1GroupRunningIndex)) + { + Palette.setColor(QPalette::Normal,QPalette::Base, Qt::green); + } + else + { + Palette.setColor(QPalette::Normal,QPalette::Base, Qt::lightGray); + } + pLineEdit->setPalette(Palette); + } + } +#endif +} + +void PrintSetting::onUpdateCnt1GroupDisp(bool bChangeToNext) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + if(bChangeToNext)//循环数走完 + { + //改变当前执行的分段的背景颜色 + updateCnt1GroupsTblWgt(); + } +#endif +} + +void PrintSetting::LoadCnt1GroupSettingsToUI() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QLineEdit *pLineEdit; + ui->checkBoxGroupCnt1->setChecked(sysPara->para.cnt1ByGroupEnalbe); + on_checkBoxGroupCnt1_clicked(sysPara->para.cnt1ByGroupEnalbe); + //qDebug()<<"LoadCnt1GroupSettingsToUI:cnt1GroupCnt "<para.Cnt1ByGroup.cnt1GroupCnt; + ui->tableWidget->setRowCount(sysPara->para.Cnt1ByGroup.cnt1GroupCnt); + QRegExp regx("[0-9]+$"); + QValidator *validator = new QRegExpValidator(regx, this); + QRegExp regxLoop("[1-9][0-9]+$"); + QValidator *validatorLoop = new QRegExpValidator(regxLoop, this); + for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) + { + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(i,0,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(i,1,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes)); + pLineEdit->setValidator(validatorLoop); + ui->tableWidget->setCellWidget(i,2,pLineEdit); + } + updateCnt1GroupsTblWgt(); +#endif +} +void PrintSetting::ApplyCnt1GroupSetting() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QLineEdit *pLineEdit; + sysPara->para.cnt1ByGroupEnalbe = ui->checkBoxGroupCnt1->isChecked(); + sysPara->para.Cnt1ByGroup.cnt1GroupCnt=ui->tableWidget->rowCount(); + if(sysPara->para.cnt1ByGroupEnalbe && sysPara->para.Cnt1ByGroup.cnt1GroupCnt==0) + { + sysPara->para.cnt1ByGroupEnalbe=false; + ui->checkBoxGroupCnt1->setChecked(false); + on_checkBoxGroupCnt1_clicked(false); + } + //qDebug()<<"ApplyCnt1GroupSetting:cnt1GroupCnt "<para.Cnt1ByGroup.cnt1GroupCnt; + + for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) + { + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,0); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,1); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(i,2); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes = pLineEdit->text().toInt(); + } + sysPara->devOp->writeCnt1GroupSetting(1); + sysPara->saveParaToFile(); + //改变当前执行的分段的背景颜色 + updateCnt1GroupsTblWgt(); +#endif +} + +void PrintSetting::rowWidgetCreate(int rowIndex) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QLineEdit* pLineEdit; + QRegExp regx("[0-9]+$"); + QValidator *validator = new QRegExpValidator(regx, this); + QRegExp regxLoop("[1-9][0-9]+$"); + QValidator *validatorLoop = new QRegExpValidator(regxLoop, this); + for(int i=0;i<3;i++) + { + if(i==3) + { + //ui->tableWidget->item(rowIndex,i)->setCheckState(Qt::Unchecked); + } + else { + if(i<2) + { + pLineEdit = new QLineEdit(tr("0")); + pLineEdit->setValidator(validator); + } + else if(i==2) + { + pLineEdit = new QLineEdit(tr("1")); + pLineEdit->setValidator(validatorLoop); + } + ui->tableWidget->setCellWidget(rowIndex,i,pLineEdit); + } + } +#endif +} + +void PrintSetting::on_checkBoxGroupCnt1_clicked(bool checked) +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + if(checked) + { + ui->spinBoxCnt1StartValue->setEnabled(false); + ui->spinBoxCnt1EndValue->setEnabled(false); +// ui->checkBoxResetCnt1CurrValue->setEnabled(false); + } + else + { + ui->spinBoxCnt1StartValue->setEnabled(true); + ui->spinBoxCnt1EndValue->setEnabled(true); + ui->checkBoxResetCnt1CurrValue->setEnabled(true); + } +#endif +} + +void PrintSetting::on_Cnt3AddRowBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + int rowCnt=ui->tableWidget->rowCount(); + if(rowCnt>=MAX_CNT1_GROUPS_NUM) + { + return; + } + //sysPara->para.cnt1GroupCnt++; + ui->tableWidget->setRowCount(rowCnt+1); + rowWidgetCreate(rowCnt); +#endif +} + +void PrintSetting::on_Cnt3InsertRowBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + int rowIndex=ui->tableWidget->currentRow(); + int rowCnt=ui->tableWidget->rowCount(); + if(rowIndex<0||rowCnt>=MAX_CNT1_GROUPS_NUM) + { + //qDebug()<<"max counter1 groups num is "<tableWidget->insertRow(rowIndex+1); + rowWidgetCreate(rowIndex+1); +#endif +} + +void PrintSetting::on_Cnt3RemoveRowBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + int rowIndex=ui->tableWidget->currentRow(); + if(rowIndex<0) + { + return; + } + QMessageBox::StandardButton ret; + if(rowIndex==sysPara->status.cnt1GroupRunningIndex) + { + QMessageBox::warning(this, tr("错误"), + tr("正在打印第%1组设置,不可删除").arg(rowIndex+1), + QMessageBox::Ok); + return; + } + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除第%1组设置?").arg(rowIndex+1), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + ui->tableWidget->removeRow(rowIndex); + } +#endif +} + +void PrintSetting::on_cnt3RemoveAllRowsBtn_pressed() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除全部设置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + int rowCnt=ui->tableWidget->rowCount(); + for(int i=rowCnt-1;i>=0;i--) + { + ui->tableWidget->removeRow(i); + } + } +#endif +} +#endif +void PrintSetting::on_comboBoxAlterPrintEnable_currentIndexChanged(int index) +{ + if(index==0) + { + ui->spinBoxXStartValue->setEnabled(false); + ui->spinBoxXRepeatTimeValue->setEnabled(false); + ui->spinBoxXGapValue->setEnabled(false); + } + else + { + ui->spinBoxXStartValue->setEnabled(true); + ui->spinBoxXRepeatTimeValue->setEnabled(true); + ui->spinBoxXGapValue->setEnabled(true); + } + if(index==3) + { + ui->spinBoxDistanceTail->setEnabled(true); + } + else + { + ui->spinBoxDistanceTail->setEnabled(false); + } +} + +void PrintSetting::on_checkVol1of8En_clicked(bool checked) +{ + if(checked && ui->checkmode0211->checkState()) + { + + ui->checkmode0211->setChecked(false); + } +} + +void PrintSetting::on_checkmode0211_clicked(bool checked) +{ + if(checked && ui->checkVol1of8En->checkState()) + { + ui->checkVol1of8En->setChecked(false); + } + if(checked && ui->radioButtonFUllColFIxVal->checkState()) + { + ui->radioButtonFUllColFIxVal->setChecked(false); + } + //sysPara->para.Vol1of8En = !checked;//打印优化 + if(!checked && ui->radioButtonFUllColFIxVal->checkState() == false) + { + ui->spinBoxStartVoltage->setEnabled(true); + ui->spinBoxEndVoltage->setEnabled(true); + } + else + { + ui->spinBoxStartVoltage->setEnabled(false); + ui->spinBoxEndVoltage->setEnabled(false); + } +} + + + +void PrintSetting::on_volButton_clicked() +{ + if(!modify_vol) + { + dialogModPasswd->clearAuth(); + dialogModPasswd->show(); + }else + { + modify_vol = false; + ui->volButton->setText("修改授权"); + ui->spinBoxHighVoltageValue->setEnabled(false); + ui->spinBoxStartVoltage->setEnabled(false); + } +} + + +void PrintSetting::on_spinBoxColDelay_valueChanged(int arg1) +{ + if(!sysPara->para.charWidthSetEnable) + { + if(arg1 == 0) + { + + QMessageBox::warning(this, tr("警告"), + tr("字体宽度不能为0"), + QMessageBox::Ok | QMessageBox::Cancel); + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + } + } + else + { + sysPara->para.printColDelay = arg1; + } +} + +void PrintSetting::on_radioButtonFUllColFIxVal_clicked(bool checked) +{ + if(!checked && ui->checkmode0211->checkState() == false) + { + ui->spinBoxStartVoltage->setEnabled(true); + ui->spinBoxEndVoltage->setEnabled(true); + } + else + { + ui->spinBoxStartVoltage->setEnabled(false); + ui->spinBoxEndVoltage->setEnabled(false); + } + if(checked && ui->checkmode0211->checkState()) + { + + ui->checkmode0211->setChecked(false); + } +} + + + +void PrintSetting::on_metreCountButton_clicked() +{ +// sysPara->status.calandar_and_dat.cnt1CurrValue = 123; + dialogShowCounter->show(); + dialogShowCounter->init_arg(); + refresh_timer->start(500); +// qDebug()<<"asdasd"; +// sysPara->status.calandar_and_dat.cnt2CurrValue; +} +void PrintSetting::ondialogShowCounterAccepted(void) +{ + refresh_timer->stop(); +// qDebug()<<"refresh_timer stop"; +} + +void PrintSetting::updateUIForSpecialCondition() +{ + if(sysPara->para.EditMode == TXTFILE) + { + ui->radioButtonSpecialCondition->setEnabled(true); + } + +} + +void PrintSetting::on_radioButtonSpecialCondition_clicked(bool checked) +{ + if(sysPara->para.EditMode==TXTFILE) + { + ui->spinBoxHiddenValue->setEnabled(checked); + ui->spinBoxMeterEnable->setEnabled(checked); + ui->spinBoxConditionValue->setEnabled(checked); + ui->spinBoxdecimalpointnum->setValue(0); + ui->spinBoxdecimalpointnum->setEnabled(!checked); + } +} + +void PrintSetting::refreshtimerHandler(void) +{ + int bcdTodec = 0; + int resetmetre = 0; +// int cn1StartValue = ui->spinBoxCnt1StartValue->value(); +// int cn1EndValue = ui->spinBoxCnt1EndValue->value(); + + resetmetre = dialogShowCounter->getResetMetreState(area_end); + + if(last_area_end != area_end){ + //qDebug() << "set spinBoxCnt1StartValue"; + last_area_end = area_end; + ui->spinBoxCnt1StartValue->setValue(0); + ui->spinBoxCnt1EndValue->setValue(area_end); + sysPara->para.cnt1EndValue = area_end; + } + + + if(true == resetmetre){ + if(sysPara){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否立即重新计米?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + } + + } + resetmetre = false; + } + + //bcdTodec = sysPara->status.calandar_and_dat.cnt1CurrValue - (sysPara->status.calandar_and_dat.cnt1CurrValue>>4)*6; + //dialogShowCounter->refreshdate(sysPara->status.productCnt,cn1StartValue,cn1EndValue,bcdTodec); + int currValue1 = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + int currCnt1GroupIndex = sysPara->status.cnt1GroupRunningIndex; + int currCnt1GroupLoop = sysPara->status.cnt1GroupCurrentLoop; + int cnt1StartValue = sysPara->para.Cnt1ByGroup.cnt1GroupSettings[currCnt1GroupIndex].StartValue; + int cnt1EndValue = sysPara->para.Cnt1ByGroup.cnt1GroupSettings[currCnt1GroupIndex].EndValue; + + dialogShowCounter->refreshdate(currValue1, cnt1StartValue, cnt1EndValue, currCnt1GroupIndex, currCnt1GroupLoop); +} + +void PrintSetting::on_lockoulsepushButton_clicked() +{ + if(lockpulse){ + ui->lockoulsepushButton->setText(tr("锁定脉冲计数")); + lockpulse = false; + }else{ + ui->lockoulsepushButton->setText(tr("解锁脉冲计数")); + lockpulse = true; + } + +} + +void PrintSetting::on_spinBoxCnt1EndValue_valueChanged(int arg1) +{ + if(lockpulse){ + sysPara->para.productCntPerOutputPulse = arg1; + // qDebug()<< "emit change_OutputPulse()"; + emit change_OutputPulse(); + } + +} + +#if(1) +void PrintSetting::moveRow( int nFrom, int nTo) +{ + int StartValue,EndValue,LoopTimes; + + int To_StartValue,To_EndValue,To_LoopTimes; + QLineEdit *pLineEdit; + + + if( nFrom == nTo ) { + return; + } + if( nFrom < 0 || nTo < 0 ) { + return; + } + int nRowCount = ui->tableWidget->rowCount(); + if( nFrom >= nRowCount || nTo >= nRowCount ) return; + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,0); + StartValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,1); + EndValue = pLineEdit->text().toInt(); + + pLineEdit = (QLineEdit *)ui->tableWidget->cellWidget(nFrom,2); + LoopTimes = pLineEdit->text().toInt(); + +// qDebug()<<"StartValue="<setText(QString::number(StartValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nTo,0,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(EndValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nTo,1,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(LoopTimes)); + pLineEdit->setValidator(validatorLoop); + ui->tableWidget->setCellWidget(nTo,2,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(To_StartValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nFrom,0,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(To_EndValue)); + pLineEdit->setValidator(validator); + ui->tableWidget->setCellWidget(nFrom,1,pLineEdit); + + pLineEdit = new QLineEdit; + pLineEdit->setText(QString::number(To_LoopTimes)); + pLineEdit->setValidator(validatorLoop); + ui->tableWidget->setCellWidget(nFrom,2,pLineEdit); + + ui->tableWidget->selectRow(nTo); +// ui->tableWidget->clearFocus(); +// ui->tabWidget->focusPolicy(); +} +//调用 +void PrintSetting::on_moveUp_clicked() +{ + moveRow(ui->tableWidget->currentRow(),ui->tableWidget->currentRow() - 1); +} + +void PrintSetting::on_moveDown_clicked() +{ + moveRow(ui->tableWidget->currentRow(),ui->tableWidget->currentRow() + 1); +} + +void PrintSetting::on_pushButtonUpRow_clicked() +{ + on_moveUp_clicked(); +} + +void PrintSetting::on_pushButtonDownRow_clicked() +{ + on_moveDown_clicked(); +} +#endif + +void PrintSetting::on_pushOnlyCNT3Clear_pressed() +{ + sysPara->devOp->clearProductCnt(1<<4);// 计数器3单独清零 +} + +void PrintSetting::setCNT1BackColor(bool flag) +{ + if(flag) + { + ui->radioCNT1->setCheckable(true); + ui->radioCNT1->setChecked(true); + } + else + { + ui->radioCNT1->setChecked(false); + ui->radioCNT1->setCheckable(false); + } +// if(flag) +// { +// //ui->tabWidget->widget(0)->setStyleSheet("QTabBar::tab{background-color:rgb(255, 0, 0);}"); //设置选中背景色 +// ui->radioCNT1->setChecked(flag); +// } +// else +// { +// //ui->tabWidget->widget(0)->setStyleSheet("QTabBar::tab{background-color:rgb(239, 239, 239);}"); //设置选中背景色 +// ui->radioCNT1->setChecked(flag); +// } +} + +void PrintSetting::setCNT2BackColor(bool flag) +{ + if(flag) + { + ui->radioCNT2->setCheckable(true); + ui->radioCNT2->setChecked(true); + } + else + { + ui->radioCNT2->setChecked(false); + ui->radioCNT2->setCheckable(false); + } +} + +void PrintSetting::setCNT3BackColor(bool flag) +{ + if(flag) + { + ui->radioCNT3->setCheckable(true); + ui->radioCNT3->setChecked(true); + } + else + { + ui->radioCNT3->setChecked(false); + ui->radioCNT3->setCheckable(false); + } +} + +void PrintSetting::getFpgaVersionSetDisable(){ + qDebug()<<"getFpgaVersionSetDisable"; + sysPara->devOp->readFpgaVersionNum(); + int FPGAVersion =sysPara->status.build_dat.builTime; + unsigned int type = sysPara->status.fpgaVersionNum >> 12; + + LogInfo::setRunStatusText(tr("builTime:%1").arg(FPGAVersion)); + LogInfo::setRunStatusText(tr("fpgaVersionNum: %1").arg(sysPara->status.fpgaVersionNum)); + LogInfo::setRunStatusText(tr("FPGAType: %1").arg(type)); + + if(type == 1 || type == 2) + FPGAVersion = 67; + else if(type == 6 || type == 8) + FPGAVersion = 72; + + if (FPGAVersion == 67){ + sysPara->status.flagOfNo67FPGA = 1; + ui->checkBox_FastMode->setEnabled(true); + if(!sysPara->para.flagOfFastMode) + uiSettingForNo67(); + else + uiSettingForNo66(); + } + else{ + uiSettingForNo72(); + } + + + + /****************VX4使用,VX5不需要 + else if(sysPara->status.FPGAVersionType == 1) + uiSettingForNo66(); + else if(sysPara->status.FPGAVersionType == 2) + uiSettingForNo67(); + else if(FPGAVersion == 72) + uiSettingForNo72(); + else if(FPGAVersion == 73) + uiSettingForNo73();*/ + + qDebug()<<"checkmode0211:"<checkmode0211->isChecked(); + qDebug()<<"charWidthSetEnable:"<checkBoxCharWidthSet->isChecked(); + qDebug()<<"Vol1of8En:"<checkVol1of8En->isChecked(); + qDebug()<<"FullColFixVal:"<radioButtonFUllColFIxVal->isChecked(); + + sysPara->para.mode0211 = ui->checkmode0211->isChecked();//添加0211模式 + sysPara->para.charWidthSetEnable = ui->checkBoxCharWidthSet->isChecked(); + sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked();//打印优化 + sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked();//2020/3/2 + +} + +void PrintSetting::resizeEvent(QResizeEvent *event) +{ + #ifdef COUNTER2_BY_GROUP + if(event->size().width() > 0) + { + // 将 widget_2 移动到其父级中间 + ui->widget_2->move(ui->widget_2->parentWidget()->width() / 2 - ui->widget_2->width() / 2, ui->widget_2->y()); + } + #endif + + QWidget::resizeEvent(event); +} + + void PrintSetting::uiSettingForNo66(){ + ui->checkBox_FastMode->setChecked(true); + if(sysPara->para.currPrintMode>1) + ui->comboBoxPrintMode->setCurrentIndex(0); + ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); + ui->checkBoxCharWidthSet->setChecked(true); + ui->checkVol1of8En->setChecked(true); + ui->radioButtonFUllColFIxVal->setChecked(true); + ui->checkmode0211->setChecked(false); + ui->comboBoxPrintMode->setItemText(0,tr("超高速")); + ui->comboBoxPrintMode->setItemText(1,tr("高速")); + if(ui->comboBoxPrintMode->count()>2) + ui->comboBoxPrintMode->removeItem(2); + } + + void PrintSetting::uiSettingForNo67(){ + ui->checkBox_FastMode->setEnabled(true); + if(!sysPara->para.flagOfFastMode){ + ui->checkBox_FastMode->setChecked(false); + if(sysPara->para.currPrintMode>2) + ui->comboBoxPrintMode->setCurrentIndex(0); + ui->comboBoxPrintMode->setCurrentIndex(sysPara->para.currPrintMode); + ui->checkBoxCharWidthSet->setChecked(true); + ui->checkVol1of8En->setChecked(true); + ui->radioButtonFUllColFIxVal->setChecked(true); + ui->checkmode0211->setChecked(false); + if(ui->comboBoxPrintMode->count()<=2){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + } + void PrintSetting::uiSettingForNo72(){ + sysPara->status.flagOfNo67FPGA = 0; + sysPara->para.flagOfFastMode=false; + ui->checkBox_FastMode->setChecked(false); + ui->checkBox_FastMode->setEnabled(false); + ui->comboBoxPrintMode->setCurrentIndex(1); + ui->comboBoxPrintMode->setEnabled(true); + ui->checkBoxCharWidthSet->setChecked(false); + ui->checkVol1of8En->setChecked(false); + ui->radioButtonFUllColFIxVal->setChecked(false); + ui->checkmode0211->setChecked(true); + if(ui->comboBoxPrintMode->count()<=2){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + + void PrintSetting::uiSettingForNo73() + { + sysPara->status.flagOfNo67FPGA = 0; + sysPara->para.flagOfFastMode=false; + ui->checkBox_FastMode->setChecked(false); + ui->checkBox_FastMode->setEnabled(false); + ui->checkBoxCharWidthSet->setChecked(false); + ui->checkVol1of8En->setChecked(false); + ui->radioButtonFUllColFIxVal->setChecked(false); + ui->checkmode0211->setChecked(false); + if(ui->comboBoxPrintMode->count()<=2){ + ui->comboBoxPrintMode->setItemText(0,tr("快速")); + ui->comboBoxPrintMode->setItemText(1,tr("标准")); + ui->comboBoxPrintMode->addItem(tr("慢速")); + } + } + +//67 触发-同步器触发-字符宽度 + void PrintSetting::setDisableFontWidth(bool flag){ + if(sysPara->para.charWidthSetEnable && flag){ + ui->spinBoxColDelay->setValue(0); + ui->spinBoxColDelay->setEnabled(true); + }else + { + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + ui->spinBoxColDelay->setEnabled(true); + } + } + +//72 打印设置->常用设置->字体宽度 +void PrintSetting::autoUpdateFontWidth(const unsigned int totalCol) +{ + return; + if(totalCol == 0) return; + if(!sysPara->status.selfCheckDone && !TEST_MODE) return;//自检完成之前不检查 + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME) return;//延迟触发模式不检查 + if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && !sysPara->para.eleEyeTriggerSynPrintEn)) return;//电眼触发非同步打印模式不检查 + + + +#define MIN_CHAR_WIDTH 0.1 //0.1mm/列 +#define MAX_CHAR_WIDTH 4.0 //4.0mm/列 + float printInterval; + int currPrintCol; + float Cur_Col_Width; + float MAX_COL_DELAY; + int MIN_COL_DELAY; + float Cur_Max_ColDelay; + int Cur_Col_Delay; + if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER)) + { + printInterval = (int )sysPara->para.synTriggerPrintLenMm; + } + else if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + { + printInterval = sysPara->para.elecEyeTriggerInterval; + } + currPrintCol = totalCol + BLANK_COL_NUM; + qDebug()<<"printInterval: "<para.printColDelay; +#define MIN_COL_WIDTH 0.11 +#define MAX_COL_WIDTH 0.81 + Cur_Col_Width = printInterval/currPrintCol; + Cur_Col_Delay = sysPara->para.printColDelay; + if(sysPara->status.build_dat.builTime == 67){ + float Col_Width = (MIN_CHAR_WIDTH +Cur_Col_Delay*(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100)*currPrintCol; + MIN_COL_DELAY = 1; + MAX_COL_DELAY = (MAX_COL_WIDTH - MIN_CHAR_WIDTH)/0.039;//(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100=0.039 + Cur_Max_ColDelay = (Cur_Col_Width - MIN_CHAR_WIDTH)/0.039; + } + else{ + MIN_COL_DELAY = (int)(sysPara->para.synPulseNumPerMm*MIN_COL_WIDTH); + MAX_COL_DELAY = sysPara->para.synPulseNumPerMm*MAX_COL_WIDTH; + Cur_Max_ColDelay = sysPara->para.synPulseNumPerMm*Cur_Col_Width; + } + + if(Cur_Max_ColDelay < 1){ + QMessageBox::information(this,tr("提示"),tr("喷印间隔太小,无法正常打印!!!")); + return; + } + if(Cur_Col_Delay == 0){ + QMessageBox::information(this,tr("提示"),tr("字体宽度为0!!!")); + return; + } + + if(Cur_Max_ColDelay > MAX_COL_DELAY) + Cur_Max_ColDelay = MAX_COL_DELAY; + + if(Cur_Col_Delay > (int)Cur_Max_ColDelay){ + int oldColDelay = sysPara->para.printColDelay; + sysPara->para.printColDelay = (int)Cur_Max_ColDelay; + ui->spinBoxColDelay->setValue(sysPara->para.printColDelay); + if(sysPara)sysPara->saveParaToFile (); + QMessageBox::information(this,tr("提示"),tr("原字体宽度(%1mm)已不适用于新设置的喷印间隔,已自动调整到最大允许值(%2mm)!") + .arg(oldColDelay).arg(Cur_Max_ColDelay)); + } + if(sysPara->para.printColDelay < MIN_COL_DELAY){ + QMessageBox::information(this,tr("提示"),tr("字体宽度太小,打印字体将会被严重压缩!\n建议最小字体宽度为:%1\n建议最小喷印间隔为:%2") + .arg(MIN_COL_DELAY).arg(currPrintCol*MIN_COL_WIDTH)); + } +} + +void PrintSetting::on_checkBox_FastMode_clicked() +{ + bool flag = ui->checkBox_FastMode->isChecked(); + if(flag){ + ui->spinBoxReducedPixelNum->setValue(60); + }else{ + ui->spinBoxReducedPixelNum->setValue(0); + } +} +//edit@11-30 小数点和隐藏值模块都显示,仅做展示。 +void PrintSetting::ModuleDecimalHideDisplay(const bool bEnabled) +{ + //工程模式下,隐藏值界面控件-全部显示 + ui->label_7->setVisible(1); + ui->label_6->setVisible(1); + ui->label_34->setVisible(1); + ui->radioButtonSpecialCondition->setVisible(1); + ui->spinBoxHiddenValue->setVisible(1); + ui->spinBoxMeterEnable->setVisible(1); + ui->spinBoxConditionValue->setVisible(1); + ui->spinBoxHiddenValue->setEnabled(bEnabled); + ui->spinBoxMeterEnable->setEnabled(bEnabled); + ui->spinBoxConditionValue->setEnabled(bEnabled); + ui->radioButtonSpecialCondition->setChecked(bEnabled); + + //工程模式下,小数点界面控件--全部显示 + ui->label_35->setVisible(1); + ui->spinBoxdecimalpointnum->setVisible(1); + ui->spinBoxdecimalpointnum->setEnabled(!bEnabled); + +} + +void PrintSetting::specailMachineSetting(bool enable){ + ui->checkBox_ReclaimPumpEnable->setEnabled(enable); + ui->spinBox_gearPumpSpeedAlarm->setEnabled(enable); +} + +void PrintSetting::displayForAdjustVoltage(bool flag){ + ui->checkVol1of8En->setVisible(flag); + ui->radioButtonFUllColFIxVal->setVisible(flag); +} + + void PrintSetting::setForAdjustVoltage(){ + ui->checkVol1of8En->setChecked(true); + ui->radioButtonFUllColFIxVal->setChecked(true); + sysPara->para.Vol1of8En = ui->checkVol1of8En->isChecked(); + sysPara->para.FullColFixVal = ui->radioButtonFUllColFIxVal->isChecked(); + + ui->spinBoxStartVoltage->setValue(30); + ui->spinBoxStartVoltage->setEnabled(false); + ui->spinBoxEndVoltage->setValue(75); + ui->spinBoxEndVoltage->setEnabled(false); + sysPara->para.startVoltage = 30; + sysPara->para.endVoltage = 75; + } + +void PrintSetting::on_spinBox_1_valueChanged(int arg1) +{ + sysPara->devOp->controlInkValvePWMSTM32(arg1); +} +unsigned char dataofMotorCtrl[1]; +void PrintSetting::on_pushButton_2_pressed() +{ + dataofMotorCtrl[0]=0x12; + sysPara->devOp->stm32Wr(0x01,dataofMotorCtrl,1); +} + +void PrintSetting::on_pushButton_3_pressed() +{ + dataofMotorCtrl[0]=0x11; + sysPara->devOp->stm32Wr(0x01,dataofMotorCtrl,1); +} + +void PrintSetting::on_pushButton_4_pressed() +{ + dataofMotorCtrl[0]=0x10; + sysPara->devOp->stm32Wr(0x01,dataofMotorCtrl,1); +} + +void PrintSetting::slt_updateCntShow(bool checked) +{ + ui->spinBoxCnt1StartValue->setEnabled(!checked); + ui->spinBoxCnt1EndValue->setEnabled(!checked); + ui->spinBoxCnt2StartValue->setEnabled(!checked); + ui->spinBoxCnt2EndValue->setEnabled(!checked); + if (!checked) + ui->checkBoxResetCnt1CurrValue->setEnabled(true); + if (checked) { + ui->spinBoxCnt1StepValue->setValue(-1); + ui->spinBoxCnt2StepValue->setValue(-1); + } +} + +void PrintSetting::initSection() +{ + if (sectionalWid == nullptr) { + sectionalWid = new SectionalWid(this); + sectionalWid->bindSysPara(sysPara); + ui->tabWidget_2->addTab(sectionalWid, tr("分段计数")); + connect(SectionalManager::instance(), &SectionalManager::sig_updateCntShow, + this, &PrintSetting::slt_updateCntShow); +// SectionalManager::instance()->emitLoadUI(); + } /*else { + ui->tabWidget_2->addTab(sectionalWid, tr("分段计数")); + }*/ +} + +int tempReclaimTankStatus = 0; +void PrintSetting::showReclaimTankstatusslot(unsigned char data) +{ + + QString str(""); + QString str1 = QString::number(data); + switch (data) { + case 0x06:str="关闭成功"; + break; + case 0x05:str="打开成功"; + break; + case 0x03:str="关闭"; + break; + case 0x02:str="正在关"; + break; + case 0x01:str="正在开"; + break; + case 0x10:str="故障"; + break; + default: + break; + } + tempReclaimTankStatus = data; +} + +void PrintSetting::showMotorIsenVal(int data,int data1) +{ + QString str = QString::number(data); + QString str1 = QString::number(data1); +} + +void PrintSetting::updateMachineMac(QString mac){ + bool ok; + int macValue = mac.toInt(&ok); + if (!ok || macValue < 0 || macValue > 999) { + return; + } + sysPara->status.machineMac = macValue; + +// sysPara->status.machineMac = mac.toInt(); +} diff --git a/SectionalCounting/sectionalwid.cpp b/SectionalCounting/sectionalwid.cpp index 8d018f5..ec55465 100644 --- a/SectionalCounting/sectionalwid.cpp +++ b/SectionalCounting/sectionalwid.cpp @@ -1,593 +1,593 @@ -#include "sectionalwid.h" -#include "ui_sectionalwid.h" - -#include -#include -#include - -SectionalWid::SectionalWid(QWidget *parent) : - QWidget(parent), - ui(new Ui::SectionalWid) -{ - ui->setupUi(this); - initUI(); - - connect(SectionalManager::instance(), &SectionalManager::sig_applySetting, - this, &SectionalWid::slt_applySetting); - connect(SectionalManager::instance(), &SectionalManager::sig_loadSettings2UI, - this, &SectionalWid::slt_loadSettings2UI); - connect(SectionalManager::instance(), &SectionalManager::sig_updateCntGroupDisp, - this, &SectionalWid::slt_updateCntGroupDisp); - connect(SectionalManager::instance(), &SectionalManager::sig_cancelSection, - this, &SectionalWid::slt_cancelSection); -} - -SectionalWid::~SectionalWid() -{ - delete ui; -} - -void SectionalWid::bindSysPara(SysPara* sysPara) -{ - this->sysPara = sysPara; -} - -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ -void SectionalWid::rowWidgetCreate(int rowIndex) -{ - for(int i=0;i<3;i++) - { - QSpinBox *spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setMaximum(INT_MAX); - spinBox->setMinimum(i == 2 ? 1 : 0); - ui->tableWidget->setCellWidget(rowIndex,i,spinBox); - } -} - -void SectionalWid::LoadCnt1GroupSettingsToUI() -{ - ui->checkBoxGroupCnt1->setChecked(sysPara->para.cnt1ByGroupEnalbe); - on_checkBoxGroupCnt1_clicked(sysPara->para.cnt1ByGroupEnalbe); - ui->tableWidget->setRowCount(sysPara->para.Cnt1ByGroup.cnt1GroupCnt); - for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) - { - QSpinBox *spinBox = new QSpinBox(); - spinBox->setRange(0, INT_MAX); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue); - ui->tableWidget->setCellWidget(i,0,spinBox); - - spinBox = new QSpinBox(); - spinBox->setRange(0, INT_MAX); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue); - ui->tableWidget->setCellWidget(i,1,spinBox); - - spinBox = new QSpinBox(); - spinBox->setRange(1, INT_MAX); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes); - ui->tableWidget->setCellWidget(i,2,spinBox); - } - updateCnt1GroupsTblWgt(); -} - -void SectionalWid::on_Cnt3AddRowBtn_clicked() -{ - int rowCnt=ui->tableWidget->rowCount(); - if(rowCnt>=MAX_CNT1_GROUPS_NUM) - { - return; - } - ui->tableWidget->setRowCount(rowCnt+1); - rowWidgetCreate(rowCnt); -} - - - -void SectionalWid::on_Cnt3InsertRowBtn_clicked() -{ - int rowIndex=ui->tableWidget->currentRow(); - int rowCnt=ui->tableWidget->rowCount(); - if(rowIndex<0||rowCnt>=MAX_CNT1_GROUPS_NUM) - { - return; - } - ui->tableWidget->insertRow(rowIndex+1); - rowWidgetCreate(rowIndex+1); -} - -void SectionalWid::on_cnt3RemoveAllRowsBtn_clicked() -{ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认删除全部设置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - int rowCnt=ui->tableWidget->rowCount(); - for(int i=rowCnt-1;i>=0;i--) - { - ui->tableWidget->removeRow(i); - } - } -} - -void SectionalWid::on_Cnt3RemoveRowBtn_clicked() -{ - int rowIndex=ui->tableWidget->currentRow(); - if(rowIndex<0) - { - return; - } - QMessageBox::StandardButton ret; - if(rowIndex==sysPara->status.cnt1GroupRunningIndex) - { - QMessageBox::warning(this, tr("错误"), - tr("正在打印第%1组设置,不可删除").arg(rowIndex+1), - QMessageBox::Ok); - return; - } - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认删除第%1组设置?").arg(rowIndex+1), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - ui->tableWidget->removeRow(rowIndex); - } -} - -void SectionalWid::on_cnt3RemoveAllRowsBtn_3_clicked() -{ - unsigned char temp = 1; - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认清零计数器1的循环值已经打印次数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); - temp = 0; - sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); - } - -} - -void SectionalWid::on_checkBoxGroupCnt1_clicked(bool checked) -{ - // 信号修改计数器的显示 -// ui->checkBoxGroupCnt_2->setChecked(checked); - SectionalManager::instance()->emitUpdateCntShow(checked); -} - -void SectionalWid::updateCnt1GroupsTblWgt() -{ - QPalette Palette; - QSpinBox *spinBox; - int rowCnt=ui->tableWidget->rowCount(); - - for(int i=0;itableWidget->cellWidget(i,j); - QLineEdit *lineEdit = spinBox->findChild(); - - if (lineEdit) { - lineEdit->setAutoFillBackground(true); - QPalette palette = lineEdit->palette(); - if(sysPara->para.cnt1ByGroupEnalbe && (i == sysPara->status.cnt1GroupRunningIndex)) - { - palette.setColor(QPalette::Normal,QPalette::Base, Qt::green); - } - else - { - palette.setColor(QPalette::Normal,QPalette::Base, Qt::lightGray); - } - lineEdit->setPalette(palette); - } - else{ - continue; - } - } - } -} - -void SectionalWid::ApplyCnt1GroupSetting() -{ - QSpinBox *spinBox = nullptr; - sysPara->para.cnt1ByGroupEnalbe = ui->checkBoxGroupCnt1->isChecked(); - sysPara->para.Cnt1ByGroup.cnt1GroupCnt=ui->tableWidget->rowCount(); - if(sysPara->para.cnt1ByGroupEnalbe && sysPara->para.Cnt1ByGroup.cnt1GroupCnt==0) - { - sysPara->para.cnt1ByGroupEnalbe=false; - ui->checkBoxGroupCnt1->setChecked(false); - on_checkBoxGroupCnt1_clicked(false); - } - - for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) - { - spinBox = (QSpinBox *)ui->tableWidget->cellWidget(i,0); - sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue = spinBox->value(); - - spinBox = (QSpinBox *)ui->tableWidget->cellWidget(i,1); - sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue = spinBox->value(); - - spinBox = (QSpinBox *)ui->tableWidget->cellWidget(i,2); - sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes = spinBox->value(); - } - sysPara->devOp->writeCnt1GroupSetting(1); - sysPara->saveParaToFile(); - //改变当前执行的分段的背景颜色 - updateCnt1GroupsTblWgt(); -} -#endif - -#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ -void SectionalWid::rowWidgetCreate2(int rowIndex) -{ - for(int i=0;i<3;i++) - { - QSpinBox *spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setMaximum(INT_MAX); - spinBox->setMinimum(i == 2 ? 1 : 0); - ui->tableWidget_2->setCellWidget(rowIndex,i,spinBox); - } -} - -void SectionalWid::LoadCnt2GroupSettingsToUI() -{ - // 两个同时启用,这个cb设true就会都取消 -// ui->checkBoxGroupCnt_2->setChecked(sysPara->para.cnt2ByGroupEnalbe); - on_checkBoxGroupCnt_2_clicked(sysPara->para.cnt2ByGroupEnalbe); - ui->tableWidget_2->setRowCount(sysPara->para.Cnt2ByGroup.cnt2GroupCnt); - for(int i=0; ipara.Cnt2ByGroup.cnt2GroupCnt; i++) - { - QSpinBox *spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - int startV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].StartValue; - spinBox->setValue(startV); - spinBox->setRange(0, INT_MAX); - ui->tableWidget_2->setCellWidget(i,0,spinBox); - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - int endV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].EndValue; - spinBox->setValue(endV); - spinBox->setRange(0, INT_MAX); - ui->tableWidget_2->setCellWidget(i,1,spinBox); - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - int loopV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].LoopTimes; - spinBox->setValue(loopV); - spinBox->setRange(1, INT_MAX); - ui->tableWidget_2->setCellWidget(i,2,spinBox); - } - updateCnt2GroupsTblWgt(); - -} - -void SectionalWid::on_checkBoxGroupCnt_2_clicked(bool checked) -{ - // 信号修改计数器的显示 -// ui->checkBoxGroupCnt1->setChecked(checked); - SectionalManager::instance()->emitUpdateCntShow(checked); -} - -void SectionalWid::updateCnt2GroupsTblWgt() -{ - QPalette Palette; - int rowCnt=ui->tableWidget_2->rowCount(); - - for(int i=0;itableWidget_2->cellWidget(i,j); - QLineEdit *lineEdit = spinBox->findChild(); - - if (lineEdit) { - lineEdit->setAutoFillBackground(true); - - QPalette palette = lineEdit->palette(); - if(sysPara->para.cnt2ByGroupEnalbe && (i == sysPara->status.cnt2GroupRunningIndex)) - { - palette.setColor(QPalette::Normal,QPalette::Base, Qt::green); - } - else - { - palette.setColor(QPalette::Normal,QPalette::Base, Qt::lightGray); - } - lineEdit->setPalette(palette); - } - else{ - continue; - } - } - } -} - -void SectionalWid::ApplyCnt2GroupSetting() -{ - QSpinBox *spinBox = nullptr; - sysPara->para.cnt2ByGroupEnalbe = ui->checkBoxGroupCnt_2->isChecked(); - sysPara->para.Cnt2ByGroup.cnt2GroupCnt = ui->tableWidget_2->rowCount(); - int r = ui->tableWidget_2->rowCount(); - if(sysPara->para.cnt2ByGroupEnalbe && sysPara->para.Cnt2ByGroup.cnt2GroupCnt==0) - { - sysPara->para.cnt2ByGroupEnalbe=false; - ui->checkBoxGroupCnt_2->setChecked(false); - on_checkBoxGroupCnt_2_clicked(false); - } - for(int i=0; ipara.Cnt2ByGroup.cnt2GroupCnt; i++) - { - spinBox = (QSpinBox *)ui->tableWidget_2->cellWidget(i,0); - sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].StartValue = spinBox->value(); - - spinBox = (QSpinBox *)ui->tableWidget_2->cellWidget(i,1); - sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].EndValue = spinBox->value(); - - spinBox = (QSpinBox *)ui->tableWidget_2->cellWidget(i,2); - sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].LoopTimes = spinBox->value(); - - } - sysPara->devOp->writeCnt2GroupSetting(1); - sysPara->saveParaToFile(); - //改变当前执行的分段的背景颜色 - updateCnt2GroupsTblWgt(); -} -#endif - -void SectionalWid::moveRow(int nFrom, int nTo, QTableWidget* table) -{ - if (table == nullptr) return; - if( nFrom == nTo ) return; - if( nFrom < 0 || nTo < 0 ) return; - - int StartValue,EndValue,LoopTimes; - int To_StartValue,To_EndValue,To_LoopTimes; - QSpinBox *spinBox = nullptr; - - int nRowCount = table->rowCount(); - if( nFrom >= nRowCount || nTo >= nRowCount ) return; - - spinBox = (QSpinBox *)table->cellWidget(nFrom,0); - StartValue = spinBox->value(); - - spinBox = (QSpinBox *)table->cellWidget(nFrom,1); - EndValue = spinBox->value(); - - spinBox = (QSpinBox *)table->cellWidget(nFrom,2); - LoopTimes = spinBox->value(); - - spinBox = (QSpinBox *)table->cellWidget(nTo,0); - To_StartValue = spinBox->value(); - - spinBox = (QSpinBox *)table->cellWidget(nTo,1); - To_EndValue = spinBox->value(); - - spinBox = (QSpinBox *)table->cellWidget(nTo,2); - To_LoopTimes = spinBox->value(); - - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(StartValue); - spinBox->setRange(0, INT_MAX); - table->setCellWidget(nTo,0,spinBox); - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(EndValue); - spinBox->setRange(0, INT_MAX); - table->setCellWidget(nTo,1,spinBox); - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(LoopTimes); - spinBox->setRange(1, INT_MAX); - table->setCellWidget(nTo,2,spinBox); - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(To_StartValue); - spinBox->setRange(0, INT_MAX); - table->setCellWidget(nFrom,0,spinBox); - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(To_EndValue); - spinBox->setRange(0, INT_MAX); - table->setCellWidget(nFrom,1,spinBox); - - spinBox = new QSpinBox(); - spinBox->setButtonSymbols(QSpinBox::NoButtons); - spinBox->setValue(To_LoopTimes); - spinBox->setRange(1, INT_MAX); - table->setCellWidget(nFrom,2,spinBox); - - table->selectRow(nTo); -} - - -void SectionalWid::on_pushButtonUpRow_clicked() -{ - moveRow(ui->tableWidget->currentRow(), - ui->tableWidget->currentRow() - 1, - ui->tableWidget); -} - -void SectionalWid::on_pushButtonDownRow_clicked() -{ - moveRow(ui->tableWidget->currentRow(), - ui->tableWidget->currentRow() + 1, - ui->tableWidget); -} - -#ifdef COUNTER2_BY_GROUP /* 分段计米 */ -void SectionalWid::on_Cnt3AddRowBtn_2_clicked() -{ - int rowCnt=ui->tableWidget_2->rowCount(); - if(rowCnt>=MAX_CNT1_GROUPS_NUM) - { - return; - } - ui->tableWidget_2->setRowCount(rowCnt+1); - rowWidgetCreate2(rowCnt); - // 获取新行第2列(索引为1)的 QSpinBox,设置值为 1 - QSpinBox *spinBox = qobject_cast(ui->tableWidget_2->cellWidget(rowCnt, 1)); - if (spinBox) { - spinBox->setValue(1); - } -} - -void SectionalWid::on_Cnt3InsertRowBtn_2_clicked() -{ - int rowIndex=ui->tableWidget_2->currentRow(); - int rowCnt=ui->tableWidget_2->rowCount(); - if(rowIndex<0||rowCnt>=MAX_CNT1_GROUPS_NUM) - { - //qDebug()<<"max counter1 groups num is "<tableWidget_2->insertRow(rowIndex+1); - rowWidgetCreate2(rowIndex+1); -} - -void SectionalWid::on_cnt3RemoveAllRowsBtn_2_clicked() -{ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认删除全部设置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - int rowCnt=ui->tableWidget_2->rowCount(); - for(int i=rowCnt-1;i>=0;i--) - { - ui->tableWidget_2->removeRow(i); - } - } -} - -void SectionalWid::on_Cnt3RemoveRowBtn_2_clicked() -{ - - int rowIndex=ui->tableWidget_2->currentRow(); - if(rowIndex<0) - { - return; - } - QMessageBox::StandardButton ret; - if(rowIndex==sysPara->status.cnt2GroupRunningIndex) - { - QMessageBox::warning(this, tr("错误"), - tr("正在打印第%1组设置,不可删除").arg(rowIndex+1), - QMessageBox::Ok); - return; - } - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认删除第%1组设置?").arg(rowIndex+1), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - ui->tableWidget_2->removeRow(rowIndex); - } - -} - -void SectionalWid::on_cnt3RemoveAllRowsBtn_4_clicked() -{ - unsigned char temp = 2; - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认清零计数器2的循环值已经打印次数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); - temp = 0; - sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); - } - -} -#endif - -void SectionalWid::on_pushButtonUpRow_2_clicked() -{ - moveRow(ui->tableWidget_2->currentRow(), - ui->tableWidget_2->currentRow() - 1, - ui->tableWidget_2); -} - -void SectionalWid::on_pushButtonDownRow_2_clicked() -{ - moveRow(ui->tableWidget_2->currentRow(), - ui->tableWidget_2->currentRow() + 1, - ui->tableWidget_2); -} - -void SectionalWid::slt_applySetting() -{ -#ifdef COUNTER1_BY_GROUP - ApplyCnt1GroupSetting(); -#endif -#ifdef COUNTER2_BY_GROUP - ApplyCnt2GroupSetting(); -#endif -} - -void SectionalWid::slt_loadSettings2UI() -{ -#ifdef COUNTER1_BY_GROUP - LoadCnt1GroupSettingsToUI(); -#endif -#ifdef COUNTER2_BY_GROUP - LoadCnt2GroupSettingsToUI(); -#endif -} - -void SectionalWid::slt_updateCntGroupDisp(bool bChangeToNext) -{ - if(bChangeToNext)//循环数走完 - { - //改变当前执行的分段的背景颜色 -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - updateCnt1GroupsTblWgt(); -#endif -#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ - updateCnt2GroupsTblWgt(); -#endif - } -} - -void SectionalWid::slt_cancelSection() -{ - ui->checkBoxGroupCnt1->setChecked(false); - ui->checkBoxGroupCnt_2->setChecked(false); -} - -void SectionalWid::initUI() -{ -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - QStringList headerLabels = QStringList()<tableWidget->setHorizontalHeaderLabels(headerLabels); - ui->tableWidget->setFocusPolicy(Qt::NoFocus); - ui->tableWidget->horizontalHeader()->setHighlightSections(false); - ui->tableWidget->setColumnHidden(3,true);//第3列用来标志是否保存当前行 - QHeaderView* vertivalHeader = ui->tableWidget->verticalHeader(); - vertivalHeader->setFixedWidth(60); - ui->tableWidget->setColumnWidth(2,120); -#endif -#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ - QStringList headerLabels2 = QStringList()<tableWidget_2->setHorizontalHeaderLabels(headerLabels2); - ui->tableWidget_2->setFocusPolicy(Qt::NoFocus); - ui->tableWidget_2->horizontalHeader()->setHighlightSections(false); - ui->tableWidget_2->setColumnHidden(3,true);//第3列用来标志是否保存当前行 - QHeaderView* vertivalHeader2 = ui->tableWidget_2->verticalHeader(); - vertivalHeader2->setFixedWidth(60); - ui->tableWidget_2->setColumnWidth(2,120); -#endif -} +#include "sectionalwid.h" +#include "ui_sectionalwid.h" + +#include +#include +#include + +SectionalWid::SectionalWid(QWidget *parent) : + QWidget(parent), + ui(new Ui::SectionalWid) +{ + ui->setupUi(this); + initUI(); + + connect(SectionalManager::instance(), &SectionalManager::sig_applySetting, + this, &SectionalWid::slt_applySetting); + connect(SectionalManager::instance(), &SectionalManager::sig_loadSettings2UI, + this, &SectionalWid::slt_loadSettings2UI); + connect(SectionalManager::instance(), &SectionalManager::sig_updateCntGroupDisp, + this, &SectionalWid::slt_updateCntGroupDisp); + connect(SectionalManager::instance(), &SectionalManager::sig_cancelSection, + this, &SectionalWid::slt_cancelSection); +} + +SectionalWid::~SectionalWid() +{ + delete ui; +} + +void SectionalWid::bindSysPara(SysPara* sysPara) +{ + this->sysPara = sysPara; +} + +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ +void SectionalWid::rowWidgetCreate(int rowIndex) +{ + for(int i=0;i<3;i++) + { + QSpinBox *spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setMaximum(INT_MAX); + spinBox->setMinimum(i == 2 ? 1 : 0); + ui->tableWidget->setCellWidget(rowIndex,i,spinBox); + } +} + +void SectionalWid::LoadCnt1GroupSettingsToUI() +{ + ui->checkBoxGroupCnt1->setChecked(sysPara->para.cnt1ByGroupEnalbe); + on_checkBoxGroupCnt1_clicked(sysPara->para.cnt1ByGroupEnalbe); + ui->tableWidget->setRowCount(sysPara->para.Cnt1ByGroup.cnt1GroupCnt); + for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) + { + QSpinBox *spinBox = new QSpinBox(); + spinBox->setRange(0, INT_MAX); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue); + ui->tableWidget->setCellWidget(i,0,spinBox); + + spinBox = new QSpinBox(); + spinBox->setRange(0, INT_MAX); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue); + ui->tableWidget->setCellWidget(i,1,spinBox); + + spinBox = new QSpinBox(); + spinBox->setRange(1, INT_MAX); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes); + ui->tableWidget->setCellWidget(i,2,spinBox); + } + updateCnt1GroupsTblWgt(); +} + +void SectionalWid::on_Cnt3AddRowBtn_clicked() +{ + int rowCnt=ui->tableWidget->rowCount(); + if(rowCnt>=MAX_CNT1_GROUPS_NUM) + { + return; + } + ui->tableWidget->setRowCount(rowCnt+1); + rowWidgetCreate(rowCnt); +} + + + +void SectionalWid::on_Cnt3InsertRowBtn_clicked() +{ + int rowIndex=ui->tableWidget->currentRow(); + int rowCnt=ui->tableWidget->rowCount(); + if(rowIndex<0||rowCnt>=MAX_CNT1_GROUPS_NUM) + { + return; + } + ui->tableWidget->insertRow(rowIndex+1); + rowWidgetCreate(rowIndex+1); +} + +void SectionalWid::on_cnt3RemoveAllRowsBtn_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除全部设置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + int rowCnt=ui->tableWidget->rowCount(); + for(int i=rowCnt-1;i>=0;i--) + { + ui->tableWidget->removeRow(i); + } + } +} + +void SectionalWid::on_Cnt3RemoveRowBtn_clicked() +{ + int rowIndex=ui->tableWidget->currentRow(); + if(rowIndex<0) + { + return; + } + QMessageBox::StandardButton ret; + if(rowIndex==sysPara->status.cnt1GroupRunningIndex) + { + QMessageBox::warning(this, tr("错误"), + tr("正在打印第%1组设置,不可删除").arg(rowIndex+1), + QMessageBox::Ok); + return; + } + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除第%1组设置?").arg(rowIndex+1), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + ui->tableWidget->removeRow(rowIndex); + } +} + +void SectionalWid::on_cnt3RemoveAllRowsBtn_3_clicked() +{ + unsigned char temp = 1; + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认清零计数器1的循环值已经打印次数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); + temp = 0; + sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); + } + +} + +void SectionalWid::on_checkBoxGroupCnt1_clicked(bool checked) +{ + // 信号修改计数器的显示 +// ui->checkBoxGroupCnt_2->setChecked(checked); + SectionalManager::instance()->emitUpdateCntShow(checked); +} + +void SectionalWid::updateCnt1GroupsTblWgt() +{ + QPalette Palette; + QSpinBox *spinBox; + int rowCnt=ui->tableWidget->rowCount(); + + for(int i=0;itableWidget->cellWidget(i,j); + QLineEdit *lineEdit = spinBox->findChild(); + + if (lineEdit) { + lineEdit->setAutoFillBackground(true); + QPalette palette = lineEdit->palette(); + if(sysPara->para.cnt1ByGroupEnalbe && (i == sysPara->status.cnt1GroupRunningIndex)) + { + palette.setColor(QPalette::Normal,QPalette::Base, Qt::green); + } + else + { + palette.setColor(QPalette::Normal,QPalette::Base, Qt::lightGray); + } + lineEdit->setPalette(palette); + } + else{ + continue; + } + } + } +} + +void SectionalWid::ApplyCnt1GroupSetting() +{ + QSpinBox *spinBox = nullptr; + sysPara->para.cnt1ByGroupEnalbe = ui->checkBoxGroupCnt1->isChecked(); + sysPara->para.Cnt1ByGroup.cnt1GroupCnt=ui->tableWidget->rowCount(); + if(sysPara->para.cnt1ByGroupEnalbe && sysPara->para.Cnt1ByGroup.cnt1GroupCnt==0) + { + sysPara->para.cnt1ByGroupEnalbe=false; + ui->checkBoxGroupCnt1->setChecked(false); + on_checkBoxGroupCnt1_clicked(false); + } + + for(int i=0; ipara.Cnt1ByGroup.cnt1GroupCnt; i++) + { + spinBox = (QSpinBox *)ui->tableWidget->cellWidget(i,0); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].StartValue = spinBox->value(); + + spinBox = (QSpinBox *)ui->tableWidget->cellWidget(i,1); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].EndValue = spinBox->value(); + + spinBox = (QSpinBox *)ui->tableWidget->cellWidget(i,2); + sysPara->para.Cnt1ByGroup.cnt1GroupSettings[i].LoopTimes = spinBox->value(); + } + sysPara->devOp->writeCnt1GroupSetting(1); + sysPara->saveParaToFile(); + //改变当前执行的分段的背景颜色 + updateCnt1GroupsTblWgt(); +} +#endif + +#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ +void SectionalWid::rowWidgetCreate2(int rowIndex) +{ + for(int i=0;i<3;i++) + { + QSpinBox *spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setMaximum(INT_MAX); + spinBox->setMinimum(i == 2 ? 1 : 0); + ui->tableWidget_2->setCellWidget(rowIndex,i,spinBox); + } +} + +void SectionalWid::LoadCnt2GroupSettingsToUI() +{ + // 两个同时启用,这个cb设true就会都取消 +// ui->checkBoxGroupCnt_2->setChecked(sysPara->para.cnt2ByGroupEnalbe); + on_checkBoxGroupCnt_2_clicked(sysPara->para.cnt2ByGroupEnalbe); + ui->tableWidget_2->setRowCount(sysPara->para.Cnt2ByGroup.cnt2GroupCnt); + for(int i=0; ipara.Cnt2ByGroup.cnt2GroupCnt; i++) + { + QSpinBox *spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + int startV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].StartValue; + spinBox->setValue(startV); + spinBox->setRange(0, INT_MAX); + ui->tableWidget_2->setCellWidget(i,0,spinBox); + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + int endV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].EndValue; + spinBox->setValue(endV); + spinBox->setRange(0, INT_MAX); + ui->tableWidget_2->setCellWidget(i,1,spinBox); + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + int loopV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].LoopTimes; + spinBox->setValue(loopV); + spinBox->setRange(1, INT_MAX); + ui->tableWidget_2->setCellWidget(i,2,spinBox); + } + updateCnt2GroupsTblWgt(); + +} + +void SectionalWid::on_checkBoxGroupCnt_2_clicked(bool checked) +{ + // 信号修改计数器的显示 +// ui->checkBoxGroupCnt1->setChecked(checked); + SectionalManager::instance()->emitUpdateCntShow(checked); +} + +void SectionalWid::updateCnt2GroupsTblWgt() +{ + QPalette Palette; + int rowCnt=ui->tableWidget_2->rowCount(); + + for(int i=0;itableWidget_2->cellWidget(i,j); + QLineEdit *lineEdit = spinBox->findChild(); + + if (lineEdit) { + lineEdit->setAutoFillBackground(true); + + QPalette palette = lineEdit->palette(); + if(sysPara->para.cnt2ByGroupEnalbe && (i == sysPara->status.cnt2GroupRunningIndex)) + { + palette.setColor(QPalette::Normal,QPalette::Base, Qt::green); + } + else + { + palette.setColor(QPalette::Normal,QPalette::Base, Qt::lightGray); + } + lineEdit->setPalette(palette); + } + else{ + continue; + } + } + } +} + +void SectionalWid::ApplyCnt2GroupSetting() +{ + QSpinBox *spinBox = nullptr; + sysPara->para.cnt2ByGroupEnalbe = ui->checkBoxGroupCnt_2->isChecked(); + sysPara->para.Cnt2ByGroup.cnt2GroupCnt = ui->tableWidget_2->rowCount(); + int r = ui->tableWidget_2->rowCount(); + if(sysPara->para.cnt2ByGroupEnalbe && sysPara->para.Cnt2ByGroup.cnt2GroupCnt==0) + { + sysPara->para.cnt2ByGroupEnalbe=false; + ui->checkBoxGroupCnt_2->setChecked(false); + on_checkBoxGroupCnt_2_clicked(false); + } + for(int i=0; ipara.Cnt2ByGroup.cnt2GroupCnt; i++) + { + spinBox = (QSpinBox *)ui->tableWidget_2->cellWidget(i,0); + sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].StartValue = spinBox->value(); + + spinBox = (QSpinBox *)ui->tableWidget_2->cellWidget(i,1); + sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].EndValue = spinBox->value(); + + spinBox = (QSpinBox *)ui->tableWidget_2->cellWidget(i,2); + sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].LoopTimes = spinBox->value(); + + } + sysPara->devOp->writeCnt2GroupSetting(1); + sysPara->saveParaToFile(); + //改变当前执行的分段的背景颜色 + updateCnt2GroupsTblWgt(); +} +#endif + +void SectionalWid::moveRow(int nFrom, int nTo, QTableWidget* table) +{ + if (table == nullptr) return; + if( nFrom == nTo ) return; + if( nFrom < 0 || nTo < 0 ) return; + + int StartValue,EndValue,LoopTimes; + int To_StartValue,To_EndValue,To_LoopTimes; + QSpinBox *spinBox = nullptr; + + int nRowCount = table->rowCount(); + if( nFrom >= nRowCount || nTo >= nRowCount ) return; + + spinBox = (QSpinBox *)table->cellWidget(nFrom,0); + StartValue = spinBox->value(); + + spinBox = (QSpinBox *)table->cellWidget(nFrom,1); + EndValue = spinBox->value(); + + spinBox = (QSpinBox *)table->cellWidget(nFrom,2); + LoopTimes = spinBox->value(); + + spinBox = (QSpinBox *)table->cellWidget(nTo,0); + To_StartValue = spinBox->value(); + + spinBox = (QSpinBox *)table->cellWidget(nTo,1); + To_EndValue = spinBox->value(); + + spinBox = (QSpinBox *)table->cellWidget(nTo,2); + To_LoopTimes = spinBox->value(); + + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(StartValue); + spinBox->setRange(0, INT_MAX); + table->setCellWidget(nTo,0,spinBox); + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(EndValue); + spinBox->setRange(0, INT_MAX); + table->setCellWidget(nTo,1,spinBox); + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(LoopTimes); + spinBox->setRange(1, INT_MAX); + table->setCellWidget(nTo,2,spinBox); + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(To_StartValue); + spinBox->setRange(0, INT_MAX); + table->setCellWidget(nFrom,0,spinBox); + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(To_EndValue); + spinBox->setRange(0, INT_MAX); + table->setCellWidget(nFrom,1,spinBox); + + spinBox = new QSpinBox(); + spinBox->setButtonSymbols(QSpinBox::NoButtons); + spinBox->setValue(To_LoopTimes); + spinBox->setRange(1, INT_MAX); + table->setCellWidget(nFrom,2,spinBox); + + table->selectRow(nTo); +} + + +void SectionalWid::on_pushButtonUpRow_clicked() +{ + moveRow(ui->tableWidget->currentRow(), + ui->tableWidget->currentRow() - 1, + ui->tableWidget); +} + +void SectionalWid::on_pushButtonDownRow_clicked() +{ + moveRow(ui->tableWidget->currentRow(), + ui->tableWidget->currentRow() + 1, + ui->tableWidget); +} + +#ifdef COUNTER2_BY_GROUP /* 分段计米 */ +void SectionalWid::on_Cnt3AddRowBtn_2_clicked() +{ + int rowCnt=ui->tableWidget_2->rowCount(); + if(rowCnt>=MAX_CNT1_GROUPS_NUM) + { + return; + } + ui->tableWidget_2->setRowCount(rowCnt+1); + rowWidgetCreate2(rowCnt); + // 获取新行第2列(索引为1)的 QSpinBox,设置值为 1 + QSpinBox *spinBox = qobject_cast(ui->tableWidget_2->cellWidget(rowCnt, 1)); + if (spinBox) { + spinBox->setValue(1); + } +} + +void SectionalWid::on_Cnt3InsertRowBtn_2_clicked() +{ + int rowIndex=ui->tableWidget_2->currentRow(); + int rowCnt=ui->tableWidget_2->rowCount(); + if(rowIndex<0||rowCnt>=MAX_CNT1_GROUPS_NUM) + { + //qDebug()<<"max counter1 groups num is "<tableWidget_2->insertRow(rowIndex+1); + rowWidgetCreate2(rowIndex+1); +} + +void SectionalWid::on_cnt3RemoveAllRowsBtn_2_clicked() +{ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除全部设置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + int rowCnt=ui->tableWidget_2->rowCount(); + for(int i=rowCnt-1;i>=0;i--) + { + ui->tableWidget_2->removeRow(i); + } + } +} + +void SectionalWid::on_Cnt3RemoveRowBtn_2_clicked() +{ + + int rowIndex=ui->tableWidget_2->currentRow(); + if(rowIndex<0) + { + return; + } + QMessageBox::StandardButton ret; + if(rowIndex==sysPara->status.cnt2GroupRunningIndex) + { + QMessageBox::warning(this, tr("错误"), + tr("正在打印第%1组设置,不可删除").arg(rowIndex+1), + QMessageBox::Ok); + return; + } + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认删除第%1组设置?").arg(rowIndex+1), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + ui->tableWidget_2->removeRow(rowIndex); + } + +} + +void SectionalWid::on_cnt3RemoveAllRowsBtn_4_clicked() +{ + unsigned char temp = 2; + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认清零计数器2的循环值已经打印次数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); + temp = 0; + sysPara->devOp->fpgaWr(0xb12c,(unsigned char *)&temp,1); + } + +} +#endif + +void SectionalWid::on_pushButtonUpRow_2_clicked() +{ + moveRow(ui->tableWidget_2->currentRow(), + ui->tableWidget_2->currentRow() - 1, + ui->tableWidget_2); +} + +void SectionalWid::on_pushButtonDownRow_2_clicked() +{ + moveRow(ui->tableWidget_2->currentRow(), + ui->tableWidget_2->currentRow() + 1, + ui->tableWidget_2); +} + +void SectionalWid::slt_applySetting() +{ +#ifdef COUNTER1_BY_GROUP + ApplyCnt1GroupSetting(); +#endif +#ifdef COUNTER2_BY_GROUP + ApplyCnt2GroupSetting(); +#endif +} + +void SectionalWid::slt_loadSettings2UI() +{ +#ifdef COUNTER1_BY_GROUP + LoadCnt1GroupSettingsToUI(); +#endif +#ifdef COUNTER2_BY_GROUP + LoadCnt2GroupSettingsToUI(); +#endif +} + +void SectionalWid::slt_updateCntGroupDisp(bool bChangeToNext) +{ + if(bChangeToNext)//循环数走完 + { + //改变当前执行的分段的背景颜色 +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + updateCnt1GroupsTblWgt(); +#endif +#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ + updateCnt2GroupsTblWgt(); +#endif + } +} + +void SectionalWid::slt_cancelSection() +{ + ui->checkBoxGroupCnt1->setChecked(false); + ui->checkBoxGroupCnt_2->setChecked(false); +} + +void SectionalWid::initUI() +{ +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + QStringList headerLabels = QStringList()<tableWidget->setHorizontalHeaderLabels(headerLabels); + ui->tableWidget->setFocusPolicy(Qt::NoFocus); + ui->tableWidget->horizontalHeader()->setHighlightSections(false); + ui->tableWidget->setColumnHidden(3,true);//第3列用来标志是否保存当前行 + QHeaderView* vertivalHeader = ui->tableWidget->verticalHeader(); + vertivalHeader->setFixedWidth(60); + ui->tableWidget->setColumnWidth(2,120); +#endif +#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ + QStringList headerLabels2 = QStringList()<tableWidget_2->setHorizontalHeaderLabels(headerLabels2); + ui->tableWidget_2->setFocusPolicy(Qt::NoFocus); + ui->tableWidget_2->horizontalHeader()->setHighlightSections(false); + ui->tableWidget_2->setColumnHidden(3,true);//第3列用来标志是否保存当前行 + QHeaderView* vertivalHeader2 = ui->tableWidget_2->verticalHeader(); + vertivalHeader2->setFixedWidth(60); + ui->tableWidget_2->setColumnWidth(2,120); +#endif +} diff --git a/TextEditOption.cpp b/TextEditOption.cpp index 68e9c53..bc6e6bc 100644 --- a/TextEditOption.cpp +++ b/TextEditOption.cpp @@ -1,1801 +1,1794 @@ -#include "TextEditOption.h" -#include "ui_texteditoption.h" -#include "PicWidget.h" -#include "scene/picscene.h" -#include "SectionalCounting/sectionalmanager.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "Public.h" -#include "myinclude.h" -#include -#include "QBarCode.h" -#include "dlgQrCode.h" -#include -#include -TextEditOption::TextEditOption(QWidget *parent) : - QWidget(parent), - ui(new Ui::TextEditOption) -{ - ui->setupUi(this); - fileDialog = 0; - fileName = ""; - textEdit = 0; - newFileAppending = false; - dialogFileOperation = new DialogFileOperation(0); - dialogInsertVari = new DialogInsertVari(0); - dialogFontSize = new DialogFontSize(0); - dialogLineSpace = new DialogLineSpace(0); - editMode=0; -#ifdef _2DCODE_ - qrcode = new dlgQrCode(this); - barcode= new QBarCode(); - connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); - connect(qrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); - - //专门处理网络发送的二维码 - connect(qrcode,SIGNAL(sig_updateNetworkQR()),this,SLOT(slt_updateNetworkQR())); -#endif - //textEdit->setFontFamily(Public::getFontFamily(12)); - //textEdit->clear(); -#ifdef MYSAVEFILEDLG - dialogSaveFile =new DialogSaveFile(0); -#endif - - sceneEditItem = false; -} - -TextEditOption::~TextEditOption() -{ - delete ui; - if(fileDialog) - delete fileDialog; - if(dialogInsertVari) - delete dialogInsertVari; - if(dialogFontSize) - delete dialogFontSize; - if(dialogLineSpace) - delete dialogLineSpace; -#if _2DCODE_ - if(qrcode) - delete qrcode; -#endif - //free(dlgQrCode); -#ifdef MYSAVEFILEDLG - if(dialogSaveFile) delete dialogSaveFile; - if(dialogFileOperation) delete dialogFileOperation; -#endif -} - -void TextEditOption::enableButtonSave(){ - if(!ui->bottonSave->isEnabled()) - ui->bottonSave->setEnabled(true); -} - -void TextEditOption::bindText(QTextEdit *textEdit){ - this->textEdit = textEdit; - - connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); - - ui->bottonSave->setEnabled(false); - connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); -#ifdef MYSAVEFILEDLG - connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); -#endif - -} -void TextEditOption::bindSysPara(SysPara *sysPara){ - this->sysPara = sysPara; -#ifdef _2DCODE_ - if(sysPara) - { - barcode->bindSysPara(sysPara); - //qDebug()<<"TextEditOption bind by TextEdit."; - } -#endif - //else qDebug()<<"TextEditOption bind by TextEdit failure"; -} - -void TextEditOption::bindPicWidget(PicWidget *picwidget){ - this->picwidget = picwidget;// stackedWidgetOption - -// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); -// ui->bottonSave->setEnabled(false); -// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); - - -} -void TextEditOption::bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText){ - this->stackedWidgetOption = stackedWidgetOption;// stackedWidgetOption - this->stackedWidgetText = stackedWidgetText; -// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); -// ui->bottonSave->setEnabled(false); -// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); - - - -} -void TextEditOption::showDlg(){ - -if(editMode==PICFILE){ - - disconnect(textEdit,SIGNAL(textChanged()),0,0); - - connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); - ui->bottonSave->setEnabled(false); - disconnect(dialogFileOperation,SIGNAL(openFile(QString,bool)),0,0); - connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); - on_pushButtonFile_pressed(); - - // dialogFileOperation->show(); -} -} - -void TextEditOption::slt_updateNetworkQR() -{ -#ifdef _2DCODE_ - if (qrcode->flagInsert) { - qrcode->flagInsert = 0; - qrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); - if(sysPara->para.EditMode==PICFILE) return; - - // 多行打印需要用到场景模式 - updateNetQRToEdit(); - } - sysPara->saveParaToFile(); -#endif -} - -/* - * 和DialogFileOperation对接 - * */ -void TextEditOption::onFileOpen(QString filePath,bool insertFlag) -{ - if(editMode==PICFILE){ - if(filePath.endsWith(".png") )//||filePath.endsWith(".bmp") ) - { - if(insertFlag){ - emit PicfileNameOpen(filePath,insertFlag); - } - else { - // - emit PicfileNameOpen(filePath,0); - } - return ; - } - else{ - if(stackedWidgetOption) { - stackedWidgetOption->setCurrentIndex(1); - stackedWidgetText->setCurrentIndex(1); - } - } - } - else if(editMode==TXTFILE) { - if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") - || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) - { - // QString html = ""; - QString html = ""; - QTextCharFormat fmt = textEdit->currentCharFormat (); - - if(insertFlag){ - textEdit->insertHtml (html); - } - else { - textEdit->setHtml (html); - textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 - } - textEdit->mergeCurrentCharFormat(fmt); - } - else if(filePath.endsWith(".xml")) - { - memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); - return; - } - else { - QFile file(filePath); - if(!file.open(QIODevice::ReadOnly)){ - QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); - } - else { - QByteArray data = file.readAll(); - QTextCodec *codec = Qt::codecForHtml(data); - QString str = codec->toUnicode(data); - - // if (Qt::mightBeRichText(str)) { - // textEdit->setHtml(str); - // } else { - // str = QString::fromLocal8Bit(data); - // textEdit->setPlainText(str); - // } - // QTextStream in (&file);in.readAll() - if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ - str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 - } - - if(insertFlag){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - textEdit->insertHtml(str); - } - } - else - { -// updateFileVariWidth(str); - updateFontFamily(str); //兼容Vx4保存的文件的字体名称大小 - updateImageStyle(str); //兼容Vx4文件中保存的变量 - updateFileVariWidth(str); //适应变量宽度 - textEdit->setHtml(str); - fileName = filePath; - - if(sysPara){ - if(sysPara->sysFile != ""){ - sysPara->comparePrintStruct(); - sysPara->updatePrintInitToPara(); - } - sysPara->sysFile =fileName; - sysPara->loadParaFromFile(); - //qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile; - snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); - } - emit fileNameChanged(QFileInfo(fileName).fileName()); - textEdit->moveCursor(QTextCursor::EndOfLine); - onDialogLineSpaceAccepted(); - } - } - fsync(file.handle()); - file.close(); - } - if(insertFlag) //在打开文件的时候不设置焦点 - textEdit->setFocus(); - if(stackedWidgetOption) { - stackedWidgetOption->setCurrentIndex(0); - stackedWidgetText->setCurrentIndex(0); - // textEdit->setFocus(); - } - } - else if(editMode==SCENE) { - //开机会调用到此,然后打开文件 - if(filePath.endsWith(".xml")) - { - memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); - emit scenefileOpen(filePath,false);//sceneeditoption 接收这个信号然后打开文件 - emit fileNameChanged(QFileInfo(filePath).fileName()); - } - else - { - if(sceneEditItem == true) - { - if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") - || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) - { - QString html = ""; - QTextCharFormat fmt = textEdit->currentCharFormat (); - if(insertFlag){ - textEdit->insertHtml (html); - } - else { - textEdit->setHtml(html); - textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 - } - textEdit->mergeCurrentCharFormat(fmt); - } - else { - QFile file(filePath); - if(!file.open(QIODevice::ReadOnly)){ - QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); - } - else { - QByteArray data = file.readAll(); - QTextCodec *codec = Qt::codecForHtml(data); - QString str = codec->toUnicode(data); - if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ - str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 - } - - if(insertFlag){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - textEdit->insertHtml(str); - } - } - else - { - textEdit->setHtml(str); - fileName = filePath; - - if(sysPara){ - if(sysPara->sysFile != ""){ - sysPara->comparePrintStruct(); - sysPara->updatePrintInitToPara(); - } - sysPara->sysFile =fileName; - sysPara->loadParaFromFile(); - //qDebug()<<"onFileOpen"<sysFile; - snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); - } - emit fileNameChanged(QFileInfo(fileName).fileName()); - textEdit->moveCursor(QTextCursor::EndOfLine); - } - } - fsync(file.handle()); - file.close(); - } - } - /* - if(stackedWidgetOption) { - stackedWidgetOption->setCurrentIndex(0); - stackedWidgetText->setCurrentIndex(0); - } - */ - } - } -} - - -void TextEditOption::onbottonInsertImgclicked() -{ - if(fileDialog) - delete fileDialog; - fileDialog = new MyFileDialog(0); - disconnect(fileDialog,SIGNAL(accepted()),0,0); - connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertImgFIle_select())); - fileDialog->showFileDialog(tr("插入图片"),QString("/"),QString("img (*.bmp *.jpg *.png *.gif)")); -} - -void TextEditOption::onInsertImgFIle_select(){ - QStringList files = fileDialog->selectedFiles(); - - for(int i = 0;i < files.size(); i++){ - QString html = ""; - textEdit->insertHtml (html); - - } -} - - -void TextEditOption::onbottonInsertTextclicked() -{ - if(fileDialog) - delete fileDialog; - fileDialog = new MyFileDialog(0); - disconnect(fileDialog,SIGNAL(accepted()),0,0); - connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertTextFIle_select())); - fileDialog->showFileDialog(tr("插入文本"),QString(DOC_ROOT_DIR),QString("text (*.html *.txt)")); -} - -void TextEditOption::onInsertTextFIle_select(){ - QStringList files = fileDialog->selectedFiles(); - for(int i = 0;i < files.size(); i++){ - QFile file(files.value(i)); - if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ - QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + files.value(i)); - } - else{ - QTextStream in (&file); - textEdit->insertHtml(in.readAll()); - } - fsync(file.handle()); - file.close(); - } -} - - - -void TextEditOption::onbuttonOpenclicked() -{ - if(!textEdit){ - QMessageBox::critical(this,tr("错误"),tr("TextEditOption 构造函数参数textEdit 不应当为空")); // - } - if(fileDialog) - delete fileDialog; - fileDialog = new MyFileDialog(0); - disconnect(fileDialog,SIGNAL(accepted()),0,0); - connect(fileDialog,SIGNAL(accepted()),this,SLOT(onOpenFIle_select())); - fileDialog->DontUseNativeDialog; - - fileDialog->showFileDialog(tr("打开文件"),QString(DOC_ROOT_DIR),QString("Text files (*.txt *.html)")); -} - - -void TextEditOption::openFIle(QString openFileName){ - QFile file(openFileName); - if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ - QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + openFileName); - } - else{ - QTextStream in (&file); - textEdit->setText(in.readAll()); - fileName = openFileName; - if(sysPara){ - sysPara->sysFile =fileName; - sysPara->loadParaFromFile(); - //qDebug()<<"openFIle"<sysFile; - snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); - } - emit fileNameChanged(QFileInfo(fileName).fileName()); - } - file.close(); -} - - -void TextEditOption::onOpenFIle_select(){ - - QStringList files = fileDialog->selectedFiles(); - for(int i = 0;i < files.size(); i++){ - openFIle(files.value(i)); - } -} - - - -void TextEditOption::on_buttonSaveAS_clicked() -{ -#ifdef MYSAVEFILEDLG - disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); - connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); - dialogSaveFile->refreshListView(editMode); - dialogSaveFile->show(); - dialogSaveFile->setEnterFileName(""); -#else - if(fileDialog) - delete fileDialog; - fileDialog = new MyFileDialog(0); - disconnect(fileDialog,SIGNAL(accepted()),0,0); - connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); - fileDialog->showFileDialog(tr("另存为"),QString(DOC_ROOT_DIR),QString("files (*.html *.txt)")); -#endif - -} - - -void TextEditOption::saveFile(){ - if(fileName.endsWith(".txt")){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("以.txt保存将丢失所有格式,你是否愿意保存为.html格式?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - fileName += ".html"; - } - } - QString html = textEdit->toHtml(); - QString pattern = "setHtml(html.replace(UDISK_DOC_ROOT_DIR,DOC_ROOT_DIR)); - } - QTextDocumentWriter writer(fileName); - - //writer.setFormat("html"); - - // textEdit->document()->setDocumentMargin(0); -// bool success = writer.write(textEdit->document()); - html.replace(QRegularExpression("]*)/>"), ""); -// html.replace(QRegularExpression("]*)>"), ""); - - QFile file(fileName); - bool success = true; - if(file.open(QIODevice::WriteOnly)){ - //补上 UTF-8 声明 - int headStart = html.indexOf(""); - int headEnd = html.indexOf(""); - if (headStart != -1 && headEnd != -1) { - QStringRef head = html.midRef(headStart, headEnd - headStart); - if (!head.contains("charset=")) { - int pos = html.indexOf("\n"); - } - } - QTextStream out(&file); - out.setCodec("UTF-8"); - out<document()->setModified(false); - ui->bottonSave->setEnabled(false); - if(sysPara){ - sysPara->sysFile =fileName; - snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); - } - } - else { - QMessageBox::warning(this,tr("警告"),tr("无法保存文件") + fileName); - } - emit fileNameChanged(QFileInfo(fileName).fileName()); - checkNewFileAppending(); -} - - -void TextEditOption::onSaveAS_FIle_select(){ - QStringList files = fileDialog->selectedFiles(); - for(int i = 0;i < files.size(); i++){ - fileName = files[i]; - - if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) - fileName += ".html"; - saveFile(); - } -} - - -void TextEditOption::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class - fileName = filename; - if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) - fileName += ".html"; - - saveFile(); - //emit fileNameChanged(QFileInfo(fileName).fileName()); - //qDebug()<clear(); - fileName = ""; - sysPara->sysFile = ""; - emit fileNameChanged(QFileInfo(fileName).fileName()); - setFontFormat(); - onDialogLineSpaceAccepted(); - } - newFileAppending = false; -} - -void TextEditOption::onSave_File_reject(){ - checkNewFileAppending(); -} - -void TextEditOption::on_bottonSave_clicked() -{ - if(sysPara->para.EditMode==SCENE){ - //在场景模式下,这个是确定按钮,切换到场景模式 - if(sceneEditItem) - { - editItemModeDone(); - emit editItemDone(); - } - - } - else - { - if(fileName.isEmpty()){ - #ifdef MYSAVEFILEDLG - disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); - connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); - dialogSaveFile->refreshListView(editMode); - dialogSaveFile->show(); - dialogSaveFile->setEnterFileName(""); - #else - if(fileDialog) - delete fileDialog; - fileDialog = new MyFileDialog(0); - disconnect(fileDialog,SIGNAL(accepted()),0,0); - connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); - connect(fileDialog,SIGNAL(rejected()),this,SLOT(onSave_File_reject())); - fileDialog->showFileDialog(tr("保存..."),QString(DOC_ROOT_DIR),QString("HTML files (*.html)")); - #endif - } - else { - saveFile(); - newFileAppending = false; - } - } -} - - - -bool TextEditOption::maybeSave(){ - if (!textEdit->document()->isModified()) - return true; - if (fileName.startsWith(QLatin1String(":/"))) - return true; - - QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("文档已经改变,是否保存?")); - QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); - QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); - QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); - - msgBox.exec(); - - if (msgBox.clickedButton() == saveButton) { - newFileAppending = true; - on_bottonSave_clicked(); - return false; - } else if (msgBox.clickedButton() == cancleSaveButton) { - SectionalManager::instance()->emitCancelSection(); - return true; - } - else - return false; - - return true; -} -void TextEditOption::on_bottonNew_pressed() -{ - if (maybeSave()) { - //setFontFormat(); - if(sysPara->sysFile != ""){ - sysPara->comparePrintStruct(); - sysPara->updatePrintInitToPara(); - } - textEdit->clear(); - fileName = ""; - sysPara->sysFile = ""; - QFile file(fileName); - emit fileNameChanged(QFileInfo(fileName).fileName()); - } -#ifdef VARCOLOR - textEdit->insertHtml(QString("  ")); -#endif - -} - -void TextEditOption::onOpenNewFile() -{ - //if (maybeSave()) - { - //setFontFormat(); - textEdit->clear(); - fileName = ""; - QFile file(fileName); - emit fileNameChanged(QFileInfo(fileName).fileName()); - } -#ifdef VARCOLOR - textEdit->insertHtml(QString("  ")); -#endif - -} - -void TextEditOption::on_buttonInsertVari_pressed() -{ - QString s,fontname=""; - if(sysPara) - { - //s.sprintf("%s(%02dX%02d)",sysPara->para.qrOption.text,sysPara->para.qrOption.width,sysPara->para.qrOption.height); - s= sysPara->para.qrOption.text; - if(s.length()>120)s="string to long."; - dialogInsertVari->setValue(""); - } - - if(dialogInsertVari->exec() == QDialog::Accepted && sysPara) { - int pixelSize = ui->labelFontSize->text().toInt(); - QFont font; - - // 直接返回字体名会导致字模生成时,字体名不对应,因此现在改成根据pixelSize来获取字体名 byons@2026年5月15日 - // fontname = dialogFontSize->getFontFamily(); - fontname = Public::getFontFamily(dialogFontSize->getFont().pixelSize(), 0); // 最后一个参数用不到 - - if(ui->checkBoxBold->isChecked() && (pixelSize<=16)) - fontname = getFamilyName(pixelSize); - - // font.setPixelSize(pixelSize); - font.setFamily(fontname); - font.setPixelSize(dialogFontSize->getFont().pixelSize()); - pixelSize = dialogFontSize->getFont().pixelSize(); - // font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ? QFont::Bold:QFont::Normal); - - // font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); - QFontMetrics fontMetrics(font); - int width = (fontMetrics.horizontalAdvance("0123456789"))/10; - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - width = (fontMetrics.horizontalAdvance("0123456789.m "))/13; - } - - int height = fontMetrics.ascent()+ fontMetrics.descent(); - int digitalNum; - int varType; - - height = font.pixelSize() + 1; - unsigned char splitMode=sysPara->para.ExpirySplitMode; - dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); - - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - digitalNum += 1; - } - - // 对于24、16、12点WenQuanYi字体,需要调整高度。我也不知道为什么,但是不调整会导致字模与普通文字不对齐 byons@2026年5月16日 - // 日后如果替换了这些高度的字体,需要根据实际情况调整高度 - if((height == 25 || height == 17 || height == 13) && !ui->checkBoxBold->isChecked()) { - height -= 1; - } - - if((varType<9 || varType==13 || varType==14 || varType == 15) // 普通变量;varType=13 is CNT3 var - // ||(varType>=20 && varType<29) // 横左变量 - // ||(varType>=40 && varType<49) // 右横变量 - ) - { - width += sysPara->para.textEditCharSpace; - qDebug() << "on_buttonInsertVari_pressed fontname:" << font.family(); - qDebug() << "on_buttonInsertVari_pressed pixelSize:" << height; - qDebug() << "on_buttonInsertVari_pressed letter space:" << sysPara->para.textEditCharSpace; - qDebug() << "on_buttonInsertVari_pressed width:" << width; - - unsigned char splitMode = sysPara->para.ExpirySplitMode; - dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - digitalNum += 1; - } - - fmt = textEdit->currentCharFormat(); - - QString html = QString("") - .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) - .arg(height).arg(width*digitalNum).arg(varType).arg(font.family()); - textEdit->insertHtml(html); //插入索引后 - qDebug() << textEdit->toHtml(); - - } // 普通变量 VarType<=8 - else if(varType >=9 && varType <=11) - { // -#ifdef _2DCODE_ - // 让二维码界面位于底部,键盘不会遮挡输入位置 - int x = (this->width() - qrcode->width()) / 2; - int y = 480-qrcode->height(); - qrcode->move(this->mapToGlobal(QPoint(x, y))); - - s= sysPara->para.qrOption.text; - if(varType==9){ - qrcode->flagInsert=1; - sysPara->para.qrOption.AutoCount=1; - sysPara->para.qrOption.AutoRefresh=1; - sysPara->para.qrOption.type=0; - sysPara->para.qrOption.cntNum=digitalNum; //digitalNum - qrcode->setWindowTitle(tr("二维码变量设置")); - qrcode->SetOption(&sysPara->para.qrOption); - qrcode->setCntCheckBoxHide(0); - qrcode->show(); - } - - else if(varType==10){ - qrcode->flagInsert=1; - sysPara->para.qrOption.AutoCount=1; - sysPara->para.qrOption.AutoRefresh=1; - sysPara->para.qrOption.type=1; - sysPara->para.qrOption.cntNum=digitalNum; - qrcode->setCntCheckBoxHide(0); - qrcode->setWindowTitle(tr("二维码变量设置")); - qrcode->SetOption(&sysPara->para.qrOption); - qrcode->show(); - } - - else if(varType==11){ - barcode->move(0,0); - barcode->flagInsert=1; - sysPara->para.qrOption.AutoCount=1; - sysPara->para.qrOption.AutoRefresh=1; - sysPara->para.qrOption.type=1; - sysPara->para.qrOption.cntNum=digitalNum; - barVarFont = font; - barVarHeight=height; - barVarWidth =width; - //barcode->setCntCheckBoxHide(0); - barcode->setWindowTitle(tr("条形码变量设置")); - barcode->SetOption(&sysPara->para.bcOption); - barcode->show(); - - } - textEdit->mergeCurrentCharFormat(fmt); -#endif - } - else if(varType ==RANDOMNUM){ //12 - //digitalNum=13; - //qDebug()<<"digitalNum"<insertHtml(QString("") - .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) - .arg(height+1).arg(width*digitalNum)); //插入索引后 - - textEdit->mergeCurrentCharFormat(fmt); - } - else if(varType ==EXPIRYDATE){ - int varType1 = varType; - if(fontname.contains("bangla") ) - { - varType1= 10+varType; - } - else if(fontname.contains("biyangF") ) - { - varType1= 20+varType; - } - else if(fontname.contains("Roman") ) - { - varType1= 30+varType; - } - - sysPara->print.ExpiryVar.splitMode=splitMode; - font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); - QFontMetrics fontMetrics(font); - QHash dateFormat; - dateFormat.insert(0,"yyyy-MM-dd"); - dateFormat.insert(1,"yyyy/MM/dd"); - dateFormat.insert(2,"yyyyMMdd"); - dateFormat.insert(3,"yyyy年MM月dd日"); - dateFormat.insert(4,"yyyy-MM-dd hh:mm"); - dateFormat.insert(5,"yyyy/MM/dd hh:mm"); - dateFormat.insert(6,"yyyyMMddhhmm"); - dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); - dateFormat.insert(8,"hh:mm"); - dateFormat.insert(9,"ddhhmm"); - dateFormat.insert(10,"dd MM yy"); - dateFormat.insert(11,"dd/MM/yy"); - dateFormat.insert(12,"dd/MM/yyyy"); - dateFormat.insert(13,"dd-MM-yy"); - dateFormat.insert(14,"dd-MM-yyyy"); - //dateFormat.insert(10,"x"); - QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); - //qDebug()<<"DateTime "<insertHtml(QString("") - .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(175):1) - .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 - sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); - textEdit->mergeCurrentCharFormat(fmt); - }else - { - if(splitMode == 3 || splitMode ==7 ) - { - height = fontMetrics.ascent(); - } - textEdit->insertHtml(QString("") - .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) - .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 - sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); - textEdit->mergeCurrentCharFormat(fmt); - } - } - else if(varType ==CURDATE ){ //81 :/80/image/expiryDate8.bmp qrc:/80/image/curDate8.bmp - int varType1 = varType; - if(fontname.contains("bangla") ) - { - varType1= 10+varType; - } - else if(fontname.contains("biyangF") ) - { - varType1= 20+varType; - } - else if(fontname.contains("biyangF") ) - { - varType1= 30+varType; - } - - // 0xff00fc - //qDebug()<<"CurDateVar height"<print.CurDateVar.splitMode = splitMode; - font.setLetterSpacing(QFont::AbsoluteSpacing, sysPara->para.textEditCharSpace); - QFontMetrics fontMetrics(font); - QHash dateFormat; - dateFormat.insert(0,"yyyy-MM-dd"); - dateFormat.insert(1,"yyyy/MM/dd"); - dateFormat.insert(2,"yyyyMMdd"); - dateFormat.insert(3,"yyyy年MM月dd日"); - dateFormat.insert(4,"yyyy-MM-dd hh:mm"); - dateFormat.insert(5,"yyyy/MM/dd hh:mm"); - dateFormat.insert(6,"yyyyMMddhhmm"); - dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); - dateFormat.insert(8,"hh:mm"); - dateFormat.insert(9,"ddhhmm"); - dateFormat.insert(10,"dd MM yy"); - dateFormat.insert(11,"dd/MM/yy"); - dateFormat.insert(12,"dd/MM/yyyy"); - dateFormat.insert(13,"dd-MM-yy"); - dateFormat.insert(14,"dd-MM-yyyy"); - QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); - int dateTimeWidth = fontMetrics.width(DateTime) ; - qDebug()<<"insert splitMode="<insertHtml(QString("") - .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):1) - .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 - textEdit->mergeCurrentCharFormat(fmt); - }else - { - if(splitMode == 3 || splitMode ==7 ) - { - height = fontMetrics.ascent();//fontMetrics.ascent()+ fontMetrics.descent(); - } - textEdit->insertHtml(QString("") - .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) - .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 - qDebug() << "textEdit->insertHtml:"<toHtml(); - textEdit->mergeCurrentCharFormat(fmt); - } - } - else if(varType == CURCLASS) { //82 :/82/image/curDate1.bmp - font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); - QFontMetrics fontMetrics(font); - int dateTimeWidth = fontMetrics.width("A") ; - int pixBmpSize = 1; - if (ui->checkBoxBold->checkState() && (pixelSize<=16)) { - pixBmpSize = 875; - } - else { - if(pixelSize >= 9) { - pixBmpSize = 91; - } - else { - pixBmpSize = 1; - } - } - qDebug()<<"height:"<insertHtml(QString("") - .arg(varType).arg(pixBmpSize) - .arg(height+1).arg(dateTimeWidth+2).arg(sysPara->para.textEditCharSpace)); //插入索引后 - textEdit->mergeCurrentCharFormat(fmt); - } - textEdit->setFocus(); - } -} - - -void TextEditOption::mergeFormatOnWordOrSelection(const QTextCharFormat &format) -{ - - QTextCursor cursor = textEdit->textCursor(); - //if (!cursor.hasSelection()) - // cursor.select(QTextCursor::WordUnderCursor); - //cursor.mergeCharFormat(format); - //textEdit->setTextCursor(cursor); - //qDebug()<<"mergeFormatOnWordOrSelection"<mergeCurrentCharFormat(format); -// auto font = format.font(); -// auto family = font.family(); -// auto size = font.pointSize(); - -// qDebug() << "mergeFormatOnWordOrSelection: " << textEdit->fontFamily(); -} - -void TextEditOption::updateSysParaToUI() //重载 -{ - if(sysPara){ - /*务必先设置行距*/ - dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); - onDialogLineSpaceAccepted(); - /*将文件打开*/ - QString file = QString(sysPara->para.lastOpenedFileName); - if(QFile::exists(file)){ - sysPara->sysFile =file; - onFileOpen(file,false); - } - dialogFontSize->setValue(sysPara->para.fontPixelSize); - } -} - -void TextEditOption::onMbSetLineAndChar(int line_space, int char_space) -{ - sysPara->para.textEditLineSpace = line_space; - sysPara->para.textEditCharSpace = char_space; - dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); - onDialogLineSpaceAccepted(); -} - -QLabel *TextEditOption::getLabelFontSize(){ - return ui->labelFontSize; -} - -QLabel *TextEditOption::getLabelFontFamily(){ - return ui->labFontFamily; -} - -void TextEditOption::setFontFormat(){ - if(sysPara){ - - qreal pixelSize = ui->labelFontSize->text().toFloat(); - if(pixelSize < Public::getMinFontPixelSize()) - pixelSize = sysPara->para.fontPixelSize; - - if(pixelSize < Public::getMinFontPixelSize()){ - pixelSize = Public::getMinFontPixelSize(); - } - - if (pixelSize >= 0) { - QTextCharFormat fmt; - int DPI = textEdit->logicalDpiX(); - DPI = DPI?DPI:1; - qreal pointSize = pixelSize*72/DPI; //Pixel = DPI * Point / 72 - fmt.setFontPointSize(pointSize); - -#ifdef VNLGXX - QString fontFamily = dialogFontSize->getFontFamily(); - -#else - QString fontFamily = ui->labFontFamily->text(); - fontFamily = dialogFontSize->getFontFamily(); - - if(ui->checkBoxBold->isChecked()) - fontFamily = getFamilyName(pixelSize); - ui->labFontFamily->setText(fontFamily); - ui->labelFontSize->setText(QString::number(pixelSize)); -#endif - - fmt.setFontFamily(fontFamily); - fmt.setFontWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16)? QFont::Bold:QFont::Normal); - mergeFormatOnWordOrSelection(fmt); - } - } -} - -void TextEditOption::currentCharFormatChanged(const QTextCharFormat &format){ - QFont font = format.font(); - //qDebug()<<"pixelSize:"<para.fontPixelSize = font.pointSize();// 以当前选择字体为准,保证选中界面勾选一致 - dialogFontSize->setValue(sysPara->para.fontPixelSize); - ui->checkBoxBold->setChecked(font.bold()); -} - -QPushButton * TextEditOption::getPushButtonPreview(){ - return ui->pushButtonPreview; -} -QCheckBox *TextEditOption::getCheckBoxBold(){ - return ui->checkBoxBold; -} - -void TextEditOption::on_pushButtonFile_pressed() -{ - if(sceneEditItem) - { - dialogFileOperation->refreshListView(TXTFILE); - dialogFileOperation->exec(); - } - else - { - dialogFileOperation->refreshListView(editMode); - dialogFileOperation->exec(); - } -} - -QString TextEditOption::getFamilyName(int fontsize){ -// return "YaHei"; - return "YaHei"+QString::number(fontsize); -} - -void TextEditOption::on_buttonSelectFont_pressed() -{ - // loadApplicationFonts(); - // checkFonts(); - if(dialogFontSize->exec() == QDialog::Accepted){ - int fontSize; - QString fontFamily; - dialogFontSize->getValue(&fontSize); - fontFamily = dialogFontSize->getFontFamily(); - if(ui->checkBoxBold->isChecked() && fontSize <= 16) - fontFamily = getFamilyName(fontSize); - - ui->labFontFamily->setText(fontFamily); -#ifdef EnableArabic - bool switchArabicFlag=false; - bool arabicSelect=fontFamily.contains("arabic"); - if((fontFamily=="biyang" || fontFamily=="wenquanyi")&&(fontSize==7 || fontSize==9)){ - switchArabicFlag=true; - emit EnableSwitchArabicFlag(switchArabicFlag); - }else { - emit EnableSwitchArabicFlag(switchArabicFlag); - } - dialogSaveFile->setFileNameEnglishOrArabic(false); - emit fontSizeArabicSelect(arabicSelect); -#endif - if(sysPara){ - sysPara->para.fontPixelSize = fontSize; - } - - bool isDefultBold = fontFamily != "WenQuanYi32" && fontFamily != "WenQuanYi24"; - ui->checkBoxBold->setEnabled(isDefultBold); -// ui->checkBoxBold->setChecked(!isDefultBold); - - ui->labelFontSize->setText(QString::number(fontSize)); - setFontFormat(); - textEdit->setFocus(); - emit fontSizeChange(fontSize); - bool flagBangal=false; - if(dialogFontSize->getFontFamily() == "bangla") - flagBangal = true; - emit switchBengalLanguage(flagBangal); - - toggleVirtualKeyboard(); - } - -} - -void TextEditOption::on_checkBoxBold_released() -{ - setFontFormat(); - textEdit->setFocus(); -} - - -void TextEditOption::onDialogLineSpaceAccepted(){ - dialogLineSpace->getValue(&sysPara->para.textEditLineSpace,&sysPara->para.textEditCharSpace); - sysPara->para.textEditLineSpace=sysPara->para.textEditLineSpace+1;//新系统行间距需要加1 - for(QTextBlock textBlock = textEdit->document()->begin();textBlock != textEdit->document()->end(); textBlock = textBlock.next()){ - QTextBlockFormat textBlockFormat = textBlock.blockFormat(); - textBlockFormat.setAlignment(Qt::AlignBottom); - textBlockFormat.setTopMargin(-1); - textBlockFormat.setBottomMargin(sysPara->para.textEditLineSpace-1); - QTextCursor textCursor = textEdit->textCursor(); - textCursor.setPosition(textBlock.position()); - textCursor.setBlockFormat(textBlockFormat); - textEdit->setTextCursor(textCursor); - } - - QFont font = textEdit->font(); - font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); - textEdit->setFont(font); -} - -void TextEditOption::updateNetQRToEdit() -{ -#ifdef _2DCODE_ - QTextDocument* doc = textEdit->document(); - QTextCursor cursor(doc); - - // 查找并删除旧的网络二维码图片 - cursor.movePosition(QTextCursor::Start); - while (!cursor.atEnd()) { - // 先移动光标到下一个字符开头 - cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); - QTextCharFormat fmt = cursor.charFormat(); - - if (fmt.isImageFormat()) { - QString imgName = fmt.toImageFormat().name(); - // 匹配网络二维码图片(真实文件路径或资源占位符) - if (imgName.contains("networkQR.bmp") || imgName.contains(":/10/image/QR")) { - // 删除这个字符(图片) - cursor.deleteChar(); - break; - } - } - cursor.clearSelection(); - } - - // 在原来位置(或当前位置)插入新的二维码图片 - // 使用资源占位符 - QString imgHtml = QString("") - .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width); //插入索引后 - - cursor.insertHtml(imgHtml); - cursor.clearSelection(); -#endif -} - -void TextEditOption::on_buttonLineSpace_clicked() -{ - if(dialogLineSpace->exec() == QDialog::Accepted){ - onDialogLineSpaceAccepted(); - sysPara->saveParaToFile(); - textEdit->setFocus(); - sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; - } -} - -void TextEditOption::InsertQRCodeToEdit(QString barCodeName,int width,int height ,int enSave){ -#ifdef _2DCODE_ - textEdit->setText(""); - InsertQRCodeToEdit(barCodeName, width, height); - fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; - if(enSave) saveFile(); -#endif -} -void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ,int enSave){ -#ifdef _2DCODE_ - textEdit->setText(""); - InsertBarCodeToEdit(barCodeName, width, height); - fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; - if(enSave) saveFile(); -#endif -} -void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ) -{ -#ifdef _2DCODE_ - //dialogInsertVari->getValue(&varType,&digitalNum); - QTextCharFormat fmt = textEdit->currentCharFormat (); - textEdit->insertHtml(QString("") - .arg(barCodeName) - .arg(height).arg(width)); //插入索引后 - textEdit->mergeCurrentCharFormat(fmt); - //textEdit->setFocus(); - //qDebug()<<"TEOption:"<getValue(&varType,&digitalNum); - QTextCharFormat fmt = textEdit->currentCharFormat (); - textEdit->insertHtml(QString("") - .arg(barCodeName)//QFileInfo(barCodeName). - .arg(width).arg(height)); //插入索引后 - textEdit->mergeCurrentCharFormat(fmt); - //textEdit->setFocus(); - //qDebug()<<"TEOption:"<flagInsert ) { - qrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); - qrcode->flagInsert=0; - if(sysPara->para.EditMode==PICFILE){ - } - else { - if(sysPara->para.qrOption.type==0){ - textEdit->insertHtml(QString("") - .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - else if(sysPara->para.qrOption.type==1){ - textEdit->insertHtml(QString("") - .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - else if(sysPara->para.qrOption.type==2){ - textEdit->insertHtml(QString("") - .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - } - } - sysPara->saveParaToFile(); -#endif -} -void TextEditOption::onBarCodeClose(){ -#ifdef _2DCODE_ - bcPara_t bcoption; - if(barcode->flagInsert ) { - barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); - //qDebug()<<"onBarCodeClose"<para.bcOption.barType<para.bcOption.height; - barcode->GetOption2((bcPara_t*)&bcoption); - //qDebug()<<"onBarCodeClose"<para.bcOption.barType = bcoption.type; - barcode->flagInsert=0; - if(sysPara->para.EditMode==PICFILE){ - - } - else - { - fmt = textEdit->currentCharFormat (); - textEdit->insertHtml(QString("") - .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height)); - - //插入索引后 - //qDebug()<") - // .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height); - - int varType1= 7;//CNT1:7, CNT2:8 - int digitalNum; - if(sysPara->para.bcOption.var1En){ - digitalNum=sysPara->para.bcOption.var1Num; - textEdit->insertHtml(QString("%1%2").arg(sysPara->para.bcOption.TxtModule).arg(sysPara->para.bcOption.TxtLine)); - textEdit->insertHtml(QString("") - .arg(varType1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) - .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 - } - if(sysPara->para.bcOption.var2En) - { - digitalNum=sysPara->para.bcOption.var2Num; - textEdit->insertHtml(QString("") - .arg(varType1+1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) - .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 - } - - textEdit->mergeCurrentCharFormat(fmt); - } - } - sysPara->saveParaToFile(); -#endif -} - -void TextEditOption::onEditItemMode() -{ - ui->bottonNew->setDisabled(true); - ui->buttonSaveAS->setDisabled(true); - ui->pushButtonPreview->setDisabled(true); - ui->bottonSave->setText(tr("完成")); - sceneEditItem = true; -} -void TextEditOption::editItemModeDone() -{ - sceneEditItem = false; - ui->bottonNew->setDisabled(false); - ui->buttonSaveAS->setDisabled(false); - ui->pushButtonPreview->setDisabled(false); - ui->bottonSave->setText(tr("保存")); -} - -void TextEditOption::modbus_insert_pic(QString filename) -{ -// on_pushButtonFile_pressed(); - dialogFileOperation->modbus_openfile(filename); - -} - -void TextEditOption::updateSysParaToZero() //重载 -{ - if(sysPara){ - dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); - onDialogLineSpaceAccepted(); - } -} - -void TextEditOption::SetHiddenValue(bool select) -{ - dialogInsertVari->EnableHiddenValue(select); -} - -void TextEditOption::updateFileVariWidth(QString &str) -{ - QString patternNormalVar = ""; - updateNormalVarWidth(str,patternNormalVar); - - QString patternCurDateVar = ""; - updateProduceDateVarWidth(str,patternCurDateVar,2); - - QString patternExpiryDateVar = ""; - updateProduceDateVarWidth(str,patternExpiryDateVar,1); - -} - -void TextEditOption::updateNormalVarWidth(QString& str,const QString& pattern) -{ - QRegExp rx(pattern); - int from = 0; - // 正常变量 - while(from < str.size() && from != -1) { - from = str.indexOf(rx,from);//返回匹配到到起始地址 - bool ok; - if(from != -1){//找到匹配的 - int width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); - int height = rx.cap(5).toInt(&ok); - int height2 = getVariableHight(height); - int digitalNum = rx.cap(3).toInt(&ok);//第二个匹配,数字到个数 - if(digitalNum>100){ //加粗 - digitalNum/=100; - ui->checkBoxBold->setChecked(true); - } - // 获取匹配的标签 - QString matchedTag = rx.cap(0); - // 构建新的标签,替换width属性值 - QString newTag = matchedTag; - int singlewidth = getSingleDigitWidth(height2); - int newWidth= (singlewidth + sysPara->para.textEditCharSpace) * digitalNum; - if(newWidth == width){ - from ++; - from+=newTag.length(); - continue; - } - newTag.replace(QString("width=\"%1\"").arg(rx.cap(4)), QString("width=\"%1\"").arg(newWidth)); - // 替换原始文本中的标签 - str.replace(from, rx.matchedLength(), newTag); - from ++; - from+=newTag.length(); - } - } -} - -void TextEditOption::updateProduceDateVarWidth(QString &str,const QString pattern,int mode){ - QRegExp rx(pattern); - int from = 0; - // 正常变量 - while(from < str.size() && from != -1) { - from = str.indexOf(rx,from);//返回匹配到到起始地址 - bool ok; - if(from != -1){//找到匹配的 - int width = rx.cap(3).toInt(&ok)*(sysPara->status.addSpace?2:1); - int height = rx.cap(4).toInt(&ok); - int digitalNum = rx.cap(2).toInt(&ok);//第二个匹配,数字到个数 - if(digitalNum>100){ //加粗 - digitalNum/=100; - ui->checkBoxBold->setChecked(true); - } - // 获取匹配的标签 - QString matchedTag = rx.cap(0); - // 构建新的标签,替换width属性值 - QString newTag = matchedTag; - int newWidth= getDateVarWidth(height,mode); - if(newWidth == width){ - return; - } - newTag.replace(QString("width=\"%1\"").arg(rx.cap(3)), QString("width=\"%1\"").arg(newWidth)); - // 替换原始文本中的标签 - str.replace(from, rx.matchedLength(), newTag); - from ++; - from+=newTag.length(); - } - } - } - - -int TextEditOption::getDateVarWidth(int height,int mode) -{ - int pixelSize = getVariableHight(height); - QFont font; - QString fontname = getVariableFontFamily(pixelSize); - font.setFamily( - fontname // 20160812 - ); - font.setPixelSize(pixelSize); - font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); - unsigned char splitMode=sysPara->para.ExpirySplitMode; - if(mode==1){ - sysPara->status.flagOfAdjustWidth_1 = 1; - sysPara->status.splitMode_Adjust_1= splitMode; - } - else if(mode ==2 ){ - sysPara->status.flagOfAdjustWidth_2 = 1; - sysPara->status.splitMode_Adjust_2= splitMode; - } - font.setLetterSpacing(QFont::AbsoluteSpacing, sysPara->para.textEditCharSpace); - QFontMetrics fontMetrics(font); - QHash dateFormat; - dateFormat.insert(0,"yyyy-MM-dd"); - dateFormat.insert(1,"yyyy/MM/dd"); - dateFormat.insert(2,"yyyyMMdd"); - dateFormat.insert(3,"yyyy年MM月dd日"); - dateFormat.insert(4,"yyyy-MM-dd hh:mm"); - dateFormat.insert(5,"yyyy/MM/dd hh:mm"); - dateFormat.insert(6,"yyyyMMddhhmm"); - dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); - dateFormat.insert(8,"hh:mm"); - dateFormat.insert(9,"ddhhmm"); - dateFormat.insert(10,"dd MM yy"); - dateFormat.insert(11,"dd/MM/yy"); - dateFormat.insert(12,"dd/MM/yyyy"); - dateFormat.insert(13,"dd-MM-yy"); - dateFormat.insert(14,"dd-MM-yyyy"); - QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); - int dateTimeWidth = fontMetrics.width(DateTime) ; - return dateTimeWidth+4; -} - - -int TextEditOption::getSingleDigitWidth(int height) -{ - // int pixelSize = ui->labelFontSize->text().toInt(); - int pixelSize = height; - QFont font; - QString fontname= getVariableFontFamily(height); - font.setFamily( - fontname // 20160812 - ); - font.setPixelSize(pixelSize); - font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); - font.setLetterSpacing(QFont::AbsoluteSpacing,0); - QFontMetrics fontMetrics(font); - int width = (fontMetrics.width("0")); - // int width = (fontMetrics.width("0123456789"))/10; - // if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - // width = (fontMetrics.width("0123456789.m "))/13; - // } - return width; -} - -int TextEditOption::getVariableHight(int height){ - - if(height<7){ - return 5; - }else if(height<9){ - return 7; - }else if(height <12){ - return 9; - }else if(height<16){ - return 12; - }else if(height<22){ //24点阵变量高23 - return 16; - }else if(height<30){ - return 24; - }else if(height>=30){ - return 32; - } -} - -QString TextEditOption::getVariableFontFamily(int height){ - QString fontFamily = "WenQuanYi12"; - if(height<7){ - fontFamily = "WenQuanYi5"; - }else if(height<9){ - fontFamily = "WenQuanYi7"; - }else if(height <12){ - fontFamily = "Dinkie9"; - }else if(height<16){ - fontFamily = "WenQuanYi12"; - }else if(height<22){ //24点阵变量高23 - fontFamily = "WenQuanYi16"; - }else if(height<30){ - fontFamily = "WenQuanYi24"; - }else if(height>=30){ - fontFamily = "WenQuanYi32"; - } - return fontFamily; -} - -void TextEditOption::showEvent(QShowEvent * e) -{ - ui->checkBoxBold->setEnabled(dialogFontSize->getFontFamily() != "WenQuanYi32" && dialogFontSize->getFontFamily() != "WenQuanYi24"); -// ui->checkBoxBold->setChecked(!ui->checkBoxBold->isEnabled()); - - - QWidget::showEvent(e); -} - - void TextEditOption::loadApplicationFonts() { - // 只需调用一次 - static bool fontsLoaded = false; - if (fontsLoaded) return true; - - QStringList fontPaths = { - "/usr/lib/fonts/Arial_5pt.bdf", - "/usr/lib/fonts/Arial_7pt.bdf", - "/usr/lib/fonts/Arial_9pt.bdf", - "/usr/lib/fonts/wq_wm_9_n.bdf", - "/usr/lib/fonts/wq_wm_12_n.bdf", - "/usr/lib/fonts/wq_wm_16_n.bdf", - "/usr/lib/fonts/wq_wm_24_n.bdf" - }; - - foreach (const QString &path, fontPaths) { - if (QFile::exists(path)) { - int fontId = QFontDatabase::addApplicationFont(path); - if (fontId == -1) { - qDebug()<< "Failed to load font:" << path; - } else { - qDebug()<< "Loaded font:" << path<< "ID:"<< fontId; - } - } - } - fontsLoaded = true; - -} - -void TextEditOption::checkFonts() -{ - // 检查所有可用字体家族 - QFontDatabase FontDB; - QStringList families = FontDB.families(); - foreach (const QString &family, families) { - qDebug()<< " " << family; - } -} - -void TextEditOption::toggleVirtualKeyboard() -{ - QInputMethod *inputMethod = QGuiApplication::inputMethod(); - if (inputMethod->isVisible()) { - inputMethod->hide(); - } else { - inputMethod->show(); - } -} - -#ifdef EnableArabic -void TextEditOption::changeArabicPage(int page){ - int fontSize; - dialogFontSize->getValue(&fontSize); - switch (page) { - case 1: - ui->labFontFamily->setText("biyangarabic"); - break; -// case 2: -// ui->labFontFamily->setText("biyangarabicb"); -// break; - case 3: - ui->labFontFamily->setText("biyangarabicc"); - break; - default: - ui->labFontFamily->setText(dialogFontSize->getFontFamily()); - break; - } - //ui->labFontFamily->setText(dialogFontSize->getFontFamily()); - if(sysPara){ - sysPara->para.fontPixelSize = fontSize; - } - ui->labelFontSize->setText(QString::number(fontSize)); - setFontFormat(); - textEdit->setFocus(); - emit fontSizeChange(fontSize); -} - -void TextEditOption::swithchEnglisOrArabic(bool flag){ - // qDebug()<<"englistOrArabicFlag:"<getValue(&fontSize); - dialogSaveFile->setFileNameEnglishOrArabic(flag); - if(flag){ - // if(fontSize==7 || fontSize==9 || fontSize==12){ - if(fontSize==9 || fontSize==7){ - ui->labFontFamily->setText("biyangarabic"); - }else{ - //fontSize=9; - //ui->labFontFamily->setText("biyangarabic"); - } - }else{ - if(fontSize==7 || fontSize==9){ - ui->labFontFamily->setText("biyang"); - }else{ - ui->labFontFamily->setText("wenquanyi"); - } - } - if(sysPara){ - sysPara->para.fontPixelSize = fontSize; - } - ui->labelFontSize->setText(QString::number(fontSize)); - setFontFormat(); - textEdit->setFocus(); - emit fontSizeChange(fontSize); -} -#endif - - -void TextEditOption::updateFontFamily(QString &result){ - // 定义正则表达式来匹配font-family属性 - QRegExp regex("font-family\\s*:\\s*'([^']+)'", Qt::CaseInsensitive); - regex.setMinimal(true); // 设置为最小匹配模式 - // 定义正则表达式来匹配font-size属性 - QRegExp regex2("font-size:(\\d+)pt"); - regex2.setMinimal(true); // 设置为最小匹配模式 - - int pos = 0; - pos = result.indexOf("

0) { - // 找到最近的font-size,进行替换 - int matchPos = regex2.indexIn(result, pos2); - if (matchPos != -1) { - QString fontSizeStr = regex2.cap(1); - int fontSize = fontSizeStr.toInt(); - QString newFontSize = getNewFontSize(fontSize); - QString newFontSizeStr = QString("font-size:%1pt").arg(newFontSize); - QString newFontFamily = getNewFontFamily(fontSize); - newFontFamilyStr = QString("font-family:'%1'").arg(newFontFamily); - result.replace(matchPos, regex2.matchedLength(), newFontSizeStr); - result.replace(pos, regex.matchedLength(), newFontFamilyStr); - break; - } - } - pos += newFontFamilyStr.length(); - } -} - -void TextEditOption::updateImageStyle(QString &html){ - QRegExp imgRx("]*)>", Qt::CaseInsensitive); - imgRx.setMinimal(true); - int pos = 0; - while ((pos = imgRx.indexIn(html, pos)) != -1) { - QString attr = imgRx.cap(1); // 原有属性 - if (attr.indexOf("vertical-align") != -1) { - // 已有 vertical-align: bottom - pos += attr.length(); - continue; - } else { - attr = attr.trimmed(); - if (attr.endsWith('/')) - attr.chop(1); - // 没有 style,直接插入 - attr += "style=\"vertical-align: bottom;\""; - } - // 3. 拼回 - QString newTag = QString("").arg(attr); - html.replace(pos, imgRx.matchedLength(), newTag); - pos += newTag.length(); - } -} - -QString TextEditOption::getNewFontSize(int fontsize){ - - switch (fontsize) { - case 5: - return "3.75"; - break; - case 7: - return "5.25"; - break; - case 9: - return "6.75"; - break; - case 12: - return "9"; - break; - case 16: - return "12"; - break; - case 24: - return "18"; - break; - case 32: - return "24"; - break; - default: - break; - } -} - - -QString TextEditOption::getNewFontFamily(int fontsize){ - switch (fontsize) { - case 5: - return "WenQuanYi5"; - break; - case 7: - return "WenQuanYi7"; - break; - case 9: - return "Dinkie9"; - break; - case 12: - return "WenQuanYi12"; - break; - case 16: - return "WenQuanYi16"; - break; - case 24: - return "WenQuanYi24"; - break; - case 32: - return "WenQuanYi32"; - break; - default: - break; - } - -} +#include "TextEditOption.h" +#include "ui_texteditoption.h" +#include "PicWidget.h" +#include "scene/picscene.h" +#include "SectionalCounting/sectionalmanager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Public.h" +#include "myinclude.h" +#include +#include "QBarCode.h" +#include "dlgQrCode.h" +#include +#include +TextEditOption::TextEditOption(QWidget *parent) : + QWidget(parent), + ui(new Ui::TextEditOption) +{ + ui->setupUi(this); + fileDialog = 0; + fileName = ""; + textEdit = 0; + newFileAppending = false; + dialogFileOperation = new DialogFileOperation(0); + dialogInsertVari = new DialogInsertVari(0); + dialogFontSize = new DialogFontSize(0); + dialogLineSpace = new DialogLineSpace(0); + editMode=0; +#ifdef _2DCODE_ + qrcode = new dlgQrCode(this); + barcode= new QBarCode(); + connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); + connect(qrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); + + //专门处理网络发送的二维码 + connect(qrcode,SIGNAL(sig_updateNetworkQR()),this,SLOT(slt_updateNetworkQR())); +#endif + //textEdit->setFontFamily(Public::getFontFamily(12)); + //textEdit->clear(); +#ifdef MYSAVEFILEDLG + dialogSaveFile =new DialogSaveFile(0); +#endif + + sceneEditItem = false; +} + +TextEditOption::~TextEditOption() +{ + delete ui; + if(fileDialog) + delete fileDialog; + if(dialogInsertVari) + delete dialogInsertVari; + if(dialogFontSize) + delete dialogFontSize; + if(dialogLineSpace) + delete dialogLineSpace; +#if _2DCODE_ + if(qrcode) + delete qrcode; +#endif + //free(dlgQrCode); +#ifdef MYSAVEFILEDLG + if(dialogSaveFile) delete dialogSaveFile; + if(dialogFileOperation) delete dialogFileOperation; +#endif +} + +void TextEditOption::enableButtonSave(){ + if(!ui->bottonSave->isEnabled()) + ui->bottonSave->setEnabled(true); +} + +void TextEditOption::bindText(QTextEdit *textEdit){ + this->textEdit = textEdit; + + connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); + + ui->bottonSave->setEnabled(false); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); +#ifdef MYSAVEFILEDLG + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); +#endif + +} +void TextEditOption::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; +#ifdef _2DCODE_ + if(sysPara) + { + barcode->bindSysPara(sysPara); + //qDebug()<<"TextEditOption bind by TextEdit."; + } +#endif + //else qDebug()<<"TextEditOption bind by TextEdit failure"; +} + +void TextEditOption::bindPicWidget(PicWidget *picwidget){ + this->picwidget = picwidget;// stackedWidgetOption + +// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); +// ui->bottonSave->setEnabled(false); +// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + + +} +void TextEditOption::bindStackWidget(QStackedWidget *stackedWidgetOption,QStackedWidget *stackedWidgetText){ + this->stackedWidgetOption = stackedWidgetOption;// stackedWidgetOption + this->stackedWidgetText = stackedWidgetText; +// connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); +// ui->bottonSave->setEnabled(false); +// connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + + + +} +void TextEditOption::showDlg(){ + +if(editMode==PICFILE){ + + disconnect(textEdit,SIGNAL(textChanged()),0,0); + + connect(textEdit,SIGNAL(textChanged ()),this,SLOT(enableButtonSave())); + ui->bottonSave->setEnabled(false); + disconnect(dialogFileOperation,SIGNAL(openFile(QString,bool)),0,0); + connect(dialogFileOperation,SIGNAL(openFile(QString,bool)),this,SLOT(onFileOpen(QString,bool))); + on_pushButtonFile_pressed(); + + // dialogFileOperation->show(); +} +} + +void TextEditOption::slt_updateNetworkQR() +{ +#ifdef _2DCODE_ + if (qrcode->flagInsert) { + qrcode->flagInsert = 0; + qrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + if(sysPara->para.EditMode==PICFILE) return; + + // 多行打印需要用到场景模式 + updateNetQRToEdit(); + } + sysPara->saveParaToFile(); +#endif +} + +/* + * 和DialogFileOperation对接 + * */ +void TextEditOption::onFileOpen(QString filePath,bool insertFlag) +{ + if(editMode==PICFILE){ + if(filePath.endsWith(".png") )//||filePath.endsWith(".bmp") ) + { + if(insertFlag){ + emit PicfileNameOpen(filePath,insertFlag); + } + else { + // + emit PicfileNameOpen(filePath,0); + } + return ; + } + else{ + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(1); + stackedWidgetText->setCurrentIndex(1); + } + } + } + else if(editMode==TXTFILE) { + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") + || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) + { + // QString html = ""; + QString html = ""; + QTextCharFormat fmt = textEdit->currentCharFormat (); + + if(insertFlag){ + textEdit->insertHtml (html); + } + else { + textEdit->setHtml (html); + textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 + } + textEdit->mergeCurrentCharFormat(fmt); + } + else if(filePath.endsWith(".xml")) + { + memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); + return; + } + else { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + } + else { + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + + // if (Qt::mightBeRichText(str)) { + // textEdit->setHtml(str); + // } else { + // str = QString::fromLocal8Bit(data); + // textEdit->setPlainText(str); + // } + // QTextStream in (&file);in.readAll() + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + } + + if(insertFlag){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + textEdit->insertHtml(str); + } + } + else + { +// updateFileVariWidth(str); + updateFontFamily(str); //兼容Vx4保存的文件的字体名称大小 + updateImageStyle(str); //兼容Vx4文件中保存的变量 + updateFileVariWidth(str); //适应变量宽度 + textEdit->setHtml(str); + fileName = filePath; + + if(sysPara){ + if(sysPara->sysFile != ""){ + sysPara->comparePrintStruct(); + sysPara->updatePrintInitToPara(); + } + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"textedit txt mode onFileOpen" << sysPara->sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + textEdit->moveCursor(QTextCursor::EndOfLine); + onDialogLineSpaceAccepted(); + } + } + fsync(file.handle()); + file.close(); + } + if(insertFlag) //在打开文件的时候不设置焦点 + textEdit->setFocus(); + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(0); + stackedWidgetText->setCurrentIndex(0); + // textEdit->setFocus(); + } + } + else if(editMode==SCENE) { + //开机会调用到此,然后打开文件 + if(filePath.endsWith(".xml")) + { + memset(sysPara->para.lastOpenedFileName,0,sizeof(sysPara->para.lastOpenedFileName)); + emit scenefileOpen(filePath,false);//sceneeditoption 接收这个信号然后打开文件 + emit fileNameChanged(QFileInfo(filePath).fileName()); + } + else + { + if(sceneEditItem == true) + { + if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") + || filePath.endsWith(".bmp") || filePath.endsWith(".BMP") || filePath.endsWith(".png")) + { + QString html = ""; + QTextCharFormat fmt = textEdit->currentCharFormat (); + if(insertFlag){ + textEdit->insertHtml (html); + } + else { + textEdit->setHtml(html); + textEdit->moveCursor(QTextCursor::EndOfLine); //在插入图片的情况下,将图片至于末会导致格式还原 + } + textEdit->mergeCurrentCharFormat(fmt); + } + else { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + } + else { + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)){ + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + } + + if(insertFlag){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("Application"), tr("是否确认将文件内容追加到打开的文件?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + textEdit->insertHtml(str); + } + } + else + { + textEdit->setHtml(str); + fileName = filePath; + + if(sysPara){ + if(sysPara->sysFile != ""){ + sysPara->comparePrintStruct(); + sysPara->updatePrintInitToPara(); + } + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"onFileOpen"<sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + textEdit->moveCursor(QTextCursor::EndOfLine); + } + } + fsync(file.handle()); + file.close(); + } + } + /* + if(stackedWidgetOption) { + stackedWidgetOption->setCurrentIndex(0); + stackedWidgetText->setCurrentIndex(0); + } + */ + } + } +} + + +void TextEditOption::onbottonInsertImgclicked() +{ + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertImgFIle_select())); + fileDialog->showFileDialog(tr("插入图片"),QString("/"),QString("img (*.bmp *.jpg *.png *.gif)")); +} + +void TextEditOption::onInsertImgFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + + for(int i = 0;i < files.size(); i++){ + QString html = ""; + textEdit->insertHtml (html); + + } +} + + +void TextEditOption::onbottonInsertTextclicked() +{ + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onInsertTextFIle_select())); + fileDialog->showFileDialog(tr("插入文本"),QString(DOC_ROOT_DIR),QString("text (*.html *.txt)")); +} + +void TextEditOption::onInsertTextFIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + QFile file(files.value(i)); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + files.value(i)); + } + else{ + QTextStream in (&file); + textEdit->insertHtml(in.readAll()); + } + fsync(file.handle()); + file.close(); + } +} + + + +void TextEditOption::onbuttonOpenclicked() +{ + if(!textEdit){ + QMessageBox::critical(this,tr("错误"),tr("TextEditOption 构造函数参数textEdit 不应当为空")); // + } + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onOpenFIle_select())); + fileDialog->DontUseNativeDialog; + + fileDialog->showFileDialog(tr("打开文件"),QString(DOC_ROOT_DIR),QString("Text files (*.txt *.html)")); +} + + +void TextEditOption::openFIle(QString openFileName){ + QFile file(openFileName); + if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + openFileName); + } + else{ + QTextStream in (&file); + textEdit->setText(in.readAll()); + fileName = openFileName; + if(sysPara){ + sysPara->sysFile =fileName; + sysPara->loadParaFromFile(); + //qDebug()<<"openFIle"<sysFile; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + } + file.close(); +} + + +void TextEditOption::onOpenFIle_select(){ + + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + openFIle(files.value(i)); + } +} + + + +void TextEditOption::on_buttonSaveAS_clicked() +{ +#ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); +#else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + fileDialog->showFileDialog(tr("另存为"),QString(DOC_ROOT_DIR),QString("files (*.html *.txt)")); +#endif + +} + + +void TextEditOption::saveFile(){ + if(fileName.endsWith(".txt")){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("以.txt保存将丢失所有格式,你是否愿意保存为.html格式?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + fileName += ".html"; + } + } + QString html = textEdit->toHtml(); + QString pattern = "setHtml(html.replace(UDISK_DOC_ROOT_DIR,DOC_ROOT_DIR)); + } + QTextDocumentWriter writer(fileName); + + //writer.setFormat("html"); + + // textEdit->document()->setDocumentMargin(0); +// bool success = writer.write(textEdit->document()); + html.replace(QRegularExpression("]*)/>"), ""); +// html.replace(QRegularExpression("]*)>"), ""); + + QFile file(fileName); + bool success = true; + if(file.open(QIODevice::WriteOnly)){ + //补上 UTF-8 声明 + int headStart = html.indexOf(""); + int headEnd = html.indexOf(""); + if (headStart != -1 && headEnd != -1) { + QStringRef head = html.midRef(headStart, headEnd - headStart); + if (!head.contains("charset=")) { + int pos = html.indexOf("\n"); + } + } + QTextStream out(&file); + out.setCodec("UTF-8"); + out<document()->setModified(false); + ui->bottonSave->setEnabled(false); + if(sysPara){ + sysPara->sysFile =fileName; + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",fileName.toLatin1().constData()); + } + } + else { + QMessageBox::warning(this,tr("警告"),tr("无法保存文件") + fileName); + } + emit fileNameChanged(QFileInfo(fileName).fileName()); + checkNewFileAppending(); +} + + +void TextEditOption::onSaveAS_FIle_select(){ + QStringList files = fileDialog->selectedFiles(); + for(int i = 0;i < files.size(); i++){ + fileName = files[i]; + + if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) + fileName += ".html"; + saveFile(); + } +} + + +void TextEditOption::onSaveASFile(QString filename,bool Flag){// use for dialogSaveFile class + fileName = filename; + if(!fileName.endsWith(".html",Qt::CaseInsensitive) && !fileName.endsWith(".txt",Qt::CaseInsensitive)) + fileName += ".html"; + + saveFile(); + //emit fileNameChanged(QFileInfo(fileName).fileName()); + //qDebug()<clear(); + fileName = ""; + sysPara->sysFile = ""; + emit fileNameChanged(QFileInfo(fileName).fileName()); + setFontFormat(); + onDialogLineSpaceAccepted(); + } + newFileAppending = false; +} + +void TextEditOption::onSave_File_reject(){ + checkNewFileAppending(); +} + +void TextEditOption::on_bottonSave_clicked() +{ + if(sysPara->para.EditMode==SCENE){ + //在场景模式下,这个是确定按钮,切换到场景模式 + if(sceneEditItem) + { + editItemModeDone(); + emit editItemDone(); + } + + } + else + { + if(fileName.isEmpty()){ + #ifdef MYSAVEFILEDLG + disconnect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),0,0); + connect(dialogSaveFile,SIGNAL(saveFile(QString,bool)),this,SLOT(onSaveASFile(QString,bool))); + dialogSaveFile->refreshListView(editMode); + dialogSaveFile->show(); + dialogSaveFile->setEnterFileName(""); + #else + if(fileDialog) + delete fileDialog; + fileDialog = new MyFileDialog(0); + disconnect(fileDialog,SIGNAL(accepted()),0,0); + connect(fileDialog,SIGNAL(accepted()),this,SLOT(onSaveAS_FIle_select())); + connect(fileDialog,SIGNAL(rejected()),this,SLOT(onSave_File_reject())); + fileDialog->showFileDialog(tr("保存..."),QString(DOC_ROOT_DIR),QString("HTML files (*.html)")); + #endif + } + else { + saveFile(); + newFileAppending = false; + } + } +} + + + +bool TextEditOption::maybeSave(){ + if (!textEdit->document()->isModified()) + return true; + if (fileName.startsWith(QLatin1String(":/"))) + return true; + + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("文档已经改变,是否保存?")); + QPushButton *saveButton = msgBox.addButton(tr("保存"), QMessageBox::ActionRole); + QPushButton *cancleSaveButton = msgBox.addButton(tr("放弃保存"), QMessageBox::ActionRole); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == saveButton) { + newFileAppending = true; + on_bottonSave_clicked(); + return false; + } else if (msgBox.clickedButton() == cancleSaveButton) { + SectionalManager::instance()->emitCancelSection(); + return true; + } + else + return false; + + return true; +} +void TextEditOption::on_bottonNew_pressed() +{ + if (maybeSave()) { + //setFontFormat(); + if(sysPara->sysFile != ""){ + sysPara->comparePrintStruct(); + sysPara->updatePrintInitToPara(); + } + textEdit->clear(); + fileName = ""; + sysPara->sysFile = ""; + QFile file(fileName); + emit fileNameChanged(QFileInfo(fileName).fileName()); + } +#ifdef VARCOLOR + textEdit->insertHtml(QString("  ")); +#endif + +} + +void TextEditOption::onOpenNewFile() +{ + //if (maybeSave()) + { + //setFontFormat(); + textEdit->clear(); + fileName = ""; + QFile file(fileName); + emit fileNameChanged(QFileInfo(fileName).fileName()); + } +#ifdef VARCOLOR + textEdit->insertHtml(QString("  ")); +#endif + +} + +void TextEditOption::on_buttonInsertVari_pressed() +{ + QString s,fontname=""; + if(sysPara) + { + //s.sprintf("%s(%02dX%02d)",sysPara->para.qrOption.text,sysPara->para.qrOption.width,sysPara->para.qrOption.height); + s= sysPara->para.qrOption.text; + if(s.length()>120)s="string to long."; + dialogInsertVari->setValue(""); + } + + if(dialogInsertVari->exec() == QDialog::Accepted && sysPara) { + int pixelSize = ui->labelFontSize->text().toInt(); + QFont font; + + // 直接返回字体名会导致字模生成时,字体名不对应,因此现在改成根据pixelSize来获取字体名 byons@2026年5月15日 + // fontname = dialogFontSize->getFontFamily(); + fontname = Public::getFontFamily(dialogFontSize->getFont().pixelSize(), 0); // 最后一个参数用不到 + + if(ui->checkBoxBold->isChecked() && (pixelSize<=16)) + fontname = getFamilyName(pixelSize); + + // font.setPixelSize(pixelSize); + font.setFamily(fontname); + font.setPixelSize(dialogFontSize->getFont().pixelSize()); + pixelSize = dialogFontSize->getFont().pixelSize(); + // font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ? QFont::Bold:QFont::Normal); + + // font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + int width = (fontMetrics.horizontalAdvance("0123456789"))/10; + if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + width = (fontMetrics.horizontalAdvance("0123456789.m "))/13; + } + + int height = fontMetrics.ascent()+ fontMetrics.descent(); + int digitalNum; + int varType; + + height = font.pixelSize() + 1; + unsigned char splitMode=sysPara->para.ExpirySplitMode; + dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); + + // 对于24、16、12点WenQuanYi字体,需要调整高度。我也不知道为什么,但是不调整会导致字模与普通文字不对齐 byons@2026年5月16日 + // 日后如果替换了这些高度的字体,需要根据实际情况调整高度 + if((height == 25 || height == 17 || height == 13) && !ui->checkBoxBold->isChecked()) { + height -= 1; + } + + if((varType<9 || varType==13 || varType==14 || varType == 15) // 普通变量;varType=13 is CNT3 var + // ||(varType>=20 && varType<29) // 横左变量 + // ||(varType>=40 && varType<49) // 右横变量 + ) + { + width += sysPara->para.textEditCharSpace; + qDebug() << "on_buttonInsertVari_pressed fontname:" << font.family(); + qDebug() << "on_buttonInsertVari_pressed pixelSize:" << height; + qDebug() << "on_buttonInsertVari_pressed letter space:" << sysPara->para.textEditCharSpace; + qDebug() << "on_buttonInsertVari_pressed width:" << width; + + unsigned char splitMode = sysPara->para.ExpirySplitMode; + dialogInsertVari->getValue(&varType,&digitalNum,&splitMode); + + fmt = textEdit->currentCharFormat(); + + QString html = QString("") + .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) + .arg(height).arg(width*digitalNum).arg(varType).arg(font.family()); + textEdit->insertHtml(html); //插入索引后 + qDebug() << textEdit->toHtml(); + + } // 普通变量 VarType<=8 + else if(varType >=9 && varType <=11) + { // +#ifdef _2DCODE_ + // 让二维码界面位于底部,键盘不会遮挡输入位置 + int x = (this->width() - qrcode->width()) / 2; + int y = 480-qrcode->height(); + qrcode->move(this->mapToGlobal(QPoint(x, y))); + + s= sysPara->para.qrOption.text; + if(varType==9){ + qrcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=0; + sysPara->para.qrOption.cntNum=digitalNum; //digitalNum + qrcode->setWindowTitle(tr("二维码变量设置")); + qrcode->SetOption(&sysPara->para.qrOption); + qrcode->setCntCheckBoxHide(0); + qrcode->show(); + } + + else if(varType==10){ + qrcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=1; + sysPara->para.qrOption.cntNum=digitalNum; + qrcode->setCntCheckBoxHide(0); + qrcode->setWindowTitle(tr("二维码变量设置")); + qrcode->SetOption(&sysPara->para.qrOption); + qrcode->show(); + } + + else if(varType==11){ + barcode->move(0,0); + barcode->flagInsert=1; + sysPara->para.qrOption.AutoCount=1; + sysPara->para.qrOption.AutoRefresh=1; + sysPara->para.qrOption.type=1; + sysPara->para.qrOption.cntNum=digitalNum; + barVarFont = font; + barVarHeight=height; + barVarWidth =width; + //barcode->setCntCheckBoxHide(0); + barcode->setWindowTitle(tr("条形码变量设置")); + barcode->SetOption(&sysPara->para.bcOption); + barcode->show(); + + } + textEdit->mergeCurrentCharFormat(fmt); +#endif + } + else if(varType ==RANDOMNUM){ //12 + //digitalNum=13; + //qDebug()<<"digitalNum"<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->isChecked() && (pixelSize<=16)?(digitalNum*100 + 75):digitalNum) + .arg(height+1).arg(width*digitalNum)); //插入索引后 + + textEdit->mergeCurrentCharFormat(fmt); + } + else if(varType ==EXPIRYDATE){ + int varType1 = varType; + if(fontname.contains("bangla") ) + { + varType1= 10+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 20+varType; + } + else if(fontname.contains("Roman") ) + { + varType1= 30+varType; + } + + sysPara->print.ExpiryVar.splitMode=splitMode; + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + //dateFormat.insert(10,"x"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + //qDebug()<<"DateTime "<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(175):1) + .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 + sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); + textEdit->mergeCurrentCharFormat(fmt); + }else + { + if(splitMode == 3 || splitMode ==7 ) + { + height = fontMetrics.ascent(); + } + textEdit->insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 + sysPara->print.ExpiryVar.bold = ui->checkBoxBold->checkState(); + textEdit->mergeCurrentCharFormat(fmt); + } + } + else if(varType ==CURDATE ){ //81 :/80/image/expiryDate8.bmp qrc:/80/image/curDate8.bmp + int varType1 = varType; + if(fontname.contains("bangla") ) + { + varType1= 10+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 20+varType; + } + else if(fontname.contains("biyangF") ) + { + varType1= 30+varType; + } + + // 0xff00fc + //qDebug()<<"CurDateVar height"<print.CurDateVar.splitMode = splitMode; + font.setLetterSpacing(QFont::AbsoluteSpacing, sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + int dateTimeWidth = fontMetrics.width(DateTime) ; + qDebug()<<"insert splitMode="<insertHtml(QString("") + .arg(varType).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):1) + .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + }else + { + if(splitMode == 3 || splitMode ==7 ) + { + height = fontMetrics.ascent();//fontMetrics.ascent()+ fontMetrics.descent(); + } + textEdit->insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->checkState() && (pixelSize<=16)?(875):8) + .arg(height).arg(dateTimeWidth+4).arg(sysPara->para.textEditCharSpace)); //插入索引后 + qDebug() << "textEdit->insertHtml:"<toHtml(); + textEdit->mergeCurrentCharFormat(fmt); + } + } + else if(varType == CURCLASS) { //82 :/82/image/curDate1.bmp + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + int dateTimeWidth = fontMetrics.width("A") ; + int pixBmpSize = 1; + if (ui->checkBoxBold->checkState() && (pixelSize<=16)) { + pixBmpSize = 875; + } + else { + if(pixelSize >= 9) { + pixBmpSize = 91; + } + else { + pixBmpSize = 1; + } + } + qDebug()<<"height:"<insertHtml(QString("") + .arg(varType).arg(pixBmpSize) + .arg(height+1).arg(dateTimeWidth+2).arg(sysPara->para.textEditCharSpace)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + } + textEdit->setFocus(); + } +} + + +void TextEditOption::mergeFormatOnWordOrSelection(const QTextCharFormat &format) +{ + + QTextCursor cursor = textEdit->textCursor(); + //if (!cursor.hasSelection()) + // cursor.select(QTextCursor::WordUnderCursor); + //cursor.mergeCharFormat(format); + //textEdit->setTextCursor(cursor); + //qDebug()<<"mergeFormatOnWordOrSelection"<mergeCurrentCharFormat(format); +// auto font = format.font(); +// auto family = font.family(); +// auto size = font.pointSize(); + +// qDebug() << "mergeFormatOnWordOrSelection: " << textEdit->fontFamily(); +} + +void TextEditOption::updateSysParaToUI() //重载 +{ + if(sysPara){ + /*务必先设置行距*/ + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); + /*将文件打开*/ + QString file = QString(sysPara->para.lastOpenedFileName); + if(QFile::exists(file)){ + sysPara->sysFile =file; + onFileOpen(file,false); + } + dialogFontSize->setValue(sysPara->para.fontPixelSize); + } +} + +void TextEditOption::onMbSetLineAndChar(int line_space, int char_space) +{ + sysPara->para.textEditLineSpace = line_space; + sysPara->para.textEditCharSpace = char_space; + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); +} + +QLabel *TextEditOption::getLabelFontSize(){ + return ui->labelFontSize; +} + +QLabel *TextEditOption::getLabelFontFamily(){ + return ui->labFontFamily; +} + +void TextEditOption::setFontFormat(){ + if(sysPara){ + + qreal pixelSize = ui->labelFontSize->text().toFloat(); + if(pixelSize < Public::getMinFontPixelSize()) + pixelSize = sysPara->para.fontPixelSize; + + if(pixelSize < Public::getMinFontPixelSize()){ + pixelSize = Public::getMinFontPixelSize(); + } + + if (pixelSize >= 0) { + QTextCharFormat fmt; + int DPI = textEdit->logicalDpiX(); + DPI = DPI?DPI:1; + qreal pointSize = pixelSize*72/DPI; //Pixel = DPI * Point / 72 + fmt.setFontPointSize(pointSize); + +#ifdef VNLGXX + QString fontFamily = dialogFontSize->getFontFamily(); + +#else + QString fontFamily = ui->labFontFamily->text(); + fontFamily = dialogFontSize->getFontFamily(); + + if(ui->checkBoxBold->isChecked()) + fontFamily = getFamilyName(pixelSize); + ui->labFontFamily->setText(fontFamily); + ui->labelFontSize->setText(QString::number(pixelSize)); +#endif + + fmt.setFontFamily(fontFamily); + fmt.setFontWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16)? QFont::Bold:QFont::Normal); + mergeFormatOnWordOrSelection(fmt); + } + } +} + +void TextEditOption::currentCharFormatChanged(const QTextCharFormat &format){ + QFont font = format.font(); + //qDebug()<<"pixelSize:"<para.fontPixelSize = font.pointSize();// 以当前选择字体为准,保证选中界面勾选一致 + dialogFontSize->setValue(sysPara->para.fontPixelSize); + ui->checkBoxBold->setChecked(font.bold()); +} + +QPushButton * TextEditOption::getPushButtonPreview(){ + return ui->pushButtonPreview; +} +QCheckBox *TextEditOption::getCheckBoxBold(){ + return ui->checkBoxBold; +} + +void TextEditOption::on_pushButtonFile_pressed() +{ + if(sceneEditItem) + { + dialogFileOperation->refreshListView(TXTFILE); + dialogFileOperation->exec(); + } + else + { + dialogFileOperation->refreshListView(editMode); + dialogFileOperation->exec(); + } +} + +QString TextEditOption::getFamilyName(int fontsize){ +// return "YaHei"; + return "YaHei"+QString::number(fontsize); +} + +void TextEditOption::on_buttonSelectFont_pressed() +{ + // loadApplicationFonts(); + // checkFonts(); + if(dialogFontSize->exec() == QDialog::Accepted){ + int fontSize; + QString fontFamily; + dialogFontSize->getValue(&fontSize); + fontFamily = dialogFontSize->getFontFamily(); + if(ui->checkBoxBold->isChecked() && fontSize <= 16) + fontFamily = getFamilyName(fontSize); + + ui->labFontFamily->setText(fontFamily); +#ifdef EnableArabic + bool switchArabicFlag=false; + bool arabicSelect=fontFamily.contains("arabic"); + if((fontFamily=="biyang" || fontFamily=="wenquanyi")&&(fontSize==7 || fontSize==9)){ + switchArabicFlag=true; + emit EnableSwitchArabicFlag(switchArabicFlag); + }else { + emit EnableSwitchArabicFlag(switchArabicFlag); + } + dialogSaveFile->setFileNameEnglishOrArabic(false); + emit fontSizeArabicSelect(arabicSelect); +#endif + if(sysPara){ + sysPara->para.fontPixelSize = fontSize; + } + + bool isDefultBold = fontFamily != "WenQuanYi32" && fontFamily != "WenQuanYi24"; + ui->checkBoxBold->setEnabled(isDefultBold); +// ui->checkBoxBold->setChecked(!isDefultBold); + + ui->labelFontSize->setText(QString::number(fontSize)); + setFontFormat(); + textEdit->setFocus(); + emit fontSizeChange(fontSize); + bool flagBangal=false; + if(dialogFontSize->getFontFamily() == "bangla") + flagBangal = true; + emit switchBengalLanguage(flagBangal); + + toggleVirtualKeyboard(); + } + +} + +void TextEditOption::on_checkBoxBold_released() +{ + setFontFormat(); + textEdit->setFocus(); +} + + +void TextEditOption::onDialogLineSpaceAccepted(){ + dialogLineSpace->getValue(&sysPara->para.textEditLineSpace,&sysPara->para.textEditCharSpace); + sysPara->para.textEditLineSpace=sysPara->para.textEditLineSpace+1;//新系统行间距需要加1 + for(QTextBlock textBlock = textEdit->document()->begin();textBlock != textEdit->document()->end(); textBlock = textBlock.next()){ + QTextBlockFormat textBlockFormat = textBlock.blockFormat(); + textBlockFormat.setAlignment(Qt::AlignBottom); + textBlockFormat.setTopMargin(-1); + textBlockFormat.setBottomMargin(sysPara->para.textEditLineSpace-1); + QTextCursor textCursor = textEdit->textCursor(); + textCursor.setPosition(textBlock.position()); + textCursor.setBlockFormat(textBlockFormat); + textEdit->setTextCursor(textCursor); + } + + QFont font = textEdit->font(); + font.setLetterSpacing(QFont::AbsoluteSpacing,sysPara->para.textEditCharSpace); + textEdit->setFont(font); +} + +void TextEditOption::updateNetQRToEdit() +{ +#ifdef _2DCODE_ + QTextDocument* doc = textEdit->document(); + QTextCursor cursor(doc); + + // 查找并删除旧的网络二维码图片 + cursor.movePosition(QTextCursor::Start); + while (!cursor.atEnd()) { + // 先移动光标到下一个字符开头 + cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); + QTextCharFormat fmt = cursor.charFormat(); + + if (fmt.isImageFormat()) { + QString imgName = fmt.toImageFormat().name(); + // 匹配网络二维码图片(真实文件路径或资源占位符) + if (imgName.contains("networkQR.bmp") || imgName.contains(":/10/image/QR")) { + // 删除这个字符(图片) + cursor.deleteChar(); + break; + } + } + cursor.clearSelection(); + } + + // 在原来位置(或当前位置)插入新的二维码图片 + // 使用资源占位符 + QString imgHtml = QString("") + .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width); //插入索引后 + + cursor.insertHtml(imgHtml); + cursor.clearSelection(); +#endif +} + +void TextEditOption::on_buttonLineSpace_clicked() +{ + if(dialogLineSpace->exec() == QDialog::Accepted){ + onDialogLineSpaceAccepted(); + sysPara->saveParaToFile(); + textEdit->setFocus(); + sysPara->para.alterPrint.lineSpace = sysPara->para.textEditLineSpace; + } +} + +void TextEditOption::InsertQRCodeToEdit(QString barCodeName,int width,int height ,int enSave){ +#ifdef _2DCODE_ + textEdit->setText(""); + InsertQRCodeToEdit(barCodeName, width, height); + fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; + if(enSave) saveFile(); +#endif +} +void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ,int enSave){ +#ifdef _2DCODE_ + textEdit->setText(""); + InsertBarCodeToEdit(barCodeName, width, height); + fileName = DOC_ROOT_DIR +QFileInfo(barCodeName).baseName() +".html"; + if(enSave) saveFile(); +#endif +} +void TextEditOption::InsertBarCodeToEdit(QString barCodeName,int width,int height ) +{ +#ifdef _2DCODE_ + //dialogInsertVari->getValue(&varType,&digitalNum); + QTextCharFormat fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(barCodeName) + .arg(height).arg(width)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + //textEdit->setFocus(); + //qDebug()<<"TEOption:"<getValue(&varType,&digitalNum); + QTextCharFormat fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(barCodeName)//QFileInfo(barCodeName). + .arg(width).arg(height)); //插入索引后 + textEdit->mergeCurrentCharFormat(fmt); + //textEdit->setFocus(); + //qDebug()<<"TEOption:"<flagInsert ) { + qrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + qrcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + } + else { + if(sysPara->para.qrOption.type==0){ + textEdit->insertHtml(QString("") + .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->para.qrOption.type==1){ + textEdit->insertHtml(QString("") + .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->para.qrOption.type==2){ + textEdit->insertHtml(QString("") + .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + } + } + sysPara->saveParaToFile(); +#endif +} +void TextEditOption::onBarCodeClose(){ +#ifdef _2DCODE_ + bcPara_t bcoption; + if(barcode->flagInsert ) { + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + //qDebug()<<"onBarCodeClose"<para.bcOption.barType<para.bcOption.height; + barcode->GetOption2((bcPara_t*)&bcoption); + //qDebug()<<"onBarCodeClose"<para.bcOption.barType = bcoption.type; + barcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + + } + else + { + fmt = textEdit->currentCharFormat (); + textEdit->insertHtml(QString("") + .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height)); + + //插入索引后 + //qDebug()<") + // .arg(11).arg(bcoption.height).arg(bcoption.width).arg(bcoption.type*100+bcoption.height); + + int varType1= 7;//CNT1:7, CNT2:8 + int digitalNum; + if(sysPara->para.bcOption.var1En){ + digitalNum=sysPara->para.bcOption.var1Num; + textEdit->insertHtml(QString("%1%2").arg(sysPara->para.bcOption.TxtModule).arg(sysPara->para.bcOption.TxtLine)); + textEdit->insertHtml(QString("") + .arg(varType1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) + .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 + } + if(sysPara->para.bcOption.var2En) + { + digitalNum=sysPara->para.bcOption.var2Num; + textEdit->insertHtml(QString("") + .arg(varType1+1).arg(ui->checkBoxBold->isChecked() && (barVarHeight<=16)?(digitalNum*100 + 75):digitalNum) + .arg(barVarHeight+1).arg( barVarWidth*digitalNum)); //插入索引后 + } + + textEdit->mergeCurrentCharFormat(fmt); + } + } + sysPara->saveParaToFile(); +#endif +} + +void TextEditOption::onEditItemMode() +{ + ui->bottonNew->setDisabled(true); + ui->buttonSaveAS->setDisabled(true); + ui->pushButtonPreview->setDisabled(true); + ui->bottonSave->setText(tr("完成")); + sceneEditItem = true; +} +void TextEditOption::editItemModeDone() +{ + sceneEditItem = false; + ui->bottonNew->setDisabled(false); + ui->buttonSaveAS->setDisabled(false); + ui->pushButtonPreview->setDisabled(false); + ui->bottonSave->setText(tr("保存")); +} + +void TextEditOption::modbus_insert_pic(QString filename) +{ +// on_pushButtonFile_pressed(); + dialogFileOperation->modbus_openfile(filename); + +} + +void TextEditOption::updateSysParaToZero() //重载 +{ + if(sysPara){ + dialogLineSpace->setValue(sysPara->para.textEditLineSpace,sysPara->para.textEditCharSpace); + onDialogLineSpaceAccepted(); + } +} + +void TextEditOption::SetHiddenValue(bool select) +{ + dialogInsertVari->EnableHiddenValue(select); +} + +void TextEditOption::updateFileVariWidth(QString &str) +{ + QString patternNormalVar = ""; + updateNormalVarWidth(str,patternNormalVar); + + QString patternCurDateVar = ""; + updateProduceDateVarWidth(str,patternCurDateVar,2); + + QString patternExpiryDateVar = ""; + updateProduceDateVarWidth(str,patternExpiryDateVar,1); + +} + +void TextEditOption::updateNormalVarWidth(QString& str,const QString& pattern) +{ + QRegExp rx(pattern); + int from = 0; + // 正常变量 + while(from < str.size() && from != -1) { + from = str.indexOf(rx,from);//返回匹配到到起始地址 + bool ok; + if(from != -1){//找到匹配的 + int width = rx.cap(4).toInt(&ok)*(sysPara->status.addSpace?2:1); + int height = rx.cap(5).toInt(&ok); + int height2 = getVariableHight(height); + int digitalNum = rx.cap(3).toInt(&ok);//第二个匹配,数字到个数 + if(digitalNum>100){ //加粗 + digitalNum/=100; + ui->checkBoxBold->setChecked(true); + } + // 获取匹配的标签 + QString matchedTag = rx.cap(0); + // 构建新的标签,替换width属性值 + QString newTag = matchedTag; + int singlewidth = getSingleDigitWidth(height2); + int newWidth= (singlewidth + sysPara->para.textEditCharSpace) * digitalNum; + if(newWidth == width){ + from ++; + from+=newTag.length(); + continue; + } + newTag.replace(QString("width=\"%1\"").arg(rx.cap(4)), QString("width=\"%1\"").arg(newWidth)); + // 替换原始文本中的标签 + str.replace(from, rx.matchedLength(), newTag); + from ++; + from+=newTag.length(); + } + } +} + +void TextEditOption::updateProduceDateVarWidth(QString &str,const QString pattern,int mode){ + QRegExp rx(pattern); + int from = 0; + // 正常变量 + while(from < str.size() && from != -1) { + from = str.indexOf(rx,from);//返回匹配到到起始地址 + bool ok; + if(from != -1){//找到匹配的 + int width = rx.cap(3).toInt(&ok)*(sysPara->status.addSpace?2:1); + int height = rx.cap(4).toInt(&ok); + int digitalNum = rx.cap(2).toInt(&ok);//第二个匹配,数字到个数 + if(digitalNum>100){ //加粗 + digitalNum/=100; + ui->checkBoxBold->setChecked(true); + } + // 获取匹配的标签 + QString matchedTag = rx.cap(0); + // 构建新的标签,替换width属性值 + QString newTag = matchedTag; + int newWidth= getDateVarWidth(height,mode); + if(newWidth == width){ + return; + } + newTag.replace(QString("width=\"%1\"").arg(rx.cap(3)), QString("width=\"%1\"").arg(newWidth)); + // 替换原始文本中的标签 + str.replace(from, rx.matchedLength(), newTag); + from ++; + from+=newTag.length(); + } + } + } + + +int TextEditOption::getDateVarWidth(int height,int mode) +{ + int pixelSize = getVariableHight(height); + QFont font; + QString fontname = getVariableFontFamily(pixelSize); + font.setFamily( + fontname // 20160812 + ); + font.setPixelSize(pixelSize); + font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); + unsigned char splitMode=sysPara->para.ExpirySplitMode; + if(mode==1){ + sysPara->status.flagOfAdjustWidth_1 = 1; + sysPara->status.splitMode_Adjust_1= splitMode; + } + else if(mode ==2 ){ + sysPara->status.flagOfAdjustWidth_2 = 1; + sysPara->status.splitMode_Adjust_2= splitMode; + } + font.setLetterSpacing(QFont::AbsoluteSpacing, sysPara->para.textEditCharSpace); + QFontMetrics fontMetrics(font); + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + QString DateTime = QDateTime::currentDateTime().toString(dateFormat.value(splitMode)); + int dateTimeWidth = fontMetrics.width(DateTime) ; + return dateTimeWidth+4; +} + + +int TextEditOption::getSingleDigitWidth(int height) +{ + // int pixelSize = ui->labelFontSize->text().toInt(); + int pixelSize = height; + QFont font; + QString fontname= getVariableFontFamily(height); + font.setFamily( + fontname // 20160812 + ); + font.setPixelSize(pixelSize); + font.setWeight(ui->checkBoxBold->isChecked() && (pixelSize<=16) ?QFont::Bold:QFont::Normal); + font.setLetterSpacing(QFont::AbsoluteSpacing,0); + QFontMetrics fontMetrics(font); + int width = (fontMetrics.width("0")); + // int width = (fontMetrics.width("0123456789"))/10; + // if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + // width = (fontMetrics.width("0123456789.m "))/13; + // } + return width; +} + +int TextEditOption::getVariableHight(int height){ + + if(height<7){ + return 5; + }else if(height<9){ + return 7; + }else if(height <12){ + return 9; + }else if(height<16){ + return 12; + }else if(height<22){ //24点阵变量高23 + return 16; + }else if(height<30){ + return 24; + }else if(height>=30){ + return 32; + } +} + +QString TextEditOption::getVariableFontFamily(int height){ + QString fontFamily = "WenQuanYi12"; + if(height<7){ + fontFamily = "WenQuanYi5"; + }else if(height<9){ + fontFamily = "WenQuanYi7"; + }else if(height <12){ + fontFamily = "Dinkie9"; + }else if(height<16){ + fontFamily = "WenQuanYi12"; + }else if(height<22){ //24点阵变量高23 + fontFamily = "WenQuanYi16"; + }else if(height<30){ + fontFamily = "WenQuanYi24"; + }else if(height>=30){ + fontFamily = "WenQuanYi32"; + } + return fontFamily; +} + +void TextEditOption::showEvent(QShowEvent * e) +{ + ui->checkBoxBold->setEnabled(dialogFontSize->getFontFamily() != "WenQuanYi32" && dialogFontSize->getFontFamily() != "WenQuanYi24"); +// ui->checkBoxBold->setChecked(!ui->checkBoxBold->isEnabled()); + + + QWidget::showEvent(e); +} + + void TextEditOption::loadApplicationFonts() { + // 只需调用一次 + static bool fontsLoaded = false; + if (fontsLoaded) return true; + + QStringList fontPaths = { + "/usr/lib/fonts/Arial_5pt.bdf", + "/usr/lib/fonts/Arial_7pt.bdf", + "/usr/lib/fonts/Arial_9pt.bdf", + "/usr/lib/fonts/wq_wm_9_n.bdf", + "/usr/lib/fonts/wq_wm_12_n.bdf", + "/usr/lib/fonts/wq_wm_16_n.bdf", + "/usr/lib/fonts/wq_wm_24_n.bdf" + }; + + foreach (const QString &path, fontPaths) { + if (QFile::exists(path)) { + int fontId = QFontDatabase::addApplicationFont(path); + if (fontId == -1) { + qDebug()<< "Failed to load font:" << path; + } else { + qDebug()<< "Loaded font:" << path<< "ID:"<< fontId; + } + } + } + fontsLoaded = true; + +} + +void TextEditOption::checkFonts() +{ + // 检查所有可用字体家族 + QFontDatabase FontDB; + QStringList families = FontDB.families(); + foreach (const QString &family, families) { + qDebug()<< " " << family; + } +} + +void TextEditOption::toggleVirtualKeyboard() +{ + QInputMethod *inputMethod = QGuiApplication::inputMethod(); + if (inputMethod->isVisible()) { + inputMethod->hide(); + } else { + inputMethod->show(); + } +} + +#ifdef EnableArabic +void TextEditOption::changeArabicPage(int page){ + int fontSize; + dialogFontSize->getValue(&fontSize); + switch (page) { + case 1: + ui->labFontFamily->setText("biyangarabic"); + break; +// case 2: +// ui->labFontFamily->setText("biyangarabicb"); +// break; + case 3: + ui->labFontFamily->setText("biyangarabicc"); + break; + default: + ui->labFontFamily->setText(dialogFontSize->getFontFamily()); + break; + } + //ui->labFontFamily->setText(dialogFontSize->getFontFamily()); + if(sysPara){ + sysPara->para.fontPixelSize = fontSize; + } + ui->labelFontSize->setText(QString::number(fontSize)); + setFontFormat(); + textEdit->setFocus(); + emit fontSizeChange(fontSize); +} + +void TextEditOption::swithchEnglisOrArabic(bool flag){ + // qDebug()<<"englistOrArabicFlag:"<getValue(&fontSize); + dialogSaveFile->setFileNameEnglishOrArabic(flag); + if(flag){ + // if(fontSize==7 || fontSize==9 || fontSize==12){ + if(fontSize==9 || fontSize==7){ + ui->labFontFamily->setText("biyangarabic"); + }else{ + //fontSize=9; + //ui->labFontFamily->setText("biyangarabic"); + } + }else{ + if(fontSize==7 || fontSize==9){ + ui->labFontFamily->setText("biyang"); + }else{ + ui->labFontFamily->setText("wenquanyi"); + } + } + if(sysPara){ + sysPara->para.fontPixelSize = fontSize; + } + ui->labelFontSize->setText(QString::number(fontSize)); + setFontFormat(); + textEdit->setFocus(); + emit fontSizeChange(fontSize); +} +#endif + + +void TextEditOption::updateFontFamily(QString &result){ + // 定义正则表达式来匹配font-family属性 + QRegExp regex("font-family\\s*:\\s*'([^']+)'", Qt::CaseInsensitive); + regex.setMinimal(true); // 设置为最小匹配模式 + // 定义正则表达式来匹配font-size属性 + QRegExp regex2("font-size:(\\d+)pt"); + regex2.setMinimal(true); // 设置为最小匹配模式 + + int pos = 0; + pos = result.indexOf("

0) { + // 找到最近的font-size,进行替换 + int matchPos = regex2.indexIn(result, pos2); + if (matchPos != -1) { + QString fontSizeStr = regex2.cap(1); + int fontSize = fontSizeStr.toInt(); + QString newFontSize = getNewFontSize(fontSize); + QString newFontSizeStr = QString("font-size:%1pt").arg(newFontSize); + QString newFontFamily = getNewFontFamily(fontSize); + newFontFamilyStr = QString("font-family:'%1'").arg(newFontFamily); + result.replace(matchPos, regex2.matchedLength(), newFontSizeStr); + result.replace(pos, regex.matchedLength(), newFontFamilyStr); + break; + } + } + pos += newFontFamilyStr.length(); + } +} + +void TextEditOption::updateImageStyle(QString &html){ + QRegExp imgRx("]*)>", Qt::CaseInsensitive); + imgRx.setMinimal(true); + int pos = 0; + while ((pos = imgRx.indexIn(html, pos)) != -1) { + QString attr = imgRx.cap(1); // 原有属性 + if (attr.indexOf("vertical-align") != -1) { + // 已有 vertical-align: bottom + pos += attr.length(); + continue; + } else { + attr = attr.trimmed(); + if (attr.endsWith('/')) + attr.chop(1); + // 没有 style,直接插入 + attr += "style=\"vertical-align: bottom;\""; + } + // 3. 拼回 + QString newTag = QString("").arg(attr); + html.replace(pos, imgRx.matchedLength(), newTag); + pos += newTag.length(); + } +} + +QString TextEditOption::getNewFontSize(int fontsize){ + + switch (fontsize) { + case 5: + return "3.75"; + break; + case 7: + return "5.25"; + break; + case 9: + return "6.75"; + break; + case 12: + return "9"; + break; + case 16: + return "12"; + break; + case 24: + return "18"; + break; + case 32: + return "24"; + break; + default: + break; + } +} + + +QString TextEditOption::getNewFontFamily(int fontsize){ + switch (fontsize) { + case 5: + return "WenQuanYi5"; + break; + case 7: + return "WenQuanYi7"; + break; + case 9: + return "Dinkie9"; + break; + case 12: + return "WenQuanYi12"; + break; + case 16: + return "WenQuanYi16"; + break; + case 24: + return "WenQuanYi24"; + break; + case 32: + return "WenQuanYi32"; + break; + default: + break; + } + +} diff --git a/VerBVersion.h b/VerBVersion.h index 4886d79..8c3d38f 100644 --- a/VerBVersion.h +++ b/VerBVersion.h @@ -1,29 +1,29 @@ -#ifndef VERBVERSION_H -#define VERBVERSION_H -#include "myinclude.h" -/* - VX5.D.0826.0100_Std(-C) - MACHINAE_VER.PUMP_VER.MMdd.SUB_VER+SUB_RFID -*/ -#define MACHINAE_VER "VX5" -#define PUMP_VER "D" -//#define SUB_VER "0100" -#define SUB_VER "GuiLin" - -#ifdef __RFID_OLD -#define SUB_RFID "_RO" -#else -#define SUB_RFID "_Std" -#endif - -#ifdef __RFID_CARD -#undef SUB_RFID -#define SUB_RFID "-C" -#endif - - -#define VERNONBACH_VERSION(a,b,c) (((a)<<16) + ((b)<<8) + (c)) - -#define VERNONBACH_VERSION_CODE VERNONBACH_VERSION(UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER, UP_PRINTER_RIVISION_VER) - -#endif // VERBVERSION_H +#ifndef VERBVERSION_H +#define VERBVERSION_H +#include "myinclude.h" +/* + VX5.D.0826.0100_Std(-C) + MACHINAE_VER.PUMP_VER.MMdd.SUB_VER+SUB_RFID +*/ +#define MACHINAE_VER "VX5" +#define PUMP_VER "D" +//#define SUB_VER "0100" +#define SUB_VER "GuiLin" + +#ifdef __RFID_OLD +#define SUB_RFID "_RO" +#else +#define SUB_RFID "_Std" +#endif + +#ifdef __RFID_CARD +#undef SUB_RFID +#define SUB_RFID "-C" +#endif + + +#define VERNONBACH_VERSION(a,b,c) (((a)<<16) + ((b)<<8) + (c)) + +#define VERNONBACH_VERSION_CODE VERNONBACH_VERSION(UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER, UP_PRINTER_RIVISION_VER) + +#endif // VERBVERSION_H diff --git a/mainwindow.cpp b/mainwindow.cpp index c88b241..d3ce9c6 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,4610 +1,4612 @@ -/* -* -* -*2013-9-15高压报警停止充电 -*/ - -/* - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否初始化产品计数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - updateTotalCnt(0); - sysPara->devOp->clearProductCnt(1); - sysPara->saveParaToFile(); - - } - */ -#include "mainwindow.h" -#include "ui_mainwindow.h" -#include "InputMethod.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef Q_OS_WIN -#include -#else -#define reboot(a,...) (0 == 0) -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "DevOp.h" -#include "Public.h" -#include "LogInfo.h" -#include "QBarCode.h" -#include "scene/picscene.h" -#include -#include "MyInputMethod.h" -#include -#include "VerBVersion.h" -//#define SAVEWHENPREVIEW // 预览时先保存 -#include -#include -#include - -#define MDTFLAG 0xff00FF10 -#define QRFLAG 0xff00FF20 -#define BARFLAG 0xff00FF30 - -// 统一使用相同的掩码和比较值 -#define COLOR_MASK 0x00FFFFF0 // 忽略 Alpha 通道 -// 定义比较用的 RGB 值 -#define MDT_RGB 0x00FF10 -#define QR_RGB 0x00FF20 -#define BAR_RGB 0x00FF30 - -#define MMVAR 1 -#define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 - -#define EXPIRY_VARI_RECONISE 0x0000FF -#define RECICLARNUMBER 22 - -int firstGetFpgaVersionNumFlag=0; - -static int weekendPowerOff = 0; -unsigned char test_flag,open_close; -extern QFile PrintDatafile; -extern MyInputMethod *myInputMethod; - -MainWindow::MainWindow(QWidget *parent) : - QWidget(parent), - ui(new Ui::MainWindow) -{ - ui->setupUi(this); //不使用布局 - - //ui->textEdit->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); - QFont font = ui->textEdit->font(); - font.setPixelSize(12); - ui->textEdit->setFont(font); - previewFlag =0; - ui->textEditOption->bindText(ui->textEdit); - ui->textEditOption->bindPicWidget(ui->PicWidgetDisp); - ui->textEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); - //ui->textEditOption->setl -#ifdef _2DCODE_ - // dlgqrcode = new dlgQrCode(); - dlgqrcode = ui->textEditOption->qrcode; // 实时更新二维码,使用同一个界面 - //barcode = ui->textEditOption->barcode; - barcode = new QBarCode(); -#endif - //ui->pushButtonEditBarCode->hide(); - - connect(ui->labelFaultResume,SIGNAL(pressed()),this,SLOT(onLabelFaultRusumePressed())); -#ifdef EnableArabic - connect(ui->textEditOption,SIGNAL(fontSizeArabicSelect(bool)),myInputMethod,SLOT(getArabicFlag(bool))); - connect(myInputMethod,SIGNAL(selectArabicPage(int)),ui->textEditOption,SLOT(changeArabicPage(int))); - connect(myInputMethod,SIGNAL(switchEnglishOrArabic(bool)),ui->textEditOption,SLOT(swithchEnglisOrArabic(bool))); - connect(ui->textEditOption,SIGNAL(EnableSwitchArabicFlag(bool)),myInputMethod,SLOT(switchArabicFlag(bool))); -#endif - connect(ui->labelStatusHighVoltageFault,SIGNAL(pressed()),this,SLOT(onStatusHighVoltageFault())); - connect(ui->labelStatusInkLeak,SIGNAL(pressed()),this,SLOT(onStatusInkLeak())); - connect(ui->labelStatusInkSwint,SIGNAL(pressed()),this,SLOT(onStatusInkSwint())); - connect(ui->labelStatusInkWaterLevel,SIGNAL(pressed()),this,SLOT(onStatusInkWaterLevel())); - connect(ui->labelStatusRecycleWarn,SIGNAL(pressed()),this,SLOT(onStatusRecycleWarn())); - connect(ui->labelStatusSolvLevelWarn,SIGNAL(pressed()),this,SLOT(onStatusSolvLevelWarn())); - connect(ui->labelStatusViscosityWarn,SIGNAL(pressed()),this,SLOT(onStatusViscosityWarn())); - connect(ui->labelStatusChargefault,SIGNAL(pressed()),this,SLOT(onStatusChargefault())); - //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); labelStatusChargefault - //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); - - - connect(ui->textEdit,SIGNAL(textChanged ()),this,SLOT(ontextEdittextChanged())); - connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(onTextEditCursorPositionChanged())); - connect(ui->textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), ui->textEditOption, SLOT(currentCharFormatChanged(QTextCharFormat))); - - timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(displayTime())); - timer->start(1000); - airPushTimer = new QTimer(this); - connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess())); - timerShowItem = new QTimer(this); - connect(timerShowItem, SIGNAL(timeout()), this, SLOT(onShowAndHideItem())); - - timerPowerOff = new QTimer(this); - connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd())); - - printingFlag = false; - startPrintingFlag = false; - - connect(ui->labelProductCnt,SIGNAL(pressed()),this,SLOT(onLabelProductCntPressed())); - connect(ui->labelTotalProductCnt,SIGNAL(pressed()),this,SLOT(onLabelTotalProductCntPressed())); - connect(ui->textEditOption->getPushButtonPreview(),SIGNAL(pressed()),this,SLOT(onPushButtonPreviewPressed())); -#ifndef EnableArabic - connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); -#else - connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(setOpenFileName(QString))); -#endif - connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); - //edit@02-07 - connect(ui->textEditOption,SIGNAL(switchBengalLanguage(bool)),myInputMethod,SLOT(switchBangalInput(bool))); - - connect(ui->textEditOption,SIGNAL(PicfileNameOpen(QString,bool)),this,SLOT(openPicFIleOpen(QString,bool))); // 由TEXTOPTION界面按键触发 - connect(ui->pushButtonTXTOpen,SIGNAL(clicked()),ui->textEditOption,SLOT( showDlg())); - connect(ui->pushButtonCNTResetNow,SIGNAL(pressed()),this,SLOT(onPushButtonCNTResetNowPressed())); -#ifdef _2DCODE_ - connect(ui->pushButtonEditBarCode,SIGNAL(pressed()),this,SLOT(onEditBarCode())); - connect(ui->pushButtonQREnCode,SIGNAL(pressed()),this,SLOT(onEditQRCode())); - - connect(ui->textEditOption, SIGNAL(fontSizeChange(int)), barcode, SLOT(setFontSize(int))); - connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); - connect(dlgqrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); - - //专门处理网络发送的二维码 - connect(dlgqrcode,SIGNAL(sig_updateNetworkQR()),this,SLOT(slt_updateNetworkQR())); - connect(dlgqrcode, SIGNAL(sig_clearAllQRCode()), this, SLOT(slt_clearAllQRCode())); -#endif - connect(this,SIGNAL(ShowWarnningText(QString,QString)),this,SLOT(ShowWarnningText1(QString,QString))); - - msgtest = new QMessageBox(this); - connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); - - //QFile file(SYS_ROOT_DIR"UseEn"); - if( Public::ReadLanguageName()!="Chinese") - { - ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); - //ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); - ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); - if(Public::ReadLanguageName()=="Thai"){ - ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint3.png")); - ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint3.png")); - } - } - // 立即清零 -#ifdef ENGLISH - ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); - ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); - ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); -#endif - -#ifndef CLEARCNTNOW - ui->pushButtonCNTResetNow->hide(); -#endif - fileChange=true; - pushButtonFlag = true; - - if(sysPara) - { - sysPara->status.FileChangeRestCntFlag=0; - } - - Public::derivePixelSizeFromHeight(12); - pPicScene = new PicScene(this); - //edit@12-09 - pPicScene->setSceneRect(QRectF(0,0, 3999, 220)); - ui->graphicsView->setScene(pPicScene); - ui->graphicsView->centerOn(0,0); - ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit); - ui->senceEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); - connect(ui->senceEditOption,SIGNAL(generateQRCode(QString)),this,SLOT(onGenerateQRCode(QString))); - connect(ui->senceEditOption,SIGNAL(previewScene()),this,SLOT(onPreviewScene())); - connect(ui->textEditOption,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); - connect(this,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); - connect(ui->senceEditOption,SIGNAL(editItemMode()),ui->textEditOption,SLOT(onEditItemMode())); - connect(ui->textEditOption,SIGNAL(editItemDone()),ui->senceEditOption,SLOT(onEditItemDone())); - - connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); - connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); - - m_2sFlag = false; - moveToThread(&ShowThead); - ShowThead.start(); - ui->pushButtonStart->setHidden(true);//屏蔽紧急停机按钮 - ui->textEdit->viewport()->setProperty("cursor", QVariant(QCursor(Qt::IBeamCursor))); - - // 在 textChanged 信号中处理 - connect(ui->textEdit, &QTextEdit::textChanged, [=]() { - QTextCursor c = ui->textEdit->textCursor(); - QRect r = ui->textEdit->cursorRect(c); - int viewportWidth = ui->textEdit->viewport()->width(); - - if (r.right() > viewportWidth - 20) { - int diff = r.right() - viewportWidth + 20; - ui->textEdit->horizontalScrollBar()->setValue( - ui->textEdit->horizontalScrollBar()->value() + diff - ); - } - }); -} - -MainWindow::~MainWindow() -{ - disconnect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem())); - if (ShowThead.isRunning()) { - ShowThead.quit(); - ShowThead.wait(); - } - - delete ui; - delete timer; - delete pPicScene; - -} - -/*显示当前系统时间 */ -void MainWindow::displayTime() -{ - if(sysPara){ - ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.AD_FIXED/4)+"°C"); // 机箱温度 - ui->labDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); - - static bool CleanUPEn=1,preCleanUP=0; - if(!sysPara->para.isCheckMagnet) - { - CleanUPEn = (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT); - } - else - { - CleanUPEn = (sysPara->status.currReclaimTankPos<70) ; - } - if(CleanUPEn != preCleanUP){ - ui->pushButtonCleanUP->setEnabled(CleanUPEn); - } - preCleanUP=CleanUPEn; - if(m_2sFlag) - { - { - sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关 - sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); //控制供墨阀开关 - } - - } - } -} - -void MainWindow::bindSysPara(SysPara *sysPara){ - this->sysPara = sysPara; - ui->textEditOption->bindSysPara(sysPara); - ui->widgetPrintTextDisplay->bindSysPara(sysPara); -#ifdef _2DCODE_ - barcode->bindSysPara(sysPara); - dlgqrcode->setSysPara(sysPara); - dlgqrcode->barCodeFlag = this->sysPara->para.qrOption.barCodeFlag; - dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); -#endif -#ifdef PICSCENE - ui->senceEditOption->bindSysPara(sysPara); -#endif -} - -void MainWindow::updateSysParaToUI(){ - if(sysPara){ - //nothing here - ui->textEditOption->updateSysParaToUI(); - } -} - -void MainWindow::applyUIPara(){ - if(sysPara){ - - } -} - -void MainWindow::CheckStatus(int Flag){ - if(sysPara){ - static unsigned int lastProductCnt=0; - int AutoCount=0; - int bcAutoCount=0; - static int lastMinutes = 0; - //QDate curDate=QDate::currentDate(); - int currMinutes = QDateTime::currentDateTime().time().minute(); - int usbDate = sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum ||sysPara->status.classVariNum; - if(usbDate) - { - //qDebug()<<"CheckStatus"; - bool needSendPrintData=false; - //if(sysPara->print.CurDateVar.endRowPos && (sysPara->print.CurDateVar.day != curDate.day())) - if (sysPara->status.ExpiryVarNum && (lastMinutes != currMinutes)) - { - ExpiryDotUpdate(1); - needSendPrintData = true; - } - //if(sysPara->print.ExpiryVar.endRowPos && (sysPara->para.ExpiryDay != r_ExpiryDay)) - if(sysPara->status.CurrDateVariNum && (lastMinutes != currMinutes)) - { - ExpiryDotUpdate(2); - needSendPrintData = true; - } - if(sysPara->status.classVariNum && (lastMinutes != currMinutes)) - { - ExpiryDotUpdate(3); - needSendPrintData = true; - } - lastMinutes = currMinutes; - //sysPara->print.CurDateVar.day = curDate.day(); - if(needSendPrintData) - { - sysPara->status.ExpiryDispUpdate=10; - SendPrintDataToFpga(0); - } - //if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) - // ui->widgetPrintTextDisplay->update(); - //sysPara->status.ExpiryDispUpdate=1; - - } - if(sysPara->status.productCnt != lastProductCnt) - //if( sysPara->para.calandar_and_dat.cnt1CurrValue != sysPara->para.qrOption.counter ) - { - lastProductCnt = sysPara->status.productCnt; - //sysPara->para.qrOption.counter ++;//= sysPara->para.calandar_and_dat.cnt1CurrValue; - // 荆州-四机赛瓦要求:跟计数器同步 此处优化逻辑,增量大于0才+= - if (sysPara->para.qrOption.CntInc > 0) - sysPara->para.qrOption.counter += sysPara->para.qrOption.CntInc; - - AutoCount = (sysPara->status.QRvariNum?1:0); - //bcAutoCount = (sysPara->status.BCvariNum?1:0); -#ifdef MYARMTEST - qDebug()<<"CheckStatus:"<para.qrOption.counter<status.productCnt<para.qrOption.counter <status.QRvariNum; - } - //else qDebug()<<"P:"<status.productCnt; - - if( sysPara->para.qrOption.RecFromHost || AutoCount ) - { - sysPara->para.qrOption.RecFromHost=0; - sysPara->para.qrOption.type = sysPara->print.QRvars[0].type; - sysPara->para.qrOption.height = sysPara->print.QRvars[0].height; - sysPara->para.qrOption.width = sysPara->print.QRvars[0].width; - - if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) - { - onUpdateDispQRCode(1); // 更新二维码显示 - //qDebug()<<"PN:"<status.LightUpCnt ++ ; - if((sysPara->status.LightUpCnt%3) == 0){ - if(printingFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag) - sysPara->status.GreenLightOnFlag = true; - else - sysPara->status.GreenLightOnFlag = false; - if(sysPara->status.GreenLightOnFlag){ - if(!sysPara->para.isCheckPrintLight) - sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); - else - sysPara->devOp->controlGreenLight(true); - } - else{ - sysPara->devOp->controlGreenLight(false); // 只在确定不亮时才发关灯 - } - } - Test_Start_Stop(); - if(sysPara->status.circleProductCnt && (sysPara->status.productCnt >= sysPara->para.cnt1EndValue)) - { - if(sysPara) - { - sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt = 0; - } - } - } - - } -} - - -void MainWindow::RefreshStatusLight(){//100ms - if(sysPara){ - static int hdint = 0; - static int reclainTankReachEnd = 0; - if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关 - if (sysPara->status.reclainTankReachEnd) { - sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - } - } - hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT); - - if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底 - if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态 - sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - } - } - reclainTankReachEnd = sysPara->status.reclainTankReachEnd; - - if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){ - if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关 - ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - } - - if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){//喷头盖 - ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - - if(printingFlag && startPrintingFlag) - setRunStatus(tr("正在喷印...............")); - } - else { - ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - if(printingFlag && startPrintingFlag) - setRunStatus(tr("喷头盖开, 喷印无法正常进行!!!")); - } - - - if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告 - ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - strTitle = tr("墨水缸满报警"); - if(sysPara->devOp->isMixValveOpen()) { - sysPara->devOp->controlMixValve(false); //关掉混合阀 - } - } - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){ - ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - strTitle = tr("墨水液位报警"); - - - } - if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){ - ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - strTitle = tr("溶剂液位报警"); - - } - - if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){ - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - - } - else { - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - - } - - //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"))); - } - // HVfaultCnt=0; - //sysPara->status.HVFaultCloseEn=0; - } - else { - ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 - on_pushButtonPausePrint_pressed(); - 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(); - sysPara->status.reclaimTankBlockedAppending=1; - LogInfo::setRunStatusText(tr("高压故障,关回收槽")); - setRunStatus(tr("高压故障,关回收槽和墨线")); - } - sysPara->status.HVFaultCloseEn=1; - } - } - - } - - /*-----------------------------------------------------------------------------------*/ - 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"))); - } - else { - if(sysPara->status.viscosityFault==1){ - - ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - - } - else if(sysPara->status.viscosityFault==2) { - ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); - - } - } - } - sysPara->status.lastViscosityFault = sysPara->status.viscosityFault; - /*-----------------------------------------------------------------------------------*/ - if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie - if(sysPara->status.RecycleWarnCnt) - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - sysPara->status.RecycleWarnCnt = 0; - sysPara->status.lastRecycleWarn = 0; - } - else { - // 速度过快时墨线可能瞬时偏移导致误报回收故障,此时抑制计数器累加并重置,避免误触发关槽 - if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) - { - sysPara->status.RecycleWarnCnt = 0; - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); - } - else if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone) - { - if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY) - { - sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - sysPara->status.reclaimCloseCnt=100; - if(sysPara->para.RecycleWarnAction) - { - if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){ - on_pushButtonStopPrint_pressed(); - on_pushButtonReclaimTankClose_pressed(); - LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线")); - setRunStatus(tr("回收故障,关闭回收槽,关墨线")); - } - } - else setRunStatus(tr("回收故障.")); - - } - else - { - sysPara->status.RecycleWarnCnt ++ ; - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); - if(sysPara->status.RecycleWarnCnt%10==9) - LogInfo::setRunStatusText(tr("回收异常,墨线可能偏离.(%1)").arg(sysPara->status.RecycleWarnCnt)); - } - } - else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--; - } - - if(ui->labelRunStatus->text().length()<4){ - if(startPrintingFlag ){ - if(printingFlag) - setRunStatus(tr("正在喷印...............")); - else - setRunStatus(tr("暂停喷印...............")); - } - } - - // 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位 - ui->labPress->setText(QString("%1/%2").arg(sysPara->status.PRESSURE).arg(sysPara->para.pressure)); - ui->labViso->setText(QString("%1/%2").arg(sysPara->status.viscosity).arg(sysPara->para.viscosity) ); - if(sysPara->para.gearPumpEnable) - { - ui->labPosition->setText(QString("%1").arg(sysPara->status.gearPumpRunSpeed)); - } - else - { - ui->labPosition->setText(QString("%1/%2").arg(sysPara->status.SEPTAL_POSITION).arg(sysPara->para.septalPostion) ); - } - ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); - } -} - - -bool MainWindow::updatePhaseIndicatorLight(){ - if(sysPara==0) return 0; - - if(dlgMyWarringShowDlyCnt)dlgMyWarringShowDlyCnt--; - if(dlgMyWarringShowDlyCnt==1) dlgMyWarring.hide(); - - /*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/ - if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){ - //故障后必须等手动按故障恢复才会继续 - if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){ - if(sysPara->status.lastPhaseFault){ - sysPara->status.lastPhaseFault = 0; - ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - } - sysPara->status.phaseErrorCnt = 0; - } - else { - if(sysPara->status.phaseErrorCnt < 10) - sysPara->status.phaseErrorCnt ++ ; - else { - if(!sysPara->status.lastPhaseFault){ - ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - sysPara->status.lastPhaseFault = 1; - if(sysPara->status.flight_tm_error) - { - LogInfo::setRunStatusText(tr("相位故障:飞行时间错误!")); - } - if(sysPara->status.detect_phase_error) - { - LogInfo::setRunStatusText(tr("相位故障:相位检测错误!")); - } - - } - if(sysPara->para.powerOffAfterPhaseFault ){ - if(!sysPara->status.powerOffAfterPhaseFaultAppending){ - sysPara->status.powerOffAfterPhaseFaultAppending = 1; - _on_pushButtonPowerOff_pressed(false); - LogInfo::setRunStatusText(tr("相位故障,准备关机")); - setRunStatus(tr("相位故障,准备关机")); - strTitle = tr("相位故障,准备关机"); - - - } - } - else if(sysPara->para.suspendAfterPhaseFault){ - if(sysPara->para.stopCounterMeterAfterFault){ - if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 - on_pushButtonPausePrint_pressed(); - LogInfo::setRunStatusText(tr("相位故障,暂停打印")); - setRunStatus(tr("相位故障,暂停打印")); - strTitle = tr("相位故障,暂停打印"); - - } - } - else if(!sysPara->status.DACDisable){ - sysPara->devOp->printCtrl(PRINT_CTRL_DAC_DISABLE); - sysPara->status.DACDisable = true; - LogInfo::setRunStatusText(tr("相位故障,屏蔽DAC输出")); - setRunStatus(tr("相位故障,屏蔽充电")); - strTitle = tr("相位故障,屏蔽充电"); - - } - - } - } - } - - - return sysPara->status.lastPhaseFault; -} - -double MainWindow::getMaxSpeedCalcPara(){ - sysPara->para.printRowDelay = sysPara->para.currPrintMode; - if(sysPara->status.isPrinting == false) - sysPara->status.pixNumPerCol = sysPara->status.currPrintRow; - // else - // sysPara->status.currPrintRow = sysPara->status.pixNumPerCol; - sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol; - - sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100; - int dotNumPerCol = (sysPara->para.pixNumPerCol- sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.printRowDelay + 1) - + (sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.lineEndAdjustPointDelay + 1); - dotNumPerCol = sysPara->para.pixNumPerCol? - ((dotNumPerCol*(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum))/sysPara->para.pixNumPerCol):1; - // sysPara->para.dotNumPerCol += sysPara->para.printColDelay; - dotNumPerCol =( sysPara->para.alterPrint.enable)? dotNumPerCol/2:dotNumPerCol; - - int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) - int colNum = dotNumPerCol?dotNum/dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 - double pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 - - if(sysPara->para.divideRatio == 0 || sysPara->para.synPulseNumPerMm == 0) - return 600.0f; - - double freq = (FPGA_SYS_HZ/(sysPara->para.divideRatio*2)); - double ddotNumPerCol = sysPara->status.currPrintRow - (sysPara->status.currPrintRow * sysPara->para.reducedPixelNumRatio / 100.0); - pulseNum = sysPara->para.printColDelay / sysPara->para.synPulseNumPerMm / 1000.0 * freq / ddotNumPerCol * 60.0; - return qBound(0.0, pulseNum, 600.0); -} - -static int reclaimTankDelay = 0; -void MainWindow::updateSysStatusToUI(){ //100ms - if(sysPara){ - if(sysPara->para.gearPumpEnable) - { - ui->label_11->setText(tr("齿轮泵转速")); - } - else - { - ui->label_11->setText(tr("隔膜位置")); - } - RefreshStatusLight(); - if(sysPara->status.lastProductCnt != sysPara->status.productCnt){ //产品计数 - ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); - updateTotalCnt(0); - } - if(sysPara->status.ExpiryDispUpdate >0 ) - { - sysPara->status.ExpiryDispUpdate--; - ui->widgetPrintTextDisplay->update();// 2018.5.25 - } - if(sysPara->para.alterPrint.enable==1) ui->labelXFileName->setText (tr("交替打印")); - else if(sysPara->para.alterPrint.enable==2) ui->labelXFileName->setText (tr("电眼交替")); - else ui->labelXFileName->setText (""); - /*--------------------------------------------------------------------------*/ - //if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && printintFlag){ //同步器速度 - if(( - (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - ||(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) - ||(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - )&& sysPara->para.eleEyeTriggerSynPrintEn) - ) - )//&&printintFlag - { - if(sysPara->para.synPulseNumPerMm) { - - unsigned int tmp = ((unsigned int) sysPara->status.synPulseCntPer1s ) & 0xffffff; - unsigned int mm = tmp /sysPara->para.synPulseNumPerMm * 60; // 1min总脉冲/毫米脉冲数 = 1min走过的距离mm数 - int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) - int colNum = sysPara->para.dotNumPerCol?dotNum/sysPara->para.dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 - int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 - - int maxMM = 0; - if(!sysPara->para.charWidthSetEnable) - { - if( (sysPara->status.currPrintRow != 0) - && (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - /*&& (sysPara->para.currPrintMode == FAST_PRINT || sysPara->para.currPrintMode == STANDARD_PRINT) */){ - maxMM = calculateMaxSpeed(pulseNum); - maxMM = maxMM *60; - if(sysPara->para.alterPrint.enable) - { - maxMM = maxMM * 2; - } - } - else - { - maxMM = (pulseNum/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距 - // qDebug()<< "[Info] OLD COUNT mm" << maxMM; - } - } - else - { - double speed = getMaxSpeedCalcPara();//No67 - maxMM = int(speed * 1000.0); - } - ui->labelSynRate->setText(tr("%1.%2[%3.%4]米/分").arg(mm/1000).arg(mm%1000,3,10,QLatin1Char('0')) - .arg(maxMM/1000).arg(maxMM%1000,3,10,QLatin1Char('0'))); - } - else - ui->labelSynRate->setText(""); - sysPara->status.lastSynPulseCntPer1s = sysPara->status.synPulseCntPer1s; - } - else - ui->labelSynRate->setText(""); - - /*--------------------------------------------------------------------------*/ - if(sysPara->status.lastSynColDelay != sysPara->status.synColDelay){ - // if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL - ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - && sysPara->para.eleEyeTriggerSynPrintEn)) - ui->labelSynColDelay->setText(tr("列延时:%1点").arg(sysPara->status.synColDelay)); - sysPara->status.lastSynColDelay = sysPara->status.synColDelay; - } - /*--------------------------------------------------------------------------*/ - static int i=0; - i++; - if(sysPara->status.stm32Verion == 0){ - if(i % 10 == 0){ - sysPara->devOp->readSTM32Version(); - } - } - if(sysPara->status.stm32Time == 0){ - if(i % 10 == 0){ - sysPara->devOp->readSTM32Time(); - } - } - if(sysPara->status.fpgaVersionNum == 0){ //因为进入系统就会进主界面,马上就会将版本号读出 - if(i % 10 == 0){ - sysPara->devOp->readFpgaVersionNum(); - sysPara->devOp->readbuilDat(); - } - firstGetFpgaVersionNumFlag=1; - QString ARM_Version; - ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); - ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; - ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(0).arg(0).arg(0) ); - } - else{ - static bool logflag5 = true; - unsigned int num = sysPara->status.fpgaVersionNum & 0xf000; - if(num != 0x1000 && num != 0x6000 && num != 0x2000 && num != 0x8000 && logflag5){ - sysPara->status.fpgaVersionNum = 0; - } - else if(logflag5){ - emit readFPGAVersionReady(); - logflag5 = false; - sysPara->devOp->writeFpgaPrintPara(true); - QString ARM_Version; - ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); - ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; - ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12) - .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) ); - } - } - static bool logflag6 = false; - if(!logflag6){ - if(sysPara->status.fpgaVersionNum !=0 && sysPara->status.stm32Verion != 0){ - UpdateUIVersion(); - logflag6 = true; - } - } - - bool found_CNT1 = false; - bool found_CNT2 = false; - bool found_CNT3 = false; - bool found_CNT4 = false; - /*--------------------------------------------------------------------------*/ - if(sysPara->status.variNum && (ui->stackedWidgetText->currentWidget() == ui->pagePrintTextDisplay)){ - - bool updatePrintTextDisplayFlag = false; - - for(int i = 0; i < sysPara->status.variNum; i++){ - int val = 0; - switch( Public::getType(sysPara->status.vars[i].type)) - { - case CALANDAR_YEAR:val = sysPara->status.calandar_and_dat.year;break; - case CALANDAR_MONTH:val = sysPara->status.calandar_and_dat.month;break; - case CALANDAR_DAY:val = sysPara->status.calandar_and_dat.day;break; - case CALANDAR_WEEK:val = sysPara->status.calandar_and_dat.week;break; - case CALANDAR_HOUR:val = sysPara->status.calandar_and_dat.hour;break; - case CALANDAR_MINUTE:val = sysPara->status.calandar_and_dat.minute;break; - case CALANDAR_SECOND:val = sysPara->status.calandar_and_dat.second;break; - case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();found_CNT1=true;break; - case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();found_CNT2=true;break; - case CALANDAR_CNT3:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();found_CNT3=true;break; - case CALANDAR_CNT4:val = QString::number(sysPara->para.cnt4CurrValue,10).toInt();found_CNT4=true;break; - case RANDOMNUM : val = QString::number( sysPara->status.calandar_and_dat.RandomValue1, 16).toInt(); break; - case CALANDAR_XDAY:val = sysPara->status.XXXDay;break; - case EXPIRYDATE: break; - default:qDebug() << "error,unknown variable type:" << sysPara->status.vars[i].type; - } - - if(sysPara->status.vars[i].currVal != val) - //{ - updatePrintTextDisplayFlag = true; - sysPara->status.vars[i].currVal = val; - //} - - } - if(updatePrintTextDisplayFlag) //减少不必要的刷新动作 - { - ui->widgetPrintTextDisplay->updateSysStatusToUI(); - } - } - emit setCNT1Select(found_CNT1); - emit setCNT2Select(found_CNT2); - emit setCNT3Select(found_CNT3); - if(sysPara->para.isEnableGetDataButton) - { - ui->pushButtonGetData->setEnabled(true); - } - else - { - ui->pushButtonGetData->setEnabled(false); - } - if(SIMULATE_PRINTING_MODE) - enablePrintButton(true); - ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32)); - - if(sysPara->status.currReclaimTankPos <= 5) - sysPara->status.flagOfRebootEnable = true; - else - sysPara->status.flagOfRebootEnable = false; - if(sysPara->status.flagOfRebootEnable || TEST_MODE){ - ui->pushButton_Reboot->setEnabled(true); - }else{ - ui->pushButton_Reboot->setEnabled(false); - } -#ifdef NETWORKQRCODE //荆州-四机赛瓦要求:跟计数器同步 - // ========== 新增:检测计数器1变化并同步更新二维码 ========== - int currentCnt1Value = - QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue, 16).toInt(); - - if(sysPara->para.qrOption.counter != currentCnt1Value){ - - // 检查是否有二维码变量需要更新 - if(sysPara->status.QRvariNum > 0 && sysPara->para.qrOption.AutoCount){ - // 更新二维码选项中的计数器值 - sysPara->para.qrOption.counter = currentCnt1Value; - // 触发二维码重新生成 - onUpdateDispQRCode(1); - - // 如果正在打印,重新发送打印数据 - if(startPrintingFlag && printingFlag){ - SendPrintDataToFpga(0); - } - } - } - // ======================================================== -#endif - } -} - -void MainWindow::showPrintBitImage(){ - if(sysPara){ - unsigned char *dat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - }else{ - dat =sysPara->status.printDat; - } - for(int j = sysPara->status.currPrintCol - 1; j >= 0 ; j --){ - for(int i = 0; i < sysPara->status.currPrintRow; i++){ - if(dat[j*MAX_PRINT_ROW_BYTE_NUM + i/8] & (1<<(i%8))) - printf("1"); - else - printf(" "); - } - printf("\n"); - } - } -} - -//void MainWindow::on_pushButtonTXTOpen_pressed(){ - -//} - -void MainWindow::openPicFIleOpen(QString filePath,bool insertFlag) { - fileChange=true; -#ifdef TXTEDIT - ui->textEditOption->onFileOpenN(filePath,insertFlag); - emit setMainTabNow(0); -#else - Q_UNUSED(insertFlag); - - if(sysPara) { - - - - if(//filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || - //filePath.endsWith(".jpg") || - // ||filePath.endsWith(".bmp") - filePath.endsWith(".png")) - { - QFile file(filePath); - if(!file.open(QIODevice::ReadOnly)){ - QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); - return ; - } - else { - - QByteArray data = file.readAll(); - QTextCodec *codec = Qt::codecForHtml(data); - QString str = codec->toUnicode(data); - - if(filePath.startsWith(UDISK_DOC_ROOT_DIR)) - str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 - file.close (); - ui->PicWidgetDisp->loadImage (filePath,false); - ui->labelOpenedFileName->setText (QFileInfo(filePath).fileName()); - LogInfo::setRunStatusText(tr("打开文件:")+(QString)(QFileInfo(filePath).fileName())); - if(sysPara){ - //QString str1 =QFileInfo( filePath).fileName (); - sysPara->sysFile= PARA_ROOT_DIR+QFileInfo( filePath).baseName()+".dpn"; - sysPara->loadParaFromFile ();// 从磁盘读取参数文件 - emit openFileChange(); - // emit openFileChange(); - snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toLatin1().constData()); - } - /* other action */ - PreviewPressed(); - - - if(sysPara->status.addSpace) - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->widgetPrintTextDisplay->setScaleRatio(3); - //ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); - } - } - } -#endif - -} - -void MainWindow::on_pushButtonGetData_pressed() -{ - emit getJSONData(); -} - -void MainWindow::onPushButtonPreviewPressed(){ - if(sysPara) - { - sysPara->para.EditMode = TXTFILE; - if(previewFlag==0) { -#ifdef SAVEWHENPREVIEW - if(ui->textEditOption->fileName.isEmpty()){ - QMessageBox::StandardButton ret = QMessageBox::Ok; - ret = QMessageBox::warning(this, tr("提示"), - tr("文件未保存,是否先保存文件!"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok) - { - ui->textEditOption->on_bottonSave_clicked(); - } - } - else - ui->textEditOption->on_bottonSave_clicked(); -#else - -#endif - PreviewPressed(); - } - } -} - - -int MainWindow::getVarStarRow(int x,int y,int h,int w,char *dat) -{ - int t_x_start_pos = x; - int t_x_end_pos = t_x_start_pos + w; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); - int t_y_start_pos = y - h/2; - //int t_y_end_pos = y ; - if(t_y_start_pos < 0) - t_y_start_pos = 0; - - for(int j=y - h/2;j>0;j--) - { - char startRowFound=0; - for(int i = t_x_start_pos; i < t_x_end_pos; i++) - { - if( (dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8)))) - { - startRowFound=1; - dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] &=~ (1 << (j%8));//将画点取消掉 - } - } - if(startRowFound)continue; - t_y_start_pos=j+1; - // qDebug()<<"F:"<status.currPrintRow = 0; - sysPara->status.variNum = 0; - sysPara->status.QRvariNum = 0; - sysPara->status.ExpiryVarNum=0; - unsigned char *dat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - memset(dat,0,sizeof(sysPara->status.printDat_Normal)); - }else{ - dat =sysPara->status.printDat; - memset(dat,0,sizeof(sysPara->status.printDat)); - } - - //qDebug()<<"Preview:"; - //////////////////////////////////////////////////////在这里清变量参数 - sysPara->status.ExpiryVarNum=0; - sysPara->status.CurrDateVariNum = 0; - sysPara->status.classVariNum = 0; - sysPara->print.ExpiryVar.startColPos = 0; - sysPara->print.ExpiryVar.endRowPos = 0; - sysPara->print.ExpiryVar.letterSpace =0; - sysPara->print.CurDateVar.startColPos = 0; - sysPara->print.CurDateVar.endRowPos = 0; - sysPara->print.CurDateVar.letterSpace = 0; - ///////////////////////////////////////////////////////////////// - if(sysPara->para.EditMode==PICFILE) - { - - ui->PicWidgetDisp->getPrintDat (dat,0,sysPara); - ui->PicWidgetDisp->readVar (sysPara,0); - - // qDebug ()<<"v-n1:"<status.variNum<<"v-nLeter1:"<status.vars[0].letterSpace<<"v-nLeter2:"<status.vars[1].letterSpace<<"v-nLeter3:"<status.vars[2].letterSpace; - sysPara->status.variNum=ui->PicWidgetDisp->getVarNum (); - sysPara->status.currPrintCol=ui->PicWidgetDisp->getWidth (); - sysPara->status.currPrintRow=ui->PicWidgetDisp->getPicRealHeight(); - - ui->PicWidgetDisp->getCharRamData(sysPara); - - } - // end of PICFILE - else if(sysPara->para.EditMode==TXTFILE)// TXTFLE - { - sysPara->status.addSpace = sysPara->para.checkSpace; - ontextEdittextChanged(); - coldot = (int)ui->textEdit->document()->size().width(); - if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - { - coldot = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); - QMessageBox::warning(this, tr("警告"), - tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); - } - int maxPicHeight = MAX_PRINT_ROW_NUM + 12; - QSize size(coldot,maxPicHeight); - - sysPara->status.currPrintRow =0; - sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace - - - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff);//填充白色 - //image.fill(0x00f0f000);//填充白色 - QPainter painter(&image); - //image.save("./printImage.jpg"); - ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ - - image.save("./printImage.bmp"); - //ui->widgetPrintTextDisplay - int firstRow = maxPicHeight; - /*--------------------------------------------------------------------------*/ - for(int j = 0; j < maxPicHeight; j++){ //计算首行位置 - for(int i = 0; i < coldot; i++){ - QRgb rgb = image.pixel(i,j); - if(rgb !=0x00ffffff )//& 0xff000000) - { - //qDebug()<maxPicHeight)?maxPicHeight:lastRow; - sysPara->status.ExpiryVarNum=0; - sysPara->status.CurrDateVariNum = 0; - sysPara->status.classVariNum = 0; - sysPara->print.ExpiryVar.startColPos = 0; - sysPara->print.ExpiryVar.endRowPos = 0; - sysPara->print.ExpiryVar.letterSpace =0; - sysPara->print.CurDateVar.startColPos = 0; - sysPara->print.CurDateVar.endRowPos = 0; - sysPara->print.CurDateVar.letterSpace = 0; - - //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 - for(int j = 0; j < lastRow - firstRow; j++){ // Y - for(int i = 0; i < coldot; i++){ // - QRgb rgb = image.pixel(i,j + firstRow); - // 修改code判断逻辑 - long unsigned int rgbValue = rgb & COLOR_MASK; - - if(rgb&0x80000000) { //判断alpha,rgb<0xFFE0E0E0->过滤偏白背景 - if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 - - bool foundvar=0; - if(j>0){ - QRgb r_rgb = image.pixel(i,j + firstRow+1); - if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} - //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; - } - if(foundvar){ - if(sysPara->status.variNum < MAX_VARI_NUM){ - sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); - sysPara->status.vars[sysPara->status.variNum].endRowPos = j; - if(varLastRowstatus.variNum ++;TempVarNum++; - i+=5; - //qDebug()<<"VARr:"<status.QRvariNum>=4)continue; - if(rgbValue == MDT_RGB) { //MDT - handleCode(i,j,&varLastRow, MDT); - } - else if(rgbValue == QR_RGB) { //QR - handleCode(i,j,&varLastRow, QR); - } - else if(rgbValue == BAR_RGB) { //BAR - handleCode(i,j,&varLastRow, BAR); - } - - if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; - - } - //else if((rgb & 0xfffff0)==0xff00f0) - else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - bool foundExVar=0; - if(j>0){ - QRgb r_rgb = image.pixel(i,j + firstRow+1); - if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;} - } - if(foundExVar) - { - qDebug()<<"expiryVar:"; - //if(sysPara->status.ExpiryVarNum <3) - { - sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0); - sysPara->print.ExpiryVar.endRowPos = j; - if(varLastRowstatus.ExpiryVarNum == 0) - sysPara->status.ExpiryVarNum ++; - i+=10; - } - //else TempVarNum++; - //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 - } - } - else if((rgb & 0xfffff0)==0xff0cf0) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - //qDebug()<<"before found CurDateVar:"<0){ - QRgb r_rgb = image.pixel(i,j + firstRow+1); - if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} - } - if(foundExVar) - { - // qDebug()<<"found CurDateVar:"; - //if(sysPara->status.ExpiryVarNum <2) - { - sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0); - sysPara->print.CurDateVar.endRowPos = j; - if(varLastRowstatus.CurrDateVariNum == 0) - sysPara->status.CurrDateVariNum ++; - i+=10; - } - - //else TempVarNum++; - //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 - } - } - //else if((rgb & 0xffffff)==0x0032c8) - else if((rgb & 0x0000ff)>0x0000c0 && (rgb & 0x00ff00)>0x002F00 && (rgb & 0x00ff0000)==0x00000000) - { - //qDebug()<<"before found class:"<status.classVariNum <3) - { - EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ; - currCLass->startColPos = i+(sysPara->status.addSpace?i:0); - if (currCLass->startColPos>1) - currCLass->startColPos = currCLass->startColPos - 1; - currCLass->endRowPos = j; - if(varLastRowstatus.classVariNum == 0) - sysPara->status.classVariNum ++; - i+=5; - } - } - } - else { //Y = 0.299*R' + 0.587*G' + 0.114*B - int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; - if(y < 125 ) { - dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 - - if((j+1) > sysPara->status.currPrintRow) { - sysPara->status.currPrintRow = j+1; - } - } - } - }/*判断alpha end*/ - } - } - - // var - //qDebug() <<"VarNum"<8){ - setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); - strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); - strTitle.append("\r\n"); - strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); - QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); - } - - //qDebug()<status.vars[0].startRowPos<status.vars[0].endRowPos<< sysPara->status.currPrintRow; - // ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM - //qDebug()<<"qrvar"<status.QRvariNum; - searchQrVar(); - //if(sysPara->status.ExpiryVarNum) - searchExpiryVar(); - //ui->widgetPrintTextDisplay->update(); - //=============== - if(sysPara->status.variNum){ - // - /*--------------------------------提取变量------------------------------------------*/ - QString pattern = ""; - QRegExp rx(pattern); - QString textHtml = ui->textEdit->toHtml(); - - int from = 0; - int varNum = 0; - // 正常变量 - while(from < textHtml.size() && from != -1) { - from = textHtml.indexOf(rx,from);//返回匹配到到起始地址 - bool ok; - - if(from != -1){//找到匹配的 - from ++; - if(varNum < sysPara->status.variNum){ - - qDebug() << rx.capturedTexts(); - - sysPara->status.vars[varNum].digitalNum = rx.cap(4).toInt(&ok);//第二个匹配,数字到个数 - sysPara->status.vars[varNum].bold = (sysPara->status.vars[varNum].digitalNum%100) == 75; - if(sysPara->status.vars[varNum].bold) - sysPara->status.vars[varNum].digitalNum = sysPara->status.vars[varNum].digitalNum/100; - - sysPara->status.vars[varNum].type = rx.cap(2).toInt(&ok);//第一个匹配 - strcpy(sysPara->status.vars[varNum].fontname,rx.cap(3).toUtf8().data()); - sysPara->status.vars[varNum].width = rx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); - sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); - - //qDebug() <status.vars[varNum].startRowPos - // << "endRowPos" << sysPara->status.vars[varNum].endRowPos - // <<"Height"<status.vars[varNum].height; - //sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].startRowPos + sysPara->status.vars[varNum].height-1; - sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+1; - if(sysPara->status.vars[varNum].startRowPos<0)sysPara->status.vars[varNum].startRowPos=0; - //sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+(sysPara->status.vars[varNum].height==15||sysPara->status.vars[varNum].height==16?0:1); - // qDebug()<<"Hei:"<status.vars[varNum].height; - /*-----------------------------------------------------------------------------------------*/ - int t_x_start_pos = sysPara->status.vars[varNum].startColPos; - int t_x_end_pos = t_x_start_pos + sysPara->status.vars[varNum].width ; - if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); - int t_y_start_pos = sysPara->status.vars[varNum].startRowPos; - int t_y_end_pos = sysPara->status.vars[varNum].endRowPos+1 ; - if(t_y_start_pos < 0) - t_y_start_pos = 0; - for(int i = t_x_start_pos; i < t_x_end_pos; i++){ - for(int j = t_y_start_pos; j < t_y_end_pos; j++){ - - dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 - - } - } - - sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); - if(sysPara->status.vars[varNum].height>16 ){ - if(sysPara->status.vars[varNum].height==24) - ; - else { - if(sysPara->status.vars[varNum].startRowPos) - { - sysPara->status.vars[varNum].endRowPos--; - sysPara->status.vars[varNum].startRowPos--; - } - } - } - - if(sysPara->status.vars[varNum].type == RANDOMNUM) - { - //qDebug()<<"RAND:"<status.vars[varNum].type<< sysPara->status.vars[varNum].digitalNum; - sysPara->status.RandomDigitNum = sysPara->status.vars[varNum].digitalNum; - - - } - - if(sysPara->status.vars[varNum].type >59 && sysPara->status.vars[varNum].type<70) - { - sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].endRowPos-3; - sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].startRowPos-3; - } - /*-----------------------------------------------------------------------------------------*/ - int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[varNum].height); - - //qDebug()<<"MainWindows"<status.vars[varNum].height<status.vars[varNum].letterSpace = 0; - if(sysPara->status.vars[varNum].digitalNum){ //算出letterspace - QFont font; - //font.setFamily(Public::getFontFamily(pixelSize)); - font.setFamily(sysPara->status.vars[varNum].fontname); // 20160812 - //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); - // font.setPixelSize(pixelSize); - font.setPixelSize(sysPara->status.vars[varNum].height); - font.setWeight(sysPara->status.vars[varNum].bold?QFont::Bold:QFont::Normal); - font.setLetterSpacing(QFont::AbsoluteSpacing, 0); - QFontMetrics fontMetrics(font); - int charWidth = (fontMetrics.horizontalAdvance("0123456789")) / 10 ; - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - charWidth = (fontMetrics.horizontalAdvance("0123456789.m "))/13; - } - - sysPara->status.vars[varNum].letterSpace = - (sysPara->status.vars[varNum].width - charWidth * sysPara->status.vars[varNum].digitalNum) - / (sysPara->status.vars[varNum].digitalNum); - //sysPara->status.vars[varNum].width/sysPara->status.vars[varNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth; - } - - if(varNum<7) varNum ++; - } - else - { - qDebug() << tr("warning,界面上有变量未显示完全"); - } - } - } - } - - //if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<status.vars[0].endRowPos ; - - /*--------------------------------------------------------------------------*/ - generateCharRamData(); - - /*---------------------------------------------------------------------------*/ - //sysPara->status.currPrintRow ++;//总的行数,从1~n,而不是从0~n, - //if(sysPara->status.currPrintRow>39)sysPara->status.currPrintRow=39; - if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1) sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; - bool found=0; - - lastRow = sysPara->status.currPrintRow; - //qDebug()<<"lastRow:"<status.currPrintRow; j >2 ; j--){ //计算首行位置 - for(int i = 0; i < coldot; i++){ - if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ - lastRow = j+1; - found=1;//qDebug()<<"fOUND:"<status.currPrintRow; - break; - } - } - if(found) - break; - } - if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow =MAX_PRINT_ROW_NUM-1; - if(lastRow20 &&lastRow<=25) lastRow =24; - - sysPara->status.currPrintRow =lastRow; - //sysPara->status.currPrintRow = (lastRow > varLastRow) ? lastRow : varLastRow; //配合賴工省点打印少行問题 - - if(sysPara->status.specialVarPrint.SpecialVarEnable) - { - sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 20240716 - } - } - // end of TxtMode - - // 交替打印 - // sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; - - -#ifdef _2DCODE_ - if(sysPara->status.QRvariNum) { - onUpdateDispQRCode(1); - } -#endif - //if(sysPara->status.currPrintRow==11) sysPara->status.currPrintRow=12; - int wmax = sysPara->status.currPrintRow; - sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; - if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; - else { - if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1; - wmax = sysPara->status.currAlterPrintRow; - } - /*-------------------------------切换到显示窗口-----------------------------------*/ - if(sysPara->status.addSpace) - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); - else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); - - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, - sysPara->para.AlterMode? - sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); - ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); - ui->widgetPrintTextDisplay->update(); - //qDebug()<<"3"<status.currPrintRow; - } - previewFlag=0; -} - -void MainWindow::showDat(unsigned char * Dat) -{ - Q_UNUSED(Dat); -} -void MainWindow::alterDataPrint(unsigned char m) -{ - if(sysPara) - { - - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - emit ui->widgetPrintTextDisplay->update(); - - } -} - -void MainWindow::generateCharRamData(){/* 生成字模数据 */ - if(sysPara->status.variNum){ - QTextEdit textEdit; - textEdit.document()->setDocumentMargin(0); - textEdit.setLineWrapMode(QTextEdit::NoWrap); - int ramAddress = 0; - int i; - qDebug()<<"sysPara->status.variNum:"<status.variNum; - for( i = 0; i < sysPara->status.variNum; i++){ - vars_t *p_var = &sysPara->status.vars[i]; - p_var->bassAddr = -1; - if(p_var->original){ //清除原来的记录 - if(p_var->dat){ - free(p_var->dat); - } - p_var->original = false; - } - - int width; - if(p_var->bassAddr == -1){ - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide) - width = (p_var->digitalNum)?(13*(p_var->width/p_var->digitalNum)):12; - else - width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12; - int width2 = width;//+(sysPara->status.addSpace?width:0); - int height = Public::derivePixelSizeFromHeight(p_var->height); - // int height = p_var->height; - - textEdit.clear(); - int DPI = textEdit.logicalDpiX(); - DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 - - auto fontFamily = QString(p_var->fontname); - textEdit.setFontFamily(fontFamily); - - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - textEdit.insertHtml(QString("0123456789.m ") - .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*96/DPI).arg(p_var->bold?600:400)); //600表示加粗,400表示普通 - }else{ - textEdit.insertHtml(QString("0123456789") - .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*96/DPI).arg(p_var->bold?600:400)); - } - - - QFont font = textEdit.font(); - font.setLetterSpacing(QFont::AbsoluteSpacing, p_var->letterSpace); - textEdit.setFont(font); - // width = p_var->width; - qDebug() << "letterSpace: " << p_var->letterSpace<< "font:" << font.family()<< "font width:" << width; - int imgHeight = height + 12; - QSize size(width,imgHeight); - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff); - QPainter painter(&image); - textEdit.show(); //如果不显示,似乎不会绘制 - textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ - - QString fileName = "/home/plg/doc/002.html"; - QTextDocumentWriter writer(fileName); - bool success = writer.write(textEdit.document()); - - textEdit.hide(); - image.save(QString::number(i) + "varRam.png"); - // 找到最下面的行 - int lastValidRow = 0; - for(int k = imgHeight - 1; k >= 0 ; k--){ - for(int j = 0; j < width; j ++){ - QRgb rgb = image.pixel(j,k); - if(rgb&0xff000000){ - lastValidRow = k + 1; - break; - } - } - if(lastValidRow != 0) - break; - } - - qDebug()<<"lastValidRow"<endRowPos<< p_var->startRowPos; - int rowDiff = p_var->endRowPos - p_var->startRowPos; - - int firstValidRow = -1; // 变量的第一行所处的行地址 - for(int y = 0; y < image.height(); ++y) { - for(int x = 0; x < image.width(); ++x) { - if(image.pixel(x, y) & 0xff000000) { - firstValidRow = y; - break; - } - } - - if(firstValidRow != -1) - break; - } - - firstValidRow = qMax(firstValidRow, 0); - - int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 一列占用字节数 - if (rowByteNum > 0) {// 防崩溃保护 - unsigned char *dat = (unsigned char *)calloc(width2,rowByteNum); - for(int k = firstValidRow; k < lastValidRow; k++){ - for(int j = 0; j < width; j ++){ - QRgb rgb = image.pixel(j,k); - - int currRow = k - firstValidRow; - if(((rgb >> 24)&0xff) > 0x80){ // 判断是否有效的像素点 - dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); - } - } - } - p_var->bassAddr = ramAddress; - p_var->datHeight = height; - - p_var->datWidth = width2; - p_var->rowByteNum = rowByteNum; - p_var->dat = dat; - p_var->original = true; - p_var->currVal = -1; //相当于初始化 - ramAddress += rowByteNum * width2; - } else { - qDebug() << "startRowPos:" << p_var->startRowPos - <<" endRowPos:" << p_var->endRowPos - <<" rowDiff:" << rowDiff - << " 按原逻辑,执行这一步的时候软件就已经崩溃了"; - } - - } - } - } -} - -void MainWindow::updateTotalCnt(int en) -{ - // No50 USEING - //sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt: - // (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0; - //if(en) sysPara->para.totalProductCnt=0; - - //sysPara->para.totalProductCnt = sysPara->status.totalProductCnt; // No51版本改进 - sysPara->status.lastProductCnt = sysPara->status.productCnt; - ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); - ui->labelTotalProductCnt->setText(QString::number( sysPara->para.totalProductCnt+sysPara->status.totalProductCnt)); - -} -static int numOfTextChange = 0; -void MainWindow::on_pushButtonStartPrint_pressed() -{ - unsigned int type = sysPara->status.fpgaVersionNum >> 12; - if(sysPara->status.isPrinting){ - qDebug("Mainwindow: Printing 开始打印"); - }else{ - qDebug("Mainwindow: Non printing 开始打印"); - } - static int fileCount = 0; - fileCount++; - if(fileCount > 5) - { - fileCount = 1; - } - - if(sysPara){ - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - test_flag = 0; - /******2020/2/29*****/ - if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && type == 8) //同步模式下,判断喷印间隔是否设置合理 - { - QSizeF size = ui->textEdit->document()->size(); - float stroke,print_len_min; - stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; - print_len_min = stroke * size.width(); - if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) - { - QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); - return; - } - } - /******2020/2/29 end*****/ -#ifndef FPGATEST - if(!SIMULATE_PRINTING_MODE){ - if (!sysPara->status.reclainTankReachEnd) { - return; - } - if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ - QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); - return ; - } - if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ - QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!")); - return ; - } - } -#endif - sysPara->devOp->highVoltageCtrl(1); - sysPara->devOp->setHighVoltageAmplitudetoSTM32(); - sysPara->status.waitHightVolOff = 0; - if(!printingFlag)setRunStatus(tr("正在加高压...")); - // 复位计数器 - if(sysPara->status.FileChangeRestCntFlag){ - if(sysPara->para.ResetAllProductCntEn) - { - sysPara->devOp->clearProductCnt(3 | 0x10); // [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt=0; - } - else if(sysPara->para.ResetProductCntEn) - { - sysPara->devOp->clearProductCnt(3); - } - sysPara->status.FileChangeRestCntFlag=0; - sysPara->saveParaToFile(); - } - if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) - PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 - else if(sysPara->para.EditMode == SCENE) - onPreviewScene(); - - if(numOfTextChange >= 5){ - numOfTextChange = 0; - emit autoUpdateFontWidthByMainWindow((const unsigned int)sysPara->status.currPrintCol); - } - - if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ - QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); - return ; - } - // LogInfo::setRunStatusText(tr("有效打印区域 %1行 x %2 列").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); - //if(sysPara->para.printTriggerMode != PRINT_TRIGGER_SYNCHRONIZER) - if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL - ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - && sysPara->para.eleEyeTriggerSynPrintEn)) - ) - { - int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay; - long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000); - if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs) - && (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD) - && (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME ) - ) // 在电眼方式下,是否需要判呢? - { - QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs)); - return ; - } - } - sysPara->status.isPrinting=false; - - setRunStatus(tr("开始打印1")); - qDebug()<textEdit->toPlainText()); - - SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, - if(sysPara->para.isCheckInsertTime) - { - if(!startPrintingFlag) - { - LogInfo::setRunStatusText(tr("开始打印")); - } - } - else - { - LogInfo::setRunStatusText(tr("开始打印")); - } - /*-------------------------------------------------------------------*/ - ui->labelSynColDelay->setText(""); - sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据 - /*--------------------------------暂停按钮------------------------------*/ - ui->pushButtonPausePrint->setEnabled(true); - // ui->pushButtonPausePrint->setText(tr("暂停打印")); - /*---------------------------------开关回收槽------------------------------*/ - enableReclaimCtrlButton(false); - updatePrintDisplayLabel(); - // 20170717 移动此,以观察条形码打印异常问题。 - if(!startPrintingFlag) - { - sysPara->devOp->printCtrl(PRINT_CTRL_START); - printingFlag = true; - } - else - { - //如果已经在打印,则不要在发送start命令,只要更新相应的数据即可 - if(!printingFlag) //如果在暂停,重复取消暂停 - on_pushButtonPausePrint_pressed(); - } - startPrintingFlag = true;sysPara->status.isPrinting=true; - } -} -unsigned char blankDat1[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]={0}; -void MainWindow::SendPrintDataToFpga(unsigned char alterEnable) -{ - if(!sysPara) return ; - fileChange=false; - - sysPara->devOp->writeFpgaPrintPara(1); /*务必放在最后一步*/ - sysPara->devOp->writeFpgaVariCtrl(); - - sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址 - // 交替打印处理 - unsigned char *dat; - size_t sizeofdat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - sizeofdat = sizeof(sysPara->status.printDat_Normal); - }else{ - dat =sysPara->status.printDat; - sizeofdat = sizeof(sysPara->status.printDat); - } - if(sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM <= 20000) - sysPara->devOp->fpgaWr(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); - else - sysPara->devOp->fpgaWrD2(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); -} -int MainWindow::getCurrPrintStatus() -{ - int printStatus; - if (startPrintingFlag ) { - if(printingFlag) { - printStatus = 1; // 正在打印 - } - else { - printStatus = 2; // 暂停喷印 - } - } - else { - printStatus = 3; // 停止打印 - } - return printStatus; -} - -void MainWindow::updatePrintDisplayLabel(){ - if(sysPara && !sysPara->status.reclainTankReachEnd){ - setRunStatus(tr("回收槽未到底!!!!!!")); - } - else if(startPrintingFlag ){ - if(printingFlag) - setRunStatus(tr("正在喷印...............")); - else - setRunStatus(tr("暂停喷印...............")); - } - else - setRunStatus(""); -} - -void MainWindow::on_pushButtonStopPrint_pressed() -{ - if(sysPara->status.isPrinting){ - qDebug("Mainwindow: Printing 停止打印"); - }else{ - qDebug("Mainwindow: Non printing 停止打印"); - } - - if(sysPara){ - -#ifndef FPGATEST - if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { - return; - } -#endif - - sysPara->status.flagOfAbnormalStatus = false; - sysPara->status.isPrinting=false; - sysPara->devOp->printCtrl2(1); - sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT - LogInfo::setRunStatusText(tr("停止打印")); - ui->pushButtonStartPrint->setEnabled(true); - - ui->pushButtonPausePrint->setEnabled(false); - // ui->pushButtonPausePrint->setText(tr("暂停打印")); - enableReclaimCtrlButton(true); - printingFlag = false; - startPrintingFlag = false; - updatePrintDisplayLabel(); - sysPara->status. waitHightVolOff = 1; - sysPara->saveParaToFile(); // 将相关配置保存 - - if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) - { - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("提示"), - tr("随机码文本将展出到U盘,请插入U盘"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); - sysPara->devOp->RandTxtBakup(0); //备份到U盘 - LogInfo::setRunStatusText("随机码文件导出完成."); - } - } - } -} - -void MainWindow::on_pushButtonPausePrint_pressed() -{ - if(sysPara){ - if(sysPara->status.WorkTimeOut && !SIMULATE_PRINTING_MODE) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); - return; - } - if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { - return; - } - sysPara->devOp->printCtrl(PRINT_CTRL_PAUSE); - LogInfo::setRunStatusText(printingFlag?tr("暂停打印"):tr("继续打印")); - ui->pushButtonStartPrint->setEnabled(true); - printingFlag = !printingFlag; - if(printingFlag) - { - ui->pushButtonPausePrint->setText(tr("继续打印\n保持高压")); - ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(0, 255, 0)}"); - sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - } - else - { - ui->pushButtonPausePrint->setText(tr("暂停打印\n停止高压")); - ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(255, 0, 0)}"); - } - updatePrintDisplayLabel(); - sysPara->saveParaToFile(); // 将相关配置保存 - - if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) - { - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("提示"), - tr("随机码文本将展出到U盘,请插入U盘"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); - sysPara->devOp->RandTxtBakup(0); //备份到U盘 - LogInfo::setRunStatusText("随机码文件导出完成."); - } - } - } -} - -void MainWindow::resetReclaimCtrlButtonText(){ - ui->pushButtonReclaimTanOpen->setText(tr("开")); - ui->pushButtonReclaimTankClose->setText(tr("关")); -} - -void MainWindow::enableReclaimCtrlButton(bool enable) { - ui->pushButtonReclaimTanOpen->setEnabled(enable); - ui->pushButtonReclaimTankClose->setEnabled(enable); -} - -void MainWindow::enablePushButtonStart(bool enable) -{ - ui->pushButtonStart->setEnabled(enable); -} - -void MainWindow::enablePrintButton(bool enable){ - ui->pushButtonPausePrint->setEnabled(false); -#ifdef FPGATEST - enable = true; -#endif - - ui->pushButtonStartPrint->setEnabled(enable); - ui->pushButtonStopPrint->setEnabled(enable); -} - -void MainWindow::airPushingProcess() -{ - if(sysPara){ - if (sysPara->status.airPushing) { - setRunStatus(tr("正在排气 ...............")); - //qDebug()<< "start airPushingProcess "<status.airPushingOnTime; - // 执行排气 4 秒 - sysPara->status.airPushingOnTime += 100; - - if(sysPara->para.airPushDurationSec <= 0 || sysPara->para.airPushDurationSec > 30) { - sysPara->para.airPushDurationSec = 4; - sysPara->saveParaToFile(); - } - - // 延迟 半秒后才开回收槽,正式结束排气阶段 - if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 500){ - //qDebug()<< "start stop"; - reclaimTanOpen(); - sysPara->status.airPushingDone = 1; - sysPara->status.airPushing = 0; - sysPara->status.airPushingOnTime = 0; - airPushTimer->stop(); - return; - } - - if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){ - sysPara->devOp->controlViscosityPump(false); - sysPara->devOp->controlCycleValve(false); - - if(!sysPara->devOp->isReclaimPumpOpen()) - sysPara->devOp->controlReclaimPump(true, false); - - return; - } - } - } -} - -void MainWindow::reclaimTanOpen() -{ - // 还原当前模式 - if (sysPara->status.airPushing) { - sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore; - } - sysPara->status.isPumpValveControledByHand = false; - sysPara->devOp->mainInkCtrl(); - sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 - MySleep(1000); - sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); - ui->pushButtonReclaimTanOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("停止"):tr("开")); - ui->pushButtonReclaimTankClose->setText(tr("关")); - enablePrintButton(SIMULATE_PRINTING_MODE); - sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/ - // sysPara->status.reclaimTankstatus = 1; - setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开")); - if (!sysPara->para.reclaimTankTime) { - LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); - } - sysPara->status.currReclaimOperationCnt = 0; - sysPara->status.reclainTankReachEnd = false; - sysPara->status.reclainOpenAppending = true; - sysPara->status.reclainCloseAppending = false; - sysPara->status.reclaimBlockedCnt = 0; - sysPara->status.canRunAirPushing = false; -} - -void MainWindow::handleCode(int col, int row, int *varLastRow, int type) -{ - int idx = sysPara->status.QRvariNum; - sysPara->print.QRvars[idx].type=type; - sysPara->print.QRvars[idx].countEn=1; - sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; - sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0); - sysPara->print.QRvars[idx].endRowPos=row+1; - if(*varLastRowstatus.QRvariNum++; -} - -void MainWindow::handleCodeScene(int col, int row, int *varLastRow, int type, int textItemPosX, int textItemPosY) -{ - int idx = sysPara->status.QRvariNum; - sysPara->print.QRvars[idx].type=type; - sysPara->print.QRvars[idx].countEn=1; - sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; - sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0)+textItemPosX; - sysPara->print.QRvars[idx].endRowPos=row+1+textItemPosY; - if(*varLastRowstatus.QRvariNum++; -} - -void MainWindow::on_pushButtonReclaimTanOpen_pressed() -{ - if(sysPara){ - if (!sysPara->status.reclaimTankBlockedAppending) { - if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { // 回收槽关闭的情况下才可以执行排气;//2019/10/24 当回收槽未在顶的位置,不需要排气 - if (!sysPara->status.airPushing) { // 先执行排气后开回收槽 - sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand; - sysPara->status.isPumpValveControledByHand = true; - sysPara->devOp->mainInkCtrl(); - sysPara->devOp->controlCycleValve(true); - sysPara->devOp->controlViscosityPump(true);//关粘度泵 - sysPara->devOp->controlMainInkPump(true);//主墨泵敞开 - sysPara->devOp->mainInkCtrl(); - sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 - sysPara->devOp->controlInkValve(true); //墨水阀 - sysPara->devOp->controlInkValvePWM(true); //墨水阀 - //qDebug()<< "start airpushings"; - - sysPara->status.airPushing = 1; - sysPara->status.airPushingDone = 0; - sysPara->status.airPushingOnTime = 0; - airPushTimer->start(100); // 100ms - } - } - else - reclaimTanOpen(); - } - if(sysPara->status.reclaimTankBlockedAppending) { - sysPara->status.reclaimTankBlockedAppending = false; - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10; - onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10); - } - } - } -} - -void MainWindow::on_pushButtonReclaimTankClose_pressed() -{ - if(sysPara){ - if(sysPara->status.reclaimTankBlockedAppending){ - sysPara->status.reclaimTankBlockedAppending = false; - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->status.currReclaimTankPos = 0; - onReclainTankPositionChanged(0); - } - } - - sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); - ui->pushButtonReclaimTanOpen->setText(tr("开")); - ui->pushButtonReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("停止"):tr("关")); - enablePrintButton(SIMULATE_PRINTING_MODE); - sysPara->devOp->highVoltageCtrl(0); - // sysPara->status.reclaimTankstatus = 2; - setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭")); - if(!sysPara->para.reclaimTankTime){ - LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); - } - sysPara->status.currReclaimOperationCnt = 0; - sysPara->status.reclainTankReachEnd = false; - sysPara->status.reclainOpenAppending = false; - sysPara->status.reclainCloseAppending = true; - sysPara->status.reclaimBlockedCnt = 0; - - } -} - -void MySleep(unsigned int msec); -/* - * 关机前务必保存参数 - * */ -void MainWindow::checkForPowerOff(){ - if(sysPara->status.powerOffAppending){ - if(!sysPara->status.selfCheckDone) - sysPara->status.selfCheckDone = true; - this->setDisabled(true); - emit setDisableAll(); - ////////关机时提高转速和回收泵压力,粘度泵和循环阀///// - quint16 gearPumpValue_backup = sysPara->para.gearPumpValue; - int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;; - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) - { - if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ - for(int i=25;i>21;i--) - { - if(i == 25){ - sysPara->status.isPumpValveControledByHand = true; //停止自动 - sysPara->devOp->controlInkValve(true); - sysPara->devOp->controlInkValvePWM(true); - sysPara->devOp->controlReclaimPump(true,true); - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlCycleValve(true); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - if(i == 22){ - sysPara->devOp->controlInkValve(false); - sysPara->devOp->controlInkValvePWM(false); - } - this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*2)); - MySleep(2000); - } - } - sysPara->devOp->controlReclaimTankOpen(true); - sysPara->status.isPumpValveControledByHand = true; //停止自动 - if(sysPara->para.gearPumpEnable ){ - if(!sysPara->para.flagOfReclaimPumEnable){ - sysPara->para.gearPumpValue = 360; - sysPara->devOp->WriteMoterPump(); - } - else{ - sysPara->devOp->controlReclaimPump(true,false); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - } - else{ - sysPara->para.reclaimPumpPWMWidth = 95; - sysPara->devOp->controlReclaimPump(true,true); - } - - if(!sysPara->devOp->isViscosityPumpOpen()) - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlCycleValve(true); - sysPara->devOp->controlInkValve(false); //关供墨 - sysPara->devOp->controlInkValvePWM(false); //关供墨 - - if(!TEST_MODE){ - for(int i=14;i>7;i--) - { - if(i==13) - sysPara->devOp->controlReclaimTankOpen(false); - this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); - MySleep(3000); - } - } - - if(!sysPara->status.lostCommuFlag){ - sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); - sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); - sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); - - updateTotalCnt(0); - sysPara->saveParaToFile(); // 关机前将相关配置保存 - } - sysPara->status.powerOffAppending = false; - if(!TEST_MODE){ - for(int i=7;i>0;i--) - { - if(i == 3) - sysPara->devOp->controlReclaimTankClose(true); - if(i == 2){ - sysPara->devOp->controlViscosityPump(false); - sysPara->devOp->controlCycleValve(false); - sysPara->devOp->controlReclaimPump(false,false); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); - MySleep(3000); - } - } - } - emit CloseJd(); - sysPara->para.gearPumpValue=gearPumpValue_backup; - sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup; - sysPara->devOp->controlCompressPump(false); - setRunStatus(tr("准备关机......")); - qDebug()<<"准备关机"; - sysPara->para.totalProductCnt +=sysPara->status.totalProductCnt; - sysPara->devOp->clearProductCnt(3 | 0x10);//总产器计数器立即清零 - sysPara->para.ReadFileErrorCnt=0; - sysPara->para.PowerOnErrorCnt=0; - if(sysPara->para.isCntSaveStateValue) - { - sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); - sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); - sysPara->para.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); - } - updateTotalCnt(0); - sysPara->saveParaToFile(); // 关机前将相关配置保存 - sysPara->saveRFIDPara(); - system("sync");//缓存同步 - - timerPowerOff->start(1000); - } -} - -static int numOfPowerOffCMD = 0; -void MainWindow::sendPowerOffCmd(){ - if(++numOfPowerOffCMD == 120){ - sysPara->devOp->color_flag = 2; - setRunStatus(tr("关机失败!!!")); - timerPowerOff->stop(); - numOfPowerOffCMD = 0; - return; - } - sysPara->devOp->powerOff(); -} - -void MainWindow::powerOffConfirmed(){ - timerPowerOff->stop(); - QProcess process; - process.startDetached("poweroff"); - qApp->exit(0); -} - -void MainWindow::on_pushButtonStart_pressed() -{ - QMessageBox::StandardButton ret; - if(pushButtonFlag) - ret = QMessageBox::information(this, tr("提示"), - tr("是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动!"), - QMessageBox::Ok | QMessageBox::Cancel); - else - ret = QMessageBox::information(this, tr("提示"), - tr("是否启动齿轮泵?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - pushButtonFlag = !pushButtonFlag; - if(pushButtonFlag) - { - ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(0, 255, 0)}"); - ui->pushButtonStart->setText(tr("泵启动")); - } - else - { - ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(255, 0, 0)}"); - ui->pushButtonStart->setText(tr("泵停止")); - } - //ui->pushButtonStart->setEnabled(false); - emit pushButtonStartPressed(pushButtonFlag); - } -} - -void MainWindow::_on_pushButtonPowerOff_pressed(bool notice){ - if(sysPara){ - if(sysPara->status.currReclaimTankPos != 0) - { - QMessageBox::StandardButton ret = QMessageBox::Ok; - if(notice) - ret = QMessageBox::warning(this, tr("警告"), - tr("回收槽未关,是否关闭回收槽后关机!"), - QMessageBox::Ok | QMessageBox::Cancel); - if (!notice || ret == QMessageBox::Ok){ - - system((char *)((QString("mkdir %1").arg(TESTDIR)).toLatin1().data())); - system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toLatin1().data())); //先备份UP* - sysPara->status.reclaimCloseCnt=10; - on_pushButtonStopPrint_pressed(); - on_pushButtonReclaimTankClose_pressed(); - sysPara->status.powerOffAppending = true; - enableReclaimCtrlButton(false); //所有的按钮全部屏蔽 - } - } - else { - QMessageBox::StandardButton ret = QMessageBox::Ok; - if(notice) - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认关机?"), - QMessageBox::Ok | QMessageBox::Cancel); - - if (!notice || ret == QMessageBox::Ok){ - sysPara->status.powerOffAppending = true; - checkForPowerOff(); - } - } - } -} - - -void MySleep(unsigned int msec) -{ - QTime dieTime = QTime::currentTime().addMSecs(msec); - while( QTime::currentTime() < dieTime ) - QCoreApplication::processEvents(QEventLoop::AllEvents, 100); -} - -//extern MyInputMethod *myInputMethod; - -void MainWindow::ontextEdittextChanged() -{ - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - QSizeF size = ui->textEdit->document()->size(); - sysPara->status.textEditTotalCol = size.width(); - //编辑界面 - ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(size.height()).arg(size.width())); - if(size.width() > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ - myInputMethod->getInputMethod()->on_Key_Backspace_released(); - MySleep(300); - } - if(size.width() == 0) - { //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件 - onTextEditCursorPositionChanged(); - } - - if(0 10) - { - numOfTextChange = 0; - emit autoUpdateFontWidthByMainWindow((const unsigned int)size.width()); - } -} -QPoint QTextCursorPos(const QTextEdit * myTextEdit) -{ - QPoint pt; - QTextCursor tc=myTextEdit->textCursor(); - QTextLayout *pLayout=tc.block().layout(); - pt.setY(tc.position()-tc.block().position()); - pt.setX(pLayout->lineForTextPosition(pt.y()).lineNumber()+tc.block().firstLineNumber()); - return pt; -} - -extern MyInputMethod *myInputMethod; -void MainWindow::onTextEditCursorPositionChanged(){ - for(int i = 0; i < 2; i++){ - QTextCharFormat fmt = ui->textEdit->currentCharFormat (); - QString s = ui->textEdit->document()->toPlainText(); - QFont font = fmt.font(); - QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); - QLabel *labelFontFamily = ui->textEditOption->getLabelFontFamily(); - QCheckBox *checkBoxBold = ui->textEditOption->getCheckBoxBold(); - bool ok; - //qDebug()<<"onTextEditCursorPositionChanged"<< font.family()<text().toInt(&ok,10)<logicalDpiX(); - DPI = DPI?DPI:1; - int pixeSize = font.pointSizeF()*DPI/72; - if(pixeSize >= Public::getMinFontPixelSize()){ - labelFontSize->setText(QString::number(Public::getAdjustedPixelSize(pixeSize))); - checkBoxBold->setChecked(font.weight() == QFont::Bold); - labelFontFamily->setText(font.family()); - barcode->setFontSize(Public::getAdjustedPixelSize(pixeSize)); - break; - } - else { - if(s.length()<=1) { - ui->textEdit->selectAll(); - font.setFamily(Public::getFontFamily(labelFontSize->text().toInt(&ok,10) )); - ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 - ui->textEdit->moveCursor(QTextCursor::End); - } else - ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 - } - } - } - -} - -void MainWindow::onLabelFaultRusumePressed(){ - if(sysPara){ - sysPara->status.flagOfSpeedAlarm = false; - sysPara->status.mainInkPumpError = false; - sysPara->status.mainInkPumpRunTmCnt = 0; - sysPara->status.compressPumpError = false; - sysPara->status.compressPumpRunTmCnt = 0; - sysPara->devOp->resumeFault(); - ui->labelRunStatus->clear(); - sysPara->status.beeperOnFlag = false; - sysPara->devOp->controlBeeper(false); - sysPara->status.heaterONTimeCnt = 0; //加热块计数清零 - ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - sysPara->status.DACDisable = false; - sysPara->status.lastPhaseFault = 0; - sysPara->status.phaseErrorCnt = 0; - if(sysPara->status.lastHighVoltageFault && !(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ - sysPara->status.lastHighVoltageFault = false; - flagOfClearHighVltageWarnning = true; - } - - if(sysPara->status.gearPumpRunStopFlag && pushButtonFlag) - { - emit repeatInitedPid(); - sysPara->status.gearPumpRunStopFlag = false;//齿轮泵报警恢复 - } - if((sysPara->devOp->color_flag == 2) ||(sysPara->devOp->color_flag == 1)) - { - sysPara->devOp->color_flag = 3; - sysPara->devOp->controlYellowLight(false); - sysPara->devOp->controlRedLight(false); - } - sysPara->status.visocityValueOverflowNum = 0; - - if(sysPara->status.visocityValueOverflowNum>=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM) // - sysPara->status.viscosityFault = 0; - - sysPara->status.powerOffAfterPhaseFaultAppending = 0; - sysPara->status.lastwarmInkPump = 0; - sysPara->status.RecycleWarnCnt =0; - sysPara->status.lastRecycleWarn =0 ; - sysPara->status.powerOffAfterInkOrSOLVEmptyAppending=0; - //sysPara->status.lastStatWarn=0; // 机器报故障后,点击故障恢复按钮,再点击打印按钮,“正在喷印中…”字符未立即显示出来,需等待大约10秒才会出现。 - //LogInfo::setRunStatusText(tr("故障恢复")); - sysPara->status.RecycleWarnCnt=0; - sysPara->status.HVFaultCloseEn=0; - if(sysPara->status.flagOfPressureFault){ - sysPara->status.flagOfPressureFault = false; - sysPara->status.isPumpValveControledByHand = false; - sysPara->devOp->mainInkCtrl(); - emit clearPressureFault(); - } - if(printingFlag) { - sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - } - } -} - -void MainWindow::onEnableReclaimCtrlButton(bool flag) -{ - enableReclaimCtrlButton(flag); -} - -void MainWindow::onInkJetPrinterCurrentChanged(int index) -{ - ui->senceEditOption->onInkJetPrinterCurrentChanged(index); -} - -void MainWindow::onLabelProductCntPressed(){ - if(sysPara){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否初始化产品计数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - updateTotalCnt(0); - sysPara->devOp->clearProductCnt(1); - sysPara->saveParaToFile(); - - } - } -} - -void MainWindow::onLabelTotalProductCntPressed(){ - if(sysPara){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否清除总产品计数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->clearProductCnt(1 | 0x10 );// [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt = 0; - - } - } -} - -void MainWindow::onPushButtonCNTResetNowPressed(){ - if(sysPara){ - // emit closeSerial(); - - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否立即重新计米?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt = 0; - } - - } - - - -} - -void MainWindow::on_bottonEditText_pressed() -{ - //qDebug()<<"EditMode"<para.EditMode; - if(sysPara->para.EditMode==TXTFILE){ - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - ontextEdittextChanged(); //显示大小 - int coldot = (int)ui->textEdit->document()->size().width(); - if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - { - coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; - QMessageBox::warning(this, tr("警告"), - tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); - } - } - else if(sysPara->para.EditMode==PICFILE){ - emit openCurrFile(sysPara->para.lastOpenedFileName); - } - else if(sysPara->para.EditMode==SCENE){ - //qDebug()<<"SCENE"; - //emit openCurrFile(sysPara->para.lastOpenedFileName); - ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); - ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); - } - -} - -void MainWindow::on_pushButtonReduceTextDisplay_pressed() -{ - ui->widgetPrintTextDisplay->reduceDisplay(); -} - -void MainWindow::on_pushButtonEnlargeTextDisplay_pressed() -{ - - ui->widgetPrintTextDisplay->enlargeDisplay(); - //update(); -} - -/* - * value以100ms为单位 - * */ -void MainWindow::onReclainTankPositionChanged(int value){ - static bool init = false; - static int totalCharNum = 0; - if(!init){ - int w = ui->labelReclaimStatus->geometry().width() - 1; //预留几个像素 - QFontMetrics fontMetrics = QApplication::fontMetrics(); - w -= fontMetrics.width(QString(" |>|")); - int t = fontMetrics.width(QChar('-')); - if(fontMetrics.width(QChar('-')) != fontMetrics.width(QChar(' '))){ - LogInfo::setRunStatusText(tr("警告:‘-’和空格的宽度不一样")); //可能有的字体两者宽度不同 - } - totalCharNum = t?w/t:w; //t永远都不应该为零,保险起见 - init = true; - } - if(sysPara){ - int reclaimTime = sysPara->para.reclaimTankTime?sysPara->para.reclaimTankTime:15; - int charNum = value*totalCharNum/(reclaimTime*10); - - charNum = (charNum > totalCharNum)?totalCharNum:charNum; - QString str = " |"; - for(int i = 0; i <= totalCharNum; i++) { //多加”>|“ - if(i < charNum) - str.append(QChar('-')); - else if(i == charNum) - str.append(QChar('>')); - else - str.append(QChar(' ')); - } - str.append(QChar('|')); - ui->labelReclaimStatus->setText(str); - } -} - - -void MainWindow::setRunStatus(QString str){ - switch(sysPara->devOp->color_flag){ - case 1: - ui->labelRunStatus->setStyleSheet("color:yellow"); - break; - case 2: - ui->labelRunStatus->setStyleSheet("color:red"); - break; - default: - ui->labelRunStatus->setStyleSheet("color:black"); - break; - } - ui->labelRunStatus->setText(str); -} - - -void MainWindow::changeTxtMode(QString str){ - if(sysPara){ - fileChange=true; - sysPara->status.FileChangeRestCntFlag = true; - emit openFileChange(); - unsigned char SpecialVarEnable = 0; - sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); - } -} - -void MainWindow::update_scroll() -{ - ui->widgetPrintTextDisplay->scroll_update(); -} - -void MainWindow::changeEditMode(int editMode) -{ - if(sysPara){ - //qDebug()<<"changeEditMode"<para.EditMode; - if(sysPara->para.EditMode==PICFILE){ - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); - ui->widgetPrintTextDisplay->update(); - ui->pushButtonTXTOpen->show(); - ui->textEditOption->editMode=sysPara->para.EditMode; - } - else if(sysPara->para.EditMode==TXTFILE) - { - // ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - // ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - sysPara->para.EditMode=TXTFILE; - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - ui->widgetPrintTextDisplay->update(); - ui->pushButtonTXTOpen->hide(); - ui->textEditOption->editMode=sysPara->para.EditMode; - ui->textEditOption->editItemModeDone(); - } - else if(sysPara->para.EditMode==SCENE) - { - //qDebug()<<"CCCCCENE"; - sysPara->para.EditMode=SCENE; - ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); - ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); - ui->widgetPrintTextDisplay->update(); - ui->pushButtonTXTOpen->hide(); - ui->textEditOption->editMode=sysPara->para.EditMode; - //edit@12-12 - ui->senceEditOption->show_scene_new_dlg(); - } - //ontextEdittextChanged(); //显示大小 20140831 - if(sysPara->para.EditMode==SCENE) - { - onSwitchTimerShowItem(true); - } - else - { - onSwitchTimerShowItem(false); - } - } -} - -TextEditOption* MainWindow::getTexteditOption() -{ - return ui->textEditOption; -} - -void MainWindow::SetEditMode(int mode) -{ - ui->textEditOption->editMode = sysPara->para.EditMode; - // if(sysPara->para.EditMode==SCENE) - // { - // timerShowItem->start(10); - // } -} - -void MainWindow::setRunStatus(QPixmap pixMap){ - ui->labelRunStatus->setPixmap(pixMap); -} -void MainWindow::SetMainTabEdit(int n){ - -} - -void MainWindow::testPrint(){ - //on_pushButtonStartPrint_pressed(); -} - - -void MainWindow::onEditBarCode(){ -#ifdef _2DCODE_ - if(sysPara) { - dlgqrcode->move( 0,10); - barcode->setWindowTitle(tr("条形码信息编辑")); - //qDebug()<<"bcOption->height"<para.bcOption.height; - barcode->SetOption((bcOption_t*)&sysPara->para.bcOption); - barcode->show(); - //barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); - } -#endif - -} -void MainWindow::onBarCodeClose(){ -#ifdef _2DCODE_ - barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); - unsigned char *dat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - }else{ - dat =sysPara->status.printDat; - } - if(barcode->flagCount) - { - barcode->getDat(dat,0); - barcode->flagCount=0; - ui->widgetPrintTextDisplay->update(); - } - if(barcode->flagInsert ) - { - barcode->flagInsert=0; - if(sysPara->para.EditMode==PICFILE) - { - - } - else - { - //ui->textEditOption->InsertBarCodeToEdit(barcode->pictureName,barcode->imgBar.width(),barcode->imgBar.height()); - QString html = ""; - QTextCharFormat fmt = ui->textEditOption->textEdit->currentCharFormat (); - ui->textEditOption->textEdit->insertHtml (html); - ui->textEditOption->textEdit->mergeCurrentCharFormat(fmt); - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - } - } - sysPara->saveParaToFile(); -#endif -} - -void MainWindow::onEditQRCode(){ -#ifdef _2DCODE_ - if(sysPara) { - dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); - dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); - dlgqrcode->setWindowTitle(tr("二维码信息编辑")); - - dlgqrcode->setCntCheckBoxHide(1); - - dlgqrcode->show(); - } -#endif -} -void MainWindow::onInitQRCode(){ -#ifdef _2DCODE_ - if(sysPara) { - dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); - dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); - dlgqrcode->setWindowTitle(tr("二维码信息编辑")); - //dlgqrcode->show(); - } -#endif -} -void MainWindow::onQRCodeClose(){ -#ifdef _2DCODE_ - // dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); - if(dlgqrcode->flagInsert ) { - dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); - dlgqrcode->flagInsert=0; - if(sysPara->para.EditMode==PICFILE){ - return; - } - // qDebug()<<"flagInsert2"<flagInsert<bcWidth<bcHeight; - ui->textEditOption->InsertBarCodeToEdit(dlgqrcode->pictureName,dlgqrcode->bcWidth,dlgqrcode->bcHeight); - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - - } - if( sysPara->para.qrOption.barCodeFlag != dlgqrcode->barCodeFlag) - { - sysPara->para.qrOption.barCodeFlag = dlgqrcode->barCodeFlag; - ui->textEditOption->textEdit->setHtml(QApplication::translate("MainWindow", "\n" - "\n" - "


", 0)); - } - sysPara->saveParaToFile(); -#endif -} - -void MainWindow::onGenerateQRCode(QString strData) -{ - dlgqrcode->extSetText(strData); - dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); -} - -void MainWindow::onShowAndHideItem() -{ - /////////特殊条件 - //while(1) - { - static bool startFlag= false, lastStarFlag = false; - - QList items = pPicScene->items(); - foreach (QGraphicsItem *item, items) - { - PicTextItem *picText = qgraphicsitem_cast(item); - if(picText->SpecialConditions) - { - //setRunStatus(tr("六个内容(%1,%2)").arg(picText->CatchCnt1CurrValue).arg(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt())); - if(picText->CatchCnt1StartValue <= QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() && - QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() <= picText->CatchCnt1CurrValue) - { - picText->show(); - startFlag = true; - } - else - { - picText->hide(); - startFlag = false; - } - if(startFlag != lastStarFlag) - { - lastStarFlag = startFlag; - //on_pushButtonStartPrint_pressed(); - if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) - PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 - else if(sysPara->para.EditMode == SCENE) - onPreviewScene(); - // unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; - // memset(blankDat,0,sizeof(blankDat)); - // sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址 - // sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat)); - } - } - } - //QApplication::processEvents(); - } - ////////////// -} - -void MainWindow::onSwitchTimerShowItem(bool flag) -{ - if(flag) - { - // timerShowItem->start(10); - } - else - { - timerShowItem->stop(); - unsigned char SpecialVarEnable = 0; - sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); - } -} - -void MainWindow::JSON_UpdateDATA(){ - - QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); - bool ok; - int font_size = labelFontSize->text().toInt(&ok,10); - QString font_family = Public::getFontFamily(font_size); - static int save_uniCode = 33; //数据码固定33位 - ui->textEditOption->textEdit->clear();//宴令需要屏蔽 - - QString strContentPrint(sysPara->Get_JSON_DATA.PrintingContent); - strContentPrint.replace(' '," "); - QString strContent = sysPara->Get_JSON_DATA.QRCodeContent; - int left_int = strContent.indexOf("https://dwz.cn/"); - if(left_int == 0) - { - strContent = strContent.mid(8, strContent.size()); - strContent = "www." + strContent; - } - if(sysPara->para.isRemoveCode) - { - QSize size(2,5); - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff);//填充白色 - //image.fill(0x00f0f000);//填充白色 - // QPainter painter(&image); - // //image.save("./printImage.jpg"); - // ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ - image.save("/home/plg/doc/modbusQR.bmp"); - } - else - { - if(dlgqrcode->barCodeFlag == 1) - { - barcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str())); - barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); - } - else - { - dlgqrcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str()), true); - dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); - } - } - QString save_text = ui->textEditOption->textEdit->toHtml(); - - if(save_text.contains("", Qt::CaseSensitive)){ - int left_int = save_text.indexOf(""); - QString str_html = save_text.left(left_int); //get the QRcode pic left html - QString right_str_html = save_text.mid(left_int, save_text.size()); - - if(!sysPara->para.isRemoveDigitCode) - { - str_html += ""; - left_int = right_str_html.indexOf(";\">") + 1; - int index_size = QString(";\">").size(); - QString right_html = right_str_html.mid(left_int+index_size+save_uniCode, right_str_html.size()); - save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); - // qDebug()<<"right_html="< ").arg(font_family) - .arg(font_size).arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); - txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); - - if(!right_html.startsWith("<")){ //situation: "$ProductUniqueCodexxxx
" - QString crash_word = right_html.left(right_html.indexOf("<")); - txt_fomart += crash_word; - // qDebug()<<"crash_word="<"); - index_size = QString("
").size(); - QString final_str = right_html.mid(left_int +index_size, right_html.size()); - - str_html += final_str; - } - else - { - str_html += right_str_html; - } - // QMessageBox::StandardButton ret; - // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); - // if (ret == QMessageBox::Ok) - { - ui->textEditOption->textEdit->setHtml(str_html); - ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); - } - }else{ - QString txt_fomart = ""; - txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) - .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); - txt_fomart += strContentPrint.toUtf8(); - txt_fomart += ""; - txt_fomart += ""; - - if(!sysPara->para.isRemoveDigitCode) - { - txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size) - .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); - txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); - save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); - txt_fomart += ""; - } - else - { - txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size); - } - // QMessageBox::StandardButton ret; - // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); - // if (ret == QMessageBox::Ok) - { - ui->textEditOption->textEdit->insertHtml(txt_fomart); - } - // QString refresh_text = ui->textEditOption->textEdit->toHtml(); - // ui->textEditOption->textEdit->setHtml(refresh_text); - // ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); - } - - if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) - PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 - else if(sysPara->para.EditMode == SCENE) - onPreviewScene(); - //on_pushButtonStartPrint_pressed(); - - ui->label_24->setFocus(); //prevent keyboard pop up -} - -QStringList stringListRecive; - -// mdOpenFile(QString("/home/plg/doc/%1").arg(fileName)); -void MainWindow::modbusUpdateQRCode(){ - // QString temp = QString(); - sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 - sysPara->status.printDoneFlag = false; - static QString lastReceiveContent = ""; - char temp[120] = {0}; - int i,j = 0; - for(i=0; i<110; i+=2) - { - //if(sysPara->modbusParas.QRcode_buf[i] == 0) break; - temp[j] = sysPara->modbusParas.QRcode_buf[i]; - j++; - } - if(strlen(&temp[1]) == 0) - { - LogInfo::setRunStatusText(tr("获取DM码内容为空!")); - return; - } - - if(sysPara->para.EditMode == TXTFILE) - { - QString receiveContent = QString::fromUtf8(&temp[1]); - dlgqrcode->extSetText(receiveContent); - LogInfo::setRunStatusText(tr("获取DM码内容:")); - LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); - - // dlgqrcode->extSetText("asbasb"); - dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); - - // ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp"); - ui->textEditOption->textEdit->clear();//插入之前先清空 - //ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp"); - QString html = ""; - ui->textEditOption->textEdit->setHtml(html); - ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); - //sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 - if(receiveContent == lastReceiveContent) - { - LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); - //sysPara->modbusStatus.printFinishFlag = 1;//置打印标志 - MySleep(200); - sysPara->status.printDoneFlag = true; - return; - } - lastReceiveContent = receiveContent; - sysPara->status.oneCodePrintOnce = true; - on_pushButtonStartPrint_pressed();//开始打印 - } - else if(sysPara->para.EditMode == SCENE) - { - QString receiveContent = QString::fromUtf8(&temp[1]); - LogInfo::setRunStatusText(tr("获取DM码内容:")); - LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); - if(receiveContent == lastReceiveContent) - { - LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); - MySleep(200); - sysPara->status.printDoneFlag = true; - return; - } - lastReceiveContent = receiveContent; - - stringListRecive = receiveContent.split(";"); - - QString lastopenedFileName = sysPara->para.lastOpenedFileName; - lastopenedFileName = QFileInfo(lastopenedFileName).baseName(); - int left_int = lastopenedFileName.indexOf('@'); - if(left_int == 0) - { - sysPara->status.forTemplateUse = true; - emit scenefileOpen(sysPara->para.lastOpenedFileName,false);//sceneeditoption 接收这个信号然后打开文件 - //emit fileNameChanged(QFileInfo(filePath).fileName()); - sysPara->status.forTemplateUse = false; - sysPara->status.oneCodePrintOnce = true; - on_pushButtonStartPrint_pressed();//开始打印 - } - } - - -} - -void MainWindow::onUpdateDispQRCode(int type){ -#ifdef _2DCODE_ - int varNum; - - qDebug()<<"onUpdateDispQRCode"; - //QRcode string test - // static int cc = 0; - for(varNum=0;varNumstatus.QRvariNum;varNum++){ - if(sysPara->print.QRvars[varNum].type<2) - { - sysPara->print.QRvars[varNum].Counter = sysPara->para.qrOption.counter; - sysPara->print.QRvars[varNum].cntNum = sysPara->para.qrOption.cntNum; - - dlgqrcode->TextToQRImg((qrOption_t *)&sysPara->para.qrOption); - dlgqrcode->getDat(sysPara,varNum); - }else if(sysPara->print.QRvars[varNum].type==2) - { - QString txt,txt2,txt3,txt4,txtVar1,txtVar2; - //char fmt[]="%08d%04d"; - txt2=sysPara->para.bcOption.TxtModule; - txt3=sysPara->para.bcOption.TxtLine; - txt4=sysPara->para.bcOption.TxtLine1; - sysPara->para.bcOption.var1Type =1; - sysPara->para.bcOption.var2Type =2; - txtVar1=barcode->getVarTxt(sysPara->para.bcOption.var1En,sysPara->para.bcOption.var1Type); - txtVar2=barcode->getVarTxt(sysPara->para.bcOption.var2En,sysPara->para.bcOption.var2Type); - //txt.sprintf(fmt,sysPara->status.calandar_and_dat.cnt1CurrValue,sysPara->status.calandar_and_dat.cnt2CurrValue); - txt = txt2.trimmed()+txtVar1+txt3.trimmed()+txtVar2+txt4.trimmed(); - barcode->TextToBCImg((bcOption_t *)&sysPara->para.bcOption,txt); // - barcode->getDat2(sysPara,varNum); - //qDebug()<<"update BAR"<status.calandar_and_dat.cnt1CurrValue<status.calandar_and_dat.cnt2CurrValue; - //qDebug()<print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; - if(sysPara->status.currPrintCol < (sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)) { - sysPara->status.currPrintCol = sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width; - } - if (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos) { - sysPara->status.currPrintRow = sysPara->print.QRvars[varNum].endRowPos; - } - //sysPara->status.currPrintCol = (sysPara->status.currPrintColprint.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)? - // sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width:sysPara->status.currPrintCol; - //sysPara->status.currPrintRow = (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos)?sysPara->print.QRvars[varNum].endRowPos:sysPara->status.currPrintRow; - - // qDebug()<<"onUpdate:"<< sysPara->print.QRvars[varNum].startColPos - // <print.QRvars[varNum].endRowPos <print.QRvars[varNum].width - // <print.QRvars[varNum].height <print.QRvars[varNum].type; - } - - if(type) - { - - sysPara->para.qrOption.DisplayUpdate=1; - // ui->widgetPrintTextDisplay->updateSysStatusToUI(); - if(sysPara->status.addSpace) - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); - else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); - ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow ).arg(sysPara->status.currPrintCol)); - ui->widgetPrintTextDisplay->update(); - //qDebug()<<"update BAR ??"; - } -#endif -} - -int MainWindow::searchExpiryVar(QString html) -{ - int varNum = 0; - if( sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum || sysPara->status.classVariNum) - { - QString pattern = ""; - // 1 type ,2 name,3 width,4 height - //

< - // - QRegExp rx(pattern); - QString textHtml = html==""? ui->textEdit->toHtml() : html; -// qDebug() << "searchExpiryVar:"<< textHtml; - int from = 0; - // int xx =textHtml.size(); - sysPara->print.ExpiryVar.type = 0; - sysPara->print.CurDateVar.type = 0; - //sysPara->print.CurDateVar[1].type = 0; - sysPara->print.ClassVari.type = 0; - while(from < textHtml.size() && from != -1){ - from = textHtml.indexOf(rx,from); - bool ok; - if(from != -1) - { - from ++; - if(varNum < 3) - { - QString s = rx.cap(3); - int type = rx.cap(1).toInt(&ok); - // 填充信息 - //qDebug()<<"QVARName:"<print.ExpiryVar.type = type; - sysPara->print.ExpiryVar.width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; - sysPara->print.ExpiryVar.height = rx.cap(5).toInt(&ok); - //sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-sysPara->print.ExpiryVar.height; - sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-(sysPara->print.ExpiryVar.height-1); - sysPara->print.ExpiryVar.letterSpace = rx.cap(2).toInt(); - if(sysPara->print.ExpiryVar.startRowPos < 0) - { - sysPara->print.ExpiryVar.startRowPos = 0; - } - if(rx.cap(3).contains("75")) - { - sysPara->print.ExpiryVar.bold = 1; - } - else - { - sysPara->print.ExpiryVar.bold = 0; - } - // 直接更新有效期,并退出? - ExpiryDotUpdate(1); - varNum++; - } - else if(type == CURDATE || type==CURDATE + 10 || type==CURDATE + 20 || type==CURDATE + 30) - { - sysPara->print.CurDateVar.type = type; - sysPara->print.CurDateVar.width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; - sysPara->print.CurDateVar.height = rx.cap(5).toInt(&ok); - sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); - sysPara->print.CurDateVar.letterSpace = rx.cap(2).toInt(); - if(sysPara->print.CurDateVar.startRowPos < 0) - { - sysPara->print.CurDateVar.startRowPos = 0; - } - if(rx.cap(3).contains("875")) - { - //qDebug()<<"bold"; - sysPara->print.CurDateVar.bold = 1; - } - else - { - //qDebug()<<"normal"; - sysPara->print.CurDateVar.bold = 0; - } - //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); - //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; - // 生产日期即当前日期 - ExpiryDotUpdate(2); - varNum++; - } - else if(type == CURCLASS) - { - //qDebug()<<"CURCLASS:"<print.ClassVari ; - currClass->type = type; - currClass->width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; - currClass->height = rx.cap(5).toInt(&ok); - currClass->startRowPos = currClass->endRowPos-currClass->height-1; - currClass->letterSpace = rx.cap(2).toInt(); - if(rx.cap(3).contains("875")) { - //qDebug()<<"bold"; - currClass->bold = 1; - } - else { - //qDebug()<<"normal"; - currClass->bold = 0; - } - - //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); - //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; - // 生产日期即当前日期 - ExpiryDotUpdate(3); - varNum++; - } - } - else if(varNum>=3) break; - } - //break; - //if(varNum>sysPara->status.ExpiryVarNum)break; - } - } - return varNum; -} -void MainWindow::ExpiryDotUpdate(char Mode) -{ //更新有效期 - QTextEdit textEdit; - //textEdit.document()->setDocumentMargin(0); - textEdit.setLineWrapMode(QTextEdit::NoWrap); - int height,width; - //QDate curDate=QDate::currentDate(); - EXPIRYVAR_t *p_var;//=(Mode==1)?&sysPara->print.ExpiryVar:&sysPara->print.CurDateVar; - - if(sysPara->status.flagOfAdjustWidth_1){ - sysPara->print.ExpiryVar.splitMode = sysPara->status.splitMode_Adjust_1; - sysPara->status.flagOfAdjustWidth_1 = false; - } - if(sysPara->status.flagOfAdjustWidth_2){ - sysPara->print.CurDateVar.splitMode = sysPara->status.splitMode_Adjust_2; - sysPara->status.flagOfAdjustWidth_2 = false; - } - if(Mode==1) - { - qDebug()<<"Mode==1"; - if(sysPara->status.ExpiryVarNum == 0) { - return; - } - p_var = &sysPara->print.ExpiryVar; - QDate expiryDate=QDate::currentDate().addDays(sysPara->para.ExpiryDay); - sysPara->print.ExpiryVar.year = expiryDate.year(); - sysPara->print.ExpiryVar.month = expiryDate.month(); - sysPara->print.ExpiryVar.day = expiryDate.day(); - r_ExpiryDay = sysPara->para.ExpiryDay; - } - else if(Mode==2) - { - p_var = &sysPara->print.CurDateVar; - if(sysPara->status.CurrDateVariNum == 0) { - return; - } - } - else if(Mode==3) - { - p_var = &sysPara->print.ClassVari; - qDebug()<<"Mode==3"; - if(sysPara->status.classVariNum == 0) { - return; - } - } - else - return; - { - textEdit.clear(); - height = p_var->height; - width = p_var->width; - QString str; - QHash dateFormat; - dateFormat.insert(0,"yyyy-MM-dd"); - dateFormat.insert(1,"yyyy/MM/dd"); - dateFormat.insert(2,"yyyyMMdd"); - dateFormat.insert(3,"yyyy年MM月dd日"); - dateFormat.insert(4,"yyyy-MM-dd hh:mm"); - dateFormat.insert(5,"yyyy/MM/dd hh:mm"); - dateFormat.insert(6,"yyyyMMddhhmm"); - dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); - dateFormat.insert(8,"hh:mm"); - dateFormat.insert(9,"ddhhmm"); - dateFormat.insert(10,"dd MM yy"); - dateFormat.insert(11,"dd/MM/yy"); - dateFormat.insert(12,"dd/MM/yyyy"); - dateFormat.insert(13,"dd-MM-yy"); - dateFormat.insert(14,"dd-MM-yyyy"); - - /*****轮班变量功能 start******/ - /*00:00-08:00 - 08:00-16:00 - 16:00-00:00 - */ - QTime current_time =QTime::currentTime(); - int hour = current_time.hour(); - QString DateTime; - if(Mode==1) { - DateTime = QDateTime::currentDateTime().addDays(sysPara->para.ExpiryDay).toString(dateFormat.value(sysPara->print.ExpiryVar.splitMode)); - } - else if(Mode==2 ) { - DateTime = QDateTime::currentDateTime().toString(dateFormat.value(p_var->splitMode)); - } - else if (Mode == 3) { - if(hour >= 0 && hour <8) - { - dateFormat.insert(15,"A"); - DateTime = "A"; - } - else if(hour >= 8 && hour < 16) - { - dateFormat.insert(15,"B"); - DateTime = "B"; - } - else if(hour >= 16) - { - dateFormat.insert(15,"C"); - DateTime = "C"; - } - } - - /*****轮班变量功能 end******/ - int DPI = textEdit.logicalDpiX(); - DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 - if(p_var->bold) { - textEdit.insertHtml(QString("%4") - .arg(Public::getFontFamily(height-1,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*72/DPI-1) - .arg(600) - .arg(DateTime) - ); //600表示加粗,400表示普通 - } - else { - textEdit.insertHtml(QString("%4") - .arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*72/DPI) - .arg(400) - .arg(DateTime) - // .arg("x") - ); //600表示加粗,400表示普通 - } - - QFont font = textEdit.font(); - font.setLetterSpacing(QFont::AbsoluteSpacing, p_var->letterSpace); - textEdit.setFont(font); - - int imgHeight = height + 12; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(imgHeight> MAX_PRINT_ROW_NUM+12) - imgHeight = MAX_PRINT_ROW_NUM+12; - if(width> (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - width = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; - QSize size(width+2,imgHeight); - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff); - QPainter painter(&image); - textEdit.show(); //如果不显示,似乎不会绘制 - textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ - textEdit.hide(); - image.save("./Expiry.bmp"); - - int lastValidRow = 0; - for(int k = imgHeight - 1; k >= 0 ; k--){ - for(int j = 0; j < width+1; j ++){ - QRgb rgb = image.pixel(j,k); - if(rgb&0xff000000){ - lastValidRow = k + 1; - break; - } - } - if(lastValidRow != 0) - { - break; - } - } - int rowDiff = p_var->endRowPos - p_var->startRowPos; - int firstValidRow=0; - int firstValidRowDiff; - if(lastValidRow >= rowDiff) - { - firstValidRow = lastValidRow - rowDiff; - firstValidRowDiff = firstValidRow; - } - else - { - firstValidRow = 0; - firstValidRowDiff = lastValidRow > rowDiff; - } - - firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 - str="";//s2=""; - int wStart=p_var->startColPos; - int hStart= p_var->startRowPos; - unsigned char *dat; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - }else{ - dat =sysPara->status.printDat; - } - for(int j = 2; j < width+1; j ++) - { - unsigned char c=0; - hStart= p_var->startRowPos; - c=dat[(wStart)*5+(hStart)/8]; - for(int k = firstValidRow; k <= lastValidRow; k++) - { - QRgb rgb = image.pixel(j,k); - if(((rgb >> 24)&0xff) > 0x80) - { - c |= (1 << (hStart%8)); - } - else - { - c &= ~(1 << (hStart%8)); - } - if(hStart%8==7) { - dat[(wStart)*5+(hStart)/8]=c; - c=dat[(wStart)*5+(hStart+1)/8]; - } - hStart++; - } - dat[(wStart)*5+(hStart)/8]=c; - wStart++; - } - } -} - -int MainWindow::searchQrVar(){ - int varNum = 0; - if( sysPara->status.QRvariNum){ - QString pattern = ""; - // 1 type ,2 name,3 width,4 height - //

< - // - QRegExp rx(pattern); - //QString textHtml = ui->textEdit->toHtml(); - ///////////// - QTextEdit textEdit ; - for(int i=0;istatus.QRvariNum;i++) - { - - if(sysPara->print.QRvars[i].type==0){ - textEdit.insertHtml(QString("") - .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - else if(sysPara->print.QRvars[i].type==1){ - textEdit.insertHtml(QString("") - .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - else if(sysPara->print.QRvars[i].type==2){ - textEdit.insertHtml(QString("") - .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 - } - } - QString textHtml = textEdit.toHtml(); - //////////// - int from = 0; - // int xx =textHtml.size(); - while(from < textHtml.size() && from != -1){ - from = textHtml.indexOf(rx,from); - bool ok; - //qDebug()<=9 && (sysPara->print.QRvars[varNum].type ==type-9)) - { - //sysPara->print.QRvars[varNum].type = type-9; - sysPara->para.qrOption.type = type-9; - sysPara->para.qrOption.width=sysPara->print.QRvars[varNum].width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; - sysPara->para.qrOption.height =sysPara->print.QRvars[varNum].height = rx.cap(4).toInt(&ok); - sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; - - //qDebug()<<"type:"<print.QRvars[varNum].type<status.QRvariNum - // <print.QRvars[varNum].startColPos<print.QRvars[varNum].startRowPos<print.QRvars[varNum].endRowPos - // <print.QRvars[varNum].width<print.QRvars[varNum].height - // <status.statWarn & WARN_STATUS_POWER_MON)) return; -#endif - strTitle = tr("高压故障,暂停打印."); - - strWarring = tr("高压故障:两高压偏转板间的电压检测异常");strWarring.append("\r\n"); - strWarring.append(tr("1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座;"));strWarring.append("\r\n"); - strWarring.append( tr("2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); - //strWarring.append( tr("字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); - strWarring.append( tr("3.高压线路漏电,请更换高压线路;"));strWarring.append("\r\n"); - strWarring.append( tr("4.高压底座漏电,请更换高压底座。"));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); - -} -void MainWindow::onStatusInkLeak(){ -#ifdef X86TEST - -#else - if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)) return; -#endif - strTitle = tr("墨水缸满报警"); - - strWarring = tr("墨水过多:墨水溢出");strWarring.append("\r\n"); - strWarring.append(tr("1. 请停止添加墨水;"));strWarring.append("\r\n"); - strWarring.append(tr("2. 请排出多余墨水。"));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); -} - -void MainWindow::onStatusInkSwint(){ - - if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)) return; - -} -void MainWindow::onStatusInkWaterLevel(){ -#ifdef X86TEST - -#else - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) return; -#endif - strTitle = tr("墨水液位报警"); - - strWarring = tr("墨水液位:墨水即将耗尽");strWarring.append("\r\n"); - strWarring.append(tr("1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。"));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); -} -void MainWindow::onStatusRecycleWarn(){ -#ifdef X86TEST - -#else - if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)) return; -#endif - strTitle = tr("回收故障,关闭回收槽,关墨线"); - strWarring = tr("回收故障:未检测到有墨水回收");strWarring.append("\r\n"); - strWarring.append( tr("1. 墨水未射入回收管,请修正墨线方向;"));strWarring.append("\r\n"); - strWarring.append( tr("2. 墨水粘度太低,请更换新墨水;"));strWarring.append("\r\n"); - strWarring.append( tr("3. 回收管堵塞,请清通或者更换回收管;"));strWarring.append("\r\n"); - strWarring.append(tr("4. 回收泵故障,请清洗或者更换回收泵;"));strWarring.append("\r\n"); - strWarring.append( tr("5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); - //strWarring.append( tr(" 退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); -} -void MainWindow::onStatusSolvLevelWarn(){ -#ifdef X86TEST - -#else - if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) return; -#endif - - strTitle = tr("溶剂液位报警"); - - strWarring = tr("溶剂液位:溶剂即将耗尽");strWarring.append("\r\n"); - strWarring .append(tr("1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。"));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); -} -void MainWindow::onStatusViscosityWarn(){ -#ifdef X86TEST - -#else - if(sysPara->status.viscosityFault==1) -#endif - { - strTitle = tr("粘度故障报警"); - strWarring = tr("粘度故障:墨水粘度无法自动调整");strWarring.append("\r\n"); - strWarring.append( tr("1. 混合阀失灵,请冲洗或者更换混合阀;"));strWarring.append("\r\n"); - strWarring.append( tr("2. 墨水罐内的墨水异常,请更换新墨水;"));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); -#ifdef X86TEST - -#else - } - else if(sysPara->status.viscosityFault==2) - { - -#endif - strTitle = tr("粘度故障报警"); - strWarring= tr("粘度计异常:");strWarring.append("\r\n"); - strWarring.append(tr("1. 泵前过滤网堵塞,请更换泵前滤网;"));strWarring.append("\r\n"); - strWarring.append( tr("2. 粘度泵异常,请清洗或更换粘度泵;"));strWarring.append("\r\n"); - strWarring.append(tr("3. 粘度传感器异常,请检查传感器线路或者更换传感器."));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); - } - -} -void MainWindow::onStatusChargefault(){ -#ifdef X86TEST - -#else - if(sysPara->status.lastPhaseFault) -#endif - { - - strTitle = tr("相位故障报警"); - strWarring = tr("相位故障:相位信号检测异常");strWarring.append("\r\n"); - strWarring.append(tr("1. 墨水分裂不正常,请调整墨水分裂;"));strWarring.append("\r\n"); - strWarring.append(tr("2. 充电槽或者相检头脏污,请清洗充电槽和相检头;"));strWarring.append("\r\n"); - strWarring.append(tr("3. 放大板功能性异常,请更换放大板;"));strWarring.append("\r\n"); - strWarring.append( tr("4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离;"));strWarring.append("\r\n"); - strWarring.append( tr("5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰;"));strWarring.append("\r\n"); - strWarring.append( tr("6. 墨水质量异常,请更换新墨水。"));strWarring.append("\r\n"); - emit ShowWarnningText(strTitle,strWarring); - - } -} - -void MainWindow::OnFinished(int event){ - //msgtest->setText("孔一:60分钟灌浆结束条件!请点击\"结束\"按钮!"); - //msgtest->show(); - msgtest->hide(); - -} - -void MainWindow::onPreviewScene() -{ - pPicScene->clearSelection(); - QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff);//填充白色 - QPainter painter(&image); - pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect()); - - int coldot=0; - if(sysPara){ - bool MaxCol4000 = sysPara->status.flagOfNo67FPGA; - previewFlag=1; - sysPara->status.currPrintRow = 0; - sysPara->status.variNum = 0; - sysPara->status.QRvariNum = 0; - unsigned char *dat; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - memset(dat,0,sizeof(sysPara->status.printDat_Normal)); - }else{ - dat =sysPara->status.printDat; - memset(dat,0,sizeof(sysPara->status.printDat)); - } - - { - sysPara->status.addSpace = sysPara->para.checkSpace; - - coldot = (int)ui->textEdit->document()->size().width(); - coldot = pPicScene->itemsBoundingRect().width(); - if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; - int maxPicHeight = MAX_PRINT_ROW_NUM + 12; - QSize size(coldot,maxPicHeight); - - sysPara->status.currPrintRow =0; - sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace - - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff);//填充白色 - QPainter painter(&image); - QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight); - pPicScene->render(&painter,QRectF(),validRectF); - - int firstRow = 0; - int lastRow = MAX_PRINT_ROW_NUM > maxPicHeight? maxPicHeight:MAX_PRINT_ROW_NUM; //MAX_PRINT_ROW_NUM=40 - int TempVarNum=0; - int varLastRow=0; - - //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 - for(int j = 0; j < lastRow - firstRow; j++){ // Y - for(int i = 0; i < coldot; i++){ // - QRgb rgb = image.pixel(i,j + firstRow); - // 修改code判断逻辑 - long unsigned int rgbValue = rgb & COLOR_MASK; - if(rgb&0x80000000){ //判断alpha - if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 - bool foundvar=0; - if(j>0){ - QRgb r_rgb = image.pixel(i,j + firstRow+1); - if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} - //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; - } - if(foundvar){ - if(sysPara->status.variNum < MAX_VARI_NUM){ -// sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); -// sysPara->status.vars[sysPara->status.variNum].endRowPos = j; - } - else TempVarNum++; - } - } - - else if( (rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || - (rgbValue == BAR_RGB)){ - if(sysPara->status.QRvariNum>=4)continue; - if(rgbValue == MDT_RGB) { //MDT - handleCode(i,j,&varLastRow, MDT); - } - else if(rgbValue == QR_RGB) { //QR - handleCode(i,j,&varLastRow, QR); - } - else if(rgbValue == BAR_RGB) { //BAR - handleCode(i,j,&varLastRow, BAR); - } - - if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; - } - - else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - } - else if((rgb & 0xfffff0)==0xff0cf0) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - } - else if((rgb & 0xffffff)==0xff00ff) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - } - else - { //Y = 0.299*R' + 0.587*G' + 0.114*B //非变量 - int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; - if(y < 125 ){ - dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 - if((j+1) > sysPara->status.currPrintRow) { - sysPara->status.currPrintRow = j+1; - } - } - } - - }/*判断alpha end*/ - } - } - - if(TempVarNum>MAX_VARI_NUM){ - setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); - strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); - strTitle.append("\r\n"); - strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); - QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); - } - - sysPara->status.variNum = 0; - sysPara->status.ExpiryVarNum = 0; - sysPara->print.ExpiryVar.startColPos = 0; - sysPara->print.ExpiryVar.endRowPos = 0; - sysPara->print.ExpiryVar.letterSpace =0; - sysPara->print.CurDateVar.startColPos = 0; - sysPara->print.CurDateVar.endRowPos = 0; - sysPara->print.CurDateVar.letterSpace = 0; - sysPara->status.CurrDateVariNum = 0; - sysPara->status.QRvariNum=0;//lch add - - // 处理变量和常量的渲染和更新 - handleSceneShow(MaxCol4000, dat); - - if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; - bool found=0; - lastRow = sysPara->status.currPrintRow; - for(int j = sysPara->status.currPrintRow; j >2 ; j--){ //计算首行位置 - for(int i = 0; i < coldot; i++){ - if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ - lastRow = j+1; - found=1; - break; - } - } - if(found) - break; - } - if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow = MAX_PRINT_ROW_NUM-1; - if(lastRowstatus.currPrintRow = sysPara->status.currPrintRow > lastRow? - sysPara->status.currPrintRow : lastRow; - } - - if(sysPara->status.QRvariNum) { - onUpdateDispQRCode(1); - } - - int wmax = sysPara->status.currPrintRow; - sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; - if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; - else { - if(sysPara->para.AlterMode==0) sysPara->para.AlterMode=1; - wmax = sysPara->status.currAlterPrintRow; - } - /*-------------------------------切换到预览显示窗口-----------------------------------*/ - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, - sysPara->para.AlterMode? - sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); - ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); - ui->widgetPrintTextDisplay->update(); - } - previewFlag=0; -} - -int MainWindow::calculateMaxSpeed(int backup) -{ - float stroke; - int valid_array; - int rongdian = 0; - int mm; - int oscfreq = 0; - - // QSizeF size = ui->textEdit->document()->size(); - - switch (sysPara->para.oscillatoFreq) { - case CRYS_64K: - oscfreq = 64000; - break; - case CRYS_83K: - oscfreq = 83000; - break; - case CRYS_96K: - oscfreq = 96000; - break; - case CRYS_128K: - oscfreq = 128000; - break; - default: - break; - } - stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; - - rongdian = sysPara->status.currPrintRow * (float)sysPara->para.reducedPixelNumRatio/100; - valid_array = sysPara->status.currPrintRow - rongdian; - - switch (sysPara->para.currPrintMode) { - case FAST_PRINT: - mm = (float)(stroke * oscfreq /(sysPara->status.currPrintRow +1)); - break; - case STANDARD_PRINT: - mm = (float)( (stroke * oscfreq) / (valid_array * 2)); - break; - case SLOW_PRINT_ONE: - mm = (float)( (stroke * oscfreq) / (valid_array * 3)); - break; - case SLOW_PRINT_TWO: - mm = (float)( (stroke * oscfreq) / (valid_array * 4)); - break; - case SLOW_PRINT_THR: - mm = (float)( (stroke * oscfreq) / (valid_array * 5)); - break; - case SLOW_PRINT_FOR: - mm = (float)( (stroke * oscfreq) / (valid_array * 6)); - break; - case SLOW_PRINT_FIV: - mm = (float)( (stroke * oscfreq) / (valid_array * 7)); - break; - case SLOW_PRINT_SIX: - mm = (float)( (stroke * oscfreq) / (valid_array * 8)); - break; - case SLOW_PRINT_SEV: - mm = (float)( (stroke * oscfreq) / (valid_array * 9)); - break; - case SLOW_PRINT_EIG: - mm = (float)( (stroke * oscfreq) / (valid_array * 10)); - break; - case SLOW_PRINT_NIE: - mm = (float)( (stroke * oscfreq) / (valid_array * 11)); - break; - default: - mm = backup/sysPara->para.synPulseNumPerMm; - break; - } - - return mm; - -} - -void MainWindow::Test_Start_Stop() -{ - if(test_flag <=0) return; - if(test_flag >= RECICLARNUMBER){ - LogInfo::setRunStatusText(tr("回收槽开关检测完成!")); - test_flag = 0; - return; - } - if((test_flag%2) == 0){ - if(!open_close){ - on_pushButtonReclaimTanOpen_pressed(); - open_close = 1; - } - } - else if(test_flag%2 == 1){ - if(open_close){ - on_pushButtonReclaimTankClose_pressed(); - open_close = 0; - } - } -} - -int MainWindow::checkRange(QImage textImage, int textColdot, - int posX, int posY) -{ - int firstRow = 0;//变量显示底部会多一条横线 - int lastRow = MAX_PRINT_ROW_NUM; - - int variNum = 0; - for(int j = 0; j < lastRow - firstRow; j++){ // Y - for(int i = 0; i < textColdot; i++){ // - QRgb rgb = textImage.pixel(i,j + firstRow); - long unsigned int rgbValue = rgb & COLOR_MASK; - if((rgb&0x80000000)){ //判断alpha - if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 - - bool textfoundvar = 0; - if(j>0){ - QRgb r_rgb = textImage.pixel(i,j + firstRow+1); - if((r_rgb & 0xf0f0ff) != 0xf0f000 ) - { - textfoundvar =1; - } - } - if(textfoundvar) { - - if(sysPara->status.variNum < MAX_VARI_NUM){ - sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+posX; - sysPara->status.vars[sysPara->status.variNum].endRowPos = j+posY; - - if(lastRowstatus.variNum ++; - variNum++; - i+=5;//scene 每一行可能都包含变量 - - } - else variNum++; - - } - } - - else if((rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || - (rgbValue == BAR_RGB)){ - if(sysPara->status.QRvariNum>=4)continue; - if(rgbValue == MDT_RGB) { //MDT - handleCodeScene(i, j, &lastRow, MDT, posX, posY); - } - else if(rgbValue == QR_RGB) { //QR - handleCodeScene(i, j, &lastRow, QR, posX, posY); - } - else if(rgbValue == BAR_RGB) { //BAR - handleCodeScene(i, j, &lastRow, BAR, posX, posY); - } - - if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; - } - - else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - bool foundExVar=0; - if(j>0){ - QRgb r_rgb = textImage.pixel(i,j + firstRow+1); - if(((r_rgb & 0x0000ffff) != EXPIRY_VARI_RECONISE )){foundExVar =1;} - } - if(foundExVar) - { - if(sysPara->status.ExpiryVarNum == 0) - { - sysPara->status.ExpiryVarNum ++; - } - sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; - sysPara->print.ExpiryVar.endRowPos = j+posY; - if(lastRow0){ - QRgb r_rgb = textImage.pixel(i,j + firstRow+1); - if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} - } - if(foundExVar) - { - if(sysPara->status.CurrDateVariNum == 0) - { - sysPara->status.CurrDateVariNum ++; - } - sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; - sysPara->print.CurDateVar.endRowPos = j + posY; - if(lastRow sysPara->status.currPrintRow) { - sysPara->status.currPrintRow = j+posY; - } - } - } - } - return variNum; -} - -void MainWindow::handleSceneShow(bool MaxCol4000, unsigned char *dat) -{ - int myvariNum=0; - QList items = ui->senceEditOption->getPicSceneItems(); - foreach (QGraphicsItem *item, items) { - PicTextItem *picText = qgraphicsitem_cast(item); - bool ok; - - int textColdot=0; - textColdot = picText->boundingRect().width(); - if(textColdot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - textColdot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; - int maxTextHeight = MAX_PRINT_ROW_NUM + 12; - QSize textSize(textColdot, maxTextHeight); - QImage textImage(textSize,QImage::Format_ARGB32); - textImage.fill(0x00ffffff);//填充白色 - QPainter textPainter(&textImage); - - QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height()); - pPicScene->render(&textPainter,QRectF(),validtextRectF); - - /*--------------------------------------------------------------------------*/ - int textItemPosX; - int textItemPosY; - textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x(); - textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); - - //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 - checkRange(textImage, textColdot, textItemPosX, textItemPosY); - - //===================一般变量===================== - QString textVariPattern = ""; - QRegExp textrx(textVariPattern); - QString textHtml = picText->toHtml(); - int from = 0; - while(from < textHtml.size() && from != -1){ - from = textHtml.indexOf(textrx,from); - - if(from != -1){//找到匹配的 - from ++; - if(myvariNum < sysPara->status.variNum) - { - sysPara->status.vars[myvariNum].digitalNum = textrx.cap(4).toInt(&ok);//第二个匹配,数字到个数 - sysPara->status.vars[myvariNum].bold = (sysPara->status.vars[myvariNum].digitalNum%100) == 75; - if(sysPara->status.vars[myvariNum].bold) - sysPara->status.vars[myvariNum].digitalNum = sysPara->status.vars[myvariNum].digitalNum/100; - sysPara->status.vars[myvariNum].type = textrx.cap(2).toInt(&ok);//第一个匹配 - QByteArray fontNameUtf8 = textrx.cap(3).toUtf8(); - strncpy(sysPara->status.vars[myvariNum].fontname, fontNameUtf8.data(), sizeof(sysPara->status.vars[myvariNum].fontname) - 1); - sysPara->status.vars[myvariNum].fontname[sizeof(sysPara->status.vars[myvariNum].fontname) - 1] = '\0'; - sysPara->status.vars[myvariNum].width = textrx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); - sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); - sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1; - - if(sysPara->status.vars[myvariNum].startRowPos<0) - sysPara->status.vars[myvariNum].startRowPos=0; - - int item_x_start_pos = sysPara->status.vars[myvariNum].startColPos; - int item_x_end_pos = item_x_start_pos + sysPara->status.vars[myvariNum].width ; - if(item_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - item_x_end_pos = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; - int item_y_start_pos = sysPara->status.vars[myvariNum].startRowPos; - int item_y_end_pos = sysPara->status.vars[myvariNum].endRowPos+1 ; - if(item_y_start_pos < 0) - item_y_start_pos = 0; - // 擦除占位图 - for(int i = item_x_start_pos; i < item_x_end_pos; i++){ - for(int j = item_y_start_pos; j < item_y_end_pos; j++){ - dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 - } - } - sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); - if(sysPara->status.vars[myvariNum].height>16 ){ - if(sysPara->status.vars[myvariNum].height==24) - ; - else { - if(sysPara->status.vars[myvariNum].startRowPos) - { - sysPara->status.vars[myvariNum].endRowPos--; - sysPara->status.vars[myvariNum].startRowPos--; - } - } - } - - if(sysPara->status.vars[myvariNum].type == RANDOMNUM) - { - sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum; - } - - sysPara->status.vars[myvariNum].letterSpace = 0; - if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace - QFont font; - font.setFamily(sysPara->status.vars[myvariNum].fontname); // 20160812 - font.setPixelSize(sysPara->status.vars[myvariNum].height); - font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal); - font.setLetterSpacing(QFont::AbsoluteSpacing, 0); - QFontMetrics fontMetrics(font); - int charWidth = (fontMetrics.horizontalAdvance("0123456789"))/10 ; - sysPara->status.vars[myvariNum].letterSpace = - (sysPara->status.vars[myvariNum].width - charWidth * sysPara->status.vars[myvariNum].digitalNum) - / (sysPara->status.vars[myvariNum].digitalNum); - } - myvariNum++; - } - } - } - //==========================一般变量结束======================= - - //=========================二维码变量================== - searchQrVar(); - - //=========================有效期/生产日期变量================== - searchExpiryVar(textHtml); - - //=========================数模转换================= - generateCharRamData(); - } -} - -void MainWindow::UpdateDateTimeQRCode(QString strContent) -{ - if(!printingFlag || !sysPara->para.isCheckInsertTime) - { - return ; - } - - QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); - bool ok; - int font_size = labelFontSize->text().toInt(&ok,10); - QString font_family = Public::getFontFamily(font_size); - if(sysPara->para.EditMode == TXTFILE) - { - QFile file("/home/plg/doc/modbusQR.bmp"); - if(file.exists()) - { - file.remove(); - } - if(dlgqrcode->barCodeFlag == 1) - { - barcode->extSetText(""); - barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); - } - else - { - QString receiveContent = QString::fromUtf8(strContent.toStdString().c_str()); - dlgqrcode->extSetText(receiveContent,sysPara->para.qrOption.type); - dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); - } - - QString txt_fomart = ""; - txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) - .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); - txt_fomart += barcode->getLabe_TxtString().toUtf8(); - txt_fomart += " "; - txt_fomart += ""; - ui->textEditOption->textEdit->setHtml(txt_fomart); - ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); - on_pushButtonStartPrint_pressed();//开始打印 - } - -} -QSizeF MainWindow::getDocSize()const -{ - QSizeF size = ui->textEdit->document()->size(); - return size; -} - -#ifdef EnableArabic -void MainWindow::setOpenFileName(QString fileName){ - qDebug()<<"set open fileName"<%1
%2").arg(subname).arg(subsuffix2); - ui->labelOpenedFileName->setText(stringhtml); - }else{ - font.setFamily("biyang"); - ui->labelOpenedFileName->setFont(font); - ui->labelOpenedFileName->setText(fileName); - } - }else{ - font.setFamily("biyang"); - ui->labelOpenedFileName->setFont(font); - ui->labelOpenedFileName->setText(fileName); - } - }else{ - ui->labelOpenedFileName->setText(fileName); - } -} -#endif - - -void MainWindow::showFPGAData(QByteArray data){ - ui->textEdit->clear(); - ui->textEdit->setText(QString::fromUtf8(data)); -} - - -void MainWindow::showFPGAqueuesize(int size){ - sysPara->status.sizeFPGA = size; -} - -void MainWindow::showSTM32queuesize(int size){ - sysPara->status.sizeSTM32 = size; -} - -void MainWindow::showqueueFPGAsize(int size){ - sysPara->status.sizequeueFPGA = size; -} - -void MainWindow::on_pushButton_Reboot_clicked() -{ - QMessageBox::StandardButton ret = QMessageBox::Ok; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认重启?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - if(!sysPara->status.selfCheckDone) - sysPara->status.selfCheckDone = true; - this->setDisabled(true); - emit setDisableAll(); - if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ - for(int i=15;i>11;i--) - { - if(i == 15){ - sysPara->status.isPumpValveControledByHand = true; //停止自动 - sysPara->devOp->controlInkValve(true); - sysPara->devOp->controlInkValvePWM(true); - sysPara->devOp->controlReclaimPump(true,true); - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlCycleValve(true); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - if(i == 12){ - sysPara->devOp->controlInkValve(false); - sysPara->devOp->controlInkValvePWM(false); - } - this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); - MySleep(1000); - } - } - sysPara->devOp->controlReclaimTankOpen(true); - sysPara->status.isPumpValveControledByHand = true; //停止自动 - if(sysPara->para.gearPumpEnable ){ - if(!sysPara->para.flagOfReclaimPumEnable){ - sysPara->para.gearPumpValue = 360; - sysPara->devOp->WriteMoterPump(); - } - else{ - sysPara->devOp->controlReclaimPump(true,false); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - } - else{ - sysPara->para.reclaimPumpPWMWidth = 95; - sysPara->devOp->controlReclaimPump(true,true); - } - - if(!sysPara->devOp->isViscosityPumpOpen()) - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlCycleValve(true); - sysPara->devOp->controlInkValve(false); //关供墨 - sysPara->devOp->controlInkValvePWM(false); //关供墨 - - if(!TEST_MODE){ - for(int i=11;i>7;i--) - { - if(i==9) - sysPara->devOp->controlReclaimTankOpen(false); - this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); - MySleep(1000); - } - } - - if(!sysPara->status.lostCommuFlag){ - sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); - sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); - sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); - - updateTotalCnt(0); - sysPara->saveParaToFile(); // 关机前将相关配置保存 - } - sysPara->status.powerOffAppending = false; - if(!TEST_MODE){ - for(int i=7;i>0;i--) - { - if(i == 5) - sysPara->devOp->controlReclaimTankClose(true); - if(i == 4){ - sysPara->devOp->controlViscosityPump(false); - sysPara->devOp->controlCycleValve(false); - sysPara->devOp->controlReclaimPump(false,false); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); - MySleep(1000); - } - } - - sysPara->saveParaToFile(); // 关机前将相关配置保存 - sysPara->saveRFIDPara(); - MySleep(200); - system("sync");//缓存同步 - QCoreApplication::quit(); - } -} - -void MainWindow::setReBootQtUIEnable(bool flag){ - ui->pushButton_Reboot->setEnabled(flag); -} - -void MainWindow::on_pushButtonPowerOff_clicked() -{ - _on_pushButtonPowerOff_pressed(true); -} - -/** - * @brief MainWindow::slt_updateNetworkQR - * 响应 dlgQrCode::sig_updateNetworkQR 信号,将网络(TCP)收到的新二维码 - * 更新到主界面的文本编辑区。 - */ -void MainWindow::slt_updateNetworkQR() -{ -#ifdef _2DCODE_ - // 图片模式下不操作文本编辑区,直接返回 - if(sysPara->para.EditMode==PICFILE) return; - - sysPara->saveParaToFile(); - - // 刷新预览 - if(sysPara->para.EditMode == TXTFILE) { - PreviewPressed(); - } else if(sysPara->para.EditMode == SCENE) { - onPreviewScene(); - } - - // 切换到预览页面,让用户看到更新后的二维码 - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - - // 如果正在打印,立即发送新数据到 FPGA - if(startPrintingFlag && printingFlag) { - SendPrintDataToFpga(0); - } -#endif -} - -void MainWindow::slt_clearAllQRCode() -{ -#ifdef _2DCODE_ - // 1. 清除 textEdit 中的所有二维码图片 - QTextCursor cursor(ui->textEdit->document()); - bool modified = false; - - while (!cursor.atEnd()) { - cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); - QTextCharFormat fmt = cursor.charFormat(); - - if (fmt.isImageFormat()) { - QString imgName = fmt.toImageFormat().name(); - // 删除所有二维码相关的图片(包括普通二维码和网络二维码) - if (imgName.contains("QRV") || imgName.contains("DMTV") || - imgName.contains("BARV") || imgName.contains("networkQR")) { - cursor.deleteChar(); - modified = true; - } - } - cursor.clearSelection(); - } - - // 2. 清除场景中的二维码变量标记 - sysPara->status.QRvariNum = 0; - memset(sysPara->print.QRvars, 0, sizeof(sysPara->print.QRvars)); - - // 3. 复位二维码参数 - sysPara->para.qrOption.width = 0; - sysPara->para.qrOption.height = 0; - - // 4. 刷新显示 - if (modified) { - ui->widgetPrintTextDisplay->update(); - LogInfo::setRunStatusText(tr("已清除所有二维码,准备添加网络二维码")); - } -#endif -} - -extern int baudRateValue; -void MainWindow::UpdateUIVersion(){ - int fpgaType = sysPara->status.fpgaVersionNum>>12; - QString fpgaVersion; - if(fpgaType == 6){ - fpgaVersion = "72"; - }else if(fpgaType == 1){ - fpgaVersion = "67"; - } - - fpgaVersion = fpgaVersion + QString("_F%1.%2.%3").arg(sysPara->status.fpgaVersionNum >> 12) - .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff); - - QString STM32Ver = QString("S:%1.%2.%3_B%4").arg((sysPara->status.stm32Verion>>16)&0x7F) - .arg((sysPara->status.stm32Verion>>8) & 0xFF).arg(sysPara->status.stm32Verion&0xFF).arg(baudRateValue); - - QString VernonBach; - VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); - VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER; - - QString Mac = QString::number(sysPara->status.machineMac); - LogInfo::showVerionInformation(Mac,VernonBach,fpgaVersion,STM32Ver,sysPara->status.flagOfPowerOnMode); -} - -void MainWindow::checkPrintingInterval(){ - unsigned int type = sysPara->status.fpgaVersionNum >> 12; - if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && type == 8) //72版本同步模式下,判断喷印间隔是否设置合理 - { - QSizeF size = ui->textEdit->document()->size(); - float stroke,print_len_min; - stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; - print_len_min = stroke * size.width(); - if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) - { - QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); - return; - } - } -} +/* +* +* +*2013-9-15高压报警停止充电 +*/ + +/* + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否初始化产品计数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + updateTotalCnt(0); + sysPara->devOp->clearProductCnt(1); + sysPara->saveParaToFile(); + + } + */ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "InputMethod.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef Q_OS_WIN +#include +#else +#define reboot(a,...) (0 == 0) +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "DevOp.h" +#include "Public.h" +#include "LogInfo.h" +#include "QBarCode.h" +#include "scene/picscene.h" +#include +#include "MyInputMethod.h" +#include +#include "VerBVersion.h" +//#define SAVEWHENPREVIEW // 预览时先保存 +#include +#include +#include + +#define MDTFLAG 0xff00FF10 +#define QRFLAG 0xff00FF20 +#define BARFLAG 0xff00FF30 + +// 统一使用相同的掩码和比较值 +#define COLOR_MASK 0x00FFFFF0 // 忽略 Alpha 通道 +// 定义比较用的 RGB 值 +#define MDT_RGB 0x00FF10 +#define QR_RGB 0x00FF20 +#define BAR_RGB 0x00FF30 + +#define MMVAR 1 +#define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 + +#define EXPIRY_VARI_RECONISE 0x0000FF +#define RECICLARNUMBER 22 + +int firstGetFpgaVersionNumFlag=0; + +static int weekendPowerOff = 0; +unsigned char test_flag,open_close; +extern QFile PrintDatafile; +extern MyInputMethod *myInputMethod; + +MainWindow::MainWindow(QWidget *parent) : + QWidget(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); //不使用布局 + + //ui->textEdit->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); + QFont font = ui->textEdit->font(); + font.setPixelSize(12); + ui->textEdit->setFont(font); + previewFlag =0; + ui->textEditOption->bindText(ui->textEdit); + ui->textEditOption->bindPicWidget(ui->PicWidgetDisp); + ui->textEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); + //ui->textEditOption->setl +#ifdef _2DCODE_ + // dlgqrcode = new dlgQrCode(); + dlgqrcode = ui->textEditOption->qrcode; // 实时更新二维码,使用同一个界面 + //barcode = ui->textEditOption->barcode; + barcode = new QBarCode(); +#endif + //ui->pushButtonEditBarCode->hide(); + + connect(ui->labelFaultResume,SIGNAL(pressed()),this,SLOT(onLabelFaultRusumePressed())); +#ifdef EnableArabic + connect(ui->textEditOption,SIGNAL(fontSizeArabicSelect(bool)),myInputMethod,SLOT(getArabicFlag(bool))); + connect(myInputMethod,SIGNAL(selectArabicPage(int)),ui->textEditOption,SLOT(changeArabicPage(int))); + connect(myInputMethod,SIGNAL(switchEnglishOrArabic(bool)),ui->textEditOption,SLOT(swithchEnglisOrArabic(bool))); + connect(ui->textEditOption,SIGNAL(EnableSwitchArabicFlag(bool)),myInputMethod,SLOT(switchArabicFlag(bool))); +#endif + connect(ui->labelStatusHighVoltageFault,SIGNAL(pressed()),this,SLOT(onStatusHighVoltageFault())); + connect(ui->labelStatusInkLeak,SIGNAL(pressed()),this,SLOT(onStatusInkLeak())); + connect(ui->labelStatusInkSwint,SIGNAL(pressed()),this,SLOT(onStatusInkSwint())); + connect(ui->labelStatusInkWaterLevel,SIGNAL(pressed()),this,SLOT(onStatusInkWaterLevel())); + connect(ui->labelStatusRecycleWarn,SIGNAL(pressed()),this,SLOT(onStatusRecycleWarn())); + connect(ui->labelStatusSolvLevelWarn,SIGNAL(pressed()),this,SLOT(onStatusSolvLevelWarn())); + connect(ui->labelStatusViscosityWarn,SIGNAL(pressed()),this,SLOT(onStatusViscosityWarn())); + connect(ui->labelStatusChargefault,SIGNAL(pressed()),this,SLOT(onStatusChargefault())); + //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); labelStatusChargefault + //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); + + + connect(ui->textEdit,SIGNAL(textChanged ()),this,SLOT(ontextEdittextChanged())); + connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(onTextEditCursorPositionChanged())); + connect(ui->textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), ui->textEditOption, SLOT(currentCharFormatChanged(QTextCharFormat))); + + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(displayTime())); + timer->start(1000); + airPushTimer = new QTimer(this); + connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess())); + timerShowItem = new QTimer(this); + connect(timerShowItem, SIGNAL(timeout()), this, SLOT(onShowAndHideItem())); + + timerPowerOff = new QTimer(this); + connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd())); + + printingFlag = false; + startPrintingFlag = false; + + connect(ui->labelProductCnt,SIGNAL(pressed()),this,SLOT(onLabelProductCntPressed())); + connect(ui->labelTotalProductCnt,SIGNAL(pressed()),this,SLOT(onLabelTotalProductCntPressed())); + connect(ui->textEditOption->getPushButtonPreview(),SIGNAL(pressed()),this,SLOT(onPushButtonPreviewPressed())); +#ifndef EnableArabic + connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); +#else + connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(setOpenFileName(QString))); +#endif + connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); + //edit@02-07 + connect(ui->textEditOption,SIGNAL(switchBengalLanguage(bool)),myInputMethod,SLOT(switchBangalInput(bool))); + + connect(ui->textEditOption,SIGNAL(PicfileNameOpen(QString,bool)),this,SLOT(openPicFIleOpen(QString,bool))); // 由TEXTOPTION界面按键触发 + connect(ui->pushButtonTXTOpen,SIGNAL(clicked()),ui->textEditOption,SLOT( showDlg())); + connect(ui->pushButtonCNTResetNow,SIGNAL(pressed()),this,SLOT(onPushButtonCNTResetNowPressed())); +#ifdef _2DCODE_ + connect(ui->pushButtonEditBarCode,SIGNAL(pressed()),this,SLOT(onEditBarCode())); + connect(ui->pushButtonQREnCode,SIGNAL(pressed()),this,SLOT(onEditQRCode())); + + connect(ui->textEditOption, SIGNAL(fontSizeChange(int)), barcode, SLOT(setFontSize(int))); + connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); + connect(dlgqrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); + + //专门处理网络发送的二维码 + connect(dlgqrcode,SIGNAL(sig_updateNetworkQR()),this,SLOT(slt_updateNetworkQR())); + connect(dlgqrcode, SIGNAL(sig_clearAllQRCode()), this, SLOT(slt_clearAllQRCode())); +#endif + connect(this,SIGNAL(ShowWarnningText(QString,QString)),this,SLOT(ShowWarnningText1(QString,QString))); + + msgtest = new QMessageBox(this); + connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); + + //QFile file(SYS_ROOT_DIR"UseEn"); + if( Public::ReadLanguageName()!="Chinese") + { + ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); + //ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); + ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); + if(Public::ReadLanguageName()=="Thai"){ + ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint3.png")); + ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint3.png")); + } + } + // 立即清零 +#ifdef ENGLISH + ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); + ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); + ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); +#endif + +#ifndef CLEARCNTNOW + ui->pushButtonCNTResetNow->hide(); +#endif + fileChange=true; + pushButtonFlag = true; + + if(sysPara) + { + sysPara->status.FileChangeRestCntFlag=0; + } + + Public::derivePixelSizeFromHeight(12); + pPicScene = new PicScene(this); + //edit@12-09 + pPicScene->setSceneRect(QRectF(0,0, 3999, 220)); + ui->graphicsView->setScene(pPicScene); + ui->graphicsView->centerOn(0,0); + ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit); + ui->senceEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); + connect(ui->senceEditOption,SIGNAL(generateQRCode(QString)),this,SLOT(onGenerateQRCode(QString))); + connect(ui->senceEditOption,SIGNAL(previewScene()),this,SLOT(onPreviewScene())); + connect(ui->textEditOption,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); + connect(this,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); + connect(ui->senceEditOption,SIGNAL(editItemMode()),ui->textEditOption,SLOT(onEditItemMode())); + connect(ui->textEditOption,SIGNAL(editItemDone()),ui->senceEditOption,SLOT(onEditItemDone())); + + connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); + connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); + + m_2sFlag = false; + moveToThread(&ShowThead); + ShowThead.start(); + ui->pushButtonStart->setHidden(true);//屏蔽紧急停机按钮 + ui->textEdit->viewport()->setProperty("cursor", QVariant(QCursor(Qt::IBeamCursor))); + + // 在 textChanged 信号中处理 + connect(ui->textEdit, &QTextEdit::textChanged, [=]() { + QTextCursor c = ui->textEdit->textCursor(); + QRect r = ui->textEdit->cursorRect(c); + int viewportWidth = ui->textEdit->viewport()->width(); + + if (r.right() > viewportWidth - 20) { + int diff = r.right() - viewportWidth + 20; + ui->textEdit->horizontalScrollBar()->setValue( + ui->textEdit->horizontalScrollBar()->value() + diff + ); + } + }); +} + +MainWindow::~MainWindow() +{ + disconnect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem())); + if (ShowThead.isRunning()) { + ShowThead.quit(); + ShowThead.wait(); + } + + delete ui; + delete timer; + delete pPicScene; + +} + +/*显示当前系统时间 */ +void MainWindow::displayTime() +{ + if(sysPara){ + ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.AD_FIXED/4)+"°C"); // 机箱温度 + ui->labDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); + + static bool CleanUPEn=1,preCleanUP=0; + if(!sysPara->para.isCheckMagnet) + { + CleanUPEn = (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT); + } + else + { + CleanUPEn = (sysPara->status.currReclaimTankPos<70) ; + } + if(CleanUPEn != preCleanUP){ + ui->pushButtonCleanUP->setEnabled(CleanUPEn); + } + preCleanUP=CleanUPEn; + if(m_2sFlag) + { + { + sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关 + sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); //控制供墨阀开关 + } + + } + } +} + +void MainWindow::bindSysPara(SysPara *sysPara){ + this->sysPara = sysPara; + ui->textEditOption->bindSysPara(sysPara); + ui->widgetPrintTextDisplay->bindSysPara(sysPara); +#ifdef _2DCODE_ + barcode->bindSysPara(sysPara); + dlgqrcode->setSysPara(sysPara); + dlgqrcode->barCodeFlag = this->sysPara->para.qrOption.barCodeFlag; + dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); +#endif +#ifdef PICSCENE + ui->senceEditOption->bindSysPara(sysPara); +#endif +} + +void MainWindow::updateSysParaToUI(){ + if(sysPara){ + //nothing here + ui->textEditOption->updateSysParaToUI(); + } +} + +void MainWindow::applyUIPara(){ + if(sysPara){ + + } +} + +void MainWindow::CheckStatus(int Flag){ + if(sysPara){ + static unsigned int lastProductCnt=0; + int AutoCount=0; + int bcAutoCount=0; + static int lastMinutes = 0; + //QDate curDate=QDate::currentDate(); + int currMinutes = QDateTime::currentDateTime().time().minute(); + int usbDate = sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum ||sysPara->status.classVariNum; + if(usbDate) + { + //qDebug()<<"CheckStatus"; + bool needSendPrintData=false; + //if(sysPara->print.CurDateVar.endRowPos && (sysPara->print.CurDateVar.day != curDate.day())) + if (sysPara->status.ExpiryVarNum && (lastMinutes != currMinutes)) + { + ExpiryDotUpdate(1); + needSendPrintData = true; + } + //if(sysPara->print.ExpiryVar.endRowPos && (sysPara->para.ExpiryDay != r_ExpiryDay)) + if(sysPara->status.CurrDateVariNum && (lastMinutes != currMinutes)) + { + ExpiryDotUpdate(2); + needSendPrintData = true; + } + if(sysPara->status.classVariNum && (lastMinutes != currMinutes)) + { + ExpiryDotUpdate(3); + needSendPrintData = true; + } + lastMinutes = currMinutes; + //sysPara->print.CurDateVar.day = curDate.day(); + if(needSendPrintData) + { + sysPara->status.ExpiryDispUpdate=10; + SendPrintDataToFpga(0); + } + //if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) + // ui->widgetPrintTextDisplay->update(); + //sysPara->status.ExpiryDispUpdate=1; + + } + if(sysPara->status.productCnt != lastProductCnt) + //if( sysPara->para.calandar_and_dat.cnt1CurrValue != sysPara->para.qrOption.counter ) + { + lastProductCnt = sysPara->status.productCnt; + //sysPara->para.qrOption.counter ++;//= sysPara->para.calandar_and_dat.cnt1CurrValue; + // 荆州-四机赛瓦要求:跟计数器同步 此处优化逻辑,增量大于0才+= + if (sysPara->para.qrOption.CntInc > 0) + sysPara->para.qrOption.counter += sysPara->para.qrOption.CntInc; + + AutoCount = (sysPara->status.QRvariNum?1:0); + //bcAutoCount = (sysPara->status.BCvariNum?1:0); +#ifdef MYARMTEST + qDebug()<<"CheckStatus:"<para.qrOption.counter<status.productCnt<para.qrOption.counter <status.QRvariNum; + } + //else qDebug()<<"P:"<status.productCnt; + + if( sysPara->para.qrOption.RecFromHost || AutoCount ) + { + sysPara->para.qrOption.RecFromHost=0; + sysPara->para.qrOption.type = sysPara->print.QRvars[0].type; + sysPara->para.qrOption.height = sysPara->print.QRvars[0].height; + sysPara->para.qrOption.width = sysPara->print.QRvars[0].width; + + if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) + { + onUpdateDispQRCode(1); // 更新二维码显示 + //qDebug()<<"PN:"<status.LightUpCnt ++ ; + if((sysPara->status.LightUpCnt%3) == 0){ + if(printingFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag) + sysPara->status.GreenLightOnFlag = true; + else + sysPara->status.GreenLightOnFlag = false; + if(sysPara->status.GreenLightOnFlag){ + if(!sysPara->para.isCheckPrintLight) + sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); + else + sysPara->devOp->controlGreenLight(true); + } + else{ + sysPara->devOp->controlGreenLight(false); // 只在确定不亮时才发关灯 + } + } + Test_Start_Stop(); + if(sysPara->status.circleProductCnt && (sysPara->status.productCnt >= sysPara->para.cnt1EndValue)) + { + if(sysPara) + { + sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + } + } + } + + } +} + + +void MainWindow::RefreshStatusLight(){//100ms + if(sysPara){ + static int hdint = 0; + static int reclainTankReachEnd = 0; + if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关 + if (sysPara->status.reclainTankReachEnd) { + // sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); + sysPara->devOp->highVoltageCtrl(0); + } + } + hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT); + + if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底 + if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态 + // sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); + sysPara->devOp->highVoltageCtrl(0); + } + } + reclainTankReachEnd = sysPara->status.reclainTankReachEnd; + + if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){ + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关 + ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + } + + if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){//喷头盖 + ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + + if(printingFlag && startPrintingFlag) + setRunStatus(tr("正在喷印...............")); + } + else { + ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + if(printingFlag && startPrintingFlag) + setRunStatus(tr("喷头盖开, 喷印无法正常进行!!!")); + } + + + if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告 + ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + strTitle = tr("墨水缸满报警"); + if(sysPara->devOp->isMixValveOpen()) { + sysPara->devOp->controlMixValve(false); //关掉混合阀 + } + } + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){ + ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + strTitle = tr("墨水液位报警"); + + + } + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){ + ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + else { + ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + strTitle = tr("溶剂液位报警"); + + } + + if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){ + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + + } + else { + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + + } + + //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"))); + } + // HVfaultCnt=0; + //sysPara->status.HVFaultCloseEn=0; + } + else { + ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 + on_pushButtonPausePrint_pressed(); + 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(); + sysPara->status.reclaimTankBlockedAppending=1; + LogInfo::setRunStatusText(tr("高压故障,关回收槽")); + setRunStatus(tr("高压故障,关回收槽和墨线")); + } + sysPara->status.HVFaultCloseEn=1; + } + } + + } + + /*-----------------------------------------------------------------------------------*/ + 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"))); + } + else { + if(sysPara->status.viscosityFault==1){ + + ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + + } + else if(sysPara->status.viscosityFault==2) { + ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); + + } + } + } + sysPara->status.lastViscosityFault = sysPara->status.viscosityFault; + /*-----------------------------------------------------------------------------------*/ + if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie + if(sysPara->status.RecycleWarnCnt) + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + sysPara->status.RecycleWarnCnt = 0; + sysPara->status.lastRecycleWarn = 0; + } + else { + // 速度过快时墨线可能瞬时偏移导致误报回收故障,此时抑制计数器累加并重置,避免误触发关槽 + if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) + { + sysPara->status.RecycleWarnCnt = 0; + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); + } + else if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone) + { + if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY) + { + sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + sysPara->status.reclaimCloseCnt=100; + if(sysPara->para.RecycleWarnAction) + { + if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){ + on_pushButtonStopPrint_pressed(); + on_pushButtonReclaimTankClose_pressed(); + LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线")); + setRunStatus(tr("回收故障,关闭回收槽,关墨线")); + } + } + else setRunStatus(tr("回收故障.")); + + } + else + { + sysPara->status.RecycleWarnCnt ++ ; + ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); + if(sysPara->status.RecycleWarnCnt%10==9) + LogInfo::setRunStatusText(tr("回收异常,墨线可能偏离.(%1)").arg(sysPara->status.RecycleWarnCnt)); + } + } + else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--; + } + + if(ui->labelRunStatus->text().length()<4){ + if(startPrintingFlag ){ + if(printingFlag) + setRunStatus(tr("正在喷印...............")); + else + setRunStatus(tr("暂停喷印...............")); + } + } + + // 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位 + ui->labPress->setText(QString("%1/%2").arg(sysPara->status.PRESSURE).arg(sysPara->para.pressure)); + ui->labViso->setText(QString("%1/%2").arg(sysPara->status.viscosity).arg(sysPara->para.viscosity) ); + if(sysPara->para.gearPumpEnable) + { + ui->labPosition->setText(QString("%1").arg(sysPara->status.gearPumpRunSpeed)); + } + else + { + ui->labPosition->setText(QString("%1/%2").arg(sysPara->status.SEPTAL_POSITION).arg(sysPara->para.septalPostion) ); + } + ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); + } +} + + +bool MainWindow::updatePhaseIndicatorLight(){ + if(sysPara==0) return 0; + + if(dlgMyWarringShowDlyCnt)dlgMyWarringShowDlyCnt--; + if(dlgMyWarringShowDlyCnt==1) dlgMyWarring.hide(); + + /*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/ + if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){ + //故障后必须等手动按故障恢复才会继续 + if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){ + if(sysPara->status.lastPhaseFault){ + sysPara->status.lastPhaseFault = 0; + ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + } + } + sysPara->status.phaseErrorCnt = 0; + } + else { + if(sysPara->status.phaseErrorCnt < 10) + sysPara->status.phaseErrorCnt ++ ; + else { + if(!sysPara->status.lastPhaseFault){ + ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); + sysPara->status.lastPhaseFault = 1; + if(sysPara->status.flight_tm_error) + { + LogInfo::setRunStatusText(tr("相位故障:飞行时间错误!")); + } + if(sysPara->status.detect_phase_error) + { + LogInfo::setRunStatusText(tr("相位故障:相位检测错误!")); + } + + } + if(sysPara->para.powerOffAfterPhaseFault ){ + if(!sysPara->status.powerOffAfterPhaseFaultAppending){ + sysPara->status.powerOffAfterPhaseFaultAppending = 1; + _on_pushButtonPowerOff_pressed(false); + LogInfo::setRunStatusText(tr("相位故障,准备关机")); + setRunStatus(tr("相位故障,准备关机")); + strTitle = tr("相位故障,准备关机"); + + + } + } + else if(sysPara->para.suspendAfterPhaseFault){ + if(sysPara->para.stopCounterMeterAfterFault){ + if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 + on_pushButtonPausePrint_pressed(); + LogInfo::setRunStatusText(tr("相位故障,暂停打印")); + setRunStatus(tr("相位故障,暂停打印")); + strTitle = tr("相位故障,暂停打印"); + + } + } + else if(!sysPara->status.DACDisable){ + sysPara->devOp->printCtrl(PRINT_CTRL_DAC_DISABLE); + sysPara->status.DACDisable = true; + LogInfo::setRunStatusText(tr("相位故障,屏蔽DAC输出")); + setRunStatus(tr("相位故障,屏蔽充电")); + strTitle = tr("相位故障,屏蔽充电"); + + } + + } + } + } + + + return sysPara->status.lastPhaseFault; +} + +double MainWindow::getMaxSpeedCalcPara(){ + sysPara->para.printRowDelay = sysPara->para.currPrintMode; + if(sysPara->status.isPrinting == false) + sysPara->status.pixNumPerCol = sysPara->status.currPrintRow; + // else + // sysPara->status.currPrintRow = sysPara->status.pixNumPerCol; + sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol; + + sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100; + int dotNumPerCol = (sysPara->para.pixNumPerCol- sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.printRowDelay + 1) + + (sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.lineEndAdjustPointDelay + 1); + dotNumPerCol = sysPara->para.pixNumPerCol? + ((dotNumPerCol*(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum))/sysPara->para.pixNumPerCol):1; + // sysPara->para.dotNumPerCol += sysPara->para.printColDelay; + dotNumPerCol =( sysPara->para.alterPrint.enable)? dotNumPerCol/2:dotNumPerCol; + + int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) + int colNum = dotNumPerCol?dotNum/dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 + double pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 + + if(sysPara->para.divideRatio == 0 || sysPara->para.synPulseNumPerMm == 0) + return 600.0f; + + double freq = (FPGA_SYS_HZ/(sysPara->para.divideRatio*2)); + double ddotNumPerCol = sysPara->status.currPrintRow - (sysPara->status.currPrintRow * sysPara->para.reducedPixelNumRatio / 100.0); + pulseNum = sysPara->para.printColDelay / sysPara->para.synPulseNumPerMm / 1000.0 * freq / ddotNumPerCol * 60.0; + return qBound(0.0, pulseNum, 600.0); +} + +static int reclaimTankDelay = 0; +void MainWindow::updateSysStatusToUI(){ //100ms + if(sysPara){ + if(sysPara->para.gearPumpEnable) + { + ui->label_11->setText(tr("齿轮泵转速")); + } + else + { + ui->label_11->setText(tr("隔膜位置")); + } + RefreshStatusLight(); + if(sysPara->status.lastProductCnt != sysPara->status.productCnt){ //产品计数 + ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); + updateTotalCnt(0); + } + if(sysPara->status.ExpiryDispUpdate >0 ) + { + sysPara->status.ExpiryDispUpdate--; + ui->widgetPrintTextDisplay->update();// 2018.5.25 + } + if(sysPara->para.alterPrint.enable==1) ui->labelXFileName->setText (tr("交替打印")); + else if(sysPara->para.alterPrint.enable==2) ui->labelXFileName->setText (tr("电眼交替")); + else ui->labelXFileName->setText (""); + /*--------------------------------------------------------------------------*/ + //if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && printintFlag){ //同步器速度 + if(( + (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + ||(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) + ||(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + )&& sysPara->para.eleEyeTriggerSynPrintEn) + ) + )//&&printintFlag + { + if(sysPara->para.synPulseNumPerMm) { + + unsigned int tmp = ((unsigned int) sysPara->status.synPulseCntPer1s ) & 0xffffff; + unsigned int mm = tmp /sysPara->para.synPulseNumPerMm * 60; // 1min总脉冲/毫米脉冲数 = 1min走过的距离mm数 + int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) + int colNum = sysPara->para.dotNumPerCol?dotNum/sysPara->para.dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 + int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 + + int maxMM = 0; + if(!sysPara->para.charWidthSetEnable) + { + if( (sysPara->status.currPrintRow != 0) + && (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + /*&& (sysPara->para.currPrintMode == FAST_PRINT || sysPara->para.currPrintMode == STANDARD_PRINT) */){ + maxMM = calculateMaxSpeed(pulseNum); + maxMM = maxMM *60; + if(sysPara->para.alterPrint.enable) + { + maxMM = maxMM * 2; + } + } + else + { + maxMM = (pulseNum/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距 + // qDebug()<< "[Info] OLD COUNT mm" << maxMM; + } + } + else + { + double speed = getMaxSpeedCalcPara();//No67 + maxMM = int(speed * 1000.0); + } + ui->labelSynRate->setText(tr("%1.%2[%3.%4]米/分").arg(mm/1000).arg(mm%1000,3,10,QLatin1Char('0')) + .arg(maxMM/1000).arg(maxMM%1000,3,10,QLatin1Char('0'))); + } + else + ui->labelSynRate->setText(""); + sysPara->status.lastSynPulseCntPer1s = sysPara->status.synPulseCntPer1s; + } + else + ui->labelSynRate->setText(""); + + /*--------------------------------------------------------------------------*/ + if(sysPara->status.lastSynColDelay != sysPara->status.synColDelay){ + // if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + ui->labelSynColDelay->setText(tr("列延时:%1点").arg(sysPara->status.synColDelay)); + sysPara->status.lastSynColDelay = sysPara->status.synColDelay; + } + /*--------------------------------------------------------------------------*/ + static int i=0; + i++; + if(sysPara->status.stm32Verion == 0){ + if(i % 10 == 0){ + sysPara->devOp->readSTM32Version(); + } + } + if(sysPara->status.stm32Time == 0){ + if(i % 10 == 0){ + sysPara->devOp->readSTM32Time(); + } + } + if(sysPara->status.fpgaVersionNum == 0){ //因为进入系统就会进主界面,马上就会将版本号读出 + if(i % 10 == 0){ + sysPara->devOp->readFpgaVersionNum(); + sysPara->devOp->readbuilDat(); + } + firstGetFpgaVersionNumFlag=1; + QString ARM_Version; + ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); + ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; + ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(0).arg(0).arg(0) ); + } + else{ + static bool logflag5 = true; + unsigned int num = sysPara->status.fpgaVersionNum & 0xf000; + if(num != 0x1000 && num != 0x6000 && num != 0x2000 && num != 0x8000 && logflag5){ + sysPara->status.fpgaVersionNum = 0; + } + else if(logflag5){ + emit readFPGAVersionReady(); + logflag5 = false; + sysPara->devOp->writeFpgaPrintPara(true); + QString ARM_Version; + ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); + ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; + ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12) + .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) ); + } + } + static bool logflag6 = false; + if(!logflag6){ + if(sysPara->status.fpgaVersionNum !=0 && sysPara->status.stm32Verion != 0){ + UpdateUIVersion(); + logflag6 = true; + } + } + + bool found_CNT1 = false; + bool found_CNT2 = false; + bool found_CNT3 = false; + bool found_CNT4 = false; + /*--------------------------------------------------------------------------*/ + if(sysPara->status.variNum && (ui->stackedWidgetText->currentWidget() == ui->pagePrintTextDisplay)){ + + bool updatePrintTextDisplayFlag = false; + + for(int i = 0; i < sysPara->status.variNum; i++){ + int val = 0; + switch( Public::getType(sysPara->status.vars[i].type)) + { + case CALANDAR_YEAR:val = sysPara->status.calandar_and_dat.year;break; + case CALANDAR_MONTH:val = sysPara->status.calandar_and_dat.month;break; + case CALANDAR_DAY:val = sysPara->status.calandar_and_dat.day;break; + case CALANDAR_WEEK:val = sysPara->status.calandar_and_dat.week;break; + case CALANDAR_HOUR:val = sysPara->status.calandar_and_dat.hour;break; + case CALANDAR_MINUTE:val = sysPara->status.calandar_and_dat.minute;break; + case CALANDAR_SECOND:val = sysPara->status.calandar_and_dat.second;break; + case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();found_CNT1=true;break; + case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();found_CNT2=true;break; + case CALANDAR_CNT3:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();found_CNT3=true;break; + case CALANDAR_CNT4:val = QString::number(sysPara->para.cnt4CurrValue,10).toInt();found_CNT4=true;break; + case RANDOMNUM : val = QString::number( sysPara->status.calandar_and_dat.RandomValue1, 16).toInt(); break; + case CALANDAR_XDAY:val = sysPara->status.XXXDay;break; + case EXPIRYDATE: break; + default:qDebug() << "error,unknown variable type:" << sysPara->status.vars[i].type; + } + + if(sysPara->status.vars[i].currVal != val) + //{ + updatePrintTextDisplayFlag = true; + sysPara->status.vars[i].currVal = val; + //} + + } + if(updatePrintTextDisplayFlag) //减少不必要的刷新动作 + { + ui->widgetPrintTextDisplay->updateSysStatusToUI(); + } + } + emit setCNT1Select(found_CNT1); + emit setCNT2Select(found_CNT2); + emit setCNT3Select(found_CNT3); + if(sysPara->para.isEnableGetDataButton) + { + ui->pushButtonGetData->setEnabled(true); + } + else + { + ui->pushButtonGetData->setEnabled(false); + } + if(SIMULATE_PRINTING_MODE) + enablePrintButton(true); + ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32)); + + if(sysPara->status.currReclaimTankPos <= 5) + sysPara->status.flagOfRebootEnable = true; + else + sysPara->status.flagOfRebootEnable = false; + if(sysPara->status.flagOfRebootEnable || TEST_MODE){ + ui->pushButton_Reboot->setEnabled(true); + }else{ + ui->pushButton_Reboot->setEnabled(false); + } +#ifdef NETWORKQRCODE //荆州-四机赛瓦要求:跟计数器同步 + // ========== 新增:检测计数器1变化并同步更新二维码 ========== + int currentCnt1Value = + QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue, 16).toInt(); + + if(sysPara->para.qrOption.counter != currentCnt1Value){ + + // 检查是否有二维码变量需要更新 + if(sysPara->status.QRvariNum > 0 && sysPara->para.qrOption.AutoCount){ + // 更新二维码选项中的计数器值 + sysPara->para.qrOption.counter = currentCnt1Value; + // 触发二维码重新生成 + onUpdateDispQRCode(1); + + // 如果正在打印,重新发送打印数据 + if(startPrintingFlag && printingFlag){ + SendPrintDataToFpga(0); + } + } + } + // ======================================================== +#endif + } +} + +void MainWindow::showPrintBitImage(){ + if(sysPara){ + unsigned char *dat; + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + for(int j = sysPara->status.currPrintCol - 1; j >= 0 ; j --){ + for(int i = 0; i < sysPara->status.currPrintRow; i++){ + if(dat[j*MAX_PRINT_ROW_BYTE_NUM + i/8] & (1<<(i%8))) + printf("1"); + else + printf(" "); + } + printf("\n"); + } + } +} + +//void MainWindow::on_pushButtonTXTOpen_pressed(){ + +//} + +void MainWindow::openPicFIleOpen(QString filePath,bool insertFlag) { + fileChange=true; +#ifdef TXTEDIT + ui->textEditOption->onFileOpenN(filePath,insertFlag); + emit setMainTabNow(0); +#else + Q_UNUSED(insertFlag); + + if(sysPara) { + + + + if(//filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || + //filePath.endsWith(".jpg") || + // ||filePath.endsWith(".bmp") + filePath.endsWith(".png")) + { + QFile file(filePath); + if(!file.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); + return ; + } + else { + + QByteArray data = file.readAll(); + QTextCodec *codec = Qt::codecForHtml(data); + QString str = codec->toUnicode(data); + + if(filePath.startsWith(UDISK_DOC_ROOT_DIR)) + str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 + file.close (); + ui->PicWidgetDisp->loadImage (filePath,false); + ui->labelOpenedFileName->setText (QFileInfo(filePath).fileName()); + LogInfo::setRunStatusText(tr("打开文件:")+(QString)(QFileInfo(filePath).fileName())); + if(sysPara){ + //QString str1 =QFileInfo( filePath).fileName (); + sysPara->sysFile= PARA_ROOT_DIR+QFileInfo( filePath).baseName()+".dpn"; + sysPara->loadParaFromFile ();// 从磁盘读取参数文件 + emit openFileChange(); + // emit openFileChange(); + snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toLatin1().constData()); + } + /* other action */ + PreviewPressed(); + + + if(sysPara->status.addSpace) + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->widgetPrintTextDisplay->setScaleRatio(3); + //ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); + } + } + } +#endif + +} + +void MainWindow::on_pushButtonGetData_pressed() +{ + emit getJSONData(); +} + +void MainWindow::onPushButtonPreviewPressed(){ + if(sysPara) + { + sysPara->para.EditMode = TXTFILE; + if(previewFlag==0) { +#ifdef SAVEWHENPREVIEW + if(ui->textEditOption->fileName.isEmpty()){ + QMessageBox::StandardButton ret = QMessageBox::Ok; + ret = QMessageBox::warning(this, tr("提示"), + tr("文件未保存,是否先保存文件!"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok) + { + ui->textEditOption->on_bottonSave_clicked(); + } + } + else + ui->textEditOption->on_bottonSave_clicked(); +#else + +#endif + PreviewPressed(); + } + } +} + + +int MainWindow::getVarStarRow(int x,int y,int h,int w,char *dat) +{ + int t_x_start_pos = x; + int t_x_end_pos = t_x_start_pos + w; + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); + int t_y_start_pos = y - h/2; + //int t_y_end_pos = y ; + if(t_y_start_pos < 0) + t_y_start_pos = 0; + + for(int j=y - h/2;j>0;j--) + { + char startRowFound=0; + for(int i = t_x_start_pos; i < t_x_end_pos; i++) + { + if( (dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8)))) + { + startRowFound=1; + dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] &=~ (1 << (j%8));//将画点取消掉 + } + } + if(startRowFound)continue; + t_y_start_pos=j+1; + // qDebug()<<"F:"<status.currPrintRow = 0; + sysPara->status.variNum = 0; + sysPara->status.QRvariNum = 0; + sysPara->status.ExpiryVarNum=0; + unsigned char *dat; + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + memset(dat,0,sizeof(sysPara->status.printDat_Normal)); + }else{ + dat =sysPara->status.printDat; + memset(dat,0,sizeof(sysPara->status.printDat)); + } + + //qDebug()<<"Preview:"; + //////////////////////////////////////////////////////在这里清变量参数 + sysPara->status.ExpiryVarNum=0; + sysPara->status.CurrDateVariNum = 0; + sysPara->status.classVariNum = 0; + sysPara->print.ExpiryVar.startColPos = 0; + sysPara->print.ExpiryVar.endRowPos = 0; + sysPara->print.ExpiryVar.letterSpace =0; + sysPara->print.CurDateVar.startColPos = 0; + sysPara->print.CurDateVar.endRowPos = 0; + sysPara->print.CurDateVar.letterSpace = 0; + ///////////////////////////////////////////////////////////////// + if(sysPara->para.EditMode==PICFILE) + { + + ui->PicWidgetDisp->getPrintDat (dat,0,sysPara); + ui->PicWidgetDisp->readVar (sysPara,0); + + // qDebug ()<<"v-n1:"<status.variNum<<"v-nLeter1:"<status.vars[0].letterSpace<<"v-nLeter2:"<status.vars[1].letterSpace<<"v-nLeter3:"<status.vars[2].letterSpace; + sysPara->status.variNum=ui->PicWidgetDisp->getVarNum (); + sysPara->status.currPrintCol=ui->PicWidgetDisp->getWidth (); + sysPara->status.currPrintRow=ui->PicWidgetDisp->getPicRealHeight(); + + ui->PicWidgetDisp->getCharRamData(sysPara); + + } + // end of PICFILE + else if(sysPara->para.EditMode==TXTFILE)// TXTFLE + { + sysPara->status.addSpace = sysPara->para.checkSpace; + ontextEdittextChanged(); + coldot = (int)ui->textEdit->document()->size().width(); + if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + { + coldot = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); + QMessageBox::warning(this, tr("警告"), + tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); + } + int maxPicHeight = MAX_PRINT_ROW_NUM + 12; + QSize size(coldot,maxPicHeight); + + sysPara->status.currPrintRow =0; + sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace + + + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.fill(0x00f0f000);//填充白色 + QPainter painter(&image); + //image.save("./printImage.jpg"); + ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + + image.save("./printImage.bmp"); + //ui->widgetPrintTextDisplay + int firstRow = maxPicHeight; + /*--------------------------------------------------------------------------*/ + for(int j = 0; j < maxPicHeight; j++){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + QRgb rgb = image.pixel(i,j); + if(rgb !=0x00ffffff )//& 0xff000000) + { + //qDebug()<maxPicHeight)?maxPicHeight:lastRow; + sysPara->status.ExpiryVarNum=0; + sysPara->status.CurrDateVariNum = 0; + sysPara->status.classVariNum = 0; + sysPara->print.ExpiryVar.startColPos = 0; + sysPara->print.ExpiryVar.endRowPos = 0; + sysPara->print.ExpiryVar.letterSpace =0; + sysPara->print.CurDateVar.startColPos = 0; + sysPara->print.CurDateVar.endRowPos = 0; + sysPara->print.CurDateVar.letterSpace = 0; + + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + for(int j = 0; j < lastRow - firstRow; j++){ // Y + for(int i = 0; i < coldot; i++){ // + QRgb rgb = image.pixel(i,j + firstRow); + // 修改code判断逻辑 + long unsigned int rgbValue = rgb & COLOR_MASK; + + if(rgb&0x80000000) { //判断alpha,rgb<0xFFE0E0E0->过滤偏白背景 + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + + bool foundvar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} + //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; + } + if(foundvar){ + if(sysPara->status.variNum < MAX_VARI_NUM){ + sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->status.vars[sysPara->status.variNum].endRowPos = j; + if(varLastRowstatus.variNum ++;TempVarNum++; + i+=5; + //qDebug()<<"VARr:"<status.QRvariNum>=4)continue; + if(rgbValue == MDT_RGB) { //MDT + handleCode(i,j,&varLastRow, MDT); + } + else if(rgbValue == QR_RGB) { //QR + handleCode(i,j,&varLastRow, QR); + } + else if(rgbValue == BAR_RGB) { //BAR + handleCode(i,j,&varLastRow, BAR); + } + + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + + } + //else if((rgb & 0xfffff0)==0xff00f0) + else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;} + } + if(foundExVar) + { + qDebug()<<"expiryVar:"; + //if(sysPara->status.ExpiryVarNum <3) + { + sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->print.ExpiryVar.endRowPos = j; + if(varLastRowstatus.ExpiryVarNum == 0) + sysPara->status.ExpiryVarNum ++; + i+=10; + } + //else TempVarNum++; + //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + } + else if((rgb & 0xfffff0)==0xff0cf0) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + //qDebug()<<"before found CurDateVar:"<0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} + } + if(foundExVar) + { + // qDebug()<<"found CurDateVar:"; + //if(sysPara->status.ExpiryVarNum <2) + { + sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0); + sysPara->print.CurDateVar.endRowPos = j; + if(varLastRowstatus.CurrDateVariNum == 0) + sysPara->status.CurrDateVariNum ++; + i+=10; + } + + //else TempVarNum++; + //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 + } + } + //else if((rgb & 0xffffff)==0x0032c8) + else if((rgb & 0x0000ff)>0x0000c0 && (rgb & 0x00ff00)>0x002F00 && (rgb & 0x00ff0000)==0x00000000) + { + //qDebug()<<"before found class:"<status.classVariNum <3) + { + EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ; + currCLass->startColPos = i+(sysPara->status.addSpace?i:0); + if (currCLass->startColPos>1) + currCLass->startColPos = currCLass->startColPos - 1; + currCLass->endRowPos = j; + if(varLastRowstatus.classVariNum == 0) + sysPara->status.classVariNum ++; + i+=5; + } + } + } + else { //Y = 0.299*R' + 0.587*G' + 0.114*B + int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; + if(y < 125 ) { + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 + + if((j+1) > sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+1; + } + } + } + }/*判断alpha end*/ + } + } + + // var + //qDebug() <<"VarNum"<8){ + setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); + strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); + strTitle.append("\r\n"); + strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); + QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); + } + + //qDebug()<status.vars[0].startRowPos<status.vars[0].endRowPos<< sysPara->status.currPrintRow; + // ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM + //qDebug()<<"qrvar"<status.QRvariNum; + searchQrVar(); + //if(sysPara->status.ExpiryVarNum) + searchExpiryVar(); + //ui->widgetPrintTextDisplay->update(); + //=============== + if(sysPara->status.variNum){ + // + /*--------------------------------提取变量------------------------------------------*/ + QString pattern = ""; + QRegExp rx(pattern); + QString textHtml = ui->textEdit->toHtml(); + + int from = 0; + int varNum = 0; + // 正常变量 + while(from < textHtml.size() && from != -1) { + from = textHtml.indexOf(rx,from);//返回匹配到到起始地址 + bool ok; + + if(from != -1){//找到匹配的 + from ++; + if(varNum < sysPara->status.variNum){ + + qDebug() << rx.capturedTexts(); + + sysPara->status.vars[varNum].digitalNum = rx.cap(4).toInt(&ok);//第二个匹配,数字到个数 + sysPara->status.vars[varNum].bold = (sysPara->status.vars[varNum].digitalNum%100) == 75; + if(sysPara->status.vars[varNum].bold) + sysPara->status.vars[varNum].digitalNum = sysPara->status.vars[varNum].digitalNum/100; + + sysPara->status.vars[varNum].type = rx.cap(2).toInt(&ok);//第一个匹配 + strcpy(sysPara->status.vars[varNum].fontname,rx.cap(3).toUtf8().data()); + sysPara->status.vars[varNum].width = rx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); + sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); + + //qDebug() <status.vars[varNum].startRowPos + // << "endRowPos" << sysPara->status.vars[varNum].endRowPos + // <<"Height"<status.vars[varNum].height; + //sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].startRowPos + sysPara->status.vars[varNum].height-1; + sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+1; + if(sysPara->status.vars[varNum].startRowPos<0)sysPara->status.vars[varNum].startRowPos=0; + //sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+(sysPara->status.vars[varNum].height==15||sysPara->status.vars[varNum].height==16?0:1); + // qDebug()<<"Hei:"<status.vars[varNum].height; + /*-----------------------------------------------------------------------------------------*/ + int t_x_start_pos = sysPara->status.vars[varNum].startColPos; + int t_x_end_pos = t_x_start_pos + sysPara->status.vars[varNum].width ; + if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); + int t_y_start_pos = sysPara->status.vars[varNum].startRowPos; + int t_y_end_pos = sysPara->status.vars[varNum].endRowPos+1 ; + if(t_y_start_pos < 0) + t_y_start_pos = 0; + for(int i = t_x_start_pos; i < t_x_end_pos; i++){ + for(int j = t_y_start_pos; j < t_y_end_pos; j++){ + + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 + + } + } + + sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); + if(sysPara->status.vars[varNum].height>16 ){ + if(sysPara->status.vars[varNum].height==24) + ; + else { + if(sysPara->status.vars[varNum].startRowPos) + { + sysPara->status.vars[varNum].endRowPos--; + sysPara->status.vars[varNum].startRowPos--; + } + } + } + + if(sysPara->status.vars[varNum].type == RANDOMNUM) + { + //qDebug()<<"RAND:"<status.vars[varNum].type<< sysPara->status.vars[varNum].digitalNum; + sysPara->status.RandomDigitNum = sysPara->status.vars[varNum].digitalNum; + + + } + + if(sysPara->status.vars[varNum].type >59 && sysPara->status.vars[varNum].type<70) + { + sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].endRowPos-3; + sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].startRowPos-3; + } + /*-----------------------------------------------------------------------------------------*/ + int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[varNum].height); + + //qDebug()<<"MainWindows"<status.vars[varNum].height<status.vars[varNum].letterSpace = 0; + if(sysPara->status.vars[varNum].digitalNum){ //算出letterspace + QFont font; + //font.setFamily(Public::getFontFamily(pixelSize)); + font.setFamily(sysPara->status.vars[varNum].fontname); // 20160812 + //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); + // font.setPixelSize(pixelSize); + font.setPixelSize(sysPara->status.vars[varNum].height); + font.setWeight(sysPara->status.vars[varNum].bold?QFont::Bold:QFont::Normal); + font.setLetterSpacing(QFont::AbsoluteSpacing, 0); + QFontMetrics fontMetrics(font); + int charWidth = (fontMetrics.horizontalAdvance("0123456789")) / 10 ; + if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + charWidth = (fontMetrics.horizontalAdvance("0123456789.m "))/13; + } + + sysPara->status.vars[varNum].letterSpace = + (sysPara->status.vars[varNum].width - charWidth * sysPara->status.vars[varNum].digitalNum) + / (sysPara->status.vars[varNum].digitalNum); + //sysPara->status.vars[varNum].width/sysPara->status.vars[varNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth; + } + + if(varNum<7) varNum ++; + } + else + { + qDebug() << tr("warning,界面上有变量未显示完全"); + } + } + } + } + + //if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<status.vars[0].endRowPos ; + + /*--------------------------------------------------------------------------*/ + generateCharRamData(); + + /*---------------------------------------------------------------------------*/ + //sysPara->status.currPrintRow ++;//总的行数,从1~n,而不是从0~n, + //if(sysPara->status.currPrintRow>39)sysPara->status.currPrintRow=39; + if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1) sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; + bool found=0; + + lastRow = sysPara->status.currPrintRow; + //qDebug()<<"lastRow:"<status.currPrintRow; j >2 ; j--){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ + lastRow = j+1; + found=1;//qDebug()<<"fOUND:"<status.currPrintRow; + break; + } + } + if(found) + break; + } + if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow =MAX_PRINT_ROW_NUM-1; + if(lastRow20 &&lastRow<=25) lastRow =24; + + sysPara->status.currPrintRow =lastRow; + //sysPara->status.currPrintRow = (lastRow > varLastRow) ? lastRow : varLastRow; //配合賴工省点打印少行問题 + + if(sysPara->status.specialVarPrint.SpecialVarEnable) + { + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 20240716 + } + } + // end of TxtMode + + // 交替打印 + // sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; + + +#ifdef _2DCODE_ + if(sysPara->status.QRvariNum) { + onUpdateDispQRCode(1); + } +#endif + //if(sysPara->status.currPrintRow==11) sysPara->status.currPrintRow=12; + int wmax = sysPara->status.currPrintRow; + sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; + if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; + else { + if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1; + wmax = sysPara->status.currAlterPrintRow; + } + /*-------------------------------切换到显示窗口-----------------------------------*/ + if(sysPara->status.addSpace) + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); + else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); + + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, + sysPara->para.AlterMode? + sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); + ui->widgetPrintTextDisplay->update(); + //qDebug()<<"3"<status.currPrintRow; + } + previewFlag=0; +} + +void MainWindow::showDat(unsigned char * Dat) +{ + Q_UNUSED(Dat); +} +void MainWindow::alterDataPrint(unsigned char m) +{ + if(sysPara) + { + + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + emit ui->widgetPrintTextDisplay->update(); + + } +} + +void MainWindow::generateCharRamData(){/* 生成字模数据 */ + if(sysPara->status.variNum){ + QTextEdit textEdit; + textEdit.document()->setDocumentMargin(0); + textEdit.setLineWrapMode(QTextEdit::NoWrap); + int ramAddress = 0; + int i; + qDebug()<<"sysPara->status.variNum:"<status.variNum; + for( i = 0; i < sysPara->status.variNum; i++){ + vars_t *p_var = &sysPara->status.vars[i]; + p_var->bassAddr = -1; + if(p_var->original){ //清除原来的记录 + if(p_var->dat){ + free(p_var->dat); + } + p_var->original = false; + } + + int width; + if(p_var->bassAddr == -1){ + if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide) + width = (p_var->digitalNum)?(13*(p_var->width/p_var->digitalNum)):12; + else + width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12; + int width2 = width;//+(sysPara->status.addSpace?width:0); + int height = Public::derivePixelSizeFromHeight(p_var->height); + // int height = p_var->height; + + textEdit.clear(); + int DPI = textEdit.logicalDpiX(); + DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 + + auto fontFamily = QString(p_var->fontname); + textEdit.setFontFamily(fontFamily); + + if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ + textEdit.insertHtml(QString("0123456789.m ") + .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*96/DPI).arg(p_var->bold?600:400)); //600表示加粗,400表示普通 + }else{ + textEdit.insertHtml(QString("0123456789") + .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*96/DPI).arg(p_var->bold?600:400)); + } + + + QFont font = textEdit.font(); + font.setLetterSpacing(QFont::AbsoluteSpacing, p_var->letterSpace); + textEdit.setFont(font); + // width = p_var->width; + qDebug() << "letterSpace: " << p_var->letterSpace<< "font:" << font.family()<< "font width:" << width; + int imgHeight = height + 12; + QSize size(width,imgHeight); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff); + QPainter painter(&image); + textEdit.show(); //如果不显示,似乎不会绘制 + textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + + QString fileName = "/home/plg/doc/002.html"; + QTextDocumentWriter writer(fileName); + bool success = writer.write(textEdit.document()); + + textEdit.hide(); + image.save(QString::number(i) + "varRam.png"); + // 找到最下面的行 + int lastValidRow = 0; + for(int k = imgHeight - 1; k >= 0 ; k--){ + for(int j = 0; j < width; j ++){ + QRgb rgb = image.pixel(j,k); + if(rgb&0xff000000){ + lastValidRow = k + 1; + break; + } + } + if(lastValidRow != 0) + break; + } + + qDebug()<<"lastValidRow"<endRowPos<< p_var->startRowPos; + int rowDiff = p_var->endRowPos - p_var->startRowPos; + + int firstValidRow = -1; // 变量的第一行所处的行地址 + for(int y = 0; y < image.height(); ++y) { + for(int x = 0; x < image.width(); ++x) { + if(image.pixel(x, y) & 0xff000000) { + firstValidRow = y; + break; + } + } + + if(firstValidRow != -1) + break; + } + + firstValidRow = qMax(firstValidRow, 0); + + int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 一列占用字节数 + if (rowByteNum > 0) {// 防崩溃保护 + unsigned char *dat = (unsigned char *)calloc(width2,rowByteNum); + for(int k = firstValidRow; k < lastValidRow; k++){ + for(int j = 0; j < width; j ++){ + QRgb rgb = image.pixel(j,k); + + int currRow = k - firstValidRow; + if(((rgb >> 24)&0xff) > 0x80){ // 判断是否有效的像素点 + dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); + } + } + } + p_var->bassAddr = ramAddress; + p_var->datHeight = height; + + p_var->datWidth = width2; + p_var->rowByteNum = rowByteNum; + p_var->dat = dat; + p_var->original = true; + p_var->currVal = -1; //相当于初始化 + ramAddress += rowByteNum * width2; + } else { + qDebug() << "startRowPos:" << p_var->startRowPos + <<" endRowPos:" << p_var->endRowPos + <<" rowDiff:" << rowDiff + << " 按原逻辑,执行这一步的时候软件就已经崩溃了"; + } + + } + } + } +} + +void MainWindow::updateTotalCnt(int en) +{ + // No50 USEING + //sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt: + // (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0; + //if(en) sysPara->para.totalProductCnt=0; + + //sysPara->para.totalProductCnt = sysPara->status.totalProductCnt; // No51版本改进 + sysPara->status.lastProductCnt = sysPara->status.productCnt; + ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); + ui->labelTotalProductCnt->setText(QString::number( sysPara->para.totalProductCnt+sysPara->status.totalProductCnt)); + +} +static int numOfTextChange = 0; +void MainWindow::on_pushButtonStartPrint_pressed() +{ + unsigned int type = sysPara->status.fpgaVersionNum >> 12; + if(sysPara->status.isPrinting){ + qDebug("Mainwindow: Printing 开始打印"); + }else{ + qDebug("Mainwindow: Non printing 开始打印"); + } + static int fileCount = 0; + fileCount++; + if(fileCount > 5) + { + fileCount = 1; + } + + if(sysPara){ + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + test_flag = 0; + /******2020/2/29*****/ + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && type == 8) //同步模式下,判断喷印间隔是否设置合理 + { + QSizeF size = ui->textEdit->document()->size(); + float stroke,print_len_min; + stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; + print_len_min = stroke * size.width(); + if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) + { + QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); + return; + } + } + /******2020/2/29 end*****/ +#ifndef FPGATEST + if(!SIMULATE_PRINTING_MODE){ + if (!sysPara->status.reclainTankReachEnd) { + return; + } + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ + QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!")); + return ; + } + } +#endif + sysPara->devOp->highVoltageCtrl(1); + sysPara->devOp->setHighVoltageAmplitudetoSTM32(); + sysPara->status.waitHightVolOff = 0; + if(!printingFlag)setRunStatus(tr("正在加高压...")); + // 复位计数器 + if(sysPara->status.FileChangeRestCntFlag){ + if(sysPara->para.ResetAllProductCntEn) + { + sysPara->devOp->clearProductCnt(3 | 0x10); // [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt=0; + } + else if(sysPara->para.ResetProductCntEn) + { + sysPara->devOp->clearProductCnt(3); + } + sysPara->status.FileChangeRestCntFlag=0; + sysPara->saveParaToFile(); + } + if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) + PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 + else if(sysPara->para.EditMode == SCENE) + onPreviewScene(); + + if(numOfTextChange >= 5){ + numOfTextChange = 0; + emit autoUpdateFontWidthByMainWindow((const unsigned int)sysPara->status.currPrintCol); + } + + if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ + QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); + return ; + } + // LogInfo::setRunStatusText(tr("有效打印区域 %1行 x %2 列").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); + //if(sysPara->para.printTriggerMode != PRINT_TRIGGER_SYNCHRONIZER) + if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) + ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL + ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) + && sysPara->para.eleEyeTriggerSynPrintEn)) + ) + { + int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay; + long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000); + if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs) + && (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD) + && (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME ) + ) // 在电眼方式下,是否需要判呢? + { + QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs)); + return ; + } + } + sysPara->status.isPrinting=false; + + setRunStatus(tr("开始打印1")); + qDebug()<textEdit->toPlainText()); + + SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, + if(sysPara->para.isCheckInsertTime) + { + if(!startPrintingFlag) + { + LogInfo::setRunStatusText(tr("开始打印")); + } + } + else + { + LogInfo::setRunStatusText(tr("开始打印")); + } + /*-------------------------------------------------------------------*/ + ui->labelSynColDelay->setText(""); + sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据 + /*--------------------------------暂停按钮------------------------------*/ + ui->pushButtonPausePrint->setEnabled(true); + // ui->pushButtonPausePrint->setText(tr("暂停打印")); + /*---------------------------------开关回收槽------------------------------*/ + enableReclaimCtrlButton(false); + updatePrintDisplayLabel(); + // 20170717 移动此,以观察条形码打印异常问题。 + if(!startPrintingFlag) + { + sysPara->devOp->printCtrl(PRINT_CTRL_START); + printingFlag = true; + } + else + { + //如果已经在打印,则不要在发送start命令,只要更新相应的数据即可 + if(!printingFlag) //如果在暂停,重复取消暂停 + on_pushButtonPausePrint_pressed(); + } + startPrintingFlag = true;sysPara->status.isPrinting=true; + } +} +unsigned char blankDat1[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]={0}; +void MainWindow::SendPrintDataToFpga(unsigned char alterEnable) +{ + if(!sysPara) return ; + fileChange=false; + + sysPara->devOp->writeFpgaPrintPara(1); /*务必放在最后一步*/ + sysPara->devOp->writeFpgaVariCtrl(); + + sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址 + // 交替打印处理 + unsigned char *dat; + size_t sizeofdat; + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + sizeofdat = sizeof(sysPara->status.printDat_Normal); + }else{ + dat =sysPara->status.printDat; + sizeofdat = sizeof(sysPara->status.printDat); + } + if(sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM <= 20000) + sysPara->devOp->fpgaWr(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); + else + sysPara->devOp->fpgaWrD2(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); +} +int MainWindow::getCurrPrintStatus() +{ + int printStatus; + if (startPrintingFlag ) { + if(printingFlag) { + printStatus = 1; // 正在打印 + } + else { + printStatus = 2; // 暂停喷印 + } + } + else { + printStatus = 3; // 停止打印 + } + return printStatus; +} + +void MainWindow::updatePrintDisplayLabel(){ + if(sysPara && !sysPara->status.reclainTankReachEnd){ + setRunStatus(tr("回收槽未到底!!!!!!")); + } + else if(startPrintingFlag ){ + if(printingFlag) + setRunStatus(tr("正在喷印...............")); + else + setRunStatus(tr("暂停喷印...............")); + } + else + setRunStatus(""); +} + +void MainWindow::on_pushButtonStopPrint_pressed() +{ + if(sysPara->status.isPrinting){ + qDebug("Mainwindow: Printing 停止打印"); + }else{ + qDebug("Mainwindow: Non printing 停止打印"); + } + + if(sysPara){ + +#ifndef FPGATEST + if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { + return; + } +#endif + + sysPara->status.flagOfAbnormalStatus = false; + sysPara->status.isPrinting=false; + sysPara->devOp->printCtrl2(1); + sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT + LogInfo::setRunStatusText(tr("停止打印")); + ui->pushButtonStartPrint->setEnabled(true); + + ui->pushButtonPausePrint->setEnabled(false); + // ui->pushButtonPausePrint->setText(tr("暂停打印")); + enableReclaimCtrlButton(true); + printingFlag = false; + startPrintingFlag = false; + updatePrintDisplayLabel(); + sysPara->status. waitHightVolOff = 1; + sysPara->saveParaToFile(); // 将相关配置保存 + + if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) + { + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文本将展出到U盘,请插入U盘"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); + sysPara->devOp->RandTxtBakup(0); //备份到U盘 + LogInfo::setRunStatusText("随机码文件导出完成."); + } + } + } +} + +void MainWindow::on_pushButtonPausePrint_pressed() +{ + if(sysPara){ + if(sysPara->status.WorkTimeOut && !SIMULATE_PRINTING_MODE) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); + return; + } + if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { + return; + } + sysPara->devOp->printCtrl(PRINT_CTRL_PAUSE); + LogInfo::setRunStatusText(printingFlag?tr("暂停打印"):tr("继续打印")); + ui->pushButtonStartPrint->setEnabled(true); + printingFlag = !printingFlag; + if(printingFlag) + { + ui->pushButtonPausePrint->setText(tr("继续打印\n保持高压")); + ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(0, 255, 0)}"); + sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); + } + else + { + ui->pushButtonPausePrint->setText(tr("暂停打印\n停止高压")); + ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(255, 0, 0)}"); + } + updatePrintDisplayLabel(); + sysPara->saveParaToFile(); // 将相关配置保存 + + if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) + { + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("提示"), + tr("随机码文本将展出到U盘,请插入U盘"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); + sysPara->devOp->RandTxtBakup(0); //备份到U盘 + LogInfo::setRunStatusText("随机码文件导出完成."); + } + } + } +} + +void MainWindow::resetReclaimCtrlButtonText(){ + ui->pushButtonReclaimTanOpen->setText(tr("开")); + ui->pushButtonReclaimTankClose->setText(tr("关")); +} + +void MainWindow::enableReclaimCtrlButton(bool enable) { + ui->pushButtonReclaimTanOpen->setEnabled(enable); + ui->pushButtonReclaimTankClose->setEnabled(enable); +} + +void MainWindow::enablePushButtonStart(bool enable) +{ + ui->pushButtonStart->setEnabled(enable); +} + +void MainWindow::enablePrintButton(bool enable){ + ui->pushButtonPausePrint->setEnabled(false); +#ifdef FPGATEST + enable = true; +#endif + + ui->pushButtonStartPrint->setEnabled(enable); + ui->pushButtonStopPrint->setEnabled(enable); +} + +void MainWindow::airPushingProcess() +{ + if(sysPara){ + if (sysPara->status.airPushing) { + setRunStatus(tr("正在排气 ...............")); + //qDebug()<< "start airPushingProcess "<status.airPushingOnTime; + // 执行排气 4 秒 + sysPara->status.airPushingOnTime += 100; + + if(sysPara->para.airPushDurationSec <= 0 || sysPara->para.airPushDurationSec > 30) { + sysPara->para.airPushDurationSec = 4; + sysPara->saveParaToFile(); + } + + // 延迟 半秒后才开回收槽,正式结束排气阶段 + if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 500){ + //qDebug()<< "start stop"; + reclaimTanOpen(); + sysPara->status.airPushingDone = 1; + sysPara->status.airPushing = 0; + sysPara->status.airPushingOnTime = 0; + airPushTimer->stop(); + return; + } + + if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){ + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlCycleValve(false); + + if(!sysPara->devOp->isReclaimPumpOpen()) + sysPara->devOp->controlReclaimPump(true, false); + + return; + } + } + } +} + +void MainWindow::reclaimTanOpen() +{ + // 还原当前模式 + if (sysPara->status.airPushing) { + sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore; + } + sysPara->status.isPumpValveControledByHand = false; + sysPara->devOp->mainInkCtrl(); + sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 + MySleep(1000); + sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); + ui->pushButtonReclaimTanOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("停止"):tr("开")); + ui->pushButtonReclaimTankClose->setText(tr("关")); + enablePrintButton(SIMULATE_PRINTING_MODE); + sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/ + // sysPara->status.reclaimTankstatus = 1; + setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开")); + if (!sysPara->para.reclaimTankTime) { + LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); + } + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + sysPara->status.reclainOpenAppending = true; + sysPara->status.reclainCloseAppending = false; + sysPara->status.reclaimBlockedCnt = 0; + sysPara->status.canRunAirPushing = false; +} + +void MainWindow::handleCode(int col, int row, int *varLastRow, int type) +{ + int idx = sysPara->status.QRvariNum; + sysPara->print.QRvars[idx].type=type; + sysPara->print.QRvars[idx].countEn=1; + sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0); + sysPara->print.QRvars[idx].endRowPos=row+1; + if(*varLastRowstatus.QRvariNum++; +} + +void MainWindow::handleCodeScene(int col, int row, int *varLastRow, int type, int textItemPosX, int textItemPosY) +{ + int idx = sysPara->status.QRvariNum; + sysPara->print.QRvars[idx].type=type; + sysPara->print.QRvars[idx].countEn=1; + sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; + sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0)+textItemPosX; + sysPara->print.QRvars[idx].endRowPos=row+1+textItemPosY; + if(*varLastRowstatus.QRvariNum++; +} + +void MainWindow::on_pushButtonReclaimTanOpen_pressed() +{ + if(sysPara){ + if (!sysPara->status.reclaimTankBlockedAppending) { + if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { // 回收槽关闭的情况下才可以执行排气;//2019/10/24 当回收槽未在顶的位置,不需要排气 + if (!sysPara->status.airPushing) { // 先执行排气后开回收槽 + sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand; + sysPara->status.isPumpValveControledByHand = true; + sysPara->devOp->mainInkCtrl(); + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlViscosityPump(true);//关粘度泵 + sysPara->devOp->controlMainInkPump(true);//主墨泵敞开 + sysPara->devOp->mainInkCtrl(); + sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 + sysPara->devOp->controlInkValve(true); //墨水阀 + sysPara->devOp->controlInkValvePWM(true); //墨水阀 + //qDebug()<< "start airpushings"; + + sysPara->status.airPushing = 1; + sysPara->status.airPushingDone = 0; + sysPara->status.airPushingOnTime = 0; + airPushTimer->start(100); // 100ms + } + } + else + reclaimTanOpen(); + } + if(sysPara->status.reclaimTankBlockedAppending) { + sysPara->status.reclaimTankBlockedAppending = false; + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10; + onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10); + } + } + } +} + +void MainWindow::on_pushButtonReclaimTankClose_pressed() +{ + if(sysPara){ + if(sysPara->status.reclaimTankBlockedAppending){ + sysPara->status.reclaimTankBlockedAppending = false; + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->status.currReclaimTankPos = 0; + onReclainTankPositionChanged(0); + } + } + + sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); + ui->pushButtonReclaimTanOpen->setText(tr("开")); + ui->pushButtonReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("停止"):tr("关")); + enablePrintButton(SIMULATE_PRINTING_MODE); + sysPara->devOp->highVoltageCtrl(0); + // sysPara->status.reclaimTankstatus = 2; + setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭")); + if(!sysPara->para.reclaimTankTime){ + LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); + } + sysPara->status.currReclaimOperationCnt = 0; + sysPara->status.reclainTankReachEnd = false; + sysPara->status.reclainOpenAppending = false; + sysPara->status.reclainCloseAppending = true; + sysPara->status.reclaimBlockedCnt = 0; + + } +} + +void MySleep(unsigned int msec); +/* + * 关机前务必保存参数 + * */ +void MainWindow::checkForPowerOff(){ + if(sysPara->status.powerOffAppending){ + if(!sysPara->status.selfCheckDone) + sysPara->status.selfCheckDone = true; + this->setDisabled(true); + emit setDisableAll(); + ////////关机时提高转速和回收泵压力,粘度泵和循环阀///// + quint16 gearPumpValue_backup = sysPara->para.gearPumpValue; + int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;; + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) + { + if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ + for(int i=25;i>21;i--) + { + if(i == 25){ + sysPara->status.isPumpValveControledByHand = true; //停止自动 + sysPara->devOp->controlInkValve(true); + sysPara->devOp->controlInkValvePWM(true); + sysPara->devOp->controlReclaimPump(true,true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlCycleValve(true); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + if(i == 22){ + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + } + this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*2)); + MySleep(2000); + } + } + sysPara->devOp->controlReclaimTankOpen(true); + sysPara->status.isPumpValveControledByHand = true; //停止自动 + if(sysPara->para.gearPumpEnable ){ + if(!sysPara->para.flagOfReclaimPumEnable){ + sysPara->para.gearPumpValue = 360; + sysPara->devOp->WriteMoterPump(); + } + else{ + sysPara->devOp->controlReclaimPump(true,false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + } + else{ + sysPara->para.reclaimPumpPWMWidth = 95; + sysPara->devOp->controlReclaimPump(true,true); + } + + if(!sysPara->devOp->isViscosityPumpOpen()) + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlInkValve(false); //关供墨 + sysPara->devOp->controlInkValvePWM(false); //关供墨 + + if(!TEST_MODE){ + for(int i=14;i>7;i--) + { + if(i==13) + sysPara->devOp->controlReclaimTankOpen(false); + this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); + MySleep(3000); + } + } + + if(!sysPara->status.lostCommuFlag){ + sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); + + updateTotalCnt(0); + sysPara->saveParaToFile(); // 关机前将相关配置保存 + } + sysPara->status.powerOffAppending = false; + if(!TEST_MODE){ + for(int i=7;i>0;i--) + { + if(i == 3) + sysPara->devOp->controlReclaimTankClose(true); + if(i == 2){ + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlReclaimPump(false,false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); + MySleep(3000); + } + } + } + emit CloseJd(); + sysPara->para.gearPumpValue=gearPumpValue_backup; + sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup; + sysPara->devOp->controlCompressPump(false); + setRunStatus(tr("准备关机......")); + qDebug()<<"准备关机"; + sysPara->para.totalProductCnt +=sysPara->status.totalProductCnt; + sysPara->devOp->clearProductCnt(3 | 0x10);//总产器计数器立即清零 + sysPara->para.ReadFileErrorCnt=0; + sysPara->para.PowerOnErrorCnt=0; + if(sysPara->para.isCntSaveStateValue) + { + sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->para.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); + } + updateTotalCnt(0); + sysPara->saveParaToFile(); // 关机前将相关配置保存 + sysPara->saveRFIDPara(); + system("sync");//缓存同步 + + timerPowerOff->start(1000); + } +} + +static int numOfPowerOffCMD = 0; +void MainWindow::sendPowerOffCmd(){ + if(++numOfPowerOffCMD == 120){ + sysPara->devOp->color_flag = 2; + setRunStatus(tr("关机失败!!!")); + timerPowerOff->stop(); + numOfPowerOffCMD = 0; + return; + } + sysPara->devOp->powerOff(); +} + +void MainWindow::powerOffConfirmed(){ + timerPowerOff->stop(); + QProcess process; + process.startDetached("poweroff"); + qApp->exit(0); +} + +void MainWindow::on_pushButtonStart_pressed() +{ + QMessageBox::StandardButton ret; + if(pushButtonFlag) + ret = QMessageBox::information(this, tr("提示"), + tr("是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动!"), + QMessageBox::Ok | QMessageBox::Cancel); + else + ret = QMessageBox::information(this, tr("提示"), + tr("是否启动齿轮泵?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + pushButtonFlag = !pushButtonFlag; + if(pushButtonFlag) + { + ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(0, 255, 0)}"); + ui->pushButtonStart->setText(tr("泵启动")); + } + else + { + ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(255, 0, 0)}"); + ui->pushButtonStart->setText(tr("泵停止")); + } + //ui->pushButtonStart->setEnabled(false); + emit pushButtonStartPressed(pushButtonFlag); + } +} + +void MainWindow::_on_pushButtonPowerOff_pressed(bool notice){ + if(sysPara){ + if(sysPara->status.currReclaimTankPos != 0) + { + QMessageBox::StandardButton ret = QMessageBox::Ok; + if(notice) + ret = QMessageBox::warning(this, tr("警告"), + tr("回收槽未关,是否关闭回收槽后关机!"), + QMessageBox::Ok | QMessageBox::Cancel); + if (!notice || ret == QMessageBox::Ok){ + + system((char *)((QString("mkdir %1").arg(TESTDIR)).toLatin1().data())); + system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toLatin1().data())); //先备份UP* + sysPara->status.reclaimCloseCnt=10; + on_pushButtonStopPrint_pressed(); + on_pushButtonReclaimTankClose_pressed(); + sysPara->status.powerOffAppending = true; + enableReclaimCtrlButton(false); //所有的按钮全部屏蔽 + } + } + else { + QMessageBox::StandardButton ret = QMessageBox::Ok; + if(notice) + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认关机?"), + QMessageBox::Ok | QMessageBox::Cancel); + + if (!notice || ret == QMessageBox::Ok){ + sysPara->status.powerOffAppending = true; + checkForPowerOff(); + } + } + } +} + + +void MySleep(unsigned int msec) +{ + QTime dieTime = QTime::currentTime().addMSecs(msec); + while( QTime::currentTime() < dieTime ) + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); +} + +//extern MyInputMethod *myInputMethod; + +void MainWindow::ontextEdittextChanged() +{ + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + QSizeF size = ui->textEdit->document()->size(); + sysPara->status.textEditTotalCol = size.width(); + //编辑界面 + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(size.height()).arg(size.width())); + if(size.width() > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ + myInputMethod->getInputMethod()->on_Key_Backspace_released(); + MySleep(300); + } + if(size.width() == 0) + { //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件 + onTextEditCursorPositionChanged(); + } + + if(0 10) + { + numOfTextChange = 0; + emit autoUpdateFontWidthByMainWindow((const unsigned int)size.width()); + } +} +QPoint QTextCursorPos(const QTextEdit * myTextEdit) +{ + QPoint pt; + QTextCursor tc=myTextEdit->textCursor(); + QTextLayout *pLayout=tc.block().layout(); + pt.setY(tc.position()-tc.block().position()); + pt.setX(pLayout->lineForTextPosition(pt.y()).lineNumber()+tc.block().firstLineNumber()); + return pt; +} + +extern MyInputMethod *myInputMethod; +void MainWindow::onTextEditCursorPositionChanged(){ + for(int i = 0; i < 2; i++){ + QTextCharFormat fmt = ui->textEdit->currentCharFormat (); + QString s = ui->textEdit->document()->toPlainText(); + QFont font = fmt.font(); + QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); + QLabel *labelFontFamily = ui->textEditOption->getLabelFontFamily(); + QCheckBox *checkBoxBold = ui->textEditOption->getCheckBoxBold(); + bool ok; + //qDebug()<<"onTextEditCursorPositionChanged"<< font.family()<text().toInt(&ok,10)<logicalDpiX(); + DPI = DPI?DPI:1; + int pixeSize = font.pointSizeF()*DPI/72; + if(pixeSize >= Public::getMinFontPixelSize()){ + labelFontSize->setText(QString::number(Public::getAdjustedPixelSize(pixeSize))); + checkBoxBold->setChecked(font.weight() == QFont::Bold); + labelFontFamily->setText(font.family()); + barcode->setFontSize(Public::getAdjustedPixelSize(pixeSize)); + break; + } + else { + if(s.length()<=1) { + ui->textEdit->selectAll(); + font.setFamily(Public::getFontFamily(labelFontSize->text().toInt(&ok,10) )); + ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 + ui->textEdit->moveCursor(QTextCursor::End); + } else + ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 + } + } + } + +} + +void MainWindow::onLabelFaultRusumePressed(){ + if(sysPara){ + sysPara->status.flagOfSpeedAlarm = false; + sysPara->status.mainInkPumpError = false; + sysPara->status.mainInkPumpRunTmCnt = 0; + sysPara->status.compressPumpError = false; + sysPara->status.compressPumpRunTmCnt = 0; + sysPara->devOp->resumeFault(); + ui->labelRunStatus->clear(); + sysPara->status.beeperOnFlag = false; + sysPara->devOp->controlBeeper(false); + sysPara->status.heaterONTimeCnt = 0; //加热块计数清零 + ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); + sysPara->status.DACDisable = false; + sysPara->status.lastPhaseFault = 0; + sysPara->status.phaseErrorCnt = 0; + if(sysPara->status.lastHighVoltageFault && !(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ + sysPara->status.lastHighVoltageFault = false; + flagOfClearHighVltageWarnning = true; + } + + if(sysPara->status.gearPumpRunStopFlag && pushButtonFlag) + { + emit repeatInitedPid(); + sysPara->status.gearPumpRunStopFlag = false;//齿轮泵报警恢复 + } + if((sysPara->devOp->color_flag == 2) ||(sysPara->devOp->color_flag == 1)) + { + sysPara->devOp->color_flag = 3; + sysPara->devOp->controlYellowLight(false); + sysPara->devOp->controlRedLight(false); + } + sysPara->status.visocityValueOverflowNum = 0; + + if(sysPara->status.visocityValueOverflowNum>=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM) // + sysPara->status.viscosityFault = 0; + + sysPara->status.powerOffAfterPhaseFaultAppending = 0; + sysPara->status.lastwarmInkPump = 0; + sysPara->status.RecycleWarnCnt =0; + sysPara->status.lastRecycleWarn =0 ; + sysPara->status.powerOffAfterInkOrSOLVEmptyAppending=0; + //sysPara->status.lastStatWarn=0; // 机器报故障后,点击故障恢复按钮,再点击打印按钮,“正在喷印中…”字符未立即显示出来,需等待大约10秒才会出现。 + //LogInfo::setRunStatusText(tr("故障恢复")); + sysPara->status.RecycleWarnCnt=0; + sysPara->status.HVFaultCloseEn=0; + if(sysPara->status.flagOfPressureFault){ + sysPara->status.flagOfPressureFault = false; + sysPara->status.isPumpValveControledByHand = false; + sysPara->devOp->mainInkCtrl(); + emit clearPressureFault(); + } + if(printingFlag) { + sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); + } + } +} + +void MainWindow::onEnableReclaimCtrlButton(bool flag) +{ + enableReclaimCtrlButton(flag); +} + +void MainWindow::onInkJetPrinterCurrentChanged(int index) +{ + ui->senceEditOption->onInkJetPrinterCurrentChanged(index); +} + +void MainWindow::onLabelProductCntPressed(){ + if(sysPara){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否初始化产品计数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + updateTotalCnt(0); + sysPara->devOp->clearProductCnt(1); + sysPara->saveParaToFile(); + + } + } +} + +void MainWindow::onLabelTotalProductCntPressed(){ + if(sysPara){ + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否清除总产品计数?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->clearProductCnt(1 | 0x10 );// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + + } + } +} + +void MainWindow::onPushButtonCNTResetNowPressed(){ + if(sysPara){ + // emit closeSerial(); + + QMessageBox::StandardButton ret; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否立即重新计米?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA + sysPara->para.totalProductCnt = 0; + } + + } + + + +} + +void MainWindow::on_bottonEditText_pressed() +{ + //qDebug()<<"EditMode"<para.EditMode; + if(sysPara->para.EditMode==TXTFILE){ + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + ontextEdittextChanged(); //显示大小 + int coldot = (int)ui->textEdit->document()->size().width(); + if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + { + coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + QMessageBox::warning(this, tr("警告"), + tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); + } + } + else if(sysPara->para.EditMode==PICFILE){ + emit openCurrFile(sysPara->para.lastOpenedFileName); + } + else if(sysPara->para.EditMode==SCENE){ + //qDebug()<<"SCENE"; + //emit openCurrFile(sysPara->para.lastOpenedFileName); + ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); + ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); + } + +} + +void MainWindow::on_pushButtonReduceTextDisplay_pressed() +{ + ui->widgetPrintTextDisplay->reduceDisplay(); +} + +void MainWindow::on_pushButtonEnlargeTextDisplay_pressed() +{ + + ui->widgetPrintTextDisplay->enlargeDisplay(); + //update(); +} + +/* + * value以100ms为单位 + * */ +void MainWindow::onReclainTankPositionChanged(int value){ + static bool init = false; + static int totalCharNum = 0; + if(!init){ + int w = ui->labelReclaimStatus->geometry().width() - 1; //预留几个像素 + QFontMetrics fontMetrics = QApplication::fontMetrics(); + w -= fontMetrics.width(QString(" |>|")); + int t = fontMetrics.width(QChar('-')); + if(fontMetrics.width(QChar('-')) != fontMetrics.width(QChar(' '))){ + LogInfo::setRunStatusText(tr("警告:‘-’和空格的宽度不一样")); //可能有的字体两者宽度不同 + } + totalCharNum = t?w/t:w; //t永远都不应该为零,保险起见 + init = true; + } + if(sysPara){ + int reclaimTime = sysPara->para.reclaimTankTime?sysPara->para.reclaimTankTime:15; + int charNum = value*totalCharNum/(reclaimTime*10); + + charNum = (charNum > totalCharNum)?totalCharNum:charNum; + QString str = " |"; + for(int i = 0; i <= totalCharNum; i++) { //多加”>|“ + if(i < charNum) + str.append(QChar('-')); + else if(i == charNum) + str.append(QChar('>')); + else + str.append(QChar(' ')); + } + str.append(QChar('|')); + ui->labelReclaimStatus->setText(str); + } +} + + +void MainWindow::setRunStatus(QString str){ + switch(sysPara->devOp->color_flag){ + case 1: + ui->labelRunStatus->setStyleSheet("color:yellow"); + break; + case 2: + ui->labelRunStatus->setStyleSheet("color:red"); + break; + default: + ui->labelRunStatus->setStyleSheet("color:black"); + break; + } + ui->labelRunStatus->setText(str); +} + + +void MainWindow::changeTxtMode(QString str){ + if(sysPara){ + fileChange=true; + sysPara->status.FileChangeRestCntFlag = true; + emit openFileChange(); + unsigned char SpecialVarEnable = 0; + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); + } +} + +void MainWindow::update_scroll() +{ + ui->widgetPrintTextDisplay->scroll_update(); +} + +void MainWindow::changeEditMode(int editMode) +{ + if(sysPara){ + //qDebug()<<"changeEditMode"<para.EditMode; + if(sysPara->para.EditMode==PICFILE){ + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->widgetPrintTextDisplay->update(); + ui->pushButtonTXTOpen->show(); + ui->textEditOption->editMode=sysPara->para.EditMode; + } + else if(sysPara->para.EditMode==TXTFILE) + { + // ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + // ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + sysPara->para.EditMode=TXTFILE; + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + ui->widgetPrintTextDisplay->update(); + ui->pushButtonTXTOpen->hide(); + ui->textEditOption->editMode=sysPara->para.EditMode; + ui->textEditOption->editItemModeDone(); + } + else if(sysPara->para.EditMode==SCENE) + { + //qDebug()<<"CCCCCENE"; + sysPara->para.EditMode=SCENE; + ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); + ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); + ui->widgetPrintTextDisplay->update(); + ui->pushButtonTXTOpen->hide(); + ui->textEditOption->editMode=sysPara->para.EditMode; + //edit@12-12 + ui->senceEditOption->show_scene_new_dlg(); + } + //ontextEdittextChanged(); //显示大小 20140831 + if(sysPara->para.EditMode==SCENE) + { + onSwitchTimerShowItem(true); + } + else + { + onSwitchTimerShowItem(false); + } + } +} + +TextEditOption* MainWindow::getTexteditOption() +{ + return ui->textEditOption; +} + +void MainWindow::SetEditMode(int mode) +{ + ui->textEditOption->editMode = sysPara->para.EditMode; + // if(sysPara->para.EditMode==SCENE) + // { + // timerShowItem->start(10); + // } +} + +void MainWindow::setRunStatus(QPixmap pixMap){ + ui->labelRunStatus->setPixmap(pixMap); +} +void MainWindow::SetMainTabEdit(int n){ + +} + +void MainWindow::testPrint(){ + //on_pushButtonStartPrint_pressed(); +} + + +void MainWindow::onEditBarCode(){ +#ifdef _2DCODE_ + if(sysPara) { + dlgqrcode->move( 0,10); + barcode->setWindowTitle(tr("条形码信息编辑")); + //qDebug()<<"bcOption->height"<para.bcOption.height; + barcode->SetOption((bcOption_t*)&sysPara->para.bcOption); + barcode->show(); + //barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + } +#endif + +} +void MainWindow::onBarCodeClose(){ +#ifdef _2DCODE_ + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + unsigned char *dat; + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + if(barcode->flagCount) + { + barcode->getDat(dat,0); + barcode->flagCount=0; + ui->widgetPrintTextDisplay->update(); + } + if(barcode->flagInsert ) + { + barcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE) + { + + } + else + { + //ui->textEditOption->InsertBarCodeToEdit(barcode->pictureName,barcode->imgBar.width(),barcode->imgBar.height()); + QString html = ""; + QTextCharFormat fmt = ui->textEditOption->textEdit->currentCharFormat (); + ui->textEditOption->textEdit->insertHtml (html); + ui->textEditOption->textEdit->mergeCurrentCharFormat(fmt); + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + } + } + sysPara->saveParaToFile(); +#endif +} + +void MainWindow::onEditQRCode(){ +#ifdef _2DCODE_ + if(sysPara) { + dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); + dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); + dlgqrcode->setWindowTitle(tr("二维码信息编辑")); + + dlgqrcode->setCntCheckBoxHide(1); + + dlgqrcode->show(); + } +#endif +} +void MainWindow::onInitQRCode(){ +#ifdef _2DCODE_ + if(sysPara) { + dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); + dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); + dlgqrcode->setWindowTitle(tr("二维码信息编辑")); + //dlgqrcode->show(); + } +#endif +} +void MainWindow::onQRCodeClose(){ +#ifdef _2DCODE_ + // dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + if(dlgqrcode->flagInsert ) { + dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); + dlgqrcode->flagInsert=0; + if(sysPara->para.EditMode==PICFILE){ + return; + } + // qDebug()<<"flagInsert2"<flagInsert<bcWidth<bcHeight; + ui->textEditOption->InsertBarCodeToEdit(dlgqrcode->pictureName,dlgqrcode->bcWidth,dlgqrcode->bcHeight); + ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); + ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); + + } + if( sysPara->para.qrOption.barCodeFlag != dlgqrcode->barCodeFlag) + { + sysPara->para.qrOption.barCodeFlag = dlgqrcode->barCodeFlag; + ui->textEditOption->textEdit->setHtml(QApplication::translate("MainWindow", "\n" + "\n" + "


", 0)); + } + sysPara->saveParaToFile(); +#endif +} + +void MainWindow::onGenerateQRCode(QString strData) +{ + dlgqrcode->extSetText(strData); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); +} + +void MainWindow::onShowAndHideItem() +{ + /////////特殊条件 + //while(1) + { + static bool startFlag= false, lastStarFlag = false; + + QList items = pPicScene->items(); + foreach (QGraphicsItem *item, items) + { + PicTextItem *picText = qgraphicsitem_cast(item); + if(picText->SpecialConditions) + { + //setRunStatus(tr("六个内容(%1,%2)").arg(picText->CatchCnt1CurrValue).arg(QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt())); + if(picText->CatchCnt1StartValue <= QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() && + QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt() <= picText->CatchCnt1CurrValue) + { + picText->show(); + startFlag = true; + } + else + { + picText->hide(); + startFlag = false; + } + if(startFlag != lastStarFlag) + { + lastStarFlag = startFlag; + //on_pushButtonStartPrint_pressed(); + if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) + PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 + else if(sysPara->para.EditMode == SCENE) + onPreviewScene(); + // unsigned char blankDat[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; + // memset(blankDat,0,sizeof(blankDat)); + // sysPara->devOp->fpgaWr(0,blankDat,sizeof(blankDat));//...所加的空白偏移地址 + // sysPara->devOp->fpgaWr(sizeof(blankDat),sysPara->status.printDat,sizeof(sysPara->status.printDat)-sizeof(blankDat)); + } + } + } + //QApplication::processEvents(); + } + ////////////// +} + +void MainWindow::onSwitchTimerShowItem(bool flag) +{ + if(flag) + { + // timerShowItem->start(10); + } + else + { + timerShowItem->stop(); + unsigned char SpecialVarEnable = 0; + sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); + } +} + +void MainWindow::JSON_UpdateDATA(){ + + QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); + bool ok; + int font_size = labelFontSize->text().toInt(&ok,10); + QString font_family = Public::getFontFamily(font_size); + static int save_uniCode = 33; //数据码固定33位 + ui->textEditOption->textEdit->clear();//宴令需要屏蔽 + + QString strContentPrint(sysPara->Get_JSON_DATA.PrintingContent); + strContentPrint.replace(' '," "); + QString strContent = sysPara->Get_JSON_DATA.QRCodeContent; + int left_int = strContent.indexOf("https://dwz.cn/"); + if(left_int == 0) + { + strContent = strContent.mid(8, strContent.size()); + strContent = "www." + strContent; + } + if(sysPara->para.isRemoveCode) + { + QSize size(2,5); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + //image.fill(0x00f0f000);//填充白色 + // QPainter painter(&image); + // //image.save("./printImage.jpg"); + // ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + image.save("/home/plg/doc/modbusQR.bmp"); + } + else + { + if(dlgqrcode->barCodeFlag == 1) + { + barcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str())); + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + } + else + { + dlgqrcode->extSetText(QString::fromUtf8(strContent.toStdString().c_str()), true); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + } + } + QString save_text = ui->textEditOption->textEdit->toHtml(); + + if(save_text.contains("", Qt::CaseSensitive)){ + int left_int = save_text.indexOf(""); + QString str_html = save_text.left(left_int); //get the QRcode pic left html + QString right_str_html = save_text.mid(left_int, save_text.size()); + + if(!sysPara->para.isRemoveDigitCode) + { + str_html += ""; + left_int = right_str_html.indexOf(";\">") + 1; + int index_size = QString(";\">").size(); + QString right_html = right_str_html.mid(left_int+index_size+save_uniCode, right_str_html.size()); + save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); + // qDebug()<<"right_html="< ").arg(font_family) + .arg(font_size).arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); + + if(!right_html.startsWith("<")){ //situation: "$ProductUniqueCodexxxx
" + QString crash_word = right_html.left(right_html.indexOf("<")); + txt_fomart += crash_word; + // qDebug()<<"crash_word="<"); + index_size = QString("
").size(); + QString final_str = right_html.mid(left_int +index_size, right_html.size()); + + str_html += final_str; + } + else + { + str_html += right_str_html; + } + // QMessageBox::StandardButton ret; + // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); + // if (ret == QMessageBox::Ok) + { + ui->textEditOption->textEdit->setHtml(str_html); + ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + } + }else{ + QString txt_fomart = ""; + txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += strContentPrint.toUtf8(); + txt_fomart += ""; + txt_fomart += ""; + + if(!sysPara->para.isRemoveDigitCode) + { + txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode); + save_uniCode = QString::fromUtf8(sysPara->Get_JSON_DATA.ProductUniqueCode).size(); + txt_fomart += ""; + } + else + { + txt_fomart += QString::fromUtf8(" ").arg(font_family).arg(font_size); + } + // QMessageBox::StandardButton ret; + // ret = QMessageBox::question(this, tr("提示"),tr("是否接收新的信息!"), QMessageBox::Ok | QMessageBox::Cancel); + // if (ret == QMessageBox::Ok) + { + ui->textEditOption->textEdit->insertHtml(txt_fomart); + } + // QString refresh_text = ui->textEditOption->textEdit->toHtml(); + // ui->textEditOption->textEdit->setHtml(refresh_text); + // ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + } + + if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) + PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 + else if(sysPara->para.EditMode == SCENE) + onPreviewScene(); + //on_pushButtonStartPrint_pressed(); + + ui->label_24->setFocus(); //prevent keyboard pop up +} + +QStringList stringListRecive; + +// mdOpenFile(QString("/home/plg/doc/%1").arg(fileName)); +void MainWindow::modbusUpdateQRCode(){ + // QString temp = QString(); + sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 + sysPara->status.printDoneFlag = false; + static QString lastReceiveContent = ""; + char temp[120] = {0}; + int i,j = 0; + for(i=0; i<110; i+=2) + { + //if(sysPara->modbusParas.QRcode_buf[i] == 0) break; + temp[j] = sysPara->modbusParas.QRcode_buf[i]; + j++; + } + if(strlen(&temp[1]) == 0) + { + LogInfo::setRunStatusText(tr("获取DM码内容为空!")); + return; + } + + if(sysPara->para.EditMode == TXTFILE) + { + QString receiveContent = QString::fromUtf8(&temp[1]); + dlgqrcode->extSetText(receiveContent); + LogInfo::setRunStatusText(tr("获取DM码内容:")); + LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); + + // dlgqrcode->extSetText("asbasb"); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + + // ui->textEditOption->modbus_insert_pic("/home/plg/doc/QR_aa.bmp"); + ui->textEditOption->textEdit->clear();//插入之前先清空 + //ui->textEditOption->modbus_insert_pic("/home/plg/doc/modbusQR.bmp"); + QString html = ""; + ui->textEditOption->textEdit->setHtml(html); + ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + //sysPara->modbusStatus.printFinishFlag = 0;//置打印标志 + if(receiveContent == lastReceiveContent) + { + LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); + //sysPara->modbusStatus.printFinishFlag = 1;//置打印标志 + MySleep(200); + sysPara->status.printDoneFlag = true; + return; + } + lastReceiveContent = receiveContent; + sysPara->status.oneCodePrintOnce = true; + on_pushButtonStartPrint_pressed();//开始打印 + } + else if(sysPara->para.EditMode == SCENE) + { + QString receiveContent = QString::fromUtf8(&temp[1]); + LogInfo::setRunStatusText(tr("获取DM码内容:")); + LogInfo::setRunStatusText(tr("receiveContent").arg(receiveContent)); + if(receiveContent == lastReceiveContent) + { + LogInfo::setRunStatusText(tr("获取DM码内容跟上次相同")); + MySleep(200); + sysPara->status.printDoneFlag = true; + return; + } + lastReceiveContent = receiveContent; + + stringListRecive = receiveContent.split(";"); + + QString lastopenedFileName = sysPara->para.lastOpenedFileName; + lastopenedFileName = QFileInfo(lastopenedFileName).baseName(); + int left_int = lastopenedFileName.indexOf('@'); + if(left_int == 0) + { + sysPara->status.forTemplateUse = true; + emit scenefileOpen(sysPara->para.lastOpenedFileName,false);//sceneeditoption 接收这个信号然后打开文件 + //emit fileNameChanged(QFileInfo(filePath).fileName()); + sysPara->status.forTemplateUse = false; + sysPara->status.oneCodePrintOnce = true; + on_pushButtonStartPrint_pressed();//开始打印 + } + } + + +} + +void MainWindow::onUpdateDispQRCode(int type){ +#ifdef _2DCODE_ + int varNum; + + qDebug()<<"onUpdateDispQRCode"; + //QRcode string test + // static int cc = 0; + for(varNum=0;varNumstatus.QRvariNum;varNum++){ + if(sysPara->print.QRvars[varNum].type<2) + { + sysPara->print.QRvars[varNum].Counter = sysPara->para.qrOption.counter; + sysPara->print.QRvars[varNum].cntNum = sysPara->para.qrOption.cntNum; + + dlgqrcode->TextToQRImg((qrOption_t *)&sysPara->para.qrOption); + dlgqrcode->getDat(sysPara,varNum); + }else if(sysPara->print.QRvars[varNum].type==2) + { + QString txt,txt2,txt3,txt4,txtVar1,txtVar2; + //char fmt[]="%08d%04d"; + txt2=sysPara->para.bcOption.TxtModule; + txt3=sysPara->para.bcOption.TxtLine; + txt4=sysPara->para.bcOption.TxtLine1; + sysPara->para.bcOption.var1Type =1; + sysPara->para.bcOption.var2Type =2; + txtVar1=barcode->getVarTxt(sysPara->para.bcOption.var1En,sysPara->para.bcOption.var1Type); + txtVar2=barcode->getVarTxt(sysPara->para.bcOption.var2En,sysPara->para.bcOption.var2Type); + //txt.sprintf(fmt,sysPara->status.calandar_and_dat.cnt1CurrValue,sysPara->status.calandar_and_dat.cnt2CurrValue); + txt = txt2.trimmed()+txtVar1+txt3.trimmed()+txtVar2+txt4.trimmed(); + barcode->TextToBCImg((bcOption_t *)&sysPara->para.bcOption,txt); // + barcode->getDat2(sysPara,varNum); + //qDebug()<<"update BAR"<status.calandar_and_dat.cnt1CurrValue<status.calandar_and_dat.cnt2CurrValue; + //qDebug()<print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; + if(sysPara->status.currPrintCol < (sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)) { + sysPara->status.currPrintCol = sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width; + } + if (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos) { + sysPara->status.currPrintRow = sysPara->print.QRvars[varNum].endRowPos; + } + //sysPara->status.currPrintCol = (sysPara->status.currPrintColprint.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width)? + // sysPara->print.QRvars[varNum].startColPos+sysPara->print.QRvars[varNum].width:sysPara->status.currPrintCol; + //sysPara->status.currPrintRow = (sysPara->status.currPrintRowprint.QRvars[varNum].endRowPos)?sysPara->print.QRvars[varNum].endRowPos:sysPara->status.currPrintRow; + + // qDebug()<<"onUpdate:"<< sysPara->print.QRvars[varNum].startColPos + // <print.QRvars[varNum].endRowPos <print.QRvars[varNum].width + // <print.QRvars[varNum].height <print.QRvars[varNum].type; + } + + if(type) + { + + sysPara->para.qrOption.DisplayUpdate=1; + // ui->widgetPrintTextDisplay->updateSysStatusToUI(); + if(sysPara->status.addSpace) + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); + else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow ).arg(sysPara->status.currPrintCol)); + ui->widgetPrintTextDisplay->update(); + //qDebug()<<"update BAR ??"; + } +#endif +} + +int MainWindow::searchExpiryVar(QString html) +{ + int varNum = 0; + if( sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum || sysPara->status.classVariNum) + { + QString pattern = ""; + // 1 type ,2 name,3 width,4 height + //

< + // + QRegExp rx(pattern); + QString textHtml = html==""? ui->textEdit->toHtml() : html; +// qDebug() << "searchExpiryVar:"<< textHtml; + int from = 0; + // int xx =textHtml.size(); + sysPara->print.ExpiryVar.type = 0; + sysPara->print.CurDateVar.type = 0; + //sysPara->print.CurDateVar[1].type = 0; + sysPara->print.ClassVari.type = 0; + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(rx,from); + bool ok; + if(from != -1) + { + from ++; + if(varNum < 3) + { + QString s = rx.cap(3); + int type = rx.cap(1).toInt(&ok); + // 填充信息 + //qDebug()<<"QVARName:"<print.ExpiryVar.type = type; + sysPara->print.ExpiryVar.width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->print.ExpiryVar.height = rx.cap(5).toInt(&ok); + //sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-sysPara->print.ExpiryVar.height; + sysPara->print.ExpiryVar.startRowPos = sysPara->print.ExpiryVar.endRowPos-(sysPara->print.ExpiryVar.height-1); + sysPara->print.ExpiryVar.letterSpace = rx.cap(2).toInt(); + if(sysPara->print.ExpiryVar.startRowPos < 0) + { + sysPara->print.ExpiryVar.startRowPos = 0; + } + if(rx.cap(3).contains("75")) + { + sysPara->print.ExpiryVar.bold = 1; + } + else + { + sysPara->print.ExpiryVar.bold = 0; + } + // 直接更新有效期,并退出? + ExpiryDotUpdate(1); + varNum++; + } + else if(type == CURDATE || type==CURDATE + 10 || type==CURDATE + 20 || type==CURDATE + 30) + { + sysPara->print.CurDateVar.type = type; + sysPara->print.CurDateVar.width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->print.CurDateVar.height = rx.cap(5).toInt(&ok); + sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); + sysPara->print.CurDateVar.letterSpace = rx.cap(2).toInt(); + if(sysPara->print.CurDateVar.startRowPos < 0) + { + sysPara->print.CurDateVar.startRowPos = 0; + } + if(rx.cap(3).contains("875")) + { + //qDebug()<<"bold"; + sysPara->print.CurDateVar.bold = 1; + } + else + { + //qDebug()<<"normal"; + sysPara->print.CurDateVar.bold = 0; + } + //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); + //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; + // 生产日期即当前日期 + ExpiryDotUpdate(2); + varNum++; + } + else if(type == CURCLASS) + { + //qDebug()<<"CURCLASS:"<print.ClassVari ; + currClass->type = type; + currClass->width = rx.cap(4).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + currClass->height = rx.cap(5).toInt(&ok); + currClass->startRowPos = currClass->endRowPos-currClass->height-1; + currClass->letterSpace = rx.cap(2).toInt(); + if(rx.cap(3).contains("875")) { + //qDebug()<<"bold"; + currClass->bold = 1; + } + else { + //qDebug()<<"normal"; + currClass->bold = 0; + } + + //sysPara->print.CurDateVar.startRowPos = sysPara->print.CurDateVar.endRowPos-(sysPara->print.CurDateVar.height-1); + //qDebug()<<"CurDateVar:startRowPos"<print.CurDateVar.startRowPos<<" height"<print.CurDateVar.height; + // 生产日期即当前日期 + ExpiryDotUpdate(3); + varNum++; + } + } + else if(varNum>=3) break; + } + //break; + //if(varNum>sysPara->status.ExpiryVarNum)break; + } + } + return varNum; +} +void MainWindow::ExpiryDotUpdate(char Mode) +{ //更新有效期 + QTextEdit textEdit; + //textEdit.document()->setDocumentMargin(0); + textEdit.setLineWrapMode(QTextEdit::NoWrap); + int height,width; + //QDate curDate=QDate::currentDate(); + EXPIRYVAR_t *p_var;//=(Mode==1)?&sysPara->print.ExpiryVar:&sysPara->print.CurDateVar; + + if(sysPara->status.flagOfAdjustWidth_1){ + sysPara->print.ExpiryVar.splitMode = sysPara->status.splitMode_Adjust_1; + sysPara->status.flagOfAdjustWidth_1 = false; + } + if(sysPara->status.flagOfAdjustWidth_2){ + sysPara->print.CurDateVar.splitMode = sysPara->status.splitMode_Adjust_2; + sysPara->status.flagOfAdjustWidth_2 = false; + } + if(Mode==1) + { + qDebug()<<"Mode==1"; + if(sysPara->status.ExpiryVarNum == 0) { + return; + } + p_var = &sysPara->print.ExpiryVar; + QDate expiryDate=QDate::currentDate().addDays(sysPara->para.ExpiryDay); + sysPara->print.ExpiryVar.year = expiryDate.year(); + sysPara->print.ExpiryVar.month = expiryDate.month(); + sysPara->print.ExpiryVar.day = expiryDate.day(); + r_ExpiryDay = sysPara->para.ExpiryDay; + } + else if(Mode==2) + { + p_var = &sysPara->print.CurDateVar; + if(sysPara->status.CurrDateVariNum == 0) { + return; + } + } + else if(Mode==3) + { + p_var = &sysPara->print.ClassVari; + qDebug()<<"Mode==3"; + if(sysPara->status.classVariNum == 0) { + return; + } + } + else + return; + { + textEdit.clear(); + height = p_var->height; + width = p_var->width; + QString str; + QHash dateFormat; + dateFormat.insert(0,"yyyy-MM-dd"); + dateFormat.insert(1,"yyyy/MM/dd"); + dateFormat.insert(2,"yyyyMMdd"); + dateFormat.insert(3,"yyyy年MM月dd日"); + dateFormat.insert(4,"yyyy-MM-dd hh:mm"); + dateFormat.insert(5,"yyyy/MM/dd hh:mm"); + dateFormat.insert(6,"yyyyMMddhhmm"); + dateFormat.insert(7,"yyyy年MM月dd日 hh:mm"); + dateFormat.insert(8,"hh:mm"); + dateFormat.insert(9,"ddhhmm"); + dateFormat.insert(10,"dd MM yy"); + dateFormat.insert(11,"dd/MM/yy"); + dateFormat.insert(12,"dd/MM/yyyy"); + dateFormat.insert(13,"dd-MM-yy"); + dateFormat.insert(14,"dd-MM-yyyy"); + + /*****轮班变量功能 start******/ + /*00:00-08:00 + 08:00-16:00 + 16:00-00:00 + */ + QTime current_time =QTime::currentTime(); + int hour = current_time.hour(); + QString DateTime; + if(Mode==1) { + DateTime = QDateTime::currentDateTime().addDays(sysPara->para.ExpiryDay).toString(dateFormat.value(sysPara->print.ExpiryVar.splitMode)); + } + else if(Mode==2 ) { + DateTime = QDateTime::currentDateTime().toString(dateFormat.value(p_var->splitMode)); + } + else if (Mode == 3) { + if(hour >= 0 && hour <8) + { + dateFormat.insert(15,"A"); + DateTime = "A"; + } + else if(hour >= 8 && hour < 16) + { + dateFormat.insert(15,"B"); + DateTime = "B"; + } + else if(hour >= 16) + { + dateFormat.insert(15,"C"); + DateTime = "C"; + } + } + + /*****轮班变量功能 end******/ + int DPI = textEdit.logicalDpiX(); + DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 + if(p_var->bold) { + textEdit.insertHtml(QString("%4") + .arg(Public::getFontFamily(height-1,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*72/DPI-1) + .arg(600) + .arg(DateTime) + ); //600表示加粗,400表示普通 + } + else { + textEdit.insertHtml(QString("%4") + .arg(Public::getFontFamily(height,p_var->type)) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 + .arg(height*72/DPI) + .arg(400) + .arg(DateTime) + // .arg("x") + ); //600表示加粗,400表示普通 + } + + QFont font = textEdit.font(); + font.setLetterSpacing(QFont::AbsoluteSpacing, p_var->letterSpace); + textEdit.setFont(font); + + int imgHeight = height + 12; + bool MaxCol4000; + if(sysPara->status.flagOfNo67FPGA) + MaxCol4000 = true; + else + MaxCol4000 = false; + if(imgHeight> MAX_PRINT_ROW_NUM+12) + imgHeight = MAX_PRINT_ROW_NUM+12; + if(width> (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + width = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + QSize size(width+2,imgHeight); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff); + QPainter painter(&image); + textEdit.show(); //如果不显示,似乎不会绘制 + textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ + textEdit.hide(); + image.save("./Expiry.bmp"); + + int lastValidRow = 0; + for(int k = imgHeight - 1; k >= 0 ; k--){ + for(int j = 0; j < width+1; j ++){ + QRgb rgb = image.pixel(j,k); + if(rgb&0xff000000){ + lastValidRow = k + 1; + break; + } + } + if(lastValidRow != 0) + { + break; + } + } + int rowDiff = p_var->endRowPos - p_var->startRowPos; + int firstValidRow=0; + int firstValidRowDiff; + if(lastValidRow >= rowDiff) + { + firstValidRow = lastValidRow - rowDiff; + firstValidRowDiff = firstValidRow; + } + else + { + firstValidRow = 0; + firstValidRowDiff = lastValidRow > rowDiff; + } + + firstValidRow = firstValidRow >= 0?firstValidRow:0; //纠正 + str="";//s2=""; + int wStart=p_var->startColPos; + int hStart= p_var->startRowPos; + unsigned char *dat; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + }else{ + dat =sysPara->status.printDat; + } + for(int j = 2; j < width+1; j ++) + { + unsigned char c=0; + hStart= p_var->startRowPos; + c=dat[(wStart)*5+(hStart)/8]; + for(int k = firstValidRow; k <= lastValidRow; k++) + { + QRgb rgb = image.pixel(j,k); + if(((rgb >> 24)&0xff) > 0x80) + { + c |= (1 << (hStart%8)); + } + else + { + c &= ~(1 << (hStart%8)); + } + if(hStart%8==7) { + dat[(wStart)*5+(hStart)/8]=c; + c=dat[(wStart)*5+(hStart+1)/8]; + } + hStart++; + } + dat[(wStart)*5+(hStart)/8]=c; + wStart++; + } + } +} + +int MainWindow::searchQrVar(){ + int varNum = 0; + if( sysPara->status.QRvariNum){ + QString pattern = ""; + // 1 type ,2 name,3 width,4 height + //

< + // + QRegExp rx(pattern); + //QString textHtml = ui->textEdit->toHtml(); + ///////////// + QTextEdit textEdit ; + for(int i=0;istatus.QRvariNum;i++) + { + + if(sysPara->print.QRvars[i].type==0){ + textEdit.insertHtml(QString("") + .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->print.QRvars[i].type==1){ + textEdit.insertHtml(QString("") + .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->print.QRvars[i].type==2){ + textEdit.insertHtml(QString("") + .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + } + QString textHtml = textEdit.toHtml(); + //////////// + int from = 0; + // int xx =textHtml.size(); + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(rx,from); + bool ok; + //qDebug()<=9 && (sysPara->print.QRvars[varNum].type ==type-9)) + { + //sysPara->print.QRvars[varNum].type = type-9; + sysPara->para.qrOption.type = type-9; + sysPara->para.qrOption.width=sysPara->print.QRvars[varNum].width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->para.qrOption.height =sysPara->print.QRvars[varNum].height = rx.cap(4).toInt(&ok); + sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; + + //qDebug()<<"type:"<print.QRvars[varNum].type<status.QRvariNum + // <print.QRvars[varNum].startColPos<print.QRvars[varNum].startRowPos<print.QRvars[varNum].endRowPos + // <print.QRvars[varNum].width<print.QRvars[varNum].height + // <status.statWarn & WARN_STATUS_POWER_MON)) return; +#endif + strTitle = tr("高压故障,暂停打印."); + + strWarring = tr("高压故障:两高压偏转板间的电压检测异常");strWarring.append("\r\n"); + strWarring.append(tr("1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座;"));strWarring.append("\r\n"); + strWarring.append( tr("2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); + //strWarring.append( tr("字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); + strWarring.append( tr("3.高压线路漏电,请更换高压线路;"));strWarring.append("\r\n"); + strWarring.append( tr("4.高压底座漏电,请更换高压底座。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + +} +void MainWindow::onStatusInkLeak(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)) return; +#endif + strTitle = tr("墨水缸满报警"); + + strWarring = tr("墨水过多:墨水溢出");strWarring.append("\r\n"); + strWarring.append(tr("1. 请停止添加墨水;"));strWarring.append("\r\n"); + strWarring.append(tr("2. 请排出多余墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} + +void MainWindow::onStatusInkSwint(){ + + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)) return; + +} +void MainWindow::onStatusInkWaterLevel(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) return; +#endif + strTitle = tr("墨水液位报警"); + + strWarring = tr("墨水液位:墨水即将耗尽");strWarring.append("\r\n"); + strWarring.append(tr("1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusRecycleWarn(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)) return; +#endif + strTitle = tr("回收故障,关闭回收槽,关墨线"); + strWarring = tr("回收故障:未检测到有墨水回收");strWarring.append("\r\n"); + strWarring.append( tr("1. 墨水未射入回收管,请修正墨线方向;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 墨水粘度太低,请更换新墨水;"));strWarring.append("\r\n"); + strWarring.append( tr("3. 回收管堵塞,请清通或者更换回收管;"));strWarring.append("\r\n"); + strWarring.append(tr("4. 回收泵故障,请清洗或者更换回收泵;"));strWarring.append("\r\n"); + strWarring.append( tr("5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); + //strWarring.append( tr(" 退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusSolvLevelWarn(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) return; +#endif + + strTitle = tr("溶剂液位报警"); + + strWarring = tr("溶剂液位:溶剂即将耗尽");strWarring.append("\r\n"); + strWarring .append(tr("1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusViscosityWarn(){ +#ifdef X86TEST + +#else + if(sysPara->status.viscosityFault==1) +#endif + { + strTitle = tr("粘度故障报警"); + strWarring = tr("粘度故障:墨水粘度无法自动调整");strWarring.append("\r\n"); + strWarring.append( tr("1. 混合阀失灵,请冲洗或者更换混合阀;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 墨水罐内的墨水异常,请更换新墨水;"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +#ifdef X86TEST + +#else + } + else if(sysPara->status.viscosityFault==2) + { + +#endif + strTitle = tr("粘度故障报警"); + strWarring= tr("粘度计异常:");strWarring.append("\r\n"); + strWarring.append(tr("1. 泵前过滤网堵塞,请更换泵前滤网;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 粘度泵异常,请清洗或更换粘度泵;"));strWarring.append("\r\n"); + strWarring.append(tr("3. 粘度传感器异常,请检查传感器线路或者更换传感器."));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + } + +} +void MainWindow::onStatusChargefault(){ +#ifdef X86TEST + +#else + if(sysPara->status.lastPhaseFault) +#endif + { + + strTitle = tr("相位故障报警"); + strWarring = tr("相位故障:相位信号检测异常");strWarring.append("\r\n"); + strWarring.append(tr("1. 墨水分裂不正常,请调整墨水分裂;"));strWarring.append("\r\n"); + strWarring.append(tr("2. 充电槽或者相检头脏污,请清洗充电槽和相检头;"));strWarring.append("\r\n"); + strWarring.append(tr("3. 放大板功能性异常,请更换放大板;"));strWarring.append("\r\n"); + strWarring.append( tr("4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离;"));strWarring.append("\r\n"); + strWarring.append( tr("5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰;"));strWarring.append("\r\n"); + strWarring.append( tr("6. 墨水质量异常,请更换新墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + + } +} + +void MainWindow::OnFinished(int event){ + //msgtest->setText("孔一:60分钟灌浆结束条件!请点击\"结束\"按钮!"); + //msgtest->show(); + msgtest->hide(); + +} + +void MainWindow::onPreviewScene() +{ + pPicScene->clearSelection(); + QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + QPainter painter(&image); + pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect()); + + int coldot=0; + if(sysPara){ + bool MaxCol4000 = sysPara->status.flagOfNo67FPGA; + previewFlag=1; + sysPara->status.currPrintRow = 0; + sysPara->status.variNum = 0; + sysPara->status.QRvariNum = 0; + unsigned char *dat; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + memset(dat,0,sizeof(sysPara->status.printDat_Normal)); + }else{ + dat =sysPara->status.printDat; + memset(dat,0,sizeof(sysPara->status.printDat)); + } + + { + sysPara->status.addSpace = sysPara->para.checkSpace; + + coldot = (int)ui->textEdit->document()->size().width(); + coldot = pPicScene->itemsBoundingRect().width(); + if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int maxPicHeight = MAX_PRINT_ROW_NUM + 12; + QSize size(coldot,maxPicHeight); + + sysPara->status.currPrintRow =0; + sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace + + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + QPainter painter(&image); + QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight); + pPicScene->render(&painter,QRectF(),validRectF); + + int firstRow = 0; + int lastRow = MAX_PRINT_ROW_NUM > maxPicHeight? maxPicHeight:MAX_PRINT_ROW_NUM; //MAX_PRINT_ROW_NUM=40 + int TempVarNum=0; + int varLastRow=0; + + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + for(int j = 0; j < lastRow - firstRow; j++){ // Y + for(int i = 0; i < coldot; i++){ // + QRgb rgb = image.pixel(i,j + firstRow); + // 修改code判断逻辑 + long unsigned int rgbValue = rgb & COLOR_MASK; + if(rgb&0x80000000){ //判断alpha + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + bool foundvar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} + //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; + } + if(foundvar){ + if(sysPara->status.variNum < MAX_VARI_NUM){ +// sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); +// sysPara->status.vars[sysPara->status.variNum].endRowPos = j; + } + else TempVarNum++; + } + } + + else if( (rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || + (rgbValue == BAR_RGB)){ + if(sysPara->status.QRvariNum>=4)continue; + if(rgbValue == MDT_RGB) { //MDT + handleCode(i,j,&varLastRow, MDT); + } + else if(rgbValue == QR_RGB) { //QR + handleCode(i,j,&varLastRow, QR); + } + else if(rgbValue == BAR_RGB) { //BAR + handleCode(i,j,&varLastRow, BAR); + } + + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + } + + else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + } + else if((rgb & 0xfffff0)==0xff0cf0) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + } + else if((rgb & 0xffffff)==0xff00ff) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + } + else + { //Y = 0.299*R' + 0.587*G' + 0.114*B //非变量 + int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; + if(y < 125 ){ + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 + if((j+1) > sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+1; + } + } + } + + }/*判断alpha end*/ + } + } + + if(TempVarNum>MAX_VARI_NUM){ + setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); + strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); + strTitle.append("\r\n"); + strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); + QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); + } + + sysPara->status.variNum = 0; + sysPara->status.ExpiryVarNum = 0; + sysPara->print.ExpiryVar.startColPos = 0; + sysPara->print.ExpiryVar.endRowPos = 0; + sysPara->print.ExpiryVar.letterSpace =0; + sysPara->print.CurDateVar.startColPos = 0; + sysPara->print.CurDateVar.endRowPos = 0; + sysPara->print.CurDateVar.letterSpace = 0; + sysPara->status.CurrDateVariNum = 0; + sysPara->status.QRvariNum=0;//lch add + + // 处理变量和常量的渲染和更新 + handleSceneShow(MaxCol4000, dat); + + if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; + bool found=0; + lastRow = sysPara->status.currPrintRow; + for(int j = sysPara->status.currPrintRow; j >2 ; j--){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ + lastRow = j+1; + found=1; + break; + } + } + if(found) + break; + } + if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow = MAX_PRINT_ROW_NUM-1; + if(lastRowstatus.currPrintRow = sysPara->status.currPrintRow > lastRow? + sysPara->status.currPrintRow : lastRow; + } + + if(sysPara->status.QRvariNum) { + onUpdateDispQRCode(1); + } + + int wmax = sysPara->status.currPrintRow; + sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; + if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; + else { + if(sysPara->para.AlterMode==0) sysPara->para.AlterMode=1; + wmax = sysPara->status.currAlterPrintRow; + } + /*-------------------------------切换到预览显示窗口-----------------------------------*/ + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, + sysPara->para.AlterMode? + sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); + ui->widgetPrintTextDisplay->update(); + } + previewFlag=0; +} + +int MainWindow::calculateMaxSpeed(int backup) +{ + float stroke; + int valid_array; + int rongdian = 0; + int mm; + int oscfreq = 0; + + // QSizeF size = ui->textEdit->document()->size(); + + switch (sysPara->para.oscillatoFreq) { + case CRYS_64K: + oscfreq = 64000; + break; + case CRYS_83K: + oscfreq = 83000; + break; + case CRYS_96K: + oscfreq = 96000; + break; + case CRYS_128K: + oscfreq = 128000; + break; + default: + break; + } + stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; + + rongdian = sysPara->status.currPrintRow * (float)sysPara->para.reducedPixelNumRatio/100; + valid_array = sysPara->status.currPrintRow - rongdian; + + switch (sysPara->para.currPrintMode) { + case FAST_PRINT: + mm = (float)(stroke * oscfreq /(sysPara->status.currPrintRow +1)); + break; + case STANDARD_PRINT: + mm = (float)( (stroke * oscfreq) / (valid_array * 2)); + break; + case SLOW_PRINT_ONE: + mm = (float)( (stroke * oscfreq) / (valid_array * 3)); + break; + case SLOW_PRINT_TWO: + mm = (float)( (stroke * oscfreq) / (valid_array * 4)); + break; + case SLOW_PRINT_THR: + mm = (float)( (stroke * oscfreq) / (valid_array * 5)); + break; + case SLOW_PRINT_FOR: + mm = (float)( (stroke * oscfreq) / (valid_array * 6)); + break; + case SLOW_PRINT_FIV: + mm = (float)( (stroke * oscfreq) / (valid_array * 7)); + break; + case SLOW_PRINT_SIX: + mm = (float)( (stroke * oscfreq) / (valid_array * 8)); + break; + case SLOW_PRINT_SEV: + mm = (float)( (stroke * oscfreq) / (valid_array * 9)); + break; + case SLOW_PRINT_EIG: + mm = (float)( (stroke * oscfreq) / (valid_array * 10)); + break; + case SLOW_PRINT_NIE: + mm = (float)( (stroke * oscfreq) / (valid_array * 11)); + break; + default: + mm = backup/sysPara->para.synPulseNumPerMm; + break; + } + + return mm; + +} + +void MainWindow::Test_Start_Stop() +{ + if(test_flag <=0) return; + if(test_flag >= RECICLARNUMBER){ + LogInfo::setRunStatusText(tr("回收槽开关检测完成!")); + test_flag = 0; + return; + } + if((test_flag%2) == 0){ + if(!open_close){ + on_pushButtonReclaimTanOpen_pressed(); + open_close = 1; + } + } + else if(test_flag%2 == 1){ + if(open_close){ + on_pushButtonReclaimTankClose_pressed(); + open_close = 0; + } + } +} + +int MainWindow::checkRange(QImage textImage, int textColdot, + int posX, int posY) +{ + int firstRow = 0;//变量显示底部会多一条横线 + int lastRow = MAX_PRINT_ROW_NUM; + + int variNum = 0; + for(int j = 0; j < lastRow - firstRow; j++){ // Y + for(int i = 0; i < textColdot; i++){ // + QRgb rgb = textImage.pixel(i,j + firstRow); + long unsigned int rgbValue = rgb & COLOR_MASK; + if((rgb&0x80000000)){ //判断alpha + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + + bool textfoundvar = 0; + if(j>0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ) + { + textfoundvar =1; + } + } + if(textfoundvar) { + + if(sysPara->status.variNum < MAX_VARI_NUM){ + sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+posX; + sysPara->status.vars[sysPara->status.variNum].endRowPos = j+posY; + + if(lastRowstatus.variNum ++; + variNum++; + i+=5;//scene 每一行可能都包含变量 + + } + else variNum++; + + } + } + + else if((rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || + (rgbValue == BAR_RGB)){ + if(sysPara->status.QRvariNum>=4)continue; + if(rgbValue == MDT_RGB) { //MDT + handleCodeScene(i, j, &lastRow, MDT, posX, posY); + } + else if(rgbValue == QR_RGB) { //QR + handleCodeScene(i, j, &lastRow, QR, posX, posY); + } + else if(rgbValue == BAR_RGB) { //BAR + handleCodeScene(i, j, &lastRow, BAR, posX, posY); + } + + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + } + + else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if(((r_rgb & 0x0000ffff) != EXPIRY_VARI_RECONISE )){foundExVar =1;} + } + if(foundExVar) + { + if(sysPara->status.ExpiryVarNum == 0) + { + sysPara->status.ExpiryVarNum ++; + } + sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; + sysPara->print.ExpiryVar.endRowPos = j+posY; + if(lastRow0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} + } + if(foundExVar) + { + if(sysPara->status.CurrDateVariNum == 0) + { + sysPara->status.CurrDateVariNum ++; + } + sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; + sysPara->print.CurDateVar.endRowPos = j + posY; + if(lastRow sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+posY; + } + } + } + } + return variNum; +} + +void MainWindow::handleSceneShow(bool MaxCol4000, unsigned char *dat) +{ + int myvariNum=0; + QList items = ui->senceEditOption->getPicSceneItems(); + foreach (QGraphicsItem *item, items) { + PicTextItem *picText = qgraphicsitem_cast(item); + bool ok; + + int textColdot=0; + textColdot = picText->boundingRect().width(); + if(textColdot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + textColdot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int maxTextHeight = MAX_PRINT_ROW_NUM + 12; + QSize textSize(textColdot, maxTextHeight); + QImage textImage(textSize,QImage::Format_ARGB32); + textImage.fill(0x00ffffff);//填充白色 + QPainter textPainter(&textImage); + + QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height()); + pPicScene->render(&textPainter,QRectF(),validtextRectF); + + /*--------------------------------------------------------------------------*/ + int textItemPosX; + int textItemPosY; + textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x(); + textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); + + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + checkRange(textImage, textColdot, textItemPosX, textItemPosY); + + //===================一般变量===================== + QString textVariPattern = ""; + QRegExp textrx(textVariPattern); + QString textHtml = picText->toHtml(); + int from = 0; + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(textrx,from); + + if(from != -1){//找到匹配的 + from ++; + if(myvariNum < sysPara->status.variNum) + { + sysPara->status.vars[myvariNum].digitalNum = textrx.cap(4).toInt(&ok);//第二个匹配,数字到个数 + sysPara->status.vars[myvariNum].bold = (sysPara->status.vars[myvariNum].digitalNum%100) == 75; + if(sysPara->status.vars[myvariNum].bold) + sysPara->status.vars[myvariNum].digitalNum = sysPara->status.vars[myvariNum].digitalNum/100; + sysPara->status.vars[myvariNum].type = textrx.cap(2).toInt(&ok);//第一个匹配 + QByteArray fontNameUtf8 = textrx.cap(3).toUtf8(); + strncpy(sysPara->status.vars[myvariNum].fontname, fontNameUtf8.data(), sizeof(sysPara->status.vars[myvariNum].fontname) - 1); + sysPara->status.vars[myvariNum].fontname[sizeof(sysPara->status.vars[myvariNum].fontname) - 1] = '\0'; + sysPara->status.vars[myvariNum].width = textrx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); + sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); + sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1; + + if(sysPara->status.vars[myvariNum].startRowPos<0) + sysPara->status.vars[myvariNum].startRowPos=0; + + int item_x_start_pos = sysPara->status.vars[myvariNum].startColPos; + int item_x_end_pos = item_x_start_pos + sysPara->status.vars[myvariNum].width ; + if(item_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + item_x_end_pos = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int item_y_start_pos = sysPara->status.vars[myvariNum].startRowPos; + int item_y_end_pos = sysPara->status.vars[myvariNum].endRowPos+1 ; + if(item_y_start_pos < 0) + item_y_start_pos = 0; + // 擦除占位图 + for(int i = item_x_start_pos; i < item_x_end_pos; i++){ + for(int j = item_y_start_pos; j < item_y_end_pos; j++){ + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 + } + } + sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); + if(sysPara->status.vars[myvariNum].height>16 ){ + if(sysPara->status.vars[myvariNum].height==24) + ; + else { + if(sysPara->status.vars[myvariNum].startRowPos) + { + sysPara->status.vars[myvariNum].endRowPos--; + sysPara->status.vars[myvariNum].startRowPos--; + } + } + } + + if(sysPara->status.vars[myvariNum].type == RANDOMNUM) + { + sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum; + } + + sysPara->status.vars[myvariNum].letterSpace = 0; + if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace + QFont font; + font.setFamily(sysPara->status.vars[myvariNum].fontname); // 20160812 + font.setPixelSize(sysPara->status.vars[myvariNum].height); + font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal); + font.setLetterSpacing(QFont::AbsoluteSpacing, 0); + QFontMetrics fontMetrics(font); + int charWidth = (fontMetrics.horizontalAdvance("0123456789"))/10 ; + sysPara->status.vars[myvariNum].letterSpace = + (sysPara->status.vars[myvariNum].width - charWidth * sysPara->status.vars[myvariNum].digitalNum) + / (sysPara->status.vars[myvariNum].digitalNum); + } + myvariNum++; + } + } + } + //==========================一般变量结束======================= + + //=========================二维码变量================== + searchQrVar(); + + //=========================有效期/生产日期变量================== + searchExpiryVar(textHtml); + + //=========================数模转换================= + generateCharRamData(); + } +} + +void MainWindow::UpdateDateTimeQRCode(QString strContent) +{ + if(!printingFlag || !sysPara->para.isCheckInsertTime) + { + return ; + } + + QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); + bool ok; + int font_size = labelFontSize->text().toInt(&ok,10); + QString font_family = Public::getFontFamily(font_size); + if(sysPara->para.EditMode == TXTFILE) + { + QFile file("/home/plg/doc/modbusQR.bmp"); + if(file.exists()) + { + file.remove(); + } + if(dlgqrcode->barCodeFlag == 1) + { + barcode->extSetText(""); + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + } + else + { + QString receiveContent = QString::fromUtf8(strContent.toStdString().c_str()); + dlgqrcode->extSetText(receiveContent,sysPara->para.qrOption.type); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + } + + QString txt_fomart = ""; + txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += barcode->getLabe_TxtString().toUtf8(); + txt_fomart += " "; + txt_fomart += ""; + ui->textEditOption->textEdit->setHtml(txt_fomart); + ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + on_pushButtonStartPrint_pressed();//开始打印 + } + +} +QSizeF MainWindow::getDocSize()const +{ + QSizeF size = ui->textEdit->document()->size(); + return size; +} + +#ifdef EnableArabic +void MainWindow::setOpenFileName(QString fileName){ + qDebug()<<"set open fileName"<%1%2").arg(subname).arg(subsuffix2); + ui->labelOpenedFileName->setText(stringhtml); + }else{ + font.setFamily("biyang"); + ui->labelOpenedFileName->setFont(font); + ui->labelOpenedFileName->setText(fileName); + } + }else{ + font.setFamily("biyang"); + ui->labelOpenedFileName->setFont(font); + ui->labelOpenedFileName->setText(fileName); + } + }else{ + ui->labelOpenedFileName->setText(fileName); + } +} +#endif + + +void MainWindow::showFPGAData(QByteArray data){ + ui->textEdit->clear(); + ui->textEdit->setText(QString::fromUtf8(data)); +} + + +void MainWindow::showFPGAqueuesize(int size){ + sysPara->status.sizeFPGA = size; +} + +void MainWindow::showSTM32queuesize(int size){ + sysPara->status.sizeSTM32 = size; +} + +void MainWindow::showqueueFPGAsize(int size){ + sysPara->status.sizequeueFPGA = size; +} + +void MainWindow::on_pushButton_Reboot_clicked() +{ + QMessageBox::StandardButton ret = QMessageBox::Ok; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认重启?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + if(!sysPara->status.selfCheckDone) + sysPara->status.selfCheckDone = true; + this->setDisabled(true); + emit setDisableAll(); + if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ + for(int i=15;i>11;i--) + { + if(i == 15){ + sysPara->status.isPumpValveControledByHand = true; //停止自动 + sysPara->devOp->controlInkValve(true); + sysPara->devOp->controlInkValvePWM(true); + sysPara->devOp->controlReclaimPump(true,true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlCycleValve(true); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + if(i == 12){ + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + } + this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); + MySleep(1000); + } + } + sysPara->devOp->controlReclaimTankOpen(true); + sysPara->status.isPumpValveControledByHand = true; //停止自动 + if(sysPara->para.gearPumpEnable ){ + if(!sysPara->para.flagOfReclaimPumEnable){ + sysPara->para.gearPumpValue = 360; + sysPara->devOp->WriteMoterPump(); + } + else{ + sysPara->devOp->controlReclaimPump(true,false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + } + else{ + sysPara->para.reclaimPumpPWMWidth = 95; + sysPara->devOp->controlReclaimPump(true,true); + } + + if(!sysPara->devOp->isViscosityPumpOpen()) + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlInkValve(false); //关供墨 + sysPara->devOp->controlInkValvePWM(false); //关供墨 + + if(!TEST_MODE){ + for(int i=11;i>7;i--) + { + if(i==9) + sysPara->devOp->controlReclaimTankOpen(false); + this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); + MySleep(1000); + } + } + + if(!sysPara->status.lostCommuFlag){ + sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); + sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); + sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); + + updateTotalCnt(0); + sysPara->saveParaToFile(); // 关机前将相关配置保存 + } + sysPara->status.powerOffAppending = false; + if(!TEST_MODE){ + for(int i=7;i>0;i--) + { + if(i == 5) + sysPara->devOp->controlReclaimTankClose(true); + if(i == 4){ + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlReclaimPump(false,false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); + MySleep(1000); + } + } + + sysPara->saveParaToFile(); // 关机前将相关配置保存 + sysPara->saveRFIDPara(); + MySleep(200); + system("sync");//缓存同步 + QCoreApplication::quit(); + } +} + +void MainWindow::setReBootQtUIEnable(bool flag){ + ui->pushButton_Reboot->setEnabled(flag); +} + +void MainWindow::on_pushButtonPowerOff_clicked() +{ + _on_pushButtonPowerOff_pressed(true); +} + +/** + * @brief MainWindow::slt_updateNetworkQR + * 响应 dlgQrCode::sig_updateNetworkQR 信号,将网络(TCP)收到的新二维码 + * 更新到主界面的文本编辑区。 + */ +void MainWindow::slt_updateNetworkQR() +{ +#ifdef _2DCODE_ + // 图片模式下不操作文本编辑区,直接返回 + if(sysPara->para.EditMode==PICFILE) return; + + sysPara->saveParaToFile(); + + // 刷新预览 + if(sysPara->para.EditMode == TXTFILE) { + PreviewPressed(); + } else if(sysPara->para.EditMode == SCENE) { + onPreviewScene(); + } + + // 切换到预览页面,让用户看到更新后的二维码 + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + + // 如果正在打印,立即发送新数据到 FPGA + if(startPrintingFlag && printingFlag) { + SendPrintDataToFpga(0); + } +#endif +} + +void MainWindow::slt_clearAllQRCode() +{ +#ifdef _2DCODE_ + // 1. 清除 textEdit 中的所有二维码图片 + QTextCursor cursor(ui->textEdit->document()); + bool modified = false; + + while (!cursor.atEnd()) { + cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); + QTextCharFormat fmt = cursor.charFormat(); + + if (fmt.isImageFormat()) { + QString imgName = fmt.toImageFormat().name(); + // 删除所有二维码相关的图片(包括普通二维码和网络二维码) + if (imgName.contains("QRV") || imgName.contains("DMTV") || + imgName.contains("BARV") || imgName.contains("networkQR")) { + cursor.deleteChar(); + modified = true; + } + } + cursor.clearSelection(); + } + + // 2. 清除场景中的二维码变量标记 + sysPara->status.QRvariNum = 0; + memset(sysPara->print.QRvars, 0, sizeof(sysPara->print.QRvars)); + + // 3. 复位二维码参数 + sysPara->para.qrOption.width = 0; + sysPara->para.qrOption.height = 0; + + // 4. 刷新显示 + if (modified) { + ui->widgetPrintTextDisplay->update(); + LogInfo::setRunStatusText(tr("已清除所有二维码,准备添加网络二维码")); + } +#endif +} + +extern int baudRateValue; +void MainWindow::UpdateUIVersion(){ + int fpgaType = sysPara->status.fpgaVersionNum>>12; + QString fpgaVersion; + if(fpgaType == 6){ + fpgaVersion = "72"; + }else if(fpgaType == 1){ + fpgaVersion = "67"; + } + + fpgaVersion = fpgaVersion + QString("_F%1.%2.%3").arg(sysPara->status.fpgaVersionNum >> 12) + .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff); + + QString STM32Ver = QString("S:%1.%2.%3_B%4").arg((sysPara->status.stm32Verion>>16)&0x7F) + .arg((sysPara->status.stm32Verion>>8) & 0xFF).arg(sysPara->status.stm32Verion&0xFF).arg(baudRateValue); + + QString VernonBach; + VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); + VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER; + + QString Mac = QString::number(sysPara->status.machineMac); + LogInfo::showVerionInformation(Mac,VernonBach,fpgaVersion,STM32Ver,sysPara->status.flagOfPowerOnMode); +} + +void MainWindow::checkPrintingInterval(){ + unsigned int type = sysPara->status.fpgaVersionNum >> 12; + if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && type == 8) //72版本同步模式下,判断喷印间隔是否设置合理 + { + QSizeF size = ui->textEdit->document()->size(); + float stroke,print_len_min; + stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; + print_len_min = stroke * size.width(); + if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) + { + QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); + return; + } + } +}