Compare commits

...
23 Commits
Author SHA1 Message Date
kite_lucs 3cade51a9c hlp:荆州隔膜泵版本 2026-10-20 08:53:42 +08:00
kite_lucs ed0c2484cc Revert "hlp:上次的压力调整算法提交"
This reverts commit e533ea8e0b.
2026-10-19 17:49:44 +08:00
kite_lucs baa8882d09 Revert "hlp:荆州版本"
This reverts commit 065b146998.
2026-10-19 17:48:03 +08:00
kite_lucs 065b146998 hlp:荆州版本 2026-10-19 17:03:47 +08:00
kite_lucs e533ea8e0b hlp:上次的压力调整算法提交 2026-10-17 08:34:03 +08:00
kite_lucs 16f1448c58 hlp:修改喷印间隔过短报警的判断逻辑 2026-09-30 10:41:26 +08:00
kite_lucs 26455d5bc4 hlp:merge 2026-09-14 16:52:31 +08:00
kite_lucs e358abf461 hlp:优化开机到排气期间界面状态显示;排气后,开回收槽前延时7秒等待压力升高,避免漏墨 2026-09-14 15:50:49 +08:00
byons eb5d824e02 回滚旧的最大速度计算方法 2026-09-07 17:31:04 +08:00
byons a882c30e09 陆工修复回收泵模式切换后压力失控问题、添加逻辑在隔膜泵版本下禁用编辑回收泵勾选框 2026-09-07 17:30:48 +08:00
byons fbdd064adb 陆工调整关机流程第一版、优化排气提示 2026-09-07 15:51:08 +08:00
byons 0fa8ce4b51 回滚67版本的字宽计算方法 2026-09-07 09:49:13 +08:00
byons 77370b17ab 添加排挤流程日志 2026-09-07 09:48:55 +08:00
byons 1e48e6a47b 修复隐藏功能缺陷、管控高压开启条件 2026-09-07 09:48:45 +08:00
kite_lucsandbyons b96e36a6a6 hlp:修复隐藏功能m显示不全的问题,需要搭配等宽的小数点,空格,数字和字母m使用,修改版本号为GuiLin版本 2026-09-07 09:48:31 +08:00
byons 9eebd81d51 添加RFID版本标识 2026-08-29 14:27:43 +08:00
byons a636ba3400 Merge branch 'main' of https://git.vernonbach.com/rd/VX5-DiaphragmPump-GeneralVersion 2026-08-28 17:39:07 +08:00
kite_lucs f7b7faab2e hlp:分段计米部分bug修复,按需求不需要超级密码就可以使用分段计米 2026-08-28 17:37:05 +08:00
byons 7abac963e4 取消回收槽到底时开启高压 2026-08-28 17:31:32 +08:00
byons a20552e8d0 同步VX4的排气流程 2026-08-28 17:19:33 +08:00
kite_lucs f29fafca9e Merge branch 'main' of https://git.vernonbach.com/rd/VX5-DiaphragmPump-GeneralVersion 2026-08-27 09:11:08 +08:00
kite_lucs ee7792077d hlp:修改版本号规则 2026-08-27 09:10:41 +08:00
hlp ab8363f47c 迁移隔膜泵算法完成 2026-08-26 18:27:19 +08:00
56 changed files with 24435 additions and 77143 deletions
+14 -11
View File
@@ -2680,16 +2680,21 @@ int DevOp::writeFpgaPrintPara(bool ignoreWarn){
{
#define MIN_CHAR_WIDTH 0.1 //0.1mm/列
#define MAX_CHAR_WIDTH 4.0 //4.0mm/列
// 计算预览区域的总脉冲数 = 0.1+字宽*(4-0.1)/100*(当前列数+3(留白))*同步器脉冲数
displayAreaTotalSynNum = (int )(
(MIN_CHAR_WIDTH +sysPara->para.printColDelay*(MAX_CHAR_WIDTH - MIN_CHAR_WIDTH) /100)
*currPrintCol*sysPara->para.synPulseNumPerMm
);
*currPrintCol*sysPara->para.synPulseNumPerMm);
// 增加判定条件,其实我觉得下面这个 contentLength 才是合理计算内容长度是否超过喷印间隔的方式
float contentLength = sysPara->para.printColDelay / MAX(sysPara->para.synPulseNumPerMm, 0.000001) * sysPara->status.currPrintCol;
if(!ignoreWarn && currPrintCol && contentLength > sysPara->para.synTriggerPrintLenMm){
// sysPara->para.synTriggerPrintLenMm:毫米脉冲数 之前干嘛拿实际长度contentLength跟毫米脉冲数比较???, 现在改为直接拿喷印间隔比较
if(!ignoreWarn && sysPara->status.currPrintCol && (contentLength > sysPara->para.synTriggerPrintLenMm)){
QMessageBox::warning(NULL,tr("警告"),tr("喷印间隔太短,无法满足同步打印宽度设置,字宽将自动缩短!"));
LogInfo::setRunStatusText(QString("displayAreaTotalSynNum warn: L: %1, printColDelay: %2, PPM: %3, Cols: %4").arg(contentLength).arg(sysPara->para.printColDelay).
arg(sysPara->para.synPulseNumPerMm).arg(sysPara->status.currPrintCol));
LogInfo::setRunStatusText(QString("contentLength: %1, printColDelay: %2, PPM: %3, Cols: %4, synTriggerPrintLenMm: %5")
.arg(contentLength).arg(sysPara->para.printColDelay)
.arg(sysPara->para.synPulseNumPerMm).arg(sysPara->status.currPrintCol).arg(sysPara->para.synTriggerPrintLenMm));
LogInfo::setRunStatusText(tr("needed lenth : %1").arg(contentLength+1));
}
}
else
@@ -2700,7 +2705,7 @@ int DevOp::writeFpgaPrintPara(bool ignoreWarn){
QMessageBox::critical(NULL,tr("错误"),tr("在同步计米的情况下无打印串或显示区域为零"));
}
else {
if(currPrintCol && type == 2){
if(currPrintCol){
int synNumPerCol = displayAreaTotalSynNum*(1<<8)/(currPrintCol*(1 + sysPara->para.charBold));
//加宽的时候,相当于列数翻倍
if(displayAreaTotalSynNum >= (1<<24)){
@@ -3172,7 +3177,6 @@ void DevOp::writeCnt1GroupSetting(bool bCntByGroupEnable){
{
fpgaWr(WRITE_CNT1GROUP_COUNT,(unsigned char *)&sysPara->para.Cnt1ByGroup.cnt1GroupCnt,sizeof(sysPara->para.Cnt1ByGroup.cnt1GroupCnt));
qDebug() << "Groups of CNT1: " << sysPara->para.Cnt1ByGroup.cnt1GroupCnt;
for(int i=0;i<sysPara->para.Cnt1ByGroup.cnt1GroupCnt;i++)
{
cnt1GroupSettingSend.cnt1GroupNum = (unsigned char)i;
@@ -3218,7 +3222,6 @@ void DevOp::writeCnt2GroupSetting(bool bCntByGroupEnable)
{
fpgaWr(WRITE_CNT2GROUP_COUNT,(unsigned char *)&sysPara->para.Cnt2ByGroup.cnt2GroupCnt,sizeof(sysPara->para.Cnt2ByGroup.cnt2GroupCnt));
qDebug() << "sysPara->para.Cnt2ByGroup.cnt2GroupCnt: " << sysPara->para.Cnt2ByGroup.cnt2GroupCnt;
for(int i=0;i<sysPara->para.Cnt2ByGroup.cnt2GroupCnt;i++)
{
cnt2GroupSettingSend.cnt2GroupNum = (unsigned char)i;
@@ -3319,9 +3322,7 @@ void DevOp::writeFpgaCalandar(bool Enable){
fpgaWr(WRITE_COUNTER3_ADDR,(unsigned char *)&sysPara->para.Counter3,sizeof(sysPara->para.Counter3));
sysPara->para.Counter4.cnt4CurrValue= QString::number(sysPara->para.cnt4CurrValue).toUInt(0,16); //计数器4当前值用于隐藏功能
#ifndef COUNTER2_BY_GROUP
fpgaWr(WRITE_COUNTER4_ADDR,(unsigned char *)&sysPara->para.Counter4,sizeof(sysPara->para.Counter4));
#endif
fpgaWr(WRITE_COUNTER4_ADDR,(unsigned char *)&sysPara->para.Counter4, 4);
sysPara->status.cnt3CurrentValueInitDoneFlag = true;
sysPara->status.cnt2CurrentValueInitDoneFlag = true;
@@ -3377,6 +3378,8 @@ void DevOp::printCtrl2(int cmd){
}
unsigned int DevOp::readFpgaVersionNum(){
if (sysPara == NULL) return 0;
fpgaRd(0x00EC,&sysPara->status.FPGAChipType,1);
fpgaRd(0x00FE,(unsigned char *)&sysPara->status.fpgaVersionNum,2);
fpgaRd(READ_BUILD_DAT, (unsigned char *)&sysPara->status.build_dat.builTime, sizeof(sysPara->status.build_dat.builTime));
-380
View File
@@ -1,380 +0,0 @@
/*
* DevOp.h
*
* Created on: Jun 25, 2013
* Author: yiyu
* QQ:1036184468
* Descriptoin:
*/
#ifndef DEVOP_H_
#define DEVOP_H_
#define JETV1 1
#define JETV2 2
#define JETV3 3 // EP3C10F144
#define JETV23 4 // V5,V4主板编号均为4; V6没有正式投入使用
#define JETV7 7 // EP4CE15F144, ARM 335X
#define PRODUCT_VERSION(ver) ((ver>>13) & 0x7)
class SysPara;
#include <stdio.h>
#include <QString>
#include "myinclude.h"
#include <QObject>
#include <QQueue>
#include <QMetaType>
#include <QThread>
#include <QMutex>
#include <QReadWriteLock>
#ifdef UART2
#include "posix_qextserialport.h"
#endif
#define DisTraceMsg() printf("###############TRACE,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
#define DisWarnmsg() printf("~~~~~~~~~~~~~~~WARN,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
#define DisErrorMsg() printf("!!!!!!!!!!!!!!!ERROR! ,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
#define PRINT_CTRL_STOP 0
#define PRINT_CTRL_START 1
#define PRINT_CTRL_PAUSE 2
#define PRINT_CTRL_DAC_DISABLE 3
#define PRINT_CTRL_DAC_ENABLE 4
#define PRINT_CTRL_STOPSYNCNT 5
#define MAX_FPGA_DAC_VALUE_FOR_NEW ((1<<12)*95/100) //由于硬件原因,当DAC大于一定值后,电压不再变化,所以做一下限制
#define MAX_FPGA_DAC_VALUE_FOR_V1 (255) //老板子的最大值到256
#define MAX_FPGA_DAC_VALUE ((PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1)?MAX_FPGA_DAC_VALUE_FOR_V1:MAX_FPGA_DAC_VALUE_FOR_NEW)
#define MAX_POINT_DISTANCE_ADJUST_VAL (1<<10) //点距微调的最大值
#define MAX_MOTOR_RUN_CURRENT 600
#define MIN_MOTOR_RUN_CURRENT 80
#define MAX_RECLAIM_BLOCK_CNT 5 //500ms
#define MAX_RELEASE_VALVE_DELAY_CNT 4
/*所有警告都是高电平警告*/
#define WARN_STATUS_INK_SWINT (1<<7) /*墨线开头,来自喷头,必须开的时候才能打印,关的时候为1,开的时候为0*/
#define WARN_STATUS_POWER_MON (1<<6) //高压报警
#define WARN_STATUS_RECYCLE_FAULT (1<<5) //高电平表示有故障
#define WARN_STATUS_INK_WARN (1<<4)
#define WARN_STATUS_SOLV_WARN (1<<3)
#define WARN_STATUS_SUMP_WARN (1<<2) //墨水渗漏
#define WARN_STATUS_HDINT (1<<1) /*喷头盖,盖上为0,否则为1,必须盖上才能打印,电磁铁有正反面*/
#define WARN_STATUS_VISCOTITY_MEASURE_READY (1<<0) // 球已经到上位等灯
#define FPGA_SYS_HZ 100000000
#define MAX_WR_MEM_SIZE (1<<16) //写空间最大地址范围
#define MAX_WR_MEM_SIZE_MASK (MAX_WR_MEM_SIZE - 1)
#define MAX_RD_MEM_SIZE (1<<9) //读空间最大地址范围
#define MAX_RD_MEM_SIZE_MASK (MAX_RD_MEM_SIZE - 1)
/* am335x core board control pwm output */
#define VISCO_PUMP_REQUEST "echo 1 > /sys/class/pwm/ecap.2/request"
#define VISCO_PUMP_RELEASE "echo 0 > /sys/class/pwm/ecap.2/request"
#define VISCO_PUMP_RUN "echo 1 > /sys/class/pwm/ecap.2/run"
#define VISCO_PUMP_STOP "echo 0 > /sys/class/pwm/ecap.2/run"
#define VISCO_PUMP_50Hz "echo 50 > /sys/class/pwm/ecap.2/period_freq"
#define VISCO_PUMP_50P "echo 50 > /sys/class/pwm/ecap.2/duty_percent"
#define VISCO_PUMP_HIGH "echo 1 > /sys/class/pwm/ecap.2/polarity"
#define VISCO_PUMP_LOW "echo 0 > /sys/class/pwm/ecap.2/polarity"
#define SUCTION_PUMP_REQUEST "echo 1 > /sys/class/pwm/ehrpwm.0:1/request"
#define SUCTION_PUMP_RELEASE "echo 0 > /sys/class/pwm/ehrpwm.0:1/request"
#define SUCTION_PUMP_RUN "echo 1 > /sys/class/pwm/ehrpwm.0:1/run"
#define SUCTION_PUMP_STOP "echo 0 > /sys/class/pwm/ehrpwm.0:1/run"
#define SUCTION_PUMP_HIGH "echo 1 > /sys/class/pwm/ehrpwm.0:1/polarity"
#define SUCTION_PUMP_LOW "echo 0 > /sys/class/pwm/ehrpwm.0:1/polarity"
#define SUCTION_PUMP_90P "echo 90 > /sys/class/pwm/ehrpwm.0:1/duty_percent"
#define SUCTION_PUMP_12000Hz "echo 12000 > /sys/class/pwm/ehrpwm.0:1/period_freq"
#ifdef __ADC_INPUT__
#define BOART_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage4_raw"
#define INK_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage5_raw"
#define REVERSE_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage6_raw"
#endif
#ifdef UART2
class UartThread;
typedef struct {
char mode;
int addr;
int len;
char flag_m;
QByteArray Buf;
}rec_cmd_t;
#endif
/*
* 请不要直接初始化此函数,如果需要,请通过SysPara的devOP来访问此类
* */
class DevOp : public QObject
{
Q_OBJECT
public :
DevOp(SysPara * sysPara);
~DevOp();
void set_totalSynPulseNum(bool wren);// 设置可变长度
void TTYS0ToConsole();
void WriteMoterPump(int);
void controlReleaseValve(bool openFlag);
void controlMixValve(bool openFlag);
void controlInkValve(bool openFlag); //控制墨线,即供墨阀
void controlInkValvePWMSTM32(int PWMPulse);
void controlCycleValve(bool openFlag);
void controlCompressPump(bool openFlag);
void controlViscosityPump(bool openFlag);
void controlMainInkPump(bool openFlag);
void setHighVoltageAmplitudetoSTM32();
void controlReclaimPump(bool openFlag,bool fullSpeed);
void controlReclaimPump2();
void controlInkValvePWM(bool openFlag);
void controlInkValvePWM2();
void controlHeater(bool openFlag);
void controlBeeper(bool openFlag);
void controlReclaimTankOpen(bool enableFlag);
void controlReclaimTankClose(bool enableFlag);
void powerOff(void);
bool isReleaseValveOpen();
bool isMixValveOpen();
bool isInkValveOpen();
bool isInkValveOpen1();
bool isCycleValveOpen();
bool isCompressPumpOpen();
bool isViscosityPumpOpen();
bool isMainInkPumpOpen();
bool isReclaimPumpOpen();
bool isReclaimTankOpenEnable();
bool isReclaimTankCloseEnable();
bool isBeeperEnable();
bool isHearterEnable();
int writeFpgaPrintPara(bool ignoreWarn = false);
void readFgaStatus(void);
void writeDacValue2Fpga_No73();
void printCtrl(int cmd);
void ReadCnt1GroupStatus(void);
void writeCnt1GroupSetting(bool bCntByGroupEnable);
void writeFpgaCalandar(bool Enable);
void writeFpgaVariCtrl();
void readCalandarDat();
void resumeFault();
void highVoltageCtrl(int val);
void maxHighVoltageDACCtrl(int val);
void setPhaseByHand(int val);
void readPhaseDetectHighTm();
void setPhaseDetectVoltageDutyCycle(int duty);
void setBlickLightPeriod(int value);
void setOscillatorVoltage(int value);
void setDivideRatio(int value);
void setLastLineEndPointFixedValue(int value);
// void checkAuthorization(QString str);
void mainInkCtrl();
void pumpValveCtrl(int viscosityAdjustByTemp=0);
void clearProductCnt(unsigned int mode);
unsigned int readFpgaVersionNum(void);
void fpgaWr(int addr,unsigned char*dat,int len);
void fpgaRd(int addr,unsigned char*dat,int len);
void fpgaWrD(int addr,unsigned int dat,int len);
void fpgaResetWarning(char mode);
bool fpgaDevOpenFlag;
void stm32Rd(int addr,unsigned char*dat,int len);
void stm32Wr(int addr,unsigned char*dat,int len);
unsigned char memWrMap[MAX_WR_MEM_SIZE];
unsigned char memRdMap[MAX_RD_MEM_SIZE];
unsigned char color_flag;
void controlRedLight(bool openFlag);
void controlGreenLight(bool openFlag);
void controlYellowLight(bool openFlag);
void controlFan1(bool openFlag);
void controlFan2(bool openFlag);
bool isGreenLightEnable();
bool isYellowLightEnable();
bool isRedLightEnable();
void readbuilDat();
void readPrintDataXor();
void readSyncCounterAtZero();
void printCtrl2(int cmd);
void ReadSomeDataForLostPrint(void);
bool stopSendDataFPGA;
bool stopSendDataSTM32;
// unsigned char *dataOfViscosity;
#ifdef __STC_POWER__
int Heartbeat(char bPowerOn);
int setWakeUpTimer(char wakeUpTime_day);
int getPowerSource(void);
Posix_QextSerialPort *comForPower;
void comForPower_init();
#endif
#ifdef __RFID_CARD
Posix_QextSerialPort *comForRFID;
void comForRFID_init();
int comReadRFID_data();
int comWriteRFID_data();
int setRFIDCarKey(void);
int setRFIDReaderKey(void);
int setRFIDReaderOriginalKey(void);
int setRFIDReaderWorkMode(void);
int receiveReadRFID_data(void);
int queryReadRFID_address(void);
QString strRevdata;
bool noticeICReaderError;
bool setICReaderModeFlag;
uint checkCardIntervalTime;
QReadWriteLock CardDataRwLock;
#endif
#ifdef __ADC_INPUT__
qint8 GetTemp(QString ainFile, quint8 *pTemp);
#endif
void Read_RanddomFromFpga(); // 读FPGARANDFIFO
void RandTxtBakup(char ok);
// 上海外接屏功能
int BigDisp(unsigned char Module[], unsigned char Wirediameter[]);
int RecDim();//unsigned char buf[], unsigned char Dim[]);
int SmallDisp(unsigned char Module[], unsigned char Wirediameter[]);
void DatToDisp(char FileName[], bool big);
void DatToDisp2();
void showData(QByteArray dat);
void uart2Init();
void writeDacValue2Fpga_No72NewVoltData();
#ifdef UART2
Posix_QextSerialPort *myCom;
// MySerialPort * myserialport;
QByteArray recData;
QQueue<QByteArray> recQueue;
int recLen;
void stopReceiving();
bool isReceivingEnable() const;
void disableReceiving();
void enableReceiving();
uchar sendData(const QByteArray &data);
void stopSending();
bool isSendingEnable() const;
void disableSending();
void enableSending();
uchar uartThreadStart();
//void printCtrl2(int cmd);
int recUart2();
public slots:
void readCom(char mode,QByteArray recData,int addr);
void sendCom(QString s);
void sendCom(char *buf, int len);
void resendFPGADate(int,int,unsigned char *,int,int);
void resendSTM32Date(int,int,unsigned char *,int,int);
signals:
void dataReceived(char,const QByteArray &dataReceived,int);
void sendSerialDataToSTM32(int,int,unsigned char *,int,int);
void sendSerialDataToFPGA(int,int,unsigned char *,int,int);
#endif
private:
int WdgttyUsb0Cnt;
bool releaseValveOpenFlag;
bool mixValveFlag;
bool inkValveOpenFlag;
bool inkValveOpenFlag1;
bool cycleValveOpenFlag;
bool compressPumpOpenFlag;
bool viscosityPumpOpenFlag;
bool mainInkPumpOpenFlag;
bool reclaimPumpOpenFlag;
bool reclaimTankOpenEnableFlag;
bool reclaimTankCloseEnableFlag;
bool beeperOnFlag;
bool RedLightOnFlag;
bool GreenLightOnFlag;
bool YellowLightOnFlag;
bool heaterOnFlag;
int com2;
int pwm_sp;
int pwm_fd;
int Interrupt_fd;
int iocontrl;
int DAdataout;
int pwm_ink;
int adc_fd;
#ifdef __VX_OSC_VOL__
qint8 OscillatorVoltage[100];//VX 电路不一样,所以需要重新调整
#endif
SysPara *sysPara;
unsigned int fpgaRdD(int addr,int len);
// 0xA451--- 为什么ARM的顺序相反呢?
typedef struct {
unsigned int varDigitalNum:4; // 数字的个数
unsigned int charRamBaseAddr:12; // 基址
unsigned int colOffset:16; // 列偏移
unsigned int horizonWidth:9;//字模宽度
unsigned int verticalOffset:6; // 行偏移
unsigned int charRowNum:6; // 每个字符占行个数
unsigned int charColNum:6; // 每个字符占列个数
unsigned int varTypeSel:4;
unsigned int dummy:1;
}reg_var_print_ctrl_t;
#ifdef UART2
UartThread *uartThread;
bool sendingEnable;
bool receivingEnable;
bool saveStateReceiveData;
#endif
};
#ifdef UART2
class UartThread : public QThread
{
Q_OBJECT
public:
UartThread(Posix_QextSerialPort &adrPort);
~UartThread();
void stopReceiving();
QQueue<QByteArray> dataToSend;
QMutex mutexSend;
void stopSending();
void addDataToSend(const QByteArray &dataToAdd);
protected:
void run();
signals:
void dataReceived(char,const QByteArray &dataReceived,int);
private :
Posix_QextSerialPort &port;
QMutex mutexReceive;
bool stopped;
rec_cmd_t rec_cmd;
};
#endif
#endif /* DEVOP_H_ */
+333 -218
View File
@@ -94,6 +94,18 @@ InkJetPrinter::InkJetPrinter(QWidget *parent) :
connect(ui->tabSystemManage,SIGNAL(enableClick(bool)),this,SLOT(enableInkJetTabClick(bool)));
connect(serialSTM32,SIGNAL(progress(int,int)),ui->tabSystemManage,SLOT(progressBarControl(int,int)));
connect(serialSTM32, &Serial::STM32Connected, this, [this](bool ok, QString errStr){
if(!ok || !sysPara || !sysPara->devOp) {
return;
}
QTimer::singleShot(1000, this, [this](){
sysPara->devOp->highVoltageCtrl(0);
LogInfo::setRunStatusText("High voltage forced off at app boot");
});
}, Qt::QueuedConnection);
connect(ui->tabSystemManage,SIGNAL(sigToCloseSerialFPGA()),this,SLOT(closeSerialFPGA()));
connect(ui->tabSystemManage,SIGNAL(sigToCloseSerialSTM32()),this,SLOT(closeSerialSTM32()));
connect(ui->tabSystemManage,SIGNAL(restartSerial()),this,SLOT(restartSerialPort()));
@@ -236,11 +248,6 @@ InkJetPrinter::InkJetPrinter(QWidget *parent) :
connect(ui->tabPrintSetting,SIGNAL(engineerMode(bool)),ui->tabSystemManage,SLOT(engieerModeAcceptSystemManage(bool)));
connect(ui->tabPrintSetting, SIGNAL(engineerMode(bool)), ui->tabSystemSetting, SLOT(setFreqFixVisible(bool)));
// 这段代码是为了解决2026年7月11日 新巴 打印参数异常的问题的,后更换核心板,问题已解决,因此不再启用这段代码
// connect(ui->tabMainWindow, &MainWindow::printBefore, this, [this](){
// ui->tabPrintSetting->applyUIPara(false);
// }, Qt::DirectConnection);
sysPara->status.rWarnViscoReady=0;
// hlp: 260608: 以授权为标准,不过度开放权限
@@ -308,6 +315,8 @@ InkJetPrinter::InkJetPrinter(QWidget *parent) :
ui->tabMainWindow->enableReclaimCtrlButton(false);
//edit@12-14
connect(this,SIGNAL(currentChanged(int)),ui->tabMainWindow,SLOT(onInkJetPrinterCurrentChanged(int)), Qt::QueuedConnection);
//pidControllerInit();
@@ -790,20 +799,44 @@ float PID_realize2(float speed, float act){
void InkJetPrinter::pressureAdj()
{
// 关机压力控制首次进入时从停泵状态重新开始,禁止继承正常运行或手动控制转速
if(sysPara->status.powerOffAppending && !m_powerOffPressureControlActive)
{
u = 0.0f;
sysPara->para.gearPumpValue = 0;
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastActualPressure = 0;
m_startingStepCount = 0;
m_bufValidCount = 0;
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
sysPara->devOp->WriteMoterPump();
m_powerOffPressureControlActive = true;
}
else if(!sysPara->status.powerOffAppending)
{
m_powerOffPressureControlActive = false;
}
// 故障停机处理
if(sysPara->status.gearPumpRunStopFlag || sysPara->status.flagOfSpeedAlarm)
{
sysPara->para.gearPumpValue = 0;
u = 0.0f;
m_rampDone = false;
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastPressure = 0;
m_stableCount = 0;
m_lastActualPressure = 0;
m_bufValidCount = 0;
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
sysPara->devOp->WriteMoterPump();
return;
}
// 泵未使能时的PID控制(保持原有逻辑)
if(!sysPara->para.gearPumpEnable)
{
if(u > 0 || ((sysPara->para.pressure - sysPara->status.PRESSURE) > 0))
@@ -815,173 +848,217 @@ void InkJetPrinter::pressureAdj()
return;
}
int maxValue = sysPara->para.flagOfReclaimPumEnable ? 420 : 800;
if(maxValue < 60) maxValue = 60;
int maxSpeed = (int)sysPara->para.gearPumpSpeedAlarm;
auto clampU = [&]() {
if(u < 60.0f) u = 60.0f;
if(u > (float)maxValue) u = (float)maxValue;
};
// 隔膜泵控制参数
const int STOP_TO_START_THRESHOLD = 5; // 停止→启动:压力低于目标15(扩大滞环)
const int RUN_TO_STOP_THRESHOLD = 5; // 运行→停止:压力高于目标10(扩大滞环)
const int MIN_STATE_INTERVAL = 8; // 最小状态切换间隔:8个100ms = 800ms
int actual = sysPara->status.PRESSURE;
int target = (int)sysPara->para.pressure;
int cur;
if(sysPara->status.powerOffAppending && target > 650)
target = 650; // 关机压力目标不超过650,不修改用户设定值
int err = target - actual; // 正值=压力偏低,负值=压力偏高
// 每次进入都更新滑动平均缓冲(软启动用瞬时值,闭环用平均值)
// 更新滑动平均缓冲
m_pressureBuf[m_bufIdx] = actual;
m_bufIdx = (m_bufIdx + 1) % 10;
int avgPressure = 0;
for(int i = 0; i < 10; i++) avgPressure += m_pressureBuf[i];
avgPressure /= 10;
// ---------------------------------------------------------------
// 硬保护:压力超过目标+50,立即强制减速,优先级最高
// 覆盖自检、软启动、闭环所有阶段
// ---------------------------------------------------------------
if(actual > target + 50)
// 状态切换计数器递增
m_stateChangeCount++;
// 检查是否允许状态切换(距上次切换>=800ms)
bool canSwitch = (m_stateChangeCount >= MIN_STATE_INTERVAL);
// 关机压力上限:超过关机目标10立即停泵,不受状态和800ms切换间隔限制
int hardStopThreshold = sysPara->status.powerOffAppending ? 10 : 80;
if(actual > target + hardStopThreshold)
{
float overErr = (float)(actual - (target + 50));
float delta = -0.1f * overErr;
if(delta < -15.0f) delta = -15.0f;
u += delta;
clampU();
m_lastPressure = actual;
sysPara->para.gearPumpValue = (unsigned short)(int)u;
if(m_pumpState != DPUMP_STOPPED) {
u = 0.0f;
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
return;
}
// ---------------------------------------------------------------
// 软启动:自适应步长,每 800ms 一次
// 自检期间也走此逻辑(硬保护兜底),自检完成后重置重新收敛
// 软启动阶段不做压力稳定检测,优先快速收敛
// ---------------------------------------------------------------
if(!m_rampDone)
{
if(++m_adjSkip < 8)
{
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
return;
}
m_adjSkip = 0;
int err = target - actual;
if(err < 0)
{
// 超压:小步减速
u -= 1.0f;
}
else
{
// 自适应步长:差得远步子大,差得近步子小
float step;
if (err > 200) step = 5.0f;
else if(err > 100) step = 3.0f;
else if(err > 50) step = 2.0f;
else step = 1.0f;
u += step;
}
clampU();
// 转速上限保护
if(sysPara->para.flagOfReclaimPumEnable &&
sysPara->status.gearPumpRunSpeed >= maxSpeed)
{
u -= 3.0f;
clampU();
}
cur = (int)u;
// 进入闭环条件:压力已稳定在目标±50以内
if(sysPara->status.selfCheckDone && err >= -50 && err <= 50)
{
m_rampDone = true;
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
}
sysPara->para.gearPumpValue = (unsigned short)cur;
sysPara->devOp->WriteMoterPump();
return;
}
// ---------------------------------------------------------------
// 闭环:等压力稳定后再调速,自适应管路响应时间
//
// 每100ms采样一次,连续3次压力变化<15认为稳定,才执行调速
// 最长等待5s(50次)兜底,防止管路持续抖动导致永远不调
//
// 调速后立即重置稳定计数,重新等待下一次稳定
//
// 分区Kp:误差大步子大,误差小步子小
// |err| > 100 → Kp=0.05,限幅±5
// |err| 50~100→ Kp=0.04,限幅±4
// |err| < 50 → Kp=0.03,限幅±3
// ---------------------------------------------------------------
{
// 稳定检测用平均值,滤掉传感器噪声
int pressureChange = avgPressure - m_lastPressure;
if(pressureChange < 0) pressureChange = -pressureChange;
m_lastPressure = avgPressure;
m_adjSkip++; // 复用为超时计数
// 状态机处理
switch(m_pumpState) {
case DPUMP_STOPPED:
handleStoppedState(err, canSwitch);
break;
bool stable = (pressureChange < 10);
bool timeout = (m_adjSkip >= 50); // 5s兜底
case DPUMP_STARTING:
handleStartingState(err, actual, target);
break;
if(stable)
m_stableCount++;
else
m_stableCount = 0;
bool readyToAdj = (m_stableCount >= 15) || timeout;
if(!readyToAdj)
{
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
return;
}
// 平均压力已稳定(或超时兜底),执行调速,重置计数
m_adjSkip = 0;
m_stableCount = 0;
// 误差用平均值计算,避免瞬时噪声影响调速幅度
float absErr = (float)(target - avgPressure);
if(absErr < 0.0f) absErr = -absErr;
float kp, capDelta;
if(absErr > 100.0f) { kp = 0.05f; capDelta = 5.0f; }
else if(absErr > 50.0f) { kp = 0.04f; capDelta = 4.0f; }
else { kp = 0.03f; capDelta = 3.0f; }
float err = (float)(target - avgPressure);
float delta_u = kp * err;
if(delta_u > capDelta) delta_u = capDelta;
if(delta_u < -capDelta) delta_u = -capDelta;
// 转速上限软限制:转速已达上限时禁止继续加速
if(sysPara->para.flagOfReclaimPumEnable &&
sysPara->status.gearPumpRunSpeed >= maxSpeed)
{
if(delta_u > 0.0f) delta_u = 0.0f;
}
u += delta_u;
clampU();
cur = (int)u;
sysPara->para.gearPumpValue = (unsigned short)cur;
sysPara->devOp->WriteMoterPump();
case DPUMP_RUNNING:
handleRunningState(err, canSwitch);
break;
}
}
// 停止状态处理:压力低于目标较多时启动泵
void InkJetPrinter::handleStoppedState(int err, bool canSwitch)
{
const int STOP_TO_START_THRESHOLD = 5; // 压力低于目标15启动(扩大滞环)
const float START_INIT_SPEED = 80.0f; // 启动初始转速
// 压力低于目标较多,且允许切换(距上次停止>=800ms),启动泵
if(err > STOP_TO_START_THRESHOLD && canSwitch) {
u = START_INIT_SPEED;
m_startingStepCount = 0;
m_adjSkip = 0;
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
m_pumpState = DPUMP_STARTING;
m_stateChangeCount = 0; // 重置计数器
}
}
// 启动爬升状态处理:从低转速逐步提升到工作转速
void InkJetPrinter::handleStartingState(int err, int actual, int target)
{
const int STARTING_TO_RUNNING_RANGE = 30; // 进入目标±50范围转到运行状态
const float MAX_WORKING_SPEED = 350.0f; // 最大工作转速
const float START_SPEED_STEP_LARGE = 40.0f;
const float START_SPEED_STEP_MED = 30.0f;
const float START_SPEED_STEP_SMALL = 20.0f;
m_adjSkip++;
// 每800ms调整一次(8个100ms周期)
if(m_adjSkip < 8) {
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
return;
}
m_adjSkip = 0;
// 判断是否进入运行状态
int absErr = (err >= 0) ? err : -err;
bool nearTarget = (absErr <= STARTING_TO_RUNNING_RANGE);
bool reachedMaxSpeed = (u >= MAX_WORKING_SPEED - 10);
if(nearTarget || reachedMaxSpeed) {
// 转到运行微调状态
m_pumpState = DPUMP_RUNNING;
m_lastActualPressure = actual;
m_stateChangeCount = 0; // 重置计数器
return;
}
// 继续爬升:根据误差自适应增速
float step;
if(err > 100) step = START_SPEED_STEP_LARGE;
else if(err > 50) step = START_SPEED_STEP_MED;
else step = START_SPEED_STEP_SMALL;
u += step;
if(u > MAX_WORKING_SPEED) u = MAX_WORKING_SPEED;
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
m_startingStepCount++;
}
// 运行微调状态处理:使用增量式控制算法
void InkJetPrinter::handleRunningState(int err, bool canSwitch)
{
const int RUN_TO_STOP_THRESHOLD = 5; // 压力高于目标10准备停泵(扩大滞环)
const int EMERGENCY_STOP_THRESHOLD = 10; // 压力高于目标20立即停泵(不受800ms限制)
// 紧急停泵:压力严重超标,立即停泵(不受800ms限制)
if(err < -EMERGENCY_STOP_THRESHOLD) {
u = 0.0f;
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
return;
}
// 常规停泵:压力略高于目标,等待800ms后停泵
if(err < -RUN_TO_STOP_THRESHOLD && canSwitch) {
u = 0.0f;
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
return;
}
// === 增量式微调控制(每200ms调整一次)===
m_adjSkip++;
if(m_adjSkip < 2) {
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
return;
}
m_adjSkip = 0;
int actual = sysPara->status.PRESSURE;
float error = (float)err;
float absErr = (error >= 0) ? error : -error;
// 死区:误差≤0.5不调整
if(absErr < 0.5f) {
m_lastActualPressure = actual;
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
return;
}
// 计算压力变化率(微分项)
int pressureChange = actual - m_lastActualPressure;
m_lastActualPressure = actual;
// 增量式控制公式
float delta_u;
// 近目标刹车策略:误差≤5且正在接近目标,只刹车不加速
if(absErr <= 5.0f &&
((error > 0.0f && pressureChange > 0) || // 压力低且在上升
(error < 0.0f && pressureChange < 0))) // 压力高且在下降
{
delta_u = -0.20f * (float)pressureChange; // 只刹车
}
else {
// 标准增量式控制:比例项 + 微分项
delta_u = 0.05f * error - 0.20f * (float)pressureChange;
}
// 分级限幅(根据误差大小限制调节幅度)
float maxDelta;
if(absErr > 30.0f) maxDelta = 1.0f;
else if(absErr > 10.0f) maxDelta = 0.6f;
else maxDelta = 0.3f;
if(delta_u > maxDelta) delta_u = maxDelta;
if(delta_u < -maxDelta) delta_u = -maxDelta;
// 更新控制量
u += delta_u;
// 限制范围
const float MIN_RUNNING_SPEED = 30.0f; // 最低运行转速(低于此值泵不转)
const float MAX_WORKING_SPEED = 350.0f;
if(u < MIN_RUNNING_SPEED) u = MIN_RUNNING_SPEED;
if(u > MAX_WORKING_SPEED) u = MAX_WORKING_SPEED;
sysPara->para.gearPumpValue = (unsigned short)(int)u;
sysPara->devOp->WriteMoterPump();
}
void InkJetPrinter::DacAdjustStore()
{
@@ -1234,16 +1311,22 @@ void InkJetPrinter::timerHandler(void){
if(pulse_300ms) tempFlag=1;
if((sysPara->status.delay10ms%3) == 0) //读取状态后再检測
{
// 检测是否需要启动泵泵,注意启动条件:1. 无墨水警告 2. 未运行 3. 未手动控制
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN) && !gearPumpRunFlag && !sysPara->status.isPumpValveControledByHand)//刚启动前3秒
{
if(sysPara->para.gearPumpEnable) {
// 确保开机时控制字从 0 开始,让 pressureAdj 软启动从 0 爬坡,避免突变到高转速
// 隔膜泵初始化:确保从停止状态开始
if(sysPara->para.gearPumpValue != 0) {
sysPara->para.gearPumpValue = 0;
u = 0.0f;
sysPara->devOp->WriteMoterPump();
}
// 初始化隔膜泵状态机
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastActualPressure = 0;
m_bufValidCount = 0;
m_startingStepCount = 0;
gearPumpStartFlag = true;
}
}
@@ -1272,15 +1355,19 @@ void InkJetPrinter::timerHandler(void){
ControledSwitchFlag = false;
pulse_3s = 0;
}
// 检测手动→自动边沿,直接恢复压力控制,不走 gearPumpStartFlag 的 3s 等待
// 检测手动→自动边沿,恢复压力控制时从停止状态安全重启
if(m_lastByHand && !sysPara->status.isPumpValveControledByHand)
{
ControledSwitchFlag = true;
u = (float)sysPara->para.gearPumpValue; // 同步当前转速,避免突变
m_rampDone = false; // 重新软启动,适应切换后的压力状态
u = 0.0f;
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastPressure = 0;
m_stableCount = 0;
m_lastActualPressure = 0;
m_startingStepCount = 0;
m_bufValidCount = 0;
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
}
@@ -1299,25 +1386,29 @@ void InkJetPrinter::timerHandler(void){
}
if(gearPumpRunNormalFlag && !sysPara->status.isPumpValveControledByHand && sysPara->para.gearPumpEnable)
{
static int count_3s = 0;
if(u > gearPumpRunNormalValue*1.5)//改大一点
// 隔膜泵泄漏检测:运行状态下,压力持续不上升或下降
static int leakCheckCount = 0;
static int lastPressureForLeak = 0;
if(m_pumpState == DPUMP_RUNNING && pulse_1s)
{
if(pulse_1s)
{
count_3s++;
if(count_3s == 3)
{
count_3s = 0;
ui->tabMainWindow->setRunStatus(tr("压力泄漏或压力传感器故障!"));
int pressureChange = sysPara->status.PRESSURE - lastPressureForLeak;
// 泵运行中(转速>40),压力不升反降,或上升太慢(<5/秒)
if(u > 40.0f && pressureChange < 5) {
leakCheckCount++;
if(leakCheckCount >= 5) { // 连续5秒
leakCheckCount = 0;
ui->tabMainWindow->setRunStatus(tr("压力异常,可能泄漏!"));
sysPara->status.gearPumpRunStopFlag = true;
gearPumpRunNormalFlag = false;
LogInfo::setRunStatusText(tr("运行中压力泄漏,停齿轮泵!"));
LogInfo::setRunStatusText(tr("运行中压力泄漏,停泵!"));
}
} else {
leakCheckCount = 0;
}
}
else
{
count_3s = 0;
lastPressureForLeak = sysPara->status.PRESSURE;
}
}
if(sysPara->para.gearPumpEnable && (sysPara->status.gearPumpRunSpeed < 100) && test_flag){
@@ -1326,7 +1417,7 @@ void InkJetPrinter::timerHandler(void){
test_flag = 0;
}
if(pulse_1s) {
if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)
if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable)
checkPressureControl();
if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){
if(ui->tabMainWindow->getCurrPrintStatus() != 1){
@@ -1385,16 +1476,12 @@ void InkJetPrinter::timerHandler(void){
if(pulse_1s && flagOfSerialThreadStratEn){
if (!m_serialThreadFPGA->isRunning()) {
#ifndef ARCH_X86
qDebug()<<"start FPGA tread";
m_serialThreadFPGA->start();
#endif
}
if (!m_serialThreadSTM32->isRunning()){
#ifndef ARCH_X86
qDebug()<<"start STM32 tread";
m_serialThreadSTM32->start();
#endif
}
flagOfSerialThreadStratEn = false;
}
@@ -1502,10 +1589,11 @@ void InkJetPrinter::timerHandler(void){
}
}
if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0)
if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0 || sysPara->status.powerOffAppending)
{
if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){
sysPara->status.selfCheckDone = true;
ui->tabMainWindow->updatePrintDisplayLabel();
sysPara->status.flagOfAbnormalStatus = true;
static bool onceLog = true;
@@ -1549,21 +1637,27 @@ void InkJetPrinter::timerHandler(void){
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
{
sysPara->status.selfCheckDone = 1;
u = (float)sysPara->para.gearPumpValue;
// 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛
// 不清零 u,从当前控制字开始,避免突变
// m_rampDone = false;
// m_adjSkip = 0;
// m_lastPressure = 0;
// m_stableCount = 0;
autoControlValvePump();
// 自检完成后管道恢复正常阻力,必须重新从STOPPED状态开始
// 清零 u 和状态机,让系统根据实际压力重新启动
u = 0.0f; // 关键:清零控制量,避免继承自检期间的大转速
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump(); // 立即停泵
m_pumpState = DPUMP_STOPPED; // 强制进入STOPPED状态
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastActualPressure = 0;
m_bufValidCount = 0;
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
if (check_flag) {
LogInfo::setRunStatusText(tr("自检完成!!!"));
ui->tabMainWindow->setRunStatus(tr("自检完成!!!"));
qDebug()<<"自检完成!!!";
check_flag = false;
}
ui->tabPrintSetting->PrintSettingLog();
ui->tabMainWindow->enableReclaimCtrlButton(true);
sysPara->devOp->mainInkCtrl();
@@ -1590,14 +1684,25 @@ void InkJetPrinter::timerHandler(void){
m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable;
gearPumpRunNormalFlag = false; // 泄漏保护重新学习
gearPumpRunNormalValue = 0.0f;
m_rampDone = false; // 软启动重新爬坡适应新上限
// 重置隔膜泵状态机,适应新模式
u = 0.0f;
pid.integral = 0.0f;
pid.err_last = 0.0f;
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
if(!sysPara->para.flagOfReclaimPumEnable)
sysPara->devOp->controlReclaimPump(false, false);
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastPressure = 0;
m_stableCount = 0;
m_lastActualPressure = 0;
m_bufValidCount = 0;
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
}
if(pulse_100ms && sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag ) {
if(pulse_100ms && sysPara->para.gearPumpEnable &&
(sysPara->status.powerOffAppending ||
(!sysPara->status.isPumpValveControledByHand && ControledSwitchFlag))) {
pressureAdj();
}
@@ -2067,38 +2172,29 @@ void InkJetPrinter::timerHandler(void){
}
else if(pulse_1s && sysPara->para.gearPumpEnable && sysPara->status.selfCheckDone
&& (!sysPara->status.statWarn) && !sysPara->status.powerOffAppending){
if((!sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed <= 2000)
||(sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed <= sysPara->para.gearPumpSpeedAlarm))
// 隔膜泵速度告警逻辑:检测转速是否异常超过最大工作转速
// 最大工作转速对应的RPM约为:300 * 60 * 1000 / (500 * 2) = 1800 RPM
// 给予余量,告警阈值设为2200 RPM
const int MAX_SPEED_ALARM = 2200;
if(sysPara->status.gearPumpRunSpeed <= MAX_SPEED_ALARM)
{
pulse_30s = 0;
}
else{
pulse_30s++;
if(pulse_30s >= 30){
if((sysPara->status.gearPumpRunSpeed >= 2500)||(sysPara->devOp->color_flag == 2)
||(sysPara->para.flagOfReclaimPumEnable && sysPara->status.gearPumpRunSpeed > sysPara->para.gearPumpSpeedAlarm))
{
sysPara->status.flagOfSpeedAlarm = true;
sysPara->devOp->color_flag = 2;
if(pulse_30s % 500 == 0){
LogInfo::setRunStatusText(tr("齿轮泵转速过高,请立即停机并联系供应商!"));
qDebug()<<"齿轮泵转速过高,请立即停机并联系供应商!";
LogInfo::setRunStatusText(tr("泵转速异常过高,请立即停机并联系供应商!"));
qDebug()<<"泵转速异常过高,请立即停机并联系供应商!";
}
ui->tabMainWindow->setRunStatus(tr("齿轮泵转速过高,请立即停机并联系供应商!"));
ui->tabMainWindow->setRunStatus(tr("泵转速异常过高,请立即停机并联系供应商!"));
sysPara->devOp->controlRedLight(true);
if(sysPara->status.isPrinting)
ui->tabMainWindow->on_pushButtonStopPrint_pressed();
}
else{
sysPara->devOp->color_flag = 1;
if(pulse_30s % 500 == 0){
LogInfo::setRunStatusText(tr("齿轮泵转速过高,请清理过滤器或者检查是否泄露!"));
qDebug()<<"齿轮泵转速过高,请清理过滤器或者检查是否泄露!";
}
ui->tabMainWindow->setRunStatus(tr("齿轮泵转速过高,请清理过滤器或者检查是否泄露!"));
sysPara->devOp->controlYellowLight(true);
}
}
if(pulse_30s % 10 == 0)
qDebug()<<"粘度: "<<QString::number(sysPara->status.viscosity);
}
@@ -2167,6 +2263,8 @@ void InkJetPrinter::cnt1GroupCheck(void)
static unsigned char lastGroupRunningIndex = 0;
if(sysPara->para.cnt1ByGroupEnalbe)
{
sysPara->devOp->ReadCnt1GroupStatus();
if(lastGroupRunningIndex == sysPara->status.cnt1GroupRunningIndex)
return;
@@ -2636,16 +2734,19 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
}
}
else if(sysPara->status.reclaimTankstatus == 5 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
else if(sysPara->status.reclaimTankstatus == 5)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{
if(sysPara->devOp->isReclaimTankOpenEnable())
sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭
sysPara->status.reclainTankReachEnd = true;
/*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/
if (sysPara->status.airPushingDone && sysPara->status.currReclaimTankPos != 0) {
// 排气结束并放下回收槽以后才允许显示该信息
ui->tabMainWindow->setRunStatus(tr("回收槽到头"));
}
ui->tabMainWindow->enablePrintButton(true); //仅仅在此时能使能打印按钮
ui->tabMainWindow->resetReclaimCtrlButtonText();
sysPara->devOp->highVoltageCtrl(1);
// sysPara->devOp->highVoltageCtrl(1);
emit reclaimTankOpenDone();
/*回收槽开关时间校正*/
sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12;
@@ -2670,10 +2771,14 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
}
else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{
if (sysPara->status.airPushingDone) {
// 排气结束并放下回收槽以后才允许显示该信息
ui->tabMainWindow->setRunStatus(tr("回收槽到头"));
}
if(sysPara->devOp->isReclaimTankCloseEnable())
sysPara->devOp->controlReclaimTankClose(false); //到头,关闭
/*应要求去掉多余到信息 LogInfo::setRunStatusText(tr("回收槽到头"));*/
ui->tabMainWindow->setRunStatus(tr("回收槽到头"));
//sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零
ui->tabMainWindow->resetReclaimCtrlButtonText();
emit reclaimTankCloseDone();
@@ -3350,7 +3455,17 @@ void InkJetPrinter::restartSerialPort(){
connect(serialSTM32,SIGNAL(powerOffReady()),ui->tabMainWindow,SLOT(powerOffConfirmed()));
connect(m_serialThreadSTM32,&QThread::started,serialSTM32,&Serial::startInitSlot);
connect(serialSTM32,SIGNAL(queueSizeSTM32(int)),ui->tabMainWindow,SLOT(showSTM32queuesize(int)));
connect(serialSTM32, &Serial::STM32Connected, this, [this](bool ok, QString errStr){
if(!ok || !sysPara || !sysPara->devOp) {
return;
}
QTimer::singleShot(1000, this, [this](){
sysPara->devOp->highVoltageCtrl(0);
LogInfo::setRunStatusText("High voltage forced off at app boot");
});
}, Qt::QueuedConnection);
flagOfSerialThreadStratEn = true;
}
+29 -8
View File
@@ -101,14 +101,35 @@ private:
QTimer* viscosity_timer;
QTimer* timer;
QTime t1;
bool m_rampDone = false; // pressureAdj 软启动完成标志
int m_adjSkip = 0; // pressureAdj 节拍计数
int m_lastPressure = 0; // pressureAdj 上次采样压力(稳定检测用)
int m_stableCount = 0; // pressureAdj 压力连续稳定计数
int m_pressureBuf[10] = {}; // pressureAdj 压力滑动平均缓冲(10点=1s)
int m_bufIdx = 0; // pressureAdj 滑动平均写入索引
bool m_lastReclaimMode = false; // 上次 flagOfReclaimPumEnable 状态,用于检测切换
bool m_lastByHand = false; // 上次 isPumpValveControledByHand 状态,用于检测手动、自动
// 因为原先vx5没有状态管理,容易在刚开机时和排气中互相抢占显示
bool check_flag = true;
// 隔膜泵状态枚举
enum DiaphragmPumpState {
DPUMP_STOPPED = 0, // 停止状态
DPUMP_STARTING = 1, // 启动爬升状态
DPUMP_RUNNING = 2 // 运行微调状态
};
// 隔膜泵控制参数
DiaphragmPumpState m_pumpState = DPUMP_STOPPED; // 泵当前状态
int m_stateChangeCount = 0; // 状态切换计数器(用于实现800ms间隔)
int m_adjSkip = 0; // 调节跳过计数器
int m_lastActualPressure = 0; // 上次实时压力(微分项用)
int m_startingStepCount = 0; // 启动步进计数器
int m_pressureBuf[10] = {}; // 压力滑动平均缓冲(10点=1s)
int m_bufIdx = 0; // 滑动平均写入索引
int m_bufValidCount = 0; // 缓冲区有效点数(用于启动阶段判断)
bool m_lastReclaimMode = false; // 上次回收泵使能状态
bool m_lastByHand = false; // 上次手动控制状态
bool m_powerOffPressureControlActive = false; // 关机压力控制已初始化
// 隔膜泵控制函数
float calculateTargetSpeed(int err);
void handleStoppedState(int err, bool canSwitch);
void handleStartingState(int err, int actual, int target);
void handleRunningState(int err, bool canSwitch);
void autoControlHeater();
void autoControlValvePump();
void detectAndcontrolReclaimTank();
+64 -68
View File
@@ -139,9 +139,6 @@ PrintSetting::PrintSetting(QWidget *parent) :
current_print_col_num=0;
ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放"));
#ifdef COUNTER2_BY_GROUP
ui->secionCountPanel->hide();
#endif
}
PrintSetting::~PrintSetting()
@@ -197,7 +194,11 @@ void PrintSetting::bindSysPara(SysPara *sysPara){
this->sysPara =sysPara;
//ui->volDacEdit
//ui->volDacEdit->bindSysPara(sysPara);
if(sectionalWid) sectionalWid->bindSysPara(sysPara);
#ifdef COUNTER2_BY_GROUP
ui->secionCountPanel->hide();
ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
initSection();
#endif
}
void PrintSetting::PrintupdateSysParaToUI()
@@ -383,26 +384,24 @@ void PrintSetting::updateSysParaToUI(){
ModuleHideDisplay();
displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage);
// todo
LoadCnt1GroupSettingsToUI();
#ifdef COUNTER2_BY_GROUP
SectionalManager::instance()->emitLoadUI();
#else
LoadCnt1GroupSettingsToUI();
#endif
if(sysPara->para.mode0211 || sysPara->para.FullColFixVal)
{
ui->spinBoxStartVoltage->setEnabled(false);
ui->spinBoxEndVoltage->setEnabled(false);
}
if(sysPara->para.flagOfCnt1GroupDisp)
{
//edit@12-03
const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9);
if(-1==indexTab) {
ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
}
}
// if(sysPara->para.flagOfCnt1GroupDisp)
// {
// //edit@12-03
// const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9);
// if(-1==indexTab) {
// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
// }
// }
if(sysPara->para.flagOfstepPrint)
{
//edit@12-03
@@ -417,14 +416,14 @@ void PrintSetting::updateSysParaToUI(){
void PrintSetting::showMachInfo(QString Mac)
{
QString VernonBach;
VernonBach.sprintf("%d.%d.%02d%s%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_";//+UP_PRINTER_STAGE_VER;
VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER);
VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER;
}
void PrintSetting::showRemoteControl(QString SuperNodeIP,QString EdgeIP)
{
QString VernonBach;
VernonBach.sprintf("%d.%d.%02d%s%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_";//+UP_PRINTER_STAGE_VER;
VernonBach.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER);
VernonBach = VernonBach + (QString) Public::DateToString(__DATE__)+"_"+SUB_VER;
}
void PrintSetting::applyUIPara(){
@@ -479,7 +478,7 @@ void PrintSetting::applyUIPara(){
sysPara->status.cnt1CurrentValueInitDoneFlag = !ui->checkBoxResetCnt1CurrValue->isChecked();
sysPara->status.cnt2CurrentValueInitDoneFlag = !ui->checkBoxResetCnt2CurrValue->isChecked();
sysPara->status.cnt3CurrentValueInitDoneFlag = !ui->checkBoxResetCnt3CurrValue->isChecked();
//将vx4的分段计米功能迁移了,这个应用设置以及界面后续会删除 hlp todo 0602
//将vx4的分段计米功能迁移了,这个应用设置后续会删除 hlp todo 0602
#ifndef COUNTER2_BY_GROUP
if(sysPara->para.cnt1ByGroupEnalbe)
ApplyCnt1GroupSetting();
@@ -664,19 +663,6 @@ void PrintSetting::applyUIPara(){
ui->checkBoxResetCnt3CurrValue->setChecked(false);
emit checkPrintIntervalSignal();
// if(sysPara->para.EditMode==SCENE)
// {
// QList<QGraphicsItem *> items = pGetPicScene->selectedItems();
// if(items.size() > 0)
// {
// PicTextItem* picText = qgraphicsitem_cast<PicTextItem*>(items.at(0));
// picText->CatchCnt1StartValue = ui->lineEditStartValue->text().toInt();
// picText->CatchCnt1CurrValue = ui->lineEditCountValue->text().toInt();
// picText->SpecialConditions = ui->radioButtonSpecialCondition->isChecked();
// pGetPicScene->clearSelection();
// //emit SwitchTimerShowItem(true);
// }
// }
}
@@ -841,11 +827,11 @@ void PrintSetting::ondialogAuthorizationAccepted(){
ModuleDecimalDisplay();
ModuleHideDisplay();
displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage);
const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9);
if(sysPara->para.flagOfCnt1GroupDisp)
ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
else
ui->tabWidget_2->removeTab(indexTab1);
// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9);
// if(sysPara->para.flagOfCnt1GroupDisp)
// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
// else
// ui->tabWidget_2->removeTab(indexTab1);
const int indexTab2=ui->tabWidget->indexOf(ui->tab_6);
if(sysPara->para.flagOfstepPrint)
ui->tabWidget->addTab(ui->tab_6,tr("跳米设置"));
@@ -866,11 +852,11 @@ void PrintSetting::ondialogAuthorizationAccepted(){
ModuleDecimalDisplay();
ModuleHideDisplay();
displayForAdjustVoltage(sysPara->para.flagOfAdjustVoltage);
const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9);
if(sysPara->para.flagOfCnt1GroupDisp)
ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
else
ui->tabWidget_2->removeTab(indexTab1);
// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9);
// if(sysPara->para.flagOfCnt1GroupDisp)
// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
// else
// ui->tabWidget_2->removeTab(indexTab1);
const int indexTab2=ui->tabWidget->indexOf(ui->tab_6);
if(sysPara->para.flagOfstepPrint)
ui->tabWidget->addTab(ui->tab_6,tr("跳米设置"));
@@ -925,11 +911,11 @@ void PrintSetting::ondialogAuthorizationAccepted(){
sysPara->para.flagOfCnt1GroupDisp = true;
else
sysPara->para.flagOfCnt1GroupDisp = false;
const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9);
if(sysPara->para.flagOfCnt1GroupDisp)
ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
else
ui->tabWidget_2->removeTab(indexTab1);
// const int indexTab1=ui->tabWidget_2->indexOf(ui->tab_9);
// if(sysPara->para.flagOfCnt1GroupDisp)
// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
// else
// ui->tabWidget_2->removeTab(indexTab1);
if (type & 1<<3)
sysPara->para.flagOfstepPrint = true;
@@ -967,11 +953,11 @@ void PrintSetting::ondialogAuthorizationAccepted(){
//edit@11-29 输入密码显示,再次输入隐藏
else if(authString == "07710441"){
//edit@12-03
const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9);
if(sysPara->para.flagOfCnt1GroupDisp)
ui->tabWidget_2->removeTab(indexTab);
else
ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
// const int indexTab=ui->tabWidget_2->indexOf(ui->tab_9);
// if(sysPara->para.flagOfCnt1GroupDisp)
// ui->tabWidget_2->removeTab(indexTab);
// else
// ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
sysPara->para.flagOfCnt1GroupDisp=!sysPara->para.flagOfCnt1GroupDisp;
}
@@ -1065,6 +1051,8 @@ void PrintSetting::SpecailSettingsDisplay()
{
if(flagOfSpecailSettng)
{
const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11);
if (indexTab == -1)
ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放"));
ui->comboBoxIndustry->setVisible(1);
ui->checkBoxNewAmplifyPlate->setVisible(1);
@@ -1080,8 +1068,8 @@ void PrintSetting::SpecailSettingsDisplay()
{
if(flagOfEngineeringMode)
ui->tabWidget_2->removeTab(5);
else
ui->tabWidget_2->removeTab(4);
// else
// ui->tabWidget_2->removeTab(4);
ui->comboBoxIndustry->hide();
ui->checkBoxNewAmplifyPlate->hide();
// ui->labelRecommendedPrintSpeed->hide();
@@ -1098,14 +1086,17 @@ void PrintSetting::EngineeringModeDisplay()
{
if(flagOfEngineeringMode)
{
#ifdef COUNTER2_BY_GROUP
ui->tabWidget_2->addTab(ui->tab_9,tr("其他设置"));
// hlp test todo
#ifdef COUNTER2_BY_GROUP /* 分段计米 */
// 初始化先于bindSysPara
initSection();
#endif
if(flagOfSpecailSettng)
ui->tabWidget_2->addTab(sectionalWid, tr("分段计数"));
#endif
if(flagOfSpecailSettng) {
const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11);
if (indexTab == -1)
ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放"));
}
ui->tabWidget->addTab(ui->tab_8,tr("计数器3设置"));
ui->tabWidget->addTab(ui->tab_6,tr("跳米设置"));
ui->checkBoxSpeedOver->setVisible(1);
@@ -1133,11 +1124,13 @@ void PrintSetting::EngineeringModeDisplay()
if(flagOfSpecailSettng)
{
ui->tabWidget_2->removeTab(5);
ui->tabWidget_2->removeTab(4);
const int indexTab=ui->tabWidget_2->indexOf(ui->tab_11);
if (indexTab == -1)
ui->tabWidget_2->addTab(ui->tab_11,tr("打印电压缩放"));
} else {
// ui->tabWidget_2->removeTab(4);
}
else
ui->tabWidget_2->removeTab(4);
ui->tabWidget->removeTab(3);
ui->tabWidget->removeTab(2);
ui->checkBoxSpeedOver->hide();
@@ -1490,6 +1483,7 @@ void PrintSetting::ApplyCnt1GroupSetting()
updateCnt1GroupsTblWgt();
#endif
}
void PrintSetting::rowWidgetCreate(int rowIndex)
{
#ifdef COUNTER1_BY_GROUP /* 分段计米 */
@@ -2239,7 +2233,7 @@ void PrintSetting::ModuleDecimalHideDisplay(const bool bEnabled)
}
void PrintSetting::specailMachineSetting(bool enable){
ui->checkBox_ReclaimPumpEnable->setEnabled(enable);
ui->checkBox_ReclaimPumpEnable->setEnabled(enable && PUMP_VER == QString("G"));
ui->spinBox_gearPumpSpeedAlarm->setEnabled(enable);
}
@@ -2307,8 +2301,10 @@ void PrintSetting::initSection()
ui->tabWidget_2->addTab(sectionalWid, tr("分段计数"));
connect(SectionalManager::instance(), &SectionalManager::sig_updateCntShow,
this, &PrintSetting::slt_updateCntShow);
SectionalManager::instance()->emitLoadUI();
}
// SectionalManager::instance()->emitLoadUI();
} /*else {
ui->tabWidget_2->addTab(sectionalWid, tr("分段计数"));
}*/
}
int tempReclaimTankStatus = 0;
-44
View File
@@ -1,44 +0,0 @@
/*
* Public.h
*
* Created on: Jul 16, 2013
* Author: yiyu
* QQ:1036184468
* Descriptoin:
*/
#ifndef PUBLIC_H_
#define PUBLIC_H_
#include <Qt>
#include <QString>
#include <stdlib.h>
#include <QFont>
extern void MySleep(unsigned int msec);
class Public{
public:
Public();
~Public();
static int getMinFontPixelSize();
static QString getFontFamily(int pixelSize);
static QString getFontFamily(int pixelSize, int vartype);// 20160812
static int derivePixelSizeFromHeight(int value);
static int derivePixelSizeFromHeightNx(int value);
static int getAdjustedPixelSize(int value);
static void resetPara();
static void backupPara();
static QString readLanguageType();
static QString ReadLanguageName();
static int getNumberHeight(QFont font);
static time_t getDateFromMacro(const char *time);
static QString DateToString(const char *time);
static int getType(int vartype); // 将变量类型进行转换,以处理横向字体
};
#endif /* PUBLIC_H_ */
+2 -23
View File
@@ -369,33 +369,12 @@ QString Public::DateToString(char const *time){
int month, day, year;
//struct tm t = {0};
static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
//qDebug()<<time;
sscanf(time, "%s %d %d", s_month, &day, &year);
//qDebug()<<time<<s_month<<day<<year;
month = ((strstr(month_names, s_month)-month_names)/3)+1;
//qDebug()<<month<<s_month;
QString s;
s.sprintf("%04d-%02d-%02d",year,month,day);
return s;
}
QString Public::ArmDate2String(const char *date, const char *time)
{
char s_month[5];
int month, day, year;
static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
sscanf(date, "%s %d %d", s_month, &day, &year);
month = ((strstr(month_names, s_month)-month_names)/3)+1;
QString dateStr;
dateStr.sprintf("A%04d%02d%02d",year,month,day);
int hour, min, secend;
sscanf(time, "%d:%d:%d", &hour, &min, &secend);
QString timeStr;
timeStr.sprintf("%02d%02d", hour, min);
QString s = dateStr+timeStr;
// s.sprintf("%04d-%02d-%02d",year,month,day);
s.sprintf("%02d%02d",month,day);
return s;
}
-2
View File
@@ -36,8 +36,6 @@ public:
static time_t getDateFromMacro(const char *time);
static QString DateToString(const char *time);
static QString ArmDate2String(const char * date, const char * time);
static QString ReadKeyBoardUse();
static int getType(int vartype); // 将变量类型进行转换,以处理横向字体
+1 -13
View File
@@ -57,7 +57,7 @@ DEFINES+=WARNING
DEFINES+=TEMPMIMA
DEFINES+=COUNTER1_BY_GROUP #分段计米
# DEFINES+=COUNTER2_BY_GROUP #分段计米2
#DEFINES+=COUNTER2_BY_GROUP #分段计米2
DEFINES+=_2DCODE_ #QR二维码
DEFINES+=PICSCENE
#DEFINES+=__2451WIFI__
@@ -417,15 +417,3 @@ if(contains(DEFINES,__2451WIFI__))
#INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src
#INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils
}
+3
View File
@@ -1,3 +1,6 @@
# VX5-DiaphragmPump
vx5隔膜泵版本
基于最新的vx5齿轮泵代码,仅修改为隔膜泵算法,并在产线测试后提交
20260826 hlp
+5
View File
@@ -25,6 +25,11 @@ void SectionalManager::emitLoadUI()
emit sig_loadSettings2UI();
}
void SectionalManager::emitCancelSection()
{
emit sig_cancelSection();
}
SectionalManager::SectionalManager()
{
+3 -1
View File
@@ -25,6 +25,8 @@ public:
//应用配置
void emitLoadUI();
// 取消分段计米
void emitCancelSection();
private:
SectionalManager();
@@ -33,7 +35,7 @@ signals:
void sig_applySetting();
void sig_loadSettings2UI();
void sig_updateCntGroupDisp(bool);
void sig_cancelSection();
};
#endif // SECTIONALMANAGER_H
+25 -8
View File
@@ -18,6 +18,8 @@ SectionalWid::SectionalWid(QWidget *parent) :
this, &SectionalWid::slt_loadSettings2UI);
connect(SectionalManager::instance(), &SectionalManager::sig_updateCntGroupDisp,
this, &SectionalWid::slt_updateCntGroupDisp);
connect(SectionalManager::instance(), &SectionalManager::sig_cancelSection,
this, &SectionalWid::slt_cancelSection);
}
SectionalWid::~SectionalWid()
@@ -152,7 +154,7 @@ void SectionalWid::on_cnt3RemoveAllRowsBtn_3_clicked()
void SectionalWid::on_checkBoxGroupCnt1_clicked(bool checked)
{
// 信号修改计数器的显示
ui->checkBoxGroupCnt_2->setChecked(checked);
// ui->checkBoxGroupCnt_2->setChecked(checked);
SectionalManager::instance()->emitUpdateCntShow(checked);
}
@@ -234,27 +236,30 @@ void SectionalWid::rowWidgetCreate2(int rowIndex)
void SectionalWid::LoadCnt2GroupSettingsToUI()
{
ui->checkBoxGroupCnt_2->setChecked(sysPara->para.cnt2ByGroupEnalbe);
// 两个同时启用,这个cb设true就会都取消
// ui->checkBoxGroupCnt_2->setChecked(sysPara->para.cnt2ByGroupEnalbe);
on_checkBoxGroupCnt_2_clicked(sysPara->para.cnt2ByGroupEnalbe);
//qDebug()<<"LoadCnt1GroupSettingsToUI:cnt1GroupCnt "<<sysPara->para.Cnt1ByGroup.cnt1GroupCnt;
ui->tableWidget_2->setRowCount(sysPara->para.Cnt2ByGroup.cnt2GroupCnt);
for(int i=0; i<sysPara->para.Cnt2ByGroup.cnt2GroupCnt; i++)
{
QSpinBox *spinBox = new QSpinBox();
spinBox->setButtonSymbols(QSpinBox::NoButtons);
spinBox->setValue(sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].StartValue);
int startV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].StartValue;
spinBox->setValue(startV);
spinBox->setRange(0, INT_MAX);
ui->tableWidget_2->setCellWidget(i,0,spinBox);
spinBox = new QSpinBox();
spinBox->setButtonSymbols(QSpinBox::NoButtons);
spinBox->setValue(sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].EndValue);
int endV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].EndValue;
spinBox->setValue(endV);
spinBox->setRange(0, INT_MAX);
ui->tableWidget_2->setCellWidget(i,1,spinBox);
spinBox = new QSpinBox();
spinBox->setButtonSymbols(QSpinBox::NoButtons);
spinBox->setValue(sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].LoopTimes);
int loopV = sysPara->para.Cnt2ByGroup.cnt2GroupSettings[i].LoopTimes;
spinBox->setValue(loopV);
spinBox->setRange(1, INT_MAX);
ui->tableWidget_2->setCellWidget(i,2,spinBox);
}
@@ -265,7 +270,7 @@ void SectionalWid::LoadCnt2GroupSettingsToUI()
void SectionalWid::on_checkBoxGroupCnt_2_clicked(bool checked)
{
// 信号修改计数器的显示
ui->checkBoxGroupCnt1->setChecked(checked);
// ui->checkBoxGroupCnt1->setChecked(checked);
SectionalManager::instance()->emitUpdateCntShow(checked);
}
@@ -306,7 +311,8 @@ void SectionalWid::ApplyCnt2GroupSetting()
{
QSpinBox *spinBox = nullptr;
sysPara->para.cnt2ByGroupEnalbe = ui->checkBoxGroupCnt_2->isChecked();
sysPara->para.Cnt2ByGroup.cnt2GroupCnt=ui->tableWidget_2->rowCount();
sysPara->para.Cnt2ByGroup.cnt2GroupCnt = ui->tableWidget_2->rowCount();
int r = ui->tableWidget_2->rowCount();
if(sysPara->para.cnt2ByGroupEnalbe && sysPara->para.Cnt2ByGroup.cnt2GroupCnt==0)
{
sysPara->para.cnt2ByGroupEnalbe=false;
@@ -428,6 +434,11 @@ void SectionalWid::on_Cnt3AddRowBtn_2_clicked()
}
ui->tableWidget_2->setRowCount(rowCnt+1);
rowWidgetCreate2(rowCnt);
// 获取新行第2列(索引为1)的 QSpinBox,设置值为 1
QSpinBox *spinBox = qobject_cast<QSpinBox*>(ui->tableWidget_2->cellWidget(rowCnt, 1));
if (spinBox) {
spinBox->setValue(1);
}
}
void SectionalWid::on_Cnt3InsertRowBtn_2_clicked()
@@ -547,6 +558,12 @@ void SectionalWid::slt_updateCntGroupDisp(bool bChangeToNext)
}
}
void SectionalWid::slt_cancelSection()
{
ui->checkBoxGroupCnt1->setChecked(false);
ui->checkBoxGroupCnt_2->setChecked(false);
}
void SectionalWid::initUI()
{
#ifdef COUNTER1_BY_GROUP /* 分段计米 */
+1 -1
View File
@@ -64,7 +64,7 @@ private slots:
void slt_applySetting();
void slt_loadSettings2UI();
void slt_updateCntGroupDisp(bool bChangeToNext);
void slt_cancelSection();
private:
Ui::SectionalWid *ui;
SysPara* sysPara = nullptr;
+10
View File
@@ -23,6 +23,7 @@
#include <unistd.h>
#include<iostream>
#include<string>
#include "VerBVersion.h"
#define VNLG
SysPara::SysPara(void):
@@ -30,6 +31,9 @@ SysPara::SysPara(void):
memset(&para,0,sizeof(para));
memset(&status,0,sizeof(status));
para.airPushDurationSec = 4;
//qDebug("start to loadParaFromFile.");
loadParaFromFile();
//qDebug("loadParaFromFile ok.");
@@ -57,6 +61,10 @@ SysPara::SysPara(void):
//para.HVFaultCloseEn= 1; //开机默认为1,允许高压故障自动关闭回收功能
// 隔膜泵版本强制开启回收泵模式
if(PUMP_VER == QString("D"))
para.flagOfReclaimPumEnable = true;
devOp->writeFpgaPrintPara(true); //系统起来的时候,将上次记录的配置写入fpga,比如晶振分频等信息
devOp->writeFpgaVariCtrl();
devOp->resumeFault();
@@ -174,6 +182,8 @@ void SysPara::loadDefaultPara(){
para.enableChargeFullTime = 1;//充电占空百分比
para.mixValveisNewVersion = 1;//混和阀是否是新管路
para.airPushDurationSec = 4;
}
void SysPara::saveParaToFile(){
+2
View File
@@ -815,6 +815,8 @@ typedef struct {
unsigned short moduleSelection;
bool flagOfAdjustVoltage;
unsigned short currSelectVolPara;
int airPushDurationSec; // 排气时间,单位 秒
/* */
// 1108Bytes
}sysPara_t;
+5
View File
@@ -132,6 +132,8 @@ void SystemSetting::updateSysParaToUI(){
ui->comboBoxDiameter->setCurrentIndex(sysPara->para.diameter);
ui->comboBoxDiaphramOffset->setCurrentIndex(sysPara->para.diaphramOffset/5-1);
ui->spinBoxAirPushDuration->setValue(sysPara->para.airPushDurationSec);
if(sysPara->para.EditMode>SCENE)
sysPara->para.EditMode=TXTFILE;
ui->comboBoxEditMode->setCurrentIndex(sysPara->para.EditMode);
@@ -171,6 +173,9 @@ void SystemSetting::applyUIPara(){
sysPara->para.septalPostion = ui->spinBoxSeptalPostion->value();
quint16 diaphramOffset = 5*(ui->comboBoxDiaphramOffset->currentIndex()+1);
sysPara->para.diaphramOffset = diaphramOffset;
sysPara->para.airPushDurationSec = ui->spinBoxAirPushDuration->value();
//sysPara->para.mixValveisNewVersion = ui->radioButtonMixValveNewVersion->isChecked();
if(sysPara->devOp->writeFpgaPrintPara() != -1){
QMessageBox::information(this,tr("提示"),tr("应用成功"));
+2 -5
View File
@@ -2,7 +2,7 @@
#include "ui_texteditoption.h"
#include "PicWidget.h"
#include "scene/picscene.h"
#include "SectionalCounting/sectionalmanager.h"
#include <QFileDialog>
#include <QDebug>
#include <QInputDialog>
@@ -645,6 +645,7 @@ bool TextEditOption::maybeSave(){
on_bottonSave_clicked();
return false;
} else if (msgBox.clickedButton() == cancleSaveButton) {
SectionalManager::instance()->emitCancelSection();
return true;
}
else
@@ -731,10 +732,6 @@ void TextEditOption::on_buttonInsertVari_pressed()
unsigned char splitMode=sysPara->para.ExpirySplitMode;
dialogInsertVari->getValue(&varType,&digitalNum,&splitMode);
if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){
digitalNum += 1;
}
// 对于24、16、12点WenQuanYi字体,需要调整高度。我也不知道为什么,但是不调整会导致字模与普通文字不对齐 byons@2026年5月16日
// 日后如果替换了这些高度的字体,需要根据实际情况调整高度
if((height == 25 || height == 17 || height == 13) && !ui->checkBoxBold->isChecked()) {
+7 -21
View File
@@ -93,13 +93,11 @@ TriggerCtrl::TriggerCtrl(QWidget *parent) :
connect(pulseNumFix,SIGNAL(pulseNuxFixDone(float)),this,SLOT(onPulseNumFixDone(float)));
updateSysStatusToUI();
QString s;
s.sprintf("%d.%d.%02d%s%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
s = s + (QString) Public::DateToString(__DATE__)+"_"+ QString(__TIME__)+"_";
// hlp :邓总要求,采用新的格式进行转换 0727
// s = Public::ArmDate2String(__DATE__, __TIME__);
// s.sprintf("%d.%d.%02d%s%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
s.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER);
s = s + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID;
ui->test_version->setText(s);
ui->checkBoxEleEyeMakeClean->setVisible(false);
tr("独立参数");
@@ -398,16 +396,6 @@ void TriggerCtrl::updateSysStatusToUI(){
ui->spinBoxpluseSinal->setValue(sysPara->para.pulse_sinal_value);
t_init = 1;
}
// if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER))
// {
// ui->lineEditPulseCount ->setText(QString::number((int )((sysPara->para.synTriggerPrintLenMm)*sysPara->para.synPulseNumPerMm)));
// }
// else if(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL
// ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE)
// && sysPara->para.eleEyeTriggerSynPrintEn))
// {
// ui->lineEditPulseCount ->setText(QString::number( (int )((sysPara->para.elecEyeTriggerInterval)*sysPara->para.synPulseNumPerMm)));
// }
}
}
@@ -511,11 +499,9 @@ void TriggerCtrl::on_checkBoxPulseOutputEnable_clicked()
void TriggerCtrl::setBuildTime(QString s1)
{
QString s;
s.sprintf("A%d.%d.%02d%s%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
s = s + (QString) Public::DateToString(__DATE__)+ "_"+ QString(__TIME__);
// hlp :邓总要求,采用新的格式进行转换 0727
// s = Public::ArmDate2String(__DATE__, __TIME__);
// s.sprintf("A%d.%d.%02d%s%s_", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
s.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER);
s = s + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID;//+ "_"+ QString(__TIME__)
ui->test_version->setText(s+s1);
}
+13 -14
View File
@@ -2,26 +2,25 @@
#define VERBVERSION_H
#include "myinclude.h"
/*
Major.Minor.Rivison.yyyy-MM-DD_Beta
VX5.D.0826.0100_Std(-C)
MACHINAE_VER.PUMP_VER.MMdd.SUB_VER+SUB_RFID
*/
#define UP_PRINTER_MAJOR_VER 6
#define UP_PRINTER_MINOR_VER 8
#define UP_PRINTER_RIVISION_VER 3
// #define SUB_VERSION "_GuiL"
//#define SUB_VERSION "_JingZ"
//#define SUB_VERSION "_RFID"
#define SUB_VERSION "_Std"
// #define SUB_VERSION "_Std_VZ"
#define MACHINAE_VER "VX5"
#define PUMP_VER "D"
//#define SUB_VER "0100"
//#define SUB_VER "IND"
#define SUB_VER "GuiL"
#ifdef __RFID_OLD
#define SUB_RFID "_RO"
#else
#define SUB_RFID ""
#define SUB_RFID "_Std"
#endif
#ifdef __RFID_CARD
#undef SUB_RFID
#define SUB_RFID "-C"
#endif
//#define UP_PRINTER_STAGE_VER "Std"
//#define UP_PRINTER_STAGE_VER "Beta"
//#define UP_PRINTER_STAGE_VER "RC"
//#define UP_PRINTER_STAGE_VER "Release"
#define VERNONBACH_VERSION(a,b,c) (((a)<<16) + ((b)<<8) + (c))
-21660
View File
File diff suppressed because it is too large Load Diff
+602 -584
View File
File diff suppressed because it is too large Load Diff
-4100
View File
File diff suppressed because it is too large Load Diff
-5362
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+606 -579
View File
File diff suppressed because it is too large Load Diff
-4210
View File
File diff suppressed because it is too large Load Diff
-4223
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-4399
View File
File diff suppressed because it is too large Load Diff
-4223
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+605 -579
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+604 -579
View File
File diff suppressed because it is too large Load Diff
+71 -114
View File
@@ -436,14 +436,16 @@ void MainWindow::RefreshStatusLight(){//100ms
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(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(sysPara->para.HighVoltageAmplitude);
sysPara->devOp->highVoltageCtrl(0);
}
}
reclainTankReachEnd = sysPara->status.reclainTankReachEnd;
@@ -834,7 +836,10 @@ void MainWindow::updateSysStatusToUI(){ //100ms
sysPara->devOp->readbuilDat();
}
firstGetFpgaVersionNumFlag=1;
ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(SOFTWARE_VER_NUM).arg(0).arg(0).arg(0) );
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;
@@ -847,8 +852,9 @@ void MainWindow::updateSysStatusToUI(){ //100ms
logflag5 = false;
sysPara->devOp->writeFpgaPrintPara(true);
QString ARM_Version;
ARM_Version.sprintf("%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
ui->labelFpgaVersionNum->setText(QString("A%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12)
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) );
}
}
@@ -1692,13 +1698,7 @@ void MainWindow::generateCharRamData(){/* 生成字模数据 */
p_var->original = true;
p_var->currVal = -1; //相当于初始化
ramAddress += rowByteNum * width2;
} else {
qDebug() << "startRowPos:" << p_var->startRowPos
<<" endRowPos:" << p_var->endRowPos
<<" rowDiff:" << rowDiff
<< " 按原逻辑,执行这一步的时候软件就已经崩溃了";
}
}
}
}
@@ -2036,85 +2036,48 @@ void MainWindow::enablePrintButton(bool enable){
ui->pushButtonStopPrint->setEnabled(enable);
}
static int mainInkPumpCtrlStatus = 0;
static int mainInkPumpCtrlCnt = 0;
//100ms 为单位
void MainWindow::airPushingProcess()
{
if(sysPara){
if (sysPara->status.airPushing) {
//qDebug()<< "start airPushingProcess "<<sysPara->status.airPushingOnTime;
// 执行排气 7 秒
setRunStatus(tr("正在排气 ..............."));
++sysPara->status.airPushingOnTime;
if(sysPara->status.airPushingOnTime >= 50) {
static int delayCount = 0;
++delayCount;
m_2sFlag = true;
//sysPara->devOp->controlInkValve(false); //关供墨阀
if(delayCount >= 40)
{
m_2sFlag = false;
// 执行排气 4 秒
sysPara->status.airPushingOnTime += 100;
if(sysPara->para.airPushDurationSec <= 0 || sysPara->para.airPushDurationSec > 30) {
sysPara->para.airPushDurationSec = 4;
sysPara->saveParaToFile();
}
if(delayCount >= 60)
{
delayCount = 0;
// 延迟 7 秒后才开回收槽,正式结束排气阶段. reclaimTanOpen:会延迟半秒
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 6500){
airPushTimer->stop();
sysPara->devOp->controlViscosityPump(false);
setRunStatus(tr("排气结束, 打开回收槽."));
LogInfo::setRunStatusText(tr("排气结束, 打开回收槽."));
reclaimTanOpen();
//qDebug()<< "start stop";
sysPara->status.airPushingDone = 1;
sysPara->status.airPushing = 0;
sysPara->status.airPushingOnTime = 0;
}
return;
}
if (sysPara->status.airPushingOnTime%10 >= 5) {
sysPara->devOp->controlCycleValve(true);
}
else {
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 (mainInkPumpCtrlStatus == 0) {
if(++mainInkPumpCtrlCnt > 15) { //100ms 为单位, 时间到关闭
sysPara->devOp->controlMainInkPump(false);
sysPara->devOp->mainInkCtrl();
mainInkPumpCtrlStatus = 1;
mainInkPumpCtrlCnt = 0;
}
}
else if (mainInkPumpCtrlStatus == 1) { //100ms 为单位, 时间到开启
sysPara->devOp->controlMainInkPump(true);
sysPara->devOp->mainInkCtrl();
mainInkPumpCtrlStatus = 2;
}
else if (mainInkPumpCtrlStatus == 2) {
if(++mainInkPumpCtrlCnt>7) {
sysPara->devOp->controlMainInkPump(false);
sysPara->devOp->mainInkCtrl();
mainInkPumpCtrlStatus = 3;
mainInkPumpCtrlCnt = 0;
}
}
else if (mainInkPumpCtrlStatus == 3) {
if(++mainInkPumpCtrlCnt>8) {
sysPara->devOp->controlMainInkPump(true);
sysPara->devOp->mainInkCtrl();
mainInkPumpCtrlStatus = 4;
mainInkPumpCtrlCnt = 0;
}
}
else if (mainInkPumpCtrlStatus == 4) {
if(++mainInkPumpCtrlCnt>8) {
sysPara->devOp->controlMainInkPump(false);
sysPara->devOp->mainInkCtrl();
mainInkPumpCtrlStatus = 3;
mainInkPumpCtrlCnt = 0;
}
if(!sysPara->devOp->isReclaimPumpOpen())
sysPara->devOp->controlReclaimPump(true, false);
setRunStatus(tr("排气结束, 准备打开回收槽."));
LogInfo::setRunStatusText(tr("排气结束, 准备打开回收槽."));
sysPara->status.isPumpValveControledByHand = false;//切换手动,调节压力
return;
}
}
}
@@ -2122,30 +2085,29 @@ void MainWindow::airPushingProcess()
void MainWindow::reclaimTanOpen()
{
// 还原当前模式
if (sysPara->status.airPushing) {
sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore;
}
sysPara->status.isPumpValveControledByHand = false;
sysPara->devOp->mainInkCtrl();
// 如果是排气流程,则不需要先收
if (sysPara->status.airPushingDone)
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("警告!回收槽开关时间未设置!"));
}
MySleep(500);
sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclainOpenAppending = true;
sysPara->status.reclainCloseAppending = false;
sysPara->status.reclaimBlockedCnt = 0;
sysPara->status.canRunAirPushing = false;
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/
ui->pushButtonReclaimTanOpen->setText(
sysPara->devOp->isReclaimTankOpenEnable()?tr("停止"):tr("开"));
ui->pushButtonReclaimTankClose->setText(tr("关"));
setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开"));
if (!sysPara->para.reclaimTankTime) {
LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
}
}
void MainWindow::handleCode(int col, int row, int *varLastRow, int type)
@@ -2177,18 +2139,17 @@ 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;
if (!sysPara->status.airPushing) {
// 先执行排气后开回收槽
sysPara->status.isPumpValveControledByHand = true;
sysPara->devOp->mainInkCtrl();
sysPara->devOp->controlCycleValve(true);
sysPara->devOp->controlViscosityPump(false);//关粘度泵
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;
@@ -2252,13 +2213,16 @@ 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();
////////关机时提高转速和回收泵压力,粘度泵和循环阀/////
quint16 gearPumpValue_backup = sysPara->para.gearPumpValue;
////////关机时通过闭环控制维持压力,控制目标不超过650/////
int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;;
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN))
{
@@ -2284,17 +2248,11 @@ void MainWindow::checkForPowerOff(){
}
}
sysPara->devOp->controlReclaimTankOpen(true);
sysPara->status.isPumpValveControledByHand = true; //停止自动
sysPara->status.isPumpValveControledByHand = true; // 阀门保持手动,隔膜泵由关机闭环控制
if(sysPara->para.gearPumpEnable ){
if(!sysPara->para.flagOfReclaimPumEnable){
sysPara->para.gearPumpValue = 360;
sysPara->devOp->WriteMoterPump();
}
else{
if(sysPara->para.flagOfReclaimPumEnable)
sysPara->devOp->controlReclaimPump(true,false);
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
}
// 不再固定输出360,隔膜泵由pressureAdj按关机目标压力闭环调节
}
else{
sysPara->para.reclaimPumpPWMWidth = 95;
@@ -2325,7 +2283,10 @@ void MainWindow::checkForPowerOff(){
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--)
{
@@ -2344,7 +2305,8 @@ void MainWindow::checkForPowerOff(){
}
}
emit CloseJd();
sysPara->para.gearPumpValue=gearPumpValue_backup;
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup;
sysPara->devOp->controlCompressPump(false);
setRunStatus(tr("准备关机......"));
@@ -4462,15 +4424,9 @@ void MainWindow::on_pushButton_Reboot_clicked()
sysPara->devOp->controlReclaimTankOpen(true);
sysPara->status.isPumpValveControledByHand = true; //停止自动
if(sysPara->para.gearPumpEnable ){
if(!sysPara->para.flagOfReclaimPumEnable){
sysPara->para.gearPumpValue = 360;
sysPara->devOp->WriteMoterPump();
}
else{
if(sysPara->para.flagOfReclaimPumEnable)
sysPara->devOp->controlReclaimPump(true,false);
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
}
// 不再固定输出360,由闭环控制维持压力
}
else{
sysPara->para.reclaimPumpPWMWidth = 95;
@@ -4622,7 +4578,8 @@ void MainWindow::UpdateUIVersion(){
.arg((sysPara->status.stm32Verion>>8) & 0xFF).arg(sysPara->status.stm32Verion&0xFF).arg(baudRateValue);
QString VernonBach;
VernonBach.sprintf("A%d.%d.%02d%s%s", UP_PRINTER_MAJOR_VER, UP_PRINTER_MINOR_VER,UP_PRINTER_RIVISION_VER,SUB_VERSION,SUB_RFID);
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);
+1
View File
@@ -243,6 +243,7 @@ private:
bool printingFlag; //判断当前是否在打印
bool startPrintingFlag;
bool previewFlag;
bool m_powerOffInProgress = false; // 防止MySleep处理事件时重复进入关机流程
int searchExpiryVar(QString html = "");//检索有效期变量
void ExpiryDotUpdate(char Mode);
+1 -3
View File
@@ -7,13 +7,11 @@
#define SYS_ROOT_DIR "/home/plg/"
#include "qnamespace.h"
#define SOFTWARE_VER_NUM "A3.09"
#define MYSAVEFILEDLG // 定义自己的保存文件对话框,解决系统对话框按键不弹起问题
#define LANINTERFACE_NAME "eth0"
// #define FPGATEST // 给韦工测试时启用,发布版本需要关闭
// #define NETWORKQRCODE //二维码允许tcp客户端修改
#define NETWORKQRCODE //二维码允许tcp客户端修改 --荆州四机赛瓦定制功能
// #define __RFID_OLD //旧的加密算法
// #define __RFID_CARD //刷卡功能
// #define __RFID_IND //允许印度进行二次加密的宏
+1 -1
View File
@@ -301,7 +301,7 @@ QTabBar::tab:selected {background-color: rgb(255, 170, 127)}
QTabBar::tab:!selected {margin-top: 5px;}</string>
</property>
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
BIN
View File
Binary file not shown.
+631 -605
View File
File diff suppressed because it is too large Load Diff
+32
View File
@@ -828,6 +828,38 @@
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QLabel" name="label_7">
<property name="text">
<string>排气时间(秒):</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="10" column="2">
<widget class="QSpinBox" name="spinBoxAirPushDuration">
<property name="minimumSize">
<size>
<width>0</width>
<height>37</height>
</size>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>300</number>
</property>
<property name="value">
<number>4</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">f</p></body></html>
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">fdafdsa</p></body></html>
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">化公为私于机构改革讨价还价液恭恭敬敬用同方</p></body></html>
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'helvetica'; font-size:8pt; font-weight:200;">yujhfdddeef</span><img src=":/6/image/digitalWidth2.png" width="10" height="8" /></p></body></html>
BIN
View File
Binary file not shown.
+605 -579
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+605 -579
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+605 -579
View File
File diff suppressed because it is too large Load Diff