4619 lines
203 KiB
C++
4619 lines
203 KiB
C++
/*
|
||
*
|
||
*
|
||
*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 <QVBoxLayout>
|
||
#include <InputMethod.h>
|
||
#include <QKeyEvent>
|
||
#include <QTextCodec>
|
||
#include <QTextEdit>
|
||
#include <QFont>
|
||
#include <TextEditOption.h>
|
||
#include <QDesktopWidget>
|
||
#include <DevOp.h>
|
||
#ifndef Q_OS_WIN
|
||
#include <sys/reboot.h>
|
||
#else
|
||
#define reboot(a,...) (0 == 0)
|
||
#endif
|
||
#include <QPainter>
|
||
#include <QImage>
|
||
#include <QRgb>
|
||
#include <QDebug>
|
||
#include <QScrollBar>
|
||
#include <QFontMetrics>
|
||
#include <QChar>
|
||
#include <stdlib.h>
|
||
#include <unistd.h>
|
||
#include <string>
|
||
#include "DevOp.h"
|
||
#include "Public.h"
|
||
#include "LogInfo.h"
|
||
#include "QBarCode.h"
|
||
#include "scene/picscene.h"
|
||
#include <QGraphicsItem>
|
||
#include "MyInputMethod.h"
|
||
#include <QTextBlockFormat>
|
||
#include "VerBVersion.h"
|
||
//#define SAVEWHENPREVIEW // 预览时先保存
|
||
#include <string>
|
||
#include <iostream>
|
||
#include <cstring>
|
||
|
||
#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:"<<sysPara->para.qrOption.counter<<AutoCount;
|
||
#endif
|
||
//qDebug()<<"CheckStatus :"<<sysPara->status.productCnt<<sysPara->para.qrOption.counter <<sysPara->status.QRvariNum;
|
||
}
|
||
//else qDebug()<<"P:"<<lastProductCnt<<sysPara->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:"<<lastProductCnt;
|
||
}
|
||
else { onUpdateDispQRCode(0);
|
||
//qDebug()<<"P0:"<<lastProductCnt;
|
||
}
|
||
|
||
if(AutoCount)
|
||
{
|
||
SendPrintDataToFpga(0);
|
||
}
|
||
|
||
AutoCount =0;
|
||
}
|
||
|
||
if(Flag){//pulse_300ms
|
||
sysPara->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:"<<t_y_start_pos;
|
||
break;
|
||
}
|
||
return t_y_start_pos;
|
||
}
|
||
|
||
void MainWindow::PreviewPressed(){
|
||
int coldot=0;
|
||
if(sysPara){
|
||
previewFlag=1;
|
||
sysPara->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:"<<sysPara->status.variNum<<"v-nLeter1:"<<sysPara->status.vars[0].letterSpace<<"v-nLeter2:"<<sysPara->status.vars[1].letterSpace<<"v-nLeter3:"<<sysPara->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()<<j<< QString().sprintf("%08X",rgb);
|
||
//if((rgb&0x00FFFFFF)==0)
|
||
{
|
||
firstRow = j;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(firstRow != maxPicHeight)
|
||
break;
|
||
}
|
||
firstRow = 0;
|
||
//qDebug()<<"firstRow"<<firstRow<<maxPicHeight;
|
||
//firstRow = 0;
|
||
/*--------------------------------------------------------------------------*/
|
||
int lastRow = firstRow + MAX_PRINT_ROW_NUM;
|
||
int TempVarNum=0;
|
||
int varLastRow=0;
|
||
lastRow = (lastRow>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(varLastRow<j+1) varLastRow=j+1;
|
||
sysPara->status.variNum ++;TempVarNum++;
|
||
i+=5;
|
||
//qDebug()<<"VARr:"<<TempVarNum<<i<<j;
|
||
}
|
||
else TempVarNum++;
|
||
//dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点
|
||
}
|
||
}
|
||
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 & 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(varLastRow<j+1) varLastRow=j+1;
|
||
if(sysPara->status.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:"<<rgb;
|
||
bool foundExVar=0;
|
||
if(j>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(varLastRow<j+1) varLastRow=j+1;
|
||
if(sysPara->status.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:"<<rgb;
|
||
//qDebug()<<" found class:"<<i<<j + firstRow;
|
||
{
|
||
qDebug()<<"found class:";
|
||
//if(sysPara->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(varLastRow<j+1) varLastRow=j+1;
|
||
if(sysPara->status.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"<<TempVarNum;
|
||
if(TempVarNum>8){
|
||
setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!"));
|
||
strTitle= tr("变量数大于8个,某些变量将不起作用!!!");
|
||
strTitle.append("\r\n");
|
||
strTitle.append(tr("请减少信息中的变量(或计数器)数量."));
|
||
QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok);
|
||
}
|
||
|
||
//qDebug()<<firstRow<<lastRow<< sysPara->status.vars[0].startRowPos<<sysPara->status.vars[0].endRowPos<< sysPara->status.currPrintRow;
|
||
// ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM
|
||
//qDebug()<<"qrvar"<<sysPara->status.QRvariNum;
|
||
searchQrVar();
|
||
//if(sysPara->status.ExpiryVarNum)
|
||
searchExpiryVar();
|
||
//ui->widgetPrintTextDisplay->update();
|
||
//===============
|
||
if(sysPara->status.variNum){
|
||
//
|
||
/*--------------------------------提取变量------------------------------------------*/
|
||
QString pattern = "<img src=\":/(\\d*)/(\\d*)_([a-zA-Z_][a-zA-Z0-9_]*)/../image/digitalWidth(\\d*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
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() <<varNum<< "startRowPos=:" << sysPara->status.vars[varNum].startRowPos
|
||
// << "endRowPos" << sysPara->status.vars[varNum].endRowPos
|
||
// <<"Height"<<sysPara->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:"<<sysPara->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:"<<sysPara->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"<<sysPara->status.vars[varNum].height<<pixelSize;
|
||
|
||
sysPara->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<<sysPara->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:"<<lastRow;
|
||
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;//qDebug()<<"fOUND:"<<i<<j<<dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8]<<sysPara->status.currPrintRow;
|
||
break;
|
||
}
|
||
}
|
||
if(found)
|
||
break;
|
||
}
|
||
if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow =MAX_PRINT_ROW_NUM-1;
|
||
if(lastRow<varLastRow)lastRow= varLastRow-1;
|
||
|
||
if(lastRow<1) lastRow =1;
|
||
//if(lastRow>20 &&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"<<sysPara->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:"<<sysPara->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("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">0123456789.m </span>")
|
||
.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("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">0123456789</span>")
|
||
.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"<<lastValidRow;
|
||
qDebug()<<"GetData"<<p_var->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()<<QString("mainwindow 打印内容:%1").arg(ui->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 "<<sysPara->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";
|
||
|
||
setRunStatus(tr("排气结束, 打开回收槽."));
|
||
LogInfo::setRunStatusText(tr("排气结束, 打开回收槽."));
|
||
|
||
reclaimTanOpen();
|
||
sysPara->status.airPushingDone = 1;
|
||
sysPara->status.airPushing = 0;
|
||
sysPara->status.airPushingOnTime = 0;
|
||
airPushTimer->stop();
|
||
|
||
return;
|
||
}
|
||
|
||
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){
|
||
|
||
if(sysPara->devOp->isViscosityPumpOpen())
|
||
sysPara->devOp->controlViscosityPump(false);
|
||
|
||
if(sysPara->devOp->isCycleValveOpen())
|
||
sysPara->devOp->controlCycleValve(false);
|
||
|
||
if(!sysPara->devOp->isReclaimPumpOpen())
|
||
sysPara->devOp->controlReclaimPump(true, false);
|
||
|
||
setRunStatus(tr("排气结束, 准备打开回收槽."));
|
||
LogInfo::setRunStatusText(tr("排气结束, 准备打开回收槽."));
|
||
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(*varLastRow<row+1) *varLastRow=row+1;
|
||
sysPara->status.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(*varLastRow<row+1) *varLastRow=row+1;
|
||
sysPara->status.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(m_powerOffInProgress)
|
||
return;
|
||
|
||
if(sysPara->status.powerOffAppending){
|
||
m_powerOffInProgress = true;
|
||
if(!sysPara->status.selfCheckDone)
|
||
sysPara->status.selfCheckDone = true;
|
||
this->setDisabled(true);
|
||
emit setDisableAll();
|
||
////////关机时通过闭环控制维持压力,控制目标不超过650/////
|
||
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->devOp->controlReclaimPump(true,false);
|
||
// 不再固定输出360,隔膜泵由pressureAdj按关机目标压力闭环调节
|
||
}
|
||
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;
|
||
sysPara->para.gearPumpValue = 0;
|
||
sysPara->devOp->WriteMoterPump();
|
||
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 = 0;
|
||
sysPara->devOp->WriteMoterPump();
|
||
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<size.width() && ++numOfTextChange > 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()<<labelFontSize->text().toInt(&ok,10)<<s.length()<<s;
|
||
if(labelFontSize && checkBoxBold){
|
||
int DPI = labelFontSize->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"<<sysPara->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"<<sysPara->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"<<sysPara->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 = "<img src='" + barcode->pictureName + "'/>";
|
||
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"<<dlgqrcode->flagInsert<<dlgqrcode->bcWidth<<dlgqrcode->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", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||
"p, li { white-space: pre-wrap; }\n"
|
||
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
|
||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'wenquanyi'; font-size:10pt;\"><br /></p></body></html>", 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<QGraphicsItem *> items = pPicScene->items();
|
||
foreach (QGraphicsItem *item, items)
|
||
{
|
||
PicTextItem *picText = qgraphicsitem_cast<PicTextItem*>(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("<img src=\"/home/plg/doc/modbusQR.bmp\" />", Qt::CaseSensitive)){
|
||
int left_int = save_text.indexOf("<img src=\"/home/plg/doc/modbusQR.bmp\" />");
|
||
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 += "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
|
||
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="<<right_html;
|
||
|
||
QString txt_fomart = QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\"> ").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</span>"
|
||
QString crash_word = right_html.left(right_html.indexOf("<"));
|
||
txt_fomart += crash_word;
|
||
// qDebug()<<"crash_word="<<crash_word;
|
||
}
|
||
txt_fomart += "</span>";
|
||
str_html += txt_fomart;
|
||
|
||
left_int = right_html.indexOf("</span>");
|
||
index_size = QString("</span>").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("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">").arg(font_family).arg(font_size)
|
||
.arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400);
|
||
txt_fomart += strContentPrint.toUtf8();
|
||
txt_fomart += "</span>";
|
||
txt_fomart += "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
|
||
|
||
if(!sysPara->para.isRemoveDigitCode)
|
||
{
|
||
txt_fomart += QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\"> ").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 += "</span>";
|
||
}
|
||
else
|
||
{
|
||
txt_fomart += QString::fromUtf8("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\"> </span>").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 = "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
|
||
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;varNum<sysPara->status.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"<<sysPara->status.calandar_and_dat.cnt1CurrValue<<sysPara->status.calandar_and_dat.cnt2CurrValue;
|
||
//qDebug()<<txt;
|
||
}
|
||
|
||
sysPara->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.currPrintRow<sysPara->print.QRvars[varNum].endRowPos) {
|
||
sysPara->status.currPrintRow = sysPara->print.QRvars[varNum].endRowPos;
|
||
}
|
||
//sysPara->status.currPrintCol = (sysPara->status.currPrintCol<sysPara->print.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.currPrintRow<sysPara->print.QRvars[varNum].endRowPos)?sysPara->print.QRvars[varNum].endRowPos:sysPara->status.currPrintRow;
|
||
|
||
// qDebug()<<"onUpdate:"<< sysPara->print.QRvars[varNum].startColPos
|
||
// <<sysPara->print.QRvars[varNum].endRowPos <<sysPara->print.QRvars[varNum].width
|
||
// <<sysPara->print.QRvars[varNum].height <<sysPara->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 = "<img src=\":/(\\d*)/(\\d*)/../image/(\\w*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
// 1 type ,2 name,3 width,4 height
|
||
//<img src=":/80/image/expiryDate8.bmp" width="16" height="16" /></p><
|
||
//<img src=":/81/image/curDate8.bmp" width="25" height="21" />
|
||
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:"<<type<<rx.cap(1)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
if(type==EXPIRYDATE || type==EXPIRYDATE + 10 || type==EXPIRYDATE + 20 || type==EXPIRYDATE + 30)
|
||
{ //expiryDate
|
||
//qDebug()<<"ExpiryVar:"<<type<<rx.cap(1)<<rx.cap(2).left(10)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
sysPara->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"<<sysPara->print.CurDateVar.startRowPos<<" height"<<sysPara->print.CurDateVar.height;
|
||
// 生产日期即当前日期
|
||
ExpiryDotUpdate(2);
|
||
varNum++;
|
||
}
|
||
else if(type == CURCLASS)
|
||
{
|
||
//qDebug()<<"CURCLASS:"<<type<<rx.cap(1)<<rx.cap(2).contains("875")<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
EXPIRYVAR_t *currClass = &sysPara->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"<<sysPara->print.CurDateVar.startRowPos<<" height"<<sysPara->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<int, QString> 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("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">%4</span>")
|
||
.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("<span style=\" font-family:'%1'; font-size:%2pt; font-weight:%3;\">%4</span>")
|
||
.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 = "<img src=\":/(\\d*)/image/(\\w*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
// 1 type ,2 name,3 width,4 height
|
||
//<img src=":/9/image/DMTV16.bmp" width="16" height="16" /></p><
|
||
//<img src=":/10/image/QRV21.bmp" width="25" height="21" />
|
||
QRegExp rx(pattern);
|
||
//QString textHtml = ui->textEdit->toHtml();
|
||
/////////////
|
||
QTextEdit textEdit ;
|
||
for(int i=0;i<sysPara->status.QRvariNum;i++)
|
||
{
|
||
|
||
if(sysPara->print.QRvars[i].type==0){
|
||
textEdit.insertHtml(QString("<img src=':/%1/image/DMTV%2.bmp' height='%2' width='%3' />")
|
||
.arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后
|
||
}
|
||
else if(sysPara->print.QRvars[i].type==1){
|
||
textEdit.insertHtml(QString("<img src=':/%1/image/QRV%2.bmp' height='%2' width='%3' />")
|
||
.arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后
|
||
}
|
||
else if(sysPara->print.QRvars[i].type==2){
|
||
textEdit.insertHtml(QString("<img src=':/%1/image/BARV%2.bmp' height='%2' width='%3' />")
|
||
.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()<<xx<<"from:"<<from;
|
||
if(from != -1){
|
||
from ++;
|
||
if(varNum < 4){
|
||
QString s = rx.cap(2);
|
||
int type = rx.cap(1).toInt(&ok);
|
||
// 填充信息
|
||
//qDebug()<<"QVARName:"<<type<<rx.cap(1)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
if(type<20 && type>=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:"<<varNum<<sysPara->print.QRvars[varNum].type<<sysPara->status.QRvariNum
|
||
// <<sysPara->print.QRvars[varNum].startColPos<<sysPara->print.QRvars[varNum].startRowPos<<sysPara->print.QRvars[varNum].endRowPos
|
||
// <<sysPara->print.QRvars[varNum].width<<sysPara->print.QRvars[varNum].height
|
||
// <<rx.cap(1)<<rx.cap(2)<<rx.cap(3)<<rx.cap(4);
|
||
//type: 0 1 1 0 0 21 25 21 "10" "QRV21" "25" "21"
|
||
//type: 0 2 1 0 0 12 325 12 "11" "BARV12" "325" "12"
|
||
varNum++;
|
||
//break;
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return varNum;
|
||
}
|
||
|
||
PicScene* MainWindow::getPicScene()
|
||
{
|
||
return pPicScene;
|
||
}
|
||
|
||
void MainWindow::on_pushButtonCleanUP_pressed(){
|
||
|
||
emit InkjetCleanUP();
|
||
|
||
}
|
||
void MainWindow::ShowWarnningText1(QString strTitle,QString strWarring){
|
||
|
||
dlgMyWarring.SetTitleText(strTitle);
|
||
dlgMyWarring.SetWarringText(strWarring);
|
||
dlgMyWarring.show();
|
||
dlgMyWarringShowDlyCnt =20;
|
||
|
||
}
|
||
|
||
void MainWindow::onStatusHighVoltageFault(){
|
||
#ifdef X86TEST
|
||
|
||
#else
|
||
if(!(sysPara->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(lastRow<varLastRow)lastRow= varLastRow-1;//在场景模式下,变量的最低一行并不一定是打印的最后一行
|
||
|
||
if(lastRow<1) lastRow =1;
|
||
// lastRow只检测了一部分,优先选择大的那个
|
||
sysPara->status.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(lastRow<j+1)
|
||
lastRow=j+1;
|
||
sysPara->status.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(lastRow<j+1) lastRow=j+1;
|
||
|
||
i+=10;
|
||
|
||
}
|
||
}
|
||
else if((rgb & 0xfffff0)==0xff0cf0)
|
||
{ // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的
|
||
bool foundExVar=0;
|
||
if(j>0){
|
||
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<j+1) lastRow=j+1;
|
||
|
||
i+=10;
|
||
}
|
||
}
|
||
|
||
if(j > sysPara->status.currPrintRow) {
|
||
sysPara->status.currPrintRow = j+posY;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return variNum;
|
||
}
|
||
|
||
void MainWindow::handleSceneShow(bool MaxCol4000, unsigned char *dat)
|
||
{
|
||
int myvariNum=0;
|
||
QList<QGraphicsItem *> items = ui->senceEditOption->getPicSceneItems();
|
||
foreach (QGraphicsItem *item, items) {
|
||
PicTextItem *picText = qgraphicsitem_cast<PicTextItem*>(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 = "<img src=\":/(\\d*)/(\\d*)_([a-zA-Z_][a-zA-Z0-9_]*)/../image/digitalWidth(\\d*).bmp\" width=\"(\\d*)\" height=\"(\\d*)\" />";
|
||
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("<span style=\" font-family:'%1'; font-size:%2pt;font-weight:%3;\">").arg(font_family).arg(font_size)
|
||
.arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400);
|
||
txt_fomart += barcode->getLabe_TxtString().toUtf8();
|
||
txt_fomart += " </span>";
|
||
txt_fomart += "<img src=\"/home/plg/doc/modbusQR.bmp\" />";
|
||
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"<<fileName;
|
||
int lastIndex = fileName.lastIndexOf(".");
|
||
QFont font;
|
||
if(lastIndex != -1){
|
||
int secondLastIndex = fileName.lastIndexOf(".",lastIndex-1);
|
||
if(secondLastIndex != -1){
|
||
QString subsuffix = fileName.mid(secondLastIndex);
|
||
if(subsuffix.contains(".a")){
|
||
QString subsuffix2=fileName.mid(lastIndex);
|
||
QString subname=fileName.mid(0,secondLastIndex);
|
||
QString stringhtml=QString("<span style=font-family:'biyangarabic';>%1</span><span style=font-family:'biyang';>%2</span>").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->devOp->controlReclaimPump(true,false);
|
||
// 不再固定输出360,由闭环控制维持压力
|
||
}
|
||
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;
|
||
}
|
||
}
|
||
}
|