diff --git a/DevOp.h b/DevOp.h index 038c9ed..cac935f 100644 --- a/DevOp.h +++ b/DevOp.h @@ -1,381 +1,381 @@ -/* - * DevOp.h - * - * Created on: Jun 25, 2013 - * Author: yiyu - * QQ:1036184468 - * Descriptoin: - - */ - -#ifndef DEVOP_H_ -#define DEVOP_H_ - -/************以前的硬件版本,跟VX5版本号冲突,取消 -#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 -#include -#include "myinclude.h" -#include -#include -#include -#include -#include -#include -#include - -#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_FPGA_DAC_VALUE 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" - -#define PRINT_CTRL_ADDR_BASE 0xa400 - -#define PRINT_DIGITAL_CHAR_BASE_ADDR (0xe000) - -#define WRITE_CALENDAR_DAT_ADDR (0xb100) - -#define RECYCLE_SLOT_STOP 0x1 -#define RECYCLE_SLOT_CLOSE 0x2 -#define RECYCLE_SLOT_OPEN 0x0 -#define PRINT_START_STOP_CTRL (PRINT_CTRL_ADDR_BASE + 0x40) -#define PRINT_RESET_PRODUCT_CNT (PRINT_CTRL_ADDR_BASE + 0x41) -#define RECYCLE_SLOT_CTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x42) -#define RESUME_FAULT_ADDR (PRINT_CTRL_ADDR_BASE + 0x43) - -#define VAR_CNT_ADDR (PRINT_CTRL_ADDR_BASE + 0x50) -#define VAR_CTRL_REG_ADDR (PRINT_CTRL_ADDR_BASE + 0x51) -#define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x59) -//#define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x5a) -#define WRITE_CNT1GROUP_COUNT 0xB13E -#define WRITE_CNT1GROUP_NUM 0xB13F -#define WRITE_CNT1GROUP_SETTING 0xB140 -#define READ_CNT1GROUP_CURR_LOOP 0x0190 -#define READ_CNT1GROUP_CURR_INDEX 0x0194 - -#define WRITE_CNT2GROUP_COUNT 0xB16E -#define WRITE_CNT2GROUP_NUM 0xB16F -#define WRITE_CNT2GROUP_SETTING 0xB170 -#define READ_CNT2GROUP_CURR_LOOP 0x0195 -#define READ_CNT2GROUP_CURR_INDEX 0x0199 - -#define FPGA_STATUS_BASE_ADDR 0x0000 -#define FPGA_VERSOIN_NUM (FPGA_STATUS_BASE_ADDR + 0xfe) - - -#define READ_BUILD_DAT (FPGA_STATUS_BASE_ADDR + 0xf0) - -#define READ_PRINTDATA_XOR (FPGA_STATUS_BASE_ADDR + 0xf2) -#define READ_SYNC_COUNTER (FPGA_STATUS_BASE_ADDR + 0xf4) - -#define PHASE_DETECT_HIGH_VOLTAGE_TM 0x100 -#define READ_CALENDAR_DAT_ADDR 0x180 - -#define READ_RAND_FIFO_ADDR 0x200 // 读FPGA的随机码FIFO - -#define ROW_PRINT_SEQNENCE_ADDR 0xb200 //行扫描顺序 -#define DAC_TABLE_ADDR 0xb280 //每一个行点对应的DAC值 -#define NOT_GAP_DAC_TABLE_ADDR 0xb380 //每一个不隔点对应的DAC值 -#define FULL_COL_DAC_TABLE_ADDR 0xb480 //每一个不隔点对应的DAC值 - -#define MATCH_FULL_DAC_TABLE_ADDR 0xB500 // 匹配满列 DAC表 起始地址 -#define MATCH_1_DAC_TABLE_ADDR 0xB600 // 匹配单点 DAC表 起始地址 -#define MATCH_2_DAC_TABLE_ADDR 0xB700 // 匹配两点 DAC表 起始地址 -#define MATCH_3_DAC_TABLE_ADDR 0xB800 // 匹配三点 DAC表 起始地址 -#define MATCH_4_DAC_TABLE_ADDR 0xB900 // 匹配四点 DAC表 起始地址 -#define MATCH_5_DAC_TABLE_ADDR 0xBA00 // 匹配五点 DAC表 起始地址 -#define MATCH_G1_DAC_TABLE_ADDR 0xBC00 // 匹配空一点 DAC表 起始地址 -#define MATCH_G2_DAC_TABLE_ADDR 0xBC80 // 匹配空两点 DAC表 起始地址 -#define MATCH_G3_DAC_TABLE_ADDR 0xBD00 // 匹配空三点 DAC表 起始地址 -#define MATCH_G4_DAC_TABLE_ADDR 0xBD80 // 匹配空四点 DAC表 起始地址 -#define MATCH_G5_DAC_TABLE_ADDR 0xBE00 // 匹配空五点 DAC表 起始地址 -#define MATCH_G6_DAC_TABLE_ADDR 0xBE80 // 匹配空六点 DAC表 起始地址 -#define MATCH_P1_DAC_TABLE_ADDR 0xBF00 // 匹配预备一 DAC表 起始地址 -#define MATCH_P2_DAC_TABLE_ADDR 0xBF80 // 匹配预备二 DAC表 起始地址 -#define MATCH_C_DAC_TABLE_ADDR 0xC000 // 匹配复杂 DAC表 起始地址 - -#define WRITE_COUNTER3_ADDR (0xb150) -#define WRITE_COUNTER4_ADDR (0xb164) -//#define READ_CNT3_CURVALUE_ADDR 0x01b4 -#define READ_CNT3_CURVALUE_ADDR 0x1834 - -#define LOCADDR '1' - -//#define NOLEDLIGHT 0x10 -//#define REDLIGHTCODE 0X11 -//#define YELLOWLIGHTCODE 0X13 -//#define GREENLIGHTCODE 0X12 -// 高四位:颜色 -#define LED_COLOR_NONE 0x00 // 0000 0000 -#define LED_COLOR_YELLOW 0x10 // 0001 0000 -#define LED_COLOR_GREEN 0x20 // 0010 0000 -#define LED_COLOR_RED 0x30 // 0011 0000 -// 低四位:操作 -#define LED_OP_OFF 0x00 // 灭 -#define LED_OP_ON 0x01 // 亮 -#define LED_OP_FLASH 0x02 // 闪烁 - -//绿灯 -#define LED_COLOR_GREEN_ON LED_COLOR_GREEN|LED_OP_ON //绿灯亮 -#define LED_COLOR_GREEN_OFF LED_COLOR_GREEN|LED_OP_OFF //绿灯灭 -#define LED_COLOR_GREEN_FLASH LED_COLOR_GREEN|LED_OP_FLASH //绿灯闪烁 -//红灯 -#define LED_COLOR_RED_ON LED_COLOR_RED|LED_OP_ON //红灯亮 -#define LED_COLOR_RED_OFF LED_COLOR_RED|LED_OP_OFF //红灯灭 -#define LED_COLOR_RED_FLASH LED_COLOR_RED|LED_OP_FLASH //红灯闪烁 -//黄灯 -#define LED_COLOR_YELLOW_ON LED_COLOR_YELLOW|LED_OP_ON //黄灯亮 -#define LED_COLOR_YELLOW_OFF LED_COLOR_YELLOW|LED_OP_OFF //黄灯灭 -#define LED_COLOR_YELLOW_FLASH LED_COLOR_YELLOW|LED_OP_FLASH //黄灯闪烁 - -#define LED_ALL_OFF 0x00 //关闭所有灯 - -/* - * 请不要直接初始化此函数,如果需要,请通过SysPara的devOP来访问此类 - * */ -class DevOp : public QObject -{ - Q_OBJECT -public : - DevOp(SysPara * sysPara); - ~DevOp(); - - void set_totalSynPulseNum(bool wren);// 设置可变长度 - void WriteMoterPump(); - 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 isHighVoltageOpen(); - - 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 ReadCnt2GroupStatus(void); - void writeCnt1GroupSetting(bool bCntByGroupEnable); - void writeCnt2GroupSetting(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 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 fpgaWrD2(int addr,unsigned char*dat,int len); - void fpgaResetWarning(char mode); - void sendSTM32SetPowerOnTimer(quint16); - void DACValueWithVoltageAdj(); - void writeDataToFpga_No67HighSpeedMode(Voltage_Version version,bool flag); - 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); - void readSTM32Version(void); - void readSTM32Time(void); - bool stopSendDataFPGA; - bool stopSendDataSTM32; - - void Read_RanddomFromFpga(); // 读FPGARANDFIFO - void RandTxtBakup(char ok); - void showData(QByteArray dat); - void writeDacValue2Fpga_No72NewVoltData(); - - -public slots: - void resendFPGADate(int,int,unsigned char *,int,int); - void resendSTM32Date(int,int,unsigned char *,int,int); - -signals: - void dataReceived(char,const QByteArray &dataReceived,int); - /***cmd:1--读 2--写*********************************************/ - /***addr:地址***************************************************/ - /***dat:数据指针*************************************************/ - /***len:数据长度*************************************************/ - /***type:1--FPGA 2--STM32***************************************/ - void sendSerialDataToSTM32(int cmd,int addr,unsigned char *dat,int len,int type); - void sendSerialDataToFPGA(int cmd,int addr,unsigned char *dat,int len,int type); - - -private: - int WdgttyUsb0Cnt; - bool releaseValveOpenFlag; - bool mixValveFlag; - bool inkValveOpenFlag; - bool inkValveOpenFlag1; - bool cycleValveOpenFlag; - bool compressPumpOpenFlag; - bool viscosityPumpOpenFlag; - bool mainInkPumpOpenFlag; - bool reclaimPumpOpenFlag; - bool highVoltageOpenFlag; - - 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; - qint8 OscillatorVoltage[100];//VX 电路不一样,所以需要重新调整 - 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; - -}; - -#endif /* DEVOP_H_ */ +/* + * DevOp.h + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + */ + +#ifndef DEVOP_H_ +#define DEVOP_H_ + +/************以前的硬件版本,跟VX5版本号冲突,取消 +#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 +#include +#include "myinclude.h" +#include +#include +#include +#include +#include +#include +#include + +#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_FPGA_DAC_VALUE 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" + +#define PRINT_CTRL_ADDR_BASE 0xa400 + +#define PRINT_DIGITAL_CHAR_BASE_ADDR (0xe000) + +#define WRITE_CALENDAR_DAT_ADDR (0xb100) + +#define RECYCLE_SLOT_STOP 0x1 +#define RECYCLE_SLOT_CLOSE 0x2 +#define RECYCLE_SLOT_OPEN 0x0 +#define PRINT_START_STOP_CTRL (PRINT_CTRL_ADDR_BASE + 0x40) +#define PRINT_RESET_PRODUCT_CNT (PRINT_CTRL_ADDR_BASE + 0x41) +#define RECYCLE_SLOT_CTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x42) +#define RESUME_FAULT_ADDR (PRINT_CTRL_ADDR_BASE + 0x43) + +#define VAR_CNT_ADDR (PRINT_CTRL_ADDR_BASE + 0x50) +#define VAR_CTRL_REG_ADDR (PRINT_CTRL_ADDR_BASE + 0x51) +#define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x59) +//#define MAININKCTRL_ADDR (PRINT_CTRL_ADDR_BASE + 0x5a) +#define WRITE_CNT1GROUP_COUNT 0xB13E +#define WRITE_CNT1GROUP_NUM 0xB13F +#define WRITE_CNT1GROUP_SETTING 0xB140 +#define READ_CNT1GROUP_CURR_LOOP 0x0190 +#define READ_CNT1GROUP_CURR_INDEX 0x0194 + +#define WRITE_CNT2GROUP_COUNT 0xB16E +#define WRITE_CNT2GROUP_NUM 0xB16F +#define WRITE_CNT2GROUP_SETTING 0xB170 +#define READ_CNT2GROUP_CURR_LOOP 0x0195 +#define READ_CNT2GROUP_CURR_INDEX 0x0199 + +#define FPGA_STATUS_BASE_ADDR 0x0000 +#define FPGA_VERSOIN_NUM (FPGA_STATUS_BASE_ADDR + 0xfe) + + +#define READ_BUILD_DAT (FPGA_STATUS_BASE_ADDR + 0xf0) + +#define READ_PRINTDATA_XOR (FPGA_STATUS_BASE_ADDR + 0xf2) +#define READ_SYNC_COUNTER (FPGA_STATUS_BASE_ADDR + 0xf4) + +#define PHASE_DETECT_HIGH_VOLTAGE_TM 0x100 +#define READ_CALENDAR_DAT_ADDR 0x180 + +#define READ_RAND_FIFO_ADDR 0x200 // 读FPGA的随机码FIFO + +#define ROW_PRINT_SEQNENCE_ADDR 0xb200 //行扫描顺序 +#define DAC_TABLE_ADDR 0xb280 //每一个行点对应的DAC值 +#define NOT_GAP_DAC_TABLE_ADDR 0xb380 //每一个不隔点对应的DAC值 +#define FULL_COL_DAC_TABLE_ADDR 0xb480 //每一个不隔点对应的DAC值 + +#define MATCH_FULL_DAC_TABLE_ADDR 0xB500 // 匹配满列 DAC表 起始地址 +#define MATCH_1_DAC_TABLE_ADDR 0xB600 // 匹配单点 DAC表 起始地址 +#define MATCH_2_DAC_TABLE_ADDR 0xB700 // 匹配两点 DAC表 起始地址 +#define MATCH_3_DAC_TABLE_ADDR 0xB800 // 匹配三点 DAC表 起始地址 +#define MATCH_4_DAC_TABLE_ADDR 0xB900 // 匹配四点 DAC表 起始地址 +#define MATCH_5_DAC_TABLE_ADDR 0xBA00 // 匹配五点 DAC表 起始地址 +#define MATCH_G1_DAC_TABLE_ADDR 0xBC00 // 匹配空一点 DAC表 起始地址 +#define MATCH_G2_DAC_TABLE_ADDR 0xBC80 // 匹配空两点 DAC表 起始地址 +#define MATCH_G3_DAC_TABLE_ADDR 0xBD00 // 匹配空三点 DAC表 起始地址 +#define MATCH_G4_DAC_TABLE_ADDR 0xBD80 // 匹配空四点 DAC表 起始地址 +#define MATCH_G5_DAC_TABLE_ADDR 0xBE00 // 匹配空五点 DAC表 起始地址 +#define MATCH_G6_DAC_TABLE_ADDR 0xBE80 // 匹配空六点 DAC表 起始地址 +#define MATCH_P1_DAC_TABLE_ADDR 0xBF00 // 匹配预备一 DAC表 起始地址 +#define MATCH_P2_DAC_TABLE_ADDR 0xBF80 // 匹配预备二 DAC表 起始地址 +#define MATCH_C_DAC_TABLE_ADDR 0xC000 // 匹配复杂 DAC表 起始地址 + +#define WRITE_COUNTER3_ADDR (0xb150) +#define WRITE_COUNTER4_ADDR (0xb164) +//#define READ_CNT3_CURVALUE_ADDR 0x01b4 +#define READ_CNT3_CURVALUE_ADDR 0x1834 + +#define LOCADDR '1' + +//#define NOLEDLIGHT 0x10 +//#define REDLIGHTCODE 0X11 +//#define YELLOWLIGHTCODE 0X13 +//#define GREENLIGHTCODE 0X12 +// 高四位:颜色 +#define LED_COLOR_NONE 0x00 // 0000 0000 +#define LED_COLOR_YELLOW 0x10 // 0001 0000 +#define LED_COLOR_GREEN 0x20 // 0010 0000 +#define LED_COLOR_RED 0x30 // 0011 0000 +// 低四位:操作 +#define LED_OP_OFF 0x00 // 灭 +#define LED_OP_ON 0x01 // 亮 +#define LED_OP_FLASH 0x02 // 闪烁 + +//绿灯 +#define LED_COLOR_GREEN_ON LED_COLOR_GREEN|LED_OP_ON //绿灯亮 +#define LED_COLOR_GREEN_OFF LED_COLOR_GREEN|LED_OP_OFF //绿灯灭 +#define LED_COLOR_GREEN_FLASH LED_COLOR_GREEN|LED_OP_FLASH //绿灯闪烁 +//红灯 +#define LED_COLOR_RED_ON LED_COLOR_RED|LED_OP_ON //红灯亮 +#define LED_COLOR_RED_OFF LED_COLOR_RED|LED_OP_OFF //红灯灭 +#define LED_COLOR_RED_FLASH LED_COLOR_RED|LED_OP_FLASH //红灯闪烁 +//黄灯 +#define LED_COLOR_YELLOW_ON LED_COLOR_YELLOW|LED_OP_ON //黄灯亮 +#define LED_COLOR_YELLOW_OFF LED_COLOR_YELLOW|LED_OP_OFF //黄灯灭 +#define LED_COLOR_YELLOW_FLASH LED_COLOR_YELLOW|LED_OP_FLASH //黄灯闪烁 + +#define LED_ALL_OFF 0x00 //关闭所有灯 + +/* + * 请不要直接初始化此函数,如果需要,请通过SysPara的devOP来访问此类 + * */ +class DevOp : public QObject +{ + Q_OBJECT +public : + DevOp(SysPara * sysPara); + ~DevOp(); + + void set_totalSynPulseNum(bool wren);// 设置可变长度 + void WriteMoterPump(); + 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 isHighVoltageOpen(); + + 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 ReadCnt2GroupStatus(void); + void writeCnt1GroupSetting(bool bCntByGroupEnable); + void writeCnt2GroupSetting(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 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 fpgaWrD2(int addr,unsigned char*dat,int len); + void fpgaResetWarning(char mode); + void sendSTM32SetPowerOnTimer(quint16); + void DACValueWithVoltageAdj(); + void writeDataToFpga_No67HighSpeedMode(Voltage_Version version,bool flag); + 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); + void readSTM32Version(void); + void readSTM32Time(void); + bool stopSendDataFPGA; + bool stopSendDataSTM32; + + void Read_RanddomFromFpga(); // 读FPGARANDFIFO + void RandTxtBakup(char ok); + void showData(QByteArray dat); + void writeDacValue2Fpga_No72NewVoltData(); + + +public slots: + void resendFPGADate(int,int,unsigned char *,int,int); + void resendSTM32Date(int,int,unsigned char *,int,int); + +signals: + void dataReceived(char,const QByteArray &dataReceived,int); + /***cmd:1--读 2--写*********************************************/ + /***addr:地址***************************************************/ + /***dat:数据指针*************************************************/ + /***len:数据长度*************************************************/ + /***type:1--FPGA 2--STM32***************************************/ + void sendSerialDataToSTM32(int cmd,int addr,unsigned char *dat,int len,int type); + void sendSerialDataToFPGA(int cmd,int addr,unsigned char *dat,int len,int type); + + +private: + int WdgttyUsb0Cnt; + bool releaseValveOpenFlag; + bool mixValveFlag; + bool inkValveOpenFlag; + bool inkValveOpenFlag1; + bool cycleValveOpenFlag; + bool compressPumpOpenFlag; + bool viscosityPumpOpenFlag; + bool mainInkPumpOpenFlag; + bool reclaimPumpOpenFlag; + bool highVoltageOpenFlag; + + 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; + qint8 OscillatorVoltage[100];//VX 电路不一样,所以需要重新调整 + 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; + +}; + +#endif /* DEVOP_H_ */ diff --git a/DevOp.h.autosave b/DevOp.h.autosave deleted file mode 100644 index ec77b6c..0000000 --- a/DevOp.h.autosave +++ /dev/null @@ -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 -#include -#include "myinclude.h" -#include -#include -#include -#include -#include -#include - -#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 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 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_ */ diff --git a/InkJetPrinter.cpp b/InkJetPrinter.cpp index adb6f67..7578270 100644 --- a/InkJetPrinter.cpp +++ b/InkJetPrinter.cpp @@ -799,6 +799,27 @@ 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) { @@ -834,6 +855,8 @@ void InkJetPrinter::pressureAdj() int actual = sysPara->status.PRESSURE; int target = (int)sysPara->para.pressure; + if(sysPara->status.powerOffAppending && target > 650) + target = 650; // 关机压力目标不超过650,不修改用户设定值 int err = target - actual; // 正值=压力偏低,负值=压力偏高 // 更新滑动平均缓冲 @@ -849,8 +872,9 @@ void InkJetPrinter::pressureAdj() // 检查是否允许状态切换(距上次切换>=800ms) bool canSwitch = (m_stateChangeCount >= MIN_STATE_INTERVAL); - // 硬保护:压力严重超标,立即强制停泵(不受800ms限制) - if(actual > target + 80) + // 关机压力上限:超过关机目标10立即停泵,不受状态和800ms切换间隔限制 + int hardStopThreshold = sysPara->status.powerOffAppending ? 10 : 80; + if(actual > target + hardStopThreshold) { if(m_pumpState != DPUMP_STOPPED) { u = 0.0f; @@ -1331,20 +1355,18 @@ void InkJetPrinter::timerHandler(void){ ControledSwitchFlag = false; pulse_3s = 0; } - // 检测手动→自动边沿,直接恢复压力控制,不走 gearPumpStartFlag 的 3s 等待 + // 检测手动→自动边沿,恢复压力控制时从停止状态安全重启 if(m_lastByHand && !sysPara->status.isPumpValveControledByHand) { ControledSwitchFlag = true; - u = (float)sysPara->para.gearPumpValue; // 同步当前转速,避免突变 - // 重置隔膜泵状态机,从当前转速状态开始 - if(u > 40.0f) { - m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态 - } else { - m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始 - } + u = 0.0f; + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + 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; @@ -1395,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){ @@ -1567,7 +1589,7 @@ 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; @@ -1615,14 +1637,13 @@ void InkJetPrinter::timerHandler(void){ if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) { sysPara->status.selfCheckDone = 1; - u = (float)sysPara->para.gearPumpValue; - // 自检完成后管道恢复正常阻力,重置状态机让压力重新平稳收敛 - // 不清零 u,从当前控制字开始,避免突变 - if(u > 40.0f) { - m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态 - } else { - m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始 - } + // 自检完成后管道恢复正常阻力,必须重新从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; @@ -1663,16 +1684,25 @@ void InkJetPrinter::timerHandler(void){ m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable; gearPumpRunNormalFlag = false; // 泄漏保护重新学习 gearPumpRunNormalValue = 0.0f; - // 重置隔膜泵状态机,适应新模式 - m_pumpState = DPUMP_STOPPED; - m_stateChangeCount = 0; - m_adjSkip = 0; - m_lastActualPressure = 0; - m_bufValidCount = 0; + // 重置隔膜泵状态机,适应新模式 + 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_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(); } diff --git a/InkJetPrinter.h b/InkJetPrinter.h index ec8c9cd..9a3d397 100644 --- a/InkJetPrinter.h +++ b/InkJetPrinter.h @@ -122,6 +122,7 @@ private: int m_bufValidCount = 0; // 缓冲区有效点数(用于启动阶段判断) bool m_lastReclaimMode = false; // 上次回收泵使能状态 bool m_lastByHand = false; // 上次手动控制状态 + bool m_powerOffPressureControlActive = false; // 关机压力控制已初始化 // 隔膜泵控制函数 float calculateTargetSpeed(int err); diff --git a/PrintSetting.cpp b/PrintSetting.cpp index 5d394e6..41e65aa 100644 --- a/PrintSetting.cpp +++ b/PrintSetting.cpp @@ -2233,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); } diff --git a/PrintSetting.h b/PrintSetting.h index a9d0148..92696ec 100644 --- a/PrintSetting.h +++ b/PrintSetting.h @@ -1,229 +1,229 @@ -#ifndef PRINTSETTING_H -#define PRINTSETTING_H - -#include -#include "dialogmodifypasswd.h" -#include "DialogAuthorization.h" -#include "ParaSettingUI.h" -#include "dlginputaddr.h" - -#include "dlgvarlength.h" -#include "dialogshowcounter.h" - -#include "TextEditOption.h" // 需要使用文件文本编辑功能 -#include -#include -#include -#include "dialogmoduleseletion.h" -#include "SectionalCounting/sectionalwid.h" -//#include "mainwindow.h" - -namespace Ui { -class PrintSetting; -} - -class PicScene; -class PicTextItem; - -class PrintSetting : public QWidget,public ParaSettingUI -{ - Q_OBJECT - -public: - explicit PrintSetting(QWidget *parent = 0); - ~PrintSetting(); - QString cmd; - QString addr; - QString data; - QString len; -// QString comport; - QString type; - - void updateSysParaToUI(); //重载 - void applyUIPara(); //重载 - void updateCnt1GroupsTblWgt(); - - void ApplyCnt1GroupSetting(); - void updateSysStatusToUI(); - void updateAuthorization(int auth); - void PreviewEdit(); // - void bindSysPara(SysPara *sysPara); - //分段计米 - void LoadCnt1GroupSettingsToUI(); - void rowWidgetCreate(int rowIndex); - void moveRow(int currentRow, int toRow); - void on_moveUp_clicked(); - void on_moveDown_clicked(); - //分段计米end - - void PrintSettingLog(); - - DlgInputAddr *dlgInputAddr; - DialogModuleSeletion *dialogModuleSeletion; - bool flagOfSpecailSettng ; - bool flagOfEngineeringMode; - void SpecailSettingsDisplay(); - void EngineeringModeDisplay(); - bool flagOfModuleDecimal; - bool flagOfModuleHide; - void ModuleDecimalDisplay(); - void ModuleHideDisplay(); - void ModuleDecimalHideDisplay(const bool bEnabled); - void uiSettingForNo66(); - void uiSettingForNo67(); - void uiSettingForNo72(); - void uiSettingForNo73(); - void specailMachineSetting(bool); - void displayForAdjustVoltage(bool); - void setForAdjustVoltage(); - -public slots: - void updateUIForSpecialCondition(); - - void getFpgaVersionSetDisable(); - -protected: - void resizeEvent(QResizeEvent *event) override; - -signals: - void HiddenFunction(bool); - void sendDataToFPGA(QString,QString,QString,QString,QString); - void engineerMode(bool); - void checkPrintIntervalSignal(); - -private slots: - void showMotorIsenVal(int,int); - void showReclaimTankstatusslot(unsigned char); - void on_radioButtonSpecialCondition_clicked(bool checked); - void refreshtimerHandler(void); - - void ondialogShowCounterAccepted(void); - - void on_checkVarLenChg(); - void on_VarLenSet(); - - void on_pushButtonRanddomBackUP_pressed(); - void PrintupdateSysParaToUI(); - void showVolDacEdit(int auth); - void on_pushButtonApply_pressed(); - void on_checkBoxResetCnt1CurrValue_released(); - void on_checkBoxResetCnt2CurrValue_released(); - void on_pushButtonClearRunTime_pressed(); - void on_pushOnlyCNT1Clear_pressed(); - void on_pushOnlyCNT2Clear_pressed(); - - void ondialogAuthorizationAccepted(); - void ondialogAuthVarSetAccepted(); - void on_dialogModPasswdAccepted(); - - void on_checkBoxSuspendAfterPhaseFault_clicked(); - void on_checkBoxPowerOffAfterPhaseFault_clicked(); - - void on_pushButtonAuth_pressed(); -// void on_pushButtonXFileSelect_pressed(); - - void on_spinBoxLastLineEndPointFixedValue_valueChanged(int arg1); - - void on_pushButtonRecommendedSetting_clicked(); - // todo - void onUpdateCnt1GroupDisp(bool bChangeToNext); - - void on_Cnt3AddRowBtn_pressed(); - - void on_Cnt3RemoveRowBtn_pressed(); - - void on_Cnt3InsertRowBtn_pressed(); - - void on_checkBoxGroupCnt1_clicked(bool checked); - - void on_cnt3RemoveAllRowsBtn_pressed(); - - void on_comboBoxAlterPrintEnable_currentIndexChanged(int index); - - void on_checkVol1of8En_clicked(bool checked); - - void on_checkmode0211_clicked(bool checked); - void on_spinBoxExpiryDate_valueChanged(int arg1); - - void on_CBDateFormat1_currentIndexChanged(int index); - void showMachInfo(QString); - void showRemoteControl(QString SuperNodeIP,QString EdgeIP); - - void on_volButton_clicked(); - - void on_spinBoxColDelay_valueChanged(int arg1); - - void on_radioButtonFUllColFIxVal_clicked(bool checked); - - void on_metreCountButton_clicked(); - - void on_lockoulsepushButton_clicked(); - - void on_spinBoxCnt1EndValue_valueChanged(int arg1); - - //todo - void on_pushButtonUpRow_clicked(); - - void on_pushButtonDownRow_clicked(); - - - void on_checkBoxResetCnt3CurrValue_released(); - void on_checkBoxSaveCNTStateValue_released(); - void on_checkBoxCircleProductCnt_released(); - - void on_pushOnlyCNT3Clear_pressed(); - void setCNT1BackColor(bool flag); - void setCNT2BackColor(bool flag); - void setCNT3BackColor(bool flag); - // void setDisableFontWidth(bool); - void updateMachineMac(QString); - void setDisableFontWidth(bool); -private slots: - void autoUpdateFontWidth(const unsigned int); - - void on_checkBox_FastMode_clicked(); - - - - void on_spinBox_1_valueChanged(int arg1); - - void on_pushButton_2_pressed(); - - void on_pushButton_3_pressed(); - - void on_pushButton_4_pressed(); - - void slt_updateCntShow(bool); -Q_SIGNALS: - void authChanged(int auth); - void printPriveiw(); - void change_OutputPulse(); - void SwitchTimerShowItem(bool flag); -private: - Ui::PrintSetting *ui; - //MainWindow *mainWindow; - DialogAuthorization *dialogAuthorization; - DialogAuthorization *dialogAuthVarSet; - DlgVarLength *dlgvarLen; - int auth; - - Dialogmodifypasswd *dialogModPasswd; - DialogShowCounter *dialogShowCounter; - int modify_vol; - int keepVolVal; - QTimer *refresh_timer; - - int lockpulse; - int area_end; - int last_area_end; - PicScene* pGetPicScene; - - //当前打印的长度 - unsigned int current_print_col_num; - - // 分段计米 - SectionalWid* sectionalWid = nullptr; - void initSection(); -}; - -#endif // PRINTSETTING_H +#ifndef PRINTSETTING_H +#define PRINTSETTING_H + +#include +#include "dialogmodifypasswd.h" +#include "DialogAuthorization.h" +#include "ParaSettingUI.h" +#include "dlginputaddr.h" + +#include "dlgvarlength.h" +#include "dialogshowcounter.h" + +#include "TextEditOption.h" // 需要使用文件文本编辑功能 +#include +#include +#include +#include "dialogmoduleseletion.h" +#include "SectionalCounting/sectionalwid.h" +//#include "mainwindow.h" + +namespace Ui { +class PrintSetting; +} + +class PicScene; +class PicTextItem; + +class PrintSetting : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit PrintSetting(QWidget *parent = 0); + ~PrintSetting(); + QString cmd; + QString addr; + QString data; + QString len; +// QString comport; + QString type; + + void updateSysParaToUI(); //重载 + void applyUIPara(); //重载 + void updateCnt1GroupsTblWgt(); + + void ApplyCnt1GroupSetting(); + void updateSysStatusToUI(); + void updateAuthorization(int auth); + void PreviewEdit(); // + void bindSysPara(SysPara *sysPara); + //分段计米 + void LoadCnt1GroupSettingsToUI(); + void rowWidgetCreate(int rowIndex); + void moveRow(int currentRow, int toRow); + void on_moveUp_clicked(); + void on_moveDown_clicked(); + //分段计米end + + void PrintSettingLog(); + + DlgInputAddr *dlgInputAddr; + DialogModuleSeletion *dialogModuleSeletion; + bool flagOfSpecailSettng ; + bool flagOfEngineeringMode; + void SpecailSettingsDisplay(); + void EngineeringModeDisplay(); + bool flagOfModuleDecimal; + bool flagOfModuleHide; + void ModuleDecimalDisplay(); + void ModuleHideDisplay(); + void ModuleDecimalHideDisplay(const bool bEnabled); + void uiSettingForNo66(); + void uiSettingForNo67(); + void uiSettingForNo72(); + void uiSettingForNo73(); + void specailMachineSetting(bool); + void displayForAdjustVoltage(bool); + void setForAdjustVoltage(); + +public slots: + void updateUIForSpecialCondition(); + + void getFpgaVersionSetDisable(); + +protected: + void resizeEvent(QResizeEvent *event) override; + +signals: + void HiddenFunction(bool); + void sendDataToFPGA(QString,QString,QString,QString,QString); + void engineerMode(bool); + void checkPrintIntervalSignal(); + +private slots: + void showMotorIsenVal(int,int); + void showReclaimTankstatusslot(unsigned char); + void on_radioButtonSpecialCondition_clicked(bool checked); + void refreshtimerHandler(void); + + void ondialogShowCounterAccepted(void); + + void on_checkVarLenChg(); + void on_VarLenSet(); + + void on_pushButtonRanddomBackUP_pressed(); + void PrintupdateSysParaToUI(); + void showVolDacEdit(int auth); + void on_pushButtonApply_pressed(); + void on_checkBoxResetCnt1CurrValue_released(); + void on_checkBoxResetCnt2CurrValue_released(); + void on_pushButtonClearRunTime_pressed(); + void on_pushOnlyCNT1Clear_pressed(); + void on_pushOnlyCNT2Clear_pressed(); + + void ondialogAuthorizationAccepted(); + void ondialogAuthVarSetAccepted(); + void on_dialogModPasswdAccepted(); + + void on_checkBoxSuspendAfterPhaseFault_clicked(); + void on_checkBoxPowerOffAfterPhaseFault_clicked(); + + void on_pushButtonAuth_pressed(); +// void on_pushButtonXFileSelect_pressed(); + + void on_spinBoxLastLineEndPointFixedValue_valueChanged(int arg1); + + void on_pushButtonRecommendedSetting_clicked(); + // todo + void onUpdateCnt1GroupDisp(bool bChangeToNext); + + void on_Cnt3AddRowBtn_pressed(); + + void on_Cnt3RemoveRowBtn_pressed(); + + void on_Cnt3InsertRowBtn_pressed(); + + void on_checkBoxGroupCnt1_clicked(bool checked); + + void on_cnt3RemoveAllRowsBtn_pressed(); + + void on_comboBoxAlterPrintEnable_currentIndexChanged(int index); + + void on_checkVol1of8En_clicked(bool checked); + + void on_checkmode0211_clicked(bool checked); + void on_spinBoxExpiryDate_valueChanged(int arg1); + + void on_CBDateFormat1_currentIndexChanged(int index); + void showMachInfo(QString); + void showRemoteControl(QString SuperNodeIP,QString EdgeIP); + + void on_volButton_clicked(); + + void on_spinBoxColDelay_valueChanged(int arg1); + + void on_radioButtonFUllColFIxVal_clicked(bool checked); + + void on_metreCountButton_clicked(); + + void on_lockoulsepushButton_clicked(); + + void on_spinBoxCnt1EndValue_valueChanged(int arg1); + + //todo + void on_pushButtonUpRow_clicked(); + + void on_pushButtonDownRow_clicked(); + + + void on_checkBoxResetCnt3CurrValue_released(); + void on_checkBoxSaveCNTStateValue_released(); + void on_checkBoxCircleProductCnt_released(); + + void on_pushOnlyCNT3Clear_pressed(); + void setCNT1BackColor(bool flag); + void setCNT2BackColor(bool flag); + void setCNT3BackColor(bool flag); + // void setDisableFontWidth(bool); + void updateMachineMac(QString); + void setDisableFontWidth(bool); +private slots: + void autoUpdateFontWidth(const unsigned int); + + void on_checkBox_FastMode_clicked(); + + + + void on_spinBox_1_valueChanged(int arg1); + + void on_pushButton_2_pressed(); + + void on_pushButton_3_pressed(); + + void on_pushButton_4_pressed(); + + void slt_updateCntShow(bool); +Q_SIGNALS: + void authChanged(int auth); + void printPriveiw(); + void change_OutputPulse(); + void SwitchTimerShowItem(bool flag); +private: + Ui::PrintSetting *ui; + //MainWindow *mainWindow; + DialogAuthorization *dialogAuthorization; + DialogAuthorization *dialogAuthVarSet; + DlgVarLength *dlgvarLen; + int auth; + + Dialogmodifypasswd *dialogModPasswd; + DialogShowCounter *dialogShowCounter; + int modify_vol; + int keepVolVal; + QTimer *refresh_timer; + + int lockpulse; + int area_end; + int last_area_end; + PicScene* pGetPicScene; + + //当前打印的长度 + unsigned int current_print_col_num; + + // 分段计米 + SectionalWid* sectionalWid = nullptr; + void initSection(); +}; + +#endif // PRINTSETTING_H diff --git a/QtUI.pro b/QtUI.pro index 6e105b2..881cc4f 100644 --- a/QtUI.pro +++ b/QtUI.pro @@ -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 } - - - - - - - - - - - - diff --git a/SysPara.cpp b/SysPara.cpp index 1d5ce19..9133b64 100644 --- a/SysPara.cpp +++ b/SysPara.cpp @@ -23,6 +23,7 @@ #include #include #include +#include "VerBVersion.h" #define VNLG SysPara::SysPara(void): @@ -60,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(); diff --git a/SysPara.h b/SysPara.h index a6a5deb..fd5a2f5 100644 --- a/SysPara.h +++ b/SysPara.h @@ -1,1344 +1,1344 @@ -/* - * SysPara.h - * - * Created on: Jun 25, 2013 - * Author: yiyu - * QQ:1036184468 - * Descriptoin: - - * 2013-11-09 聂雄 - * 修改了para 结构,增加了 alterPrint_t,setepPrint_t两组参数,放在0x3C~0x43传替给FPGA - * 占用的原来预留的17个字(68B)中的8字节,故预留空间改为 15字(60字节) - */ - -#ifndef SYSPARA_H_ -#define SYSPARA_H_ - - -#include "DevOp.h" -#include - -#ifndef SYS1 -#define PARA_ROOT_DIR "/home/plg/conf/" -#define DOC_ROOT_DIR "/home/plg/doc/" -#define UDISK_DOC_ROOT_DIR "/udisk/doc/" -#define UDISK_CONF_ROOT_DIR "/udisk/conf/" -#define TESTDIR "/home/plg/r_conf/" -#else -#define PARA_ROOT_DIR "./conf/" -#define DOC_ROOT_DIR "./doc/" -#define UDISK_DOC_ROOT_DIR "./udisk/doc/" -#define TESTDIR "./r_conf/" -#endif - -#define SPACEFLAG // 增加空列 2017.3.8 - -#define TESTFILES TESTDIR"UP.png" -#define TESTFILED DOC_ROOT_DIR"UP.png" -#define TESTFILECS TESTDIR"UP.dpn" -#define TESTFILECD PARA_ROOT_DIR"UP.dpn" - -#define PARA_FILE_PATH PARA_ROOT_DIR"sysPara.bin" -#define DeviceCode_FILE_PATH "/home/plg/conf/deviceCode.bin" -#define RFID_FILE_PATH "/home/plg/conf/RFID.bin" -#define FPGA_PRINT_PARA_BYTE_NUM 0x3C - -#define BATCHLEN 3 -#define VOLUMELEN 2 - -#define AUTH_NONE 0 -#define AUTH_DISPLAY_SYSTEM_SETTING (1<<0) -#define AUTH_DISPLAY_SYSTEM_MANAGE (1<<1) -#define AUTH_DISPLAY_LOG_INFO (1<<2) -#define AUTH_DISPLAY_OTHER_INFO (1<<3) - -#define AUTH_SUPER_USER1 (1<<16) -#define AUTH_SUPER_USER2 (1<<17) -typedef enum { - PRINT_TRIGGER_TIME = 0, - PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL = 1, - PRINT_TRIGGER_ELEC_EYE_EDGE =2, - PRINT_TRIGGER_SYNCHRONIZER = 3, - PRINT_TRIGGER_NONE = 4, - PRINT_TRIGGER_EYESYN =5 - }print_trigger_mode_t; -typedef enum { - OSCILLATTOR_FREQ_64K = 0, - OSCILLATTOR_FREQ_76K = 1, - OSCILLATTOR_FREQ_96K =2, - OSCILLATTOR_FREQ_128K =3 -}oscillator_freq_t; - -#define TIME_TRIGGER_PRINT_MODE_END_TO_HEAD 0 -#define TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD 1 - -#define SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH 0 -#define SYN_PRINT_MODE_ACCORDING_RATIO 1 - -#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) -#define MAX_QVARI_NUM 4 -#define MAX_CNT1_GROUPS_NUM 50 - -typedef struct { - unsigned int second:6; - unsigned int minute:6; - unsigned int hour:5; - unsigned day:9; - unsigned month:4; - unsigned dummy:2; - unsigned dayofweek:3; - unsigned year:12; - - unsigned int leap_year:1; //标记当年是否是闰年 - unsigned int cntCurrValueInitEnable:8; //{[0] -> cnt1CurrValue [1] ->cun2CurrValue [2] ->cun3CurrValue} - unsigned int week:8; - unsigned int cnt1CurrValue;// BCD码 9 - unsigned int cnt2CurrValue; // 0x0f 13 - - unsigned int cnt1End; //0x10 17 - unsigned int cnt2End; //0x14 21 - - unsigned short cnt1Repeat;//0x18 25 - unsigned short cnt2Repeat;//0x1a 29 - - unsigned int cnt1Step;//0x1c 33 - unsigned int cnt2Step;//0x20 37 - - unsigned int cnt1InitValue; //0x24 41 - unsigned int cnt2InitValue; //0x28 45 - - unsigned int RandomValue1; //0x2c - unsigned int RandomValue2; //0x30 - -}calandar_and_dat_t; - -typedef struct { - unsigned int cnt3CurrValue;// BCD码 - unsigned int cnt3End; - unsigned int cnt3Repeat; - unsigned int cnt3Step; - unsigned int cnt3InitValue; - -}stru_counter3; - -//hiddenfunction -typedef struct { - unsigned int cnt4CurrValue;// BCD码 0xb164 - unsigned int cnt4End = 0; - unsigned int cnt4Repeat = 0; - unsigned int cnt4Step = 0; - unsigned int cnt4InitValue = 0; - -}stru_counter4; - -typedef struct -{ - unsigned short builTime; - unsigned short inkDot; // - unsigned char year; - unsigned char month; - unsigned char day; - -}build_dat_t; - -typedef struct -{ - quint8 print_data_xor; - quint8 counter1_current_value; - quint64 sync_counter_at_zero; - -}xor_sync_couter; - -typedef struct - { - unsigned short startValue; // 起始值 - unsigned short StepValue; // 跳米间隔 - unsigned short endValue; // 结束值 - unsigned char enbale; // - unsigned char nncc; // 实际跳米数 - }stepPrint_t; // 8Byte - -typedef struct - { - unsigned short startValue; // 起始值 - unsigned short repeatValue; // 重复间隔 - unsigned short repeatPrintTimes; //重复打印次数 - unsigned char DistanceTail; //距离尾部 - unsigned char enable:2; // 交替便能 - unsigned char lineSpace:6; //行距 - //unsigned int bak[10]; // 保留参数 - }alterPrint_t; // 8Byte - -//隐藏功能 -typedef struct - { - unsigned char SpecialVarEnable; //特殊变量使能 - unsigned char MeterEnable; //计数器4带米标使能 - unsigned short SpecialConditionValue; // 隐藏条件倍数值 - unsigned short SpecialVarCountEnd; - unsigned short SpecialVarColStart; - unsigned short SpecialVarColEnd; - unsigned char SpecialVarRowStart; - unsigned char SpecialVarRowEnd; - }SpecialVarPrint; // 8Byte - -typedef struct // BarCodeOption -{ - unsigned char xpos; - unsigned char font; - unsigned char width; - unsigned char height; - unsigned char scale; - unsigned char type:6; - unsigned char InkColor:1; - unsigned char autoFlash:1; - - unsigned char RecFromHost:1;// RecFromHost - unsigned char DisplayUpdate:1; //变量更新标志 - unsigned char AutoCount:1; // 自动变化 - unsigned char var1En:1; //变量1使用 - unsigned char var2En:1; //变量2使用 - - unsigned char barType;// 条形码类型 - - unsigned short var1Type;// 变量1类型 - unsigned short var2Type;// 变量2类型 - unsigned char var1Num;// 变量1位数 - unsigned char var2Num;// 变量2位数 - - - unsigned char NC2[11]; - char text[80]; - char TxtModule[40]; - char TxtLine[30]; - char TxtLine1[30]; -// unsigned char var3Num;// 变量3位数 -}bcOption_t; - -typedef struct { - unsigned int posx; - unsigned char cntNum; - unsigned char width; - unsigned char height; - unsigned char VarNum:3; //1 - unsigned char AutoRefresh:1; - unsigned char AutoCount:1; - unsigned char InkColor:1; - unsigned char RecFromHost:1;// RecFromHost - unsigned char DisplayUpdate:1; //变量更新标志 - unsigned char type; //0-DataMatrix, 1-QRCode,2-BAR - unsigned long counter; - char text[100]; - char textCnt[10]; - char text2[80]; - char text3[8]; - unsigned short CntInc; - unsigned char barCodeFlag:1;//条形码 -}qrOption_t; - -typedef struct { - int type; - int width; - int height; - int startColPos; - int endRowPos; - int startRowPos; - unsigned int Counter; // - unsigned char countEn; - unsigned char TimeEn; - unsigned char cntNum; // 未使用 - unsigned char NNC2; // 未使用 - //--------------------- - char text[100]; //指向申请内存的空间 生成字模数据 - char textCnt[10]; - char text2[90]; - bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 -}QRvars_t; - -/* 分段计米相关设定 */ -typedef struct { - unsigned char cnt1GroupCnt; //总共组数 - struct{ - int StartValue; - int EndValue; - //int StepValue; - //int RepeateValue; - int LoopTimes; - }cnt1GroupSettings[MAX_CNT1_GROUPS_NUM]; -}Cnt1ByGroup_t; -typedef struct { - unsigned char cnt2GroupCnt; //总共组数 - struct{ - int StartValue; - int EndValue; - //int StepValue; - //int RepeateValue; - int LoopTimes; - }cnt2GroupSettings[MAX_CNT1_GROUPS_NUM]; -}Cnt2ByGroup_t; - -typedef struct -{ - int type;// - int width; - int height; - int startColPos; - int endRowPos; - int startRowPos; - unsigned int year; // - unsigned char month; - unsigned char day; - unsigned char separate[3]; - unsigned char bold; - unsigned char letterSpace; - unsigned char splitMode;// '-','/',年05月24日 - //unsigned int addDays; // - //--------------------- - char text2[20]; - //bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 -}EXPIRYVAR_t; -// 打印参数 -/* -typedef struct { - // 打印参数 - unsigned int printTotalColNum:16; // 0,1 - unsigned int printDirection:8; // 2[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 - unsigned int reducedPixelNum:6; // 3 冗余点数 - unsigned int reducedPixelMode:2; // 冗余点比例 - - unsigned int printRowDelay:8; //4 打印模式 - unsigned int printColDelay:24; // 打印设置下的 5,6,7 字宽 - - unsigned char charBold; //8 字体加宽 - unsigned char pixNumPerCol; // 9 每列点阵数 - unsigned int timeTriggerPrintDelayMs:16; //a,b - unsigned int photoElectricityRepeateNum:16; //c,d - unsigned short eleEyeTriggerPrintDelay; // e,f - - unsigned int printTriggerMode:8; // 10 - unsigned int totalSynPulseNum:24; //11,12,13 - unsigned int elecEyeTriggerInterval:32; //14,15,16,17 - unsigned char lineEndAdjustPointCnt; //18 - unsigned char lineEndAdjustPointDelay; //19 - short lastLineEndPointFixedDACValue; //1a 1b - unsigned char extClearAllCntEnable; // 1c --- 通过外部(同步器或电眼)清零 0x3a - unsigned char HighVoltageAmplitude; //0x1d 字高// 字高电压系数 - unsigned char mmmee[2]; - //unsigned short timeTriggerPrintDelayMsH:16; // no use 1e,1f - - // FPGA ADDR 0x60~0x63 - unsigned short productNumToGenerateOutputPulse; //0x1d,1e num产品 out put a pulse - unsigned short outputPulseDelayMs; // 0x1f,0x20 - - // FPGA ADDR 0x44~ - alterPrint_t alterPrint; // 8Byte FPAG由地址0x44~0x4B - unsigned char Cnt1NatureValue:1; //0自然数 - unsigned char eleEyeTriggerSynPrintEn:1; //1电眼触发的同步打印使能 - unsigned char autoSynSpeedEn:1; //2同步打印自动模式 - unsigned char newAmplifyPlate:1;//新放大板选项 - unsigned char SynCntEn1:1; // 4 不打印走米 - unsigned char Vol1of8En:1; // 5 1/8电压打印 - unsigned char eleEyeReTrigDisable:1; // 6 - unsigned char set_HVData_Flag:1; // checkBoxYH - - unsigned char rrr_nc[1]; // 0x4d - unsigned short synPulsePerMmX8 ;// 0x4e~4f - - - bool leftRightInverse; - bool upDownInverse; - bool scanInverse; - int currPrintMode; - - int cnt1EndValue; - int cnt1StartValue; - int cnt1StepValue; - int cnt1RepeateValue; - int cnt1CurrValue; - int cnt2EndValue; - int cnt2StartValue; - int cnt2StepValue; - int cnt2RepeateValue; - int cnt2CurrValue; - - float synTriggerPrintLenMm; - - int synTriggerPrintLenRatio; - - int timeTriggerPrintMode; - int printDelayMs; - int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 - int synCharWidthRatio; - int rowSequenceMode; - int pointVoltageAdjustPos; - int PointVoltageAdjustValue; - - int synClearCntInEleEyeMode; //在电眼触发模式下通过同步器清零 - int eleEyeClearCntInSynMode; - int reducedPixelNumRatio; - int lastLineEndPointFixedValue; //对高压部分点的修正 - int pulseOutputEnable; // 脉冲使能输出 - int productCntPerOutputPulse;// - - int startVoltage; //首行电压 - int endVoltage; //行末电压 - - float synPulseNumPerMm;// 同步器参数 脉冲/毫米 - // 添加参数 - unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 - int FullColFixVal; - unsigned char SynCntEn:1; - unsigned char ENNCC:7; - unsigned char NCCC22; - unsigned short eleMaskTime; // 16bit - unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation - unsigned short headLen; - unsigned short endLen;//6 - unsigned char varLenEn;// - short varLen; // 可变长 - short varLen1; // 可变长 - unsigned char NCCC; - QRvars_t QRvars[MAX_QVARI_NUM]; - //BCvars_t BCvars[MAX_QVARI_NUM]; - stepPrint_t stepPrint; // 8Byte - int phaseHighLowRatio; //保存相检 - short phaseShift; //相位偏移 - unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数 - int phaseDetectVol; - unsigned int phase_detect_pulse_num:4; // 检测个数 - unsigned int phase_detect_voltage:12; // 相检电压阀值 - unsigned short phaseDetectDelay; - unsigned char rrrccc[2]; - quint16 phaseHighCnt; -#ifdef COUNTER1_BY_GROUP //分段计米 - Cnt1ByGroup_t Cnt1ByGroup; -#endif - EXPIRYVAR_t ExpiryVar; //有效期变量 2018.5.24 - EXPIRYVAR_t CurDateVar; - EXPIRYVAR_t ClassVari; - int ExpiryDay; //有效期天数 - //unsigned char ExpirySplitMode; - - int cnt4CurrValue; - int HiddenConditionValue; - bool HiddenFuncEnable; - bool HiddenMeterEnable; - -// int cnt3EndValue; -// int cnt3StartValue; -// int cnt3StepValue; -// int cnt3RepeateValue; - int cnt3CurrValue; - int textEditLineSpace; - unsigned char speedoverPaushPrint; // 3速度超速不打印标志 -}printPara_t; -*/ - - -typedef struct{ - /* 打印参数 */ -// unsigned int printTotalColNum:16; // 0,1 -// unsigned int printDirection:8; // 2[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 -// unsigned int reducedPixelNum:6; // 3 冗余点数 -// unsigned int reducedPixelMode:2; // 冗余点比例 -// unsigned int printRowDelay:8; //4 打印模式 - unsigned int printColDelay:24; // 打印设置下的 5,6,7 字宽 - - unsigned char charBold; //8 字体加宽 -// unsigned char pixNumPerCol; // 9 每列点阵数 - unsigned int timeTriggerPrintDelayMs:16; //a,b - unsigned int photoElectricityRepeateNum:16; //c,d - unsigned short eleEyeTriggerPrintDelay; // e,f - - unsigned int printTriggerMode:8; // 10 -// unsigned int totalSynPulseNum:24; //11,12,13 - unsigned int elecEyeTriggerInterval:32; //14,15,16,17 - -// unsigned char extClearAllCntEnable; // 1c --- 通过外部(同步器或电眼)清零 0x3a - - unsigned char HighVoltageAmplitude; //0x1d 字高// 字高电压系数 -// unsigned char mmmee[2]; - - // FPGA ADDR 0x60~0x63 -// unsigned short productNumToGenerateOutputPulse; //0x1d,1e num产品 out put a pulse - unsigned short outputPulseDelayMs; // 0x1f,0x20 - - // FPGA ADDR 0x44~ - alterPrint_t alterPrint; // 8Byte FPAG由地址0x44~0x4B - unsigned char Cnt1NatureValue:1; //0自然数 - unsigned char eleEyeTriggerSynPrintEn:1; //1电眼触发的同步打印使能 -// unsigned char autoSynSpeedEn:1; //2同步打印自动模式 -// unsigned char newAmplifyPlate:1;//新放大板选项 -// unsigned char SynCntEn1:1; // 4 不打印走米 -// unsigned char Vol1of8En:1; // 5 1/8电压打印 - unsigned char eleEyeReTrigDisable:1; // 6 -// unsigned char set_HVData_Flag:1; // checkBoxYH - - unsigned char decimalBits; // 0x4d 小数点位数 - -// unsigned short synPulsePerMmX8 ;// 0x4e~4f - - bool leftRightInverse; - bool upDownInverse; - bool scanInverse; - int currPrintMode; - - int cnt1EndValue; - int cnt1StartValue; - int cnt1StepValue; - int cnt1RepeateValue; - int cnt1CurrValue; - int cnt2EndValue; - int cnt2StartValue; - int cnt2StepValue; - int cnt2RepeateValue; - int cnt2CurrValue; - float synTriggerPrintLenMm; - int timeTriggerPrintMode; - int printDelayMs; - int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 - int rowSequenceMode; - - int synClearCntInEleEyeMode; //在电眼触发模式下通过同步器清零 - int eleEyeClearCntInSynMode; - int reducedPixelNumRatio; - int pulseOutputEnable; // 脉冲使能输出 - int productCntPerOutputPulse;// - - int startVoltage; //首行电压 -// int endVoltage; //行末电压 - - float synPulseNumPerMm;// 同步器参数 脉冲/毫米 - // 添加参数 - unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 -// int FullColFixVal; - unsigned char SynCntEn:1; -// unsigned char ENNCC:7; -// unsigned char NCCC22; - unsigned short eleMaskTime; // 16bit -// unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation - unsigned short headLen; - unsigned short endLen;//6 - unsigned char varLenEn;// - short varLen; // 可变长 - short varLen1; // 可变长 -// unsigned char NCCC; - QRvars_t QRvars[MAX_QVARI_NUM]; - //BCvars_t BCvars[MAX_QVARI_NUM]; - stepPrint_t stepPrint; // 8Byte -// int phaseHighLowRatio; //保存相检 -// short phaseShift; //相位偏移 -// unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数 -// int phaseDetectVol; -// unsigned int phase_detect_pulse_num:4; // 检测个数 -// unsigned int phase_detect_voltage:12; // 相检电压阀值 -// unsigned short phaseDetectDelay; -// unsigned char rrrccc[2]; -// quint16 phaseHighCnt; - bool cnt1ByGroupEnalbe; // hlp todo 上面注释内容大概率要使用 - bool cnt2ByGroupEnalbe; -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - Cnt1ByGroup_t Cnt1ByGroup; -#endif -#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ - Cnt2ByGroup_t Cnt2ByGroup; -#endif - EXPIRYVAR_t ExpiryVar; //有效期变量 2018.5.24 - EXPIRYVAR_t CurDateVar; - EXPIRYVAR_t ClassVari; - int ExpiryDay; //有效期天数 - - int cnt4CurrValue; - int HiddenConditionValue; - bool HiddenFuncEnable; - bool HiddenMeterEnable; - - int cnt3CurrValue; - int textEditLineSpace; - int textEditCharSpace; -// unsigned char speedoverPaushPrint; // 3速度超速不打印标志 -}printPara_t; - - -typedef struct { - - unsigned int printTotalColNum:16; - unsigned int printDirection:8; //[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 - unsigned int reducedPixelNum:6; - unsigned int reducedPixelMode:2; - - unsigned int printRowDelay:8; - unsigned int printColDelay:24; - - unsigned char oscillatorVoltage; //0x08 - unsigned char phaseByHand; - unsigned char charBold; - unsigned char pixNumPerCol; - - unsigned int timeTriggerPrintDelayMs:16; - unsigned int photoElectricityRepeateNum:16; - - unsigned int printTriggerMode:8; //0x10 - unsigned int totalSynPulseNum:24; - - - unsigned int elecEyeTriggerInterval:32; - - unsigned short divideRatio; //0x18 - unsigned char lineEndAdjustPointCnt; // 0x1a - unsigned char lineEndAdjustPointDelay; // 0x1b - unsigned char enableChargeFullTime; // 0x1c - unsigned char timeTriggerPrintDelayMsH:8; // 0x1 - //unsigned char phaseGroupCount:8; // 0x1 - short lastLineEndPointFixedDACValue; - - unsigned int synNumPerCol:16; //0x20,小数位占8位 //每列同步起脉冲数 - unsigned int dotNumPerCol:16; // 平均每列的像素点(减去冗余的点后) + 列延迟(即打印设置界面中的字体宽度printColDelay) - - unsigned short phase_detect_high_cnt; // - unsigned int phase_detect_pulse_num:4; // 检测个数 - unsigned int phase_detect_voltage:12; // 相检电压阀值 - - unsigned short maxHighVoltageDAC;//0x28 - - unsigned short phaseDetectDelay; //相检延迟 //可以认为是相检的间隔, 以墨点为单位 - short phaseShift; // 相位偏移 - unsigned char HighVoltageAmplitude; - unsigned char magicNum; - - unsigned short productNumToGenerateOutputPulse; //产生一个脉冲所需的产品计数个数//0x30 - unsigned short outputPulseDelayMs; - unsigned short septalPostion; //设置的隔膜位置 - unsigned short blinkLightPeriod; //频闪灯周期,以墨点为单位 - unsigned short eleEyeTriggerPrintDelay; // 0x38 - unsigned char extClearAllCntEnable; //通过外部(同步器或电眼)清零 0x3a - unsigned char FullColFixDacVal; // 0x3b - // 0x3C 0x3D 3E 3F USEING - - alterPrint_t alterPrint; // 8Byte - - unsigned char Cnt1NatureValue:1; //自然数 - unsigned char eleEyeTriggerSynPrintEn:1; //电眼触发的同步打印使能 - unsigned char autoSynSpeedEn:1; //同步打印自动模式 - unsigned char newAmplifyPlate:1; - unsigned char SynCntEn1:1; // 不打印走米 - unsigned char Vol1of8En:1; //打印优化 - unsigned char eleEyeReTrigDisable:1; // 6 - unsigned char set_HVData_Flag:1; // - unsigned char mode0211:1; //0211 模式 - unsigned char synchronizorActType:2; // 0b00:同步器正反转打印; 0b01:同步器只正转打印; 0b10:同步器只反转打印 - unsigned char cnt1ResetToInitValue:1; // 电眼复位时,选择复位到起始值还是当前值 - unsigned char flagOfFastMode:1; - unsigned char rrr_nc0:1; // 0x4D :[5:5] - unsigned char printNumPoint:1; // 0x4D :[6:6]计数器1打印小数点使能位 - unsigned char rrr_nc:1; // 0x4D :[7:7] - - unsigned short synPulsePerMmX8 ;// 0x4e~4f - /*-------------------------------cut line--------------------------------------*/ - - stepPrint_t stepPrint; // 8Byte - unsigned int reserved_reg[12]; // 4*(12)=48Byte // 地址: ~0x7F - unsigned short highVoltageRecord[10]; // 0x80 = 128开始 - int reclaimPumpPWMWidth; - bool leftRightInverse; - bool upDownInverse; - bool scanInverse; - int currPrintMode; - float synPulseNumPerMm; // 每100mm同步器脉冲数 - int cnt1EndValue; - int cnt1StartValue; - int cnt1StepValue; - int cnt1RepeateValue; - int cnt1CurrValue; - int cnt2EndValue; - int cnt2StartValue; - int cnt2StepValue; - int cnt2RepeateValue; - int cnt2CurrValue; - - int startVoltage; - int endVoltage; - float synTriggerPrintLenMm; - - int highVoltageLevel; - int pressure; - int viscosityPumpInterval; - int reclaimTankTime; - int temperature;//喷头温度 - int viscosity; - int viscosityAdjust; - bool stopCounterMeterAfterFault; - bool suspendAfterPhaseFault; - int oscillatoFreq; - int synTriggerPrintLenRatio; - char lastOpenedFileName[100]; - int phaseHighLowRatio; //相位高电平占空比 - int phaseDetectVol; //因为和实际的值有一个转换过程,所以用此变量做中转 - int oscillatorFreqFix; - unsigned int totalProductCnt; - int timeTriggerPrintMode; - int printDelayMs; - int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 - int synCharWidthRatio; //字符宽度 或 喷印比例 触发设置界面 - int rowSequenceMode; - int pointVoltageAdjustPos; // 点距电压调整位置 - int PointVoltageAdjustValue; //点距调压调整值, 超过调整位置就需要增加充电电压 - int RecycleWarnAction; - int powerOffAfterPhaseFault; - int synClearCntInEleEyeMode; //在点眼触发模式下通过同步器清零 - int eleEyeClearCntInSynMode; // CNT2 D5=0选择电眼复位 D5=1选择电眼加1 ; - // CNT1 D4=0选择电眼复位 D4=1选择电眼加1 ; - // D2D1D0 =00 禁止电眼操作,01 电眼复位,打印完成,10 电眼立即复位 - - int fontPixelSize; //用来记录上一次设置的字体大小 - //int septalPostion; - int mixValveisNewVersion; //混和阀是否是新管路 - int lastLineEndPointFixedValue; //对高压部分点的修正 - int textEditLineSpace; - int textEditCharSpace; - int industryIndex; - int recommendedPrintSpeed; - int pulseOutputEnable; - int productCntPerOutputPulse; - int reducedPixelNumRatio; - int EditMode; //编辑模式 0 txt , 1 dot, 2 场景 - //int nncc:31; - int AlterMode; // 交替状态 0,1,2 - int SynCntEn:1; - int ResetProductCntEn:1; // 复位产品计数器 - int ResetAllProductCntEn:1;// 复位总产品计数器 - int HVFaultCloseEn:1;// 高压故障关回收槽 - int MirrABCEnable:2; // 0 无镜像,1 水平,2 垂直 - int checkSpace:1; //使用空列 - int varLenEn:1;// - int ExtScreenType:3;// 外接屏类型 - int ExtMeterType:3; // 显示屏显示米数类型 - int unc:15; // - int FullColFixVal; - unsigned char ReadFileErrorCnt; // - unsigned char PowerOnErrorCnt; // - unsigned char NozzleType; // 0 -- 小,1- 大 - unsigned char NNCC; //预留,这样可以保证每次的配置文件大小一致 - short varLen; // 头部可变长 - short varLen1; // 尾部可变长 - unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数-->现在用作充电脉宽 - // short reverse; //留,这样可以保证每次的配置文件大小一致 - unsigned char diameter:3; // 喷嘴直径,0->50um; 1->60um; 2->70um - unsigned char Reciclar:1; - unsigned char ResetSendData:1; - unsigned char reverse:2; - bool isCheckInsertTime; - calandar_and_dat_t calandar_and_dat; - // 添加参数 - unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 - - bcOption_t bcOption; - qrOption_t qrOption; - unsigned short eleMaskTime; //0x3C,3D 电眼锁定(屏蔽)间隔ms - unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation - long long openInkLineTime; //记录墨线开关时间 136年 以秒为单位 - long TrunOnPowerCnt; // 开机次数 20151218 -// int varLenEn:1;// -// unsigned char varLen; // 可变长 - unsigned short headLen; - unsigned short endLen; - int ExpiryDay; //有效期天数 - unsigned char ExpirySplitMode; - quint16 diaphramOffset; // 隔膜位置偏移,当隔膜位置低于(设定的隔膜位置-偏移),主墨泵就开启 - unsigned char gearPumpEnable:1; - - quint16 gearPumpValue; - quint16 steal_dac_row; - quint16 phaseHighCnt; - int reserved2[13];// 23 -1预留,这样可以保证每次的配置文件大小一致 - unsigned short reverse3; - bool isCheckBarDate; //条形码加入日期 - bool isCheckBarTime; //条形码加入时间 - bool cnt1ByGroupEnalbe; - bool cnt2ByGroupEnalbe; -#ifdef COUNTER1_BY_GROUP /* 分段计米 */ - Cnt1ByGroup_t Cnt1ByGroup; -#endif -#ifdef COUNTER2_BY_GROUP - Cnt2ByGroup_t Cnt2ByGroup; -#endif - quint16 printed_adj_dac[40]; - quint16 printed_continue_col_dac[40]; - quint16 printed_full_col_dac[40]; - quint16 dacScale; - unsigned int pulse_sinal_value:16; - - int cnt3EndValue; - int cnt3StartValue; - int cnt3StepValue; - int cnt3RepeateValue; - int cnt3CurrValue; - stru_counter3 Counter3; - stru_counter4 Counter4; - int cnt4CurrValue; - int HiddenConditionValue; - bool HiddenFuncEnable; - bool HiddenMeterEnable; - - //quint16 Json_device_code; - unsigned char Json_IP[4]; - quint16 Json_server_port; - bool charWidthSetEnable; - bool isCheckMagnet;//检测喷头盖磁铁 - bool isRemoveCode;//不显示二维码 - bool isCheckPrintLight;// - bool isEnableGetDataButton;//使能获取数据按钮 - bool isRemoveDigitCode;//不显示数字码 - bool isCntSaveStateValue;//计数器保存关机值 - bool isCheckBarCodeAddText; - bool isCnt1ShowNumPoint; //计数器1是否显示小数点 - char FanTemperature; - char Json_device_code[10]; - unsigned char speedoverPaushPrint:1; // 速度超速不打印标志 - bool flagOfModuleDecimal; - bool flagOfModuleHide; - bool flagOfstepPrint; - bool flagOfCnt1GroupDisp; - bool flagOfReclaimPumEnable; - unsigned int gearPumpSpeedAlarm; - char comport[20]; - bool flagOfContinueHeat; - unsigned int heatTime; - bool RFIDSolventWarn; - int RFIDSolventWarnMixCnt; - bool RFIDInkWarn; - bool flagOf5Row5Dot; - unsigned int inkWarnDate; - unsigned int inkWarnTime; - unsigned int solventWarnDate; - unsigned int solventWarnTime; - unsigned short moduleSelection; - bool flagOfAdjustVoltage; - unsigned short currSelectVolPara; - - int airPushDurationSec; // 排气时间,单位 秒 - /* */ - // 1108Bytes -}sysPara_t; - -typedef struct -{ - quint8 header[32]; - qint16 pixel_full_table[40]; - qint16 pixel_1_table[40]; - qint16 pixel_2_table[40][2]; - qint16 pixel_3_table[40][3]; - qint16 pixel_4_table[40][4]; - qint16 pixel_para_table[16]; - qint16 pixel_5_table[40][5]; - qint16 pixel_gap_table[48][5]; - qint16 pixel_pre_table[16][5]; - qint16 pixel_c_table[32][4]; -}voltePara_t; - -typedef struct -{ - quint16 matchTotalTableDACArray1[64]; - quint16 matchTotalTableDACArray2[64][2]; - quint16 matchTotalTableDACArray3[64][3]; - quint16 matchTotalTableDACArray4[64][4]; - quint16 matchTotalTableDACArray5[64][5]; - quint16 matchContinousDACArray[64]; - qint8 matchTotalDiffVoltageValue[50][64]; - quint8 matchExtraLineDACArray[64]; - qint8 matchFirstOnePointExtraLineDACArray[64]; - qint8 matchAdjustParaDACArray[8]; - qint8 matchGiantPointVoltageValue[16][64]; - quint16 matchTotalTableDACArrayFirst1[64]; //调一列的第一个单点 -}voltePara_t_25Dots; -typedef struct -{ - quint8 header[32]; - qint16 pixel_full_table[48]; - qint16 pixel_steal_table[48]; - qint16 pixel_head2_table[48]; - qint16 pixel_head3_table[48]; - - qint16 pixel_1_table[48]; - qint16 pixel_tail2_table[48]; - - qint16 pixel_2_table[48][2]; - - qint16 pixel_3_table[48][3]; - - qint16 pixel_4_table[48][4]; - - qint16 pixel_para_table[16]; - - qint16 pixel_5_table[48][5]; - qint16 pixel_continous_table[48]; - qint16 pixel_gap_table[48][5]; // kongdian - qint8 pixel_big_table[8][8]; - qint16 pixel_gap_post_3dot_table[48][5]; // 3 kongdian - - qint16 row_delay_table[48]; - qint16 head1_row_delay_table[48]; - qint16 full_row_delay_table[48]; - qint16 pixel_general_dac_parameter[64]; -}voltePara_t_No73; -typedef struct -{ - unsigned int PrintInkDots; - unsigned int InkEmptyCnt; - unsigned int SOLVEmptyCnt; - unsigned int InkRFIDCnt; - unsigned int SOLVRFIDCnt; - unsigned short solventNumber; -}RFIDPara_t; - -#define MDT 0 -#define QR 1 -#define BAR 2 -#define QR_NETWORK 3 // 网络二维码 - -#define MAX_SELF_CHECK_CNT 6000 //60S,以10ms为单位s - -#if defined(BNS_AARCH64_DEBUG) || defined(FPGATEST) -#undef MAX_SELF_CHECK_CNT -#define MAX_SELF_CHECK_CNT 1000 -#endif - -#define MIX_VALVE_OPEN_DELAY 90 //混合阀打开的时间 -#define RECYCLE_WARN_DELAY 50 //回收故障延时,以100ms为单位 -#define MAX_VISCOSITY_WORK_TIME 500 //10ms为单位 -#define MAX_MAIN_INK_PUMP_RUN_TIME 1000 //10s -#define MAX_HEATER_TIME 3000 //300s -#define MAX_COMPRESS_PUMP_RUN_TIME 6000 //60 - -#define FPGA_MAGIC_NUM_AFTER_CONF 0x73 -#define MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF 280 // 以10ms为单位 230 - - - -#define FPGA_STATUS_BYTE_NUM 0x44 - -#define MAX_PRINT_COL_NUM_Wide (1000*8 - 1) -#define MAX_PRINT_COL_NUM_Normal (500*8 - 1) -#define MAX_PRINT_ROW_NUM 40 -#define MAX_PRINT_ROW_BYTE_NUM 5 -#define BLANK_COL_NUM 3 //信息前空3列 -#define RECLAIM_PUMP_FULL_SPEED_CNT 5300 //5s钟 -#define MAX_VARI_NUM 8 - - -#define CALANDAR_YEAR 0 -#define CALANDAR_MONTH 1 -#define CALANDAR_DAY 2 -#define CALANDAR_WEEK 3 -#define CALANDAR_HOUR 4 -#define CALANDAR_MINUTE 5 -#define CALANDAR_SECOND 6 -#define CALANDAR_CNT1 7 -#define CALANDAR_CNT2 8 -#define CALANDAR_CNT3 13 -#define CALANDAR_XDAY 14 -#define CALANDAR_CNT4 15 -#define RANDOMNUM 12 -#define EXPIRYDATE 80 -#define CURDATE 81 -#define CURCLASS 82 - -#define MAX_INK_EMTYTIME 86400//10800 // s 3hour 3*60*60 = 10800s -#define MAX_SOLV_EMTYTIME 21600//10800 // s 3hour 3*60*60 = 10800s -#define MAX_INK_RFIDTIME 86400//10800 // s 3hour 3*60*60 = 10800s -#define MAX_SOLV_RFIDTIME 7200//21600//10800 // s 3hour 3*60*60 = 10800s -#define MAX_INK_DOTS 2300000000//PrintInkDots -#define MAX_SOLV_OPENNUM 400//OpenNumber -#define MAX_INK_SOLV_EMTYTIME 10800 // s 3hour 3*60*60 = 10800s - -#define AUTOCLEAN_STATUS_NONE 0 -#define AUTOCLEAN_STATUS_STEP1 1 -#define AUTOCLEAN_STATUS_STEP2 2 -#define AUTOCLEAN_STATUS_STEP3 3 -#define AUTOCLEAN_STATUS_STEP1_TIME 60 -#define AUTOCLEAN_STATUS_STEP2_TIME (60*3) -#define AUTOCLEAN_STATUS_STEP3_TIME (5) - -typedef struct { - int type; - int digitalNum; - int width; // 字模的宽度 - int height; // 字模的高度 - int startColPos; - int endRowPos; - int startRowPos; - int bassAddr; // 字模的地址, 从0开始,不同类型会一直增加 - int currVal; - int bold; - int letterSpace; - //int chartype;// 字体类型:0 常规,1 左横,2 右横, 4 倒立(Nc) - //--------------------- - unsigned char *dat; //指向申请内存的空间 生成字模数据 - int datWidth; //datWidth * datHeight为像素的数目,申请空间的大小为datWidth*rowByteNum; - int datHeight; // 变量的高度 - int rowByteNum; - bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 - char fontname[128]; // 字体名 -}vars_t; - - -typedef struct{ - - unsigned int unUse1:16; - unsigned int unUse2:16; - - unsigned int unUse3:16; - unsigned int unUse4:16; - - unsigned int unUse5:16; - unsigned int unUse6:16; - - unsigned int unUse7:16; - unsigned int unUse8:16; - - - unsigned int maginNum:8; //0x10 - - unsigned int unUse9:8; - - unsigned int flightTm:16; - - unsigned int phase:16; - - unsigned int unUse10:16; - - unsigned char phaseChargeResult[8]; - -/* - unsigned short ink_dot_num:6; //飞过相检头上的墨点数 0x20 - unsigned short detect_phase_error:1; - unsigned short flight_tm_error:1; - unsigned short synPulseCntPer1sH:8; - unsigned short synPulseCntPer1s:16; -*/ - unsigned int ink_dot_num:6; //飞过相检头上的墨点数 0x20 - unsigned int detect_phase_error:1; - unsigned int flight_tm_error:1; - unsigned int synPulseCntPer1s:24; - - unsigned int productCnt; - - unsigned int synColDelay:16; //0x28 - unsigned char phasePosEdge; //0x2a - unsigned char phaseNegEdge; //0x2b - - unsigned int synTotalPulseCnt; //0x2c~2f - - unsigned int warm_InkPump:1; // 0x30 - unsigned int ink_Ctrl:1; - unsigned int adj_warn:1; // 自动调速状态 NC 20140305 - unsigned int lesslen_warn:1; // 喷印不完整报警 20140305 - unsigned int wait_phdetect_ok:1; // 等待相检完成 V3W 版还没有对此作修改。 原V6S的参数 - unsigned int set_HVData_Flag:1; // 设置高压包电流标志 - unsigned int dummy:2; //FPGA回传是否正在打印 20260306 - unsigned char unUse11; // 0x31 130113 - unsigned short unUse12; // 0x32 33 电机当前开关时长(s) 130113 - unsigned char read_nc11[2]; //34,35 // no use - unsigned char ele_product_cnt_reset; //36 {ele_product_cnt_reset[1:0]}; - unsigned char RandomNum; // 目前实际只[4:0] 37 - unsigned int totalProductCnt ; // 总产品计数器 38393A3B // [1:0] 11立即清零, [2]计数器1单独清零 [3]计数2单独清零 [4]总产品计数器清零 - unsigned int total_syn_pulse_num ; // - unsigned int volGap_pulse_num:24; // - unsigned int AlterMode:8; // 交替状态 0,1,2; //0x43 共 0x44个字节 - unsigned int VREF:16; - unsigned int MOTOR_ISEN:16; - - unsigned int TEMP_ADIN:16; - unsigned int HV_DETOUT:16; - - unsigned int AD_FIXED:16; - unsigned int SEPTAL_POSITION:16; - - unsigned int PRESSURE:16; - unsigned int AD_UNUSED:16; - unsigned int statWarn:8; //0x11 - unsigned int viscosity:16; - unsigned int mainPumpWarm:8; - unsigned char reclaimTankstatus; // 0x31 130113 - unsigned short curr_reclaimTankTime; // 0x32 33 电机当前开关时长(s) 130113 - //unsigned char read_ncba[6]; // 不用 3C - - - /*----------------------------cut line----------------------------*/ - unsigned short phaseDetectHighTm[64]; //每一个相位的高电平时间 - - unsigned char RandomDigitNum;// 随机码长度 - unsigned char RandomBackCnt; // 0不需要备份,>0需要备份 - - bool isPumpValveControledByHand; //0x20 - bool isCleanUp; - int reclaimCloseCnt; - bool selfCheckDone; - int selfCheckCnt; - int viscosityDelayCnt; - int viscosityFaultCnt; - int rWarnViscoReady; - int viscosityMaxFaultCnt; - int reclaimPumpFullSpeedCnt; //全速开 - bool mainInkPumpError; //主墨泵故障 - int mainInkPumpRunTmCnt; - bool compressPumpError; - int compressPumpRunTmCnt; - int currPrintCol; - int currPrintRow; - unsigned char printDat[MAX_PRINT_COL_NUM_Wide*MAX_PRINT_ROW_BYTE_NUM]; - unsigned char printDat_Normal[MAX_PRINT_COL_NUM_Normal*MAX_PRINT_ROW_BYTE_NUM]; - int currAlterPrintCol; - int currAlterPrintRow; - // unsigned char printAlterDat1[MAX_PRINT_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; - // unsigned char printAlterDat2[MAX_PRINT_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; - int delay10ms; - int delay100ms; - int delay1s; - int delay10s; - int delay100s; - int viscosityFault;// 0 正常,1-粘度值高,2-粘度值低 - int lastViscosityFault; //用来记录上一次的粘度错误状态 - int lastStatWarn; - int lastPhaseFault; - int phaseErrorCnt; - - /* Yang */ - int lastRecycleWarn; //记录上一次的回收故障状态 - int RecycleWarnCnt; - int LightUpCnt; - - bool gearPumpRunStopFlag; - unsigned short gearPumpRunSpeed; //齿轮泵转速 - int visocityValueOverflowNum; /*记录粘度溢出次数*/ - unsigned int lastProductCnt; - unsigned int lastSynPulseCntPer1s; // - int lastSynColDelay; - int configDone; //配置完成 - unsigned int fpgaVersionNum; - unsigned char FPGAChipType; //VX4区分E15和E22芯片,VX5不需要 - bool detectHighVoltageAppending; //检测高压 - bool detectedValidHighVoltage; //是否检测到高压 - unsigned int detectHighVoltageCnt; //检测高压的次数 - int lastwarmInkPump; - int variNum,QRvariNum,BCvariNum,ExpiryVarNum,ExpiryDispUpdate,CurrDateVariNum,classVariNum; - vars_t vars[MAX_VARI_NUM]; - //QRvars_t QRvars[MAX_QVARI_NUM]; - calandar_and_dat_t calandar_and_dat; - - /*---------------回收槽控制相关----------------------*/ - int currReclaimTankPos; - int currReclaimOperationCnt; - bool reclainTankReachEnd; //完全打开 - bool reclainOpenAppending; - bool reclainCloseAppending; - bool canRunAirPushing; - - int currMsCnt; - /*---------------------------------------------*/ - bool cnt1CurrentValueInitDoneFlag; // 将这两个值设为false,会另cnt1和cnt2的当前值初始化 - bool cnt2CurrentValueInitDoneFlag; // - /*----------------------------------------------*/ - /*----------------------------------------------*/ - bool RedLightOnFlag; - bool GreenLightOnFlag; - bool YellowLightOnFlag; - - bool beeperOnFlag; - /*--------------------------------------------*/ - int heaterONTimeCnt; //连续加热有时间限制 - - bool lostCommuFlag; //失去通信 - - bool isPrinting; // - - int cycleValveOpenCntAfterSWintOff; //墨线关掉的时候关循环阀的时间 - int cycleValveOpenCntAfterSWintOn; //墨线开启的时候开循环阀的时间 - - //2019/10/26 - bool autoCtlReclaimAfterSWintOff; - int reclaimOpenCntAfterSWintOff; //墨线关掉的时候关回收阀的时间 - bool byHandStore; // 为了控制主墨泵, 保存当前是否在手动状态,然后切换手动状态, - - bool powerOffAppending; //按下快速关机 - - bool reclaimTankBlockedAppending; //回收槽被卡住 - int airPushingOnTime; // 排气的运行时间 - bool airPushing; // 开回收槽执行排气动作 - bool airPushingDone; // 开回收槽执行排气动作完成 - - bool DACDisable; //相位故障,DAC被disable - bool WorkTimeOut; - bool detectBestOscillatorFreqAppending; //检测最佳晶振频率 - bool detectBestOscillatorVoltageAppending; //检测最佳晶振频率 - int currentDetectBestOscillatorCnt; - int longestPhaseHightLevelTm; //最长的相位高电平时间 - int detectedBestOscillatorFreq; // - int detectedStartOscillatorFreq; - int detectedBestOscillatorVoltage; // - int releaseValveDelayCnt; //开泄压阀后立刻关掉,等一定间隔在检测 - int reclaimBlockedCnt; - bool releaseValveOpenApending; - int powerOffAfterPhaseFaultAppending; - unsigned int pressureOverFlowCnt; - unsigned int septalPositionOverFlowCnt; - bool powerOffAfterInkOrSOLVEmptyAppending; //墨水或溶剂空3小时标志 - // - alterPrint_t alterPrint; // 交替打印 - stepPrint_t stepPrint; // 跳米打印 - build_dat_t build_dat; - xor_sync_couter xor_sync; - unsigned int InkOrSOLVEmptyCnt; - unsigned char EditMode; // - - unsigned char updateSoftEN:1; - unsigned char adjHightVolInitEN:1; - unsigned char FileChangeRestCntFlag:1; // 更换文件,清除计数器 - unsigned char HVFaultCloseEn:1;// 高压故障关回收槽 - unsigned char ExtScreenEn; // 外接屏连接正常 - unsigned char waitHightVolOff,waitHightVolOn; // - unsigned char addSpace;//sysPara->para.checkSpace - unsigned char autoCleanStatus; // clean status, 0: NONE,1: Step1 ... - unsigned int autoCleanTime; // clean time - - unsigned int cnt1GroupCurrentLoop; //分段计米 计数器1当前第几次循环 - unsigned int cnt2GroupCurrentLoop; //分段计米 计数器2当前第几次循环 - unsigned char cnt1GroupRunningIndex; //分段计米 计数器1当前第几次段 - unsigned char cnt2GroupRunningIndex; //分段计米 计数器2当前第几次段 - unsigned int indoorTemperature; //开机记录喷头温度,作为是否调整粘度的根据 - unsigned int needPowerOffTimerout; - unsigned char bLanConfigManual; //手动设定有线ip 地址 - quint16 r_print_q; - quint8 col_state; - quint8 r_row_sequcence; - quint8 dot_num; - quint8 curr_index; - quint16 RowADC; - quint16 w_curr_DAC; - quint16 curr_DAC; - quint16 printed_column; - - quint16 printed_adj_dac[40]; - bool cnt3CurrentValueInitDoneFlag; - stru_counter3 Status_Counter3; - bool printDoneFlag; - bool oneCodePrintOnce; - bool forTemplateUse; - SpecialVarPrint specialVarPrint; - bool lastHighVoltageFault; //高压错误 - bool circleProductCnt; - unsigned int printTotalColNum:16; - unsigned char pixNumPerCol; - unsigned short XXXDay; - int cnt4CurrValue; - bool flagOfAdjustWidth_1; - unsigned char splitMode_Adjust_1; - bool flagOfAdjustWidth_2; - unsigned char splitMode_Adjust_2; -//edit-12.2 - bool flagOfNo67FPGA; //识别67版本,67版本使用4000列,其他版本使用8000列 - short FPGAVersionType; //兼容旧的FPGA版本,0=新FPGA. 旧FPGA: 1=No66,2=No67,3=No72,4=No73 //VX4使用,VX5不需要 - unsigned int textEditTotalCol; - quint16 gearspeed; - int sizeFPGA; - int sizeSTM32; - bool flagOfSpeedAlarm; - bool flagOfPressureFault; - int currVoltageVersion; - int lastVoltageVersion; - unsigned int stm32Verion; - bool stm32Time; - unsigned int machineMac; - int sizequeueFPGA; - bool flagOfRebootEnable; - bool logflag; - unsigned int TextInkDots; - bool flagOfSolventMaxNum; - bool flagOfInkMaxDot; - bool flagOfNeedInkCard; - bool flagOfNeedSolventCard; - bool flagOfKeyBoardType; - bool flagOfAbnormalStatus;//如果在打印过程中死机,重启后为异常状态 - bool flagOfPowerOnMode;//0为正常开机,1为24小时自动开机 - unsigned int waitPowerOffTime; -}sysStatus_t; - -#include - -/* input registers */ -typedef struct { - uint16_t printFinishFlag;//(0) - uint16_t orderCode;//顺序号(1) - - uint8_t usedFileName[100];//(2-51) - uint16_t printStatus;// 1:正在打印, 2:暂停打印, 3:停止打印(52) - uint16_t statWarn;//(53) - calandar_and_dat_t curCalendarAndDate;//(54-79) - uint32_t mbCurrPrintRow;//(80-81) - uint32_t mbCurrPrintCol;//(82-83) - uint32_t productCnt; //产品计数器(84-85) - uint16_t receiveEnbleFlag;//(86) -}ModbusPrintStatus; - -/* holding registers */ -typedef struct { - uint8_t QRcode_buf[110]; //存二维码的buf(0-54) - uint16_t printCommand; // 1:开始打印, 2:暂停打印, 3:停止打印(55) - uint8_t selectFileName[100]; // 选择要打印的文件(56-105) - uint16_t faultRusume;//(106) - calandar_and_dat_t setCalendar;//(107-133) - uint32_t lineSpaceAndCharSpace; //高16作为行间距,低16位作为字符间距(134-135) - uint16_t clearProductCnt; //产品计数器(136) - uint16_t printContent;//2位数的打印内容(137) -}ModbusPrintParas; - - -/* net data */ -typedef struct { - //get data - char PrintingContent[2048]; - int ProductPlanQty; - char ProductUniqueCode[110];// 产品唯一编码 - int ProductionTask; - char QRCodeContent[110]; - int StartMetre; - bool TasdNeedConfirm; - int TaskSwitchingMode; -}JSON_DATA; - -class SysPara{ - //Q_OBJECT -public : - - SysPara(void); - QString sysFile; - printPara_t print; - printPara_t printPre; - printPara_t printInit; - sysPara_t para; - voltePara_t voltePara; - voltePara_t_25Dots voltePara_25Dots; - voltePara_t_No73 voltePara_No73; - RFIDPara_t RFIDPara; - sysStatus_t status; - ModbusPrintStatus modbusStatus; - ModbusPrintParas modbusParas; - JSON_DATA Get_JSON_DATA; - DevOp *devOp; /*设备操作*/ - void loadParaFromFile(); - void saveParaToFile(); - void loadDefaultPara(); - void loadDefaultPrintPara(); - void loadPrintParaFromFile(QString fileName); - void savePrintParaToFile(); - void loadVolteParaFromFile(PRINT_MODE mode); - void saveRFIDPara(); - bool loadRFIDPara(); - void comparePrintStruct(); - void loadParaToPrintInit(); - void updatePrintInitToPara(); - private: - -}; - -#endif /* SYSPARA_H_ */ +/* + * SysPara.h + * + * Created on: Jun 25, 2013 + * Author: yiyu + * QQ:1036184468 + * Descriptoin: + + * 2013-11-09 聂雄 + * 修改了para 结构,增加了 alterPrint_t,setepPrint_t两组参数,放在0x3C~0x43传替给FPGA + * 占用的原来预留的17个字(68B)中的8字节,故预留空间改为 15字(60字节) + */ + +#ifndef SYSPARA_H_ +#define SYSPARA_H_ + + +#include "DevOp.h" +#include + +#ifndef SYS1 +#define PARA_ROOT_DIR "/home/plg/conf/" +#define DOC_ROOT_DIR "/home/plg/doc/" +#define UDISK_DOC_ROOT_DIR "/udisk/doc/" +#define UDISK_CONF_ROOT_DIR "/udisk/conf/" +#define TESTDIR "/home/plg/r_conf/" +#else +#define PARA_ROOT_DIR "./conf/" +#define DOC_ROOT_DIR "./doc/" +#define UDISK_DOC_ROOT_DIR "./udisk/doc/" +#define TESTDIR "./r_conf/" +#endif + +#define SPACEFLAG // 增加空列 2017.3.8 + +#define TESTFILES TESTDIR"UP.png" +#define TESTFILED DOC_ROOT_DIR"UP.png" +#define TESTFILECS TESTDIR"UP.dpn" +#define TESTFILECD PARA_ROOT_DIR"UP.dpn" + +#define PARA_FILE_PATH PARA_ROOT_DIR"sysPara.bin" +#define DeviceCode_FILE_PATH "/home/plg/conf/deviceCode.bin" +#define RFID_FILE_PATH "/home/plg/conf/RFID.bin" +#define FPGA_PRINT_PARA_BYTE_NUM 0x3C + +#define BATCHLEN 3 +#define VOLUMELEN 2 + +#define AUTH_NONE 0 +#define AUTH_DISPLAY_SYSTEM_SETTING (1<<0) +#define AUTH_DISPLAY_SYSTEM_MANAGE (1<<1) +#define AUTH_DISPLAY_LOG_INFO (1<<2) +#define AUTH_DISPLAY_OTHER_INFO (1<<3) + +#define AUTH_SUPER_USER1 (1<<16) +#define AUTH_SUPER_USER2 (1<<17) +typedef enum { + PRINT_TRIGGER_TIME = 0, + PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL = 1, + PRINT_TRIGGER_ELEC_EYE_EDGE =2, + PRINT_TRIGGER_SYNCHRONIZER = 3, + PRINT_TRIGGER_NONE = 4, + PRINT_TRIGGER_EYESYN =5 + }print_trigger_mode_t; +typedef enum { + OSCILLATTOR_FREQ_64K = 0, + OSCILLATTOR_FREQ_76K = 1, + OSCILLATTOR_FREQ_96K =2, + OSCILLATTOR_FREQ_128K =3 +}oscillator_freq_t; + +#define TIME_TRIGGER_PRINT_MODE_END_TO_HEAD 0 +#define TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD 1 + +#define SYN_PRINT_MODE_ACCORDING_CHAR_WIDTH 0 +#define SYN_PRINT_MODE_ACCORDING_RATIO 1 + +#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) +#define MAX_QVARI_NUM 4 +#define MAX_CNT1_GROUPS_NUM 50 + +typedef struct { + unsigned int second:6; + unsigned int minute:6; + unsigned int hour:5; + unsigned day:9; + unsigned month:4; + unsigned dummy:2; + unsigned dayofweek:3; + unsigned year:12; + + unsigned int leap_year:1; //标记当年是否是闰年 + unsigned int cntCurrValueInitEnable:8; //{[0] -> cnt1CurrValue [1] ->cun2CurrValue [2] ->cun3CurrValue} + unsigned int week:8; + unsigned int cnt1CurrValue;// BCD码 9 + unsigned int cnt2CurrValue; // 0x0f 13 + + unsigned int cnt1End; //0x10 17 + unsigned int cnt2End; //0x14 21 + + unsigned short cnt1Repeat;//0x18 25 + unsigned short cnt2Repeat;//0x1a 29 + + unsigned int cnt1Step;//0x1c 33 + unsigned int cnt2Step;//0x20 37 + + unsigned int cnt1InitValue; //0x24 41 + unsigned int cnt2InitValue; //0x28 45 + + unsigned int RandomValue1; //0x2c + unsigned int RandomValue2; //0x30 + +}calandar_and_dat_t; + +typedef struct { + unsigned int cnt3CurrValue;// BCD码 + unsigned int cnt3End; + unsigned int cnt3Repeat; + unsigned int cnt3Step; + unsigned int cnt3InitValue; + +}stru_counter3; + +//hiddenfunction +typedef struct { + unsigned int cnt4CurrValue;// BCD码 0xb164 + unsigned int cnt4End = 0; + unsigned int cnt4Repeat = 0; + unsigned int cnt4Step = 0; + unsigned int cnt4InitValue = 0; + +}stru_counter4; + +typedef struct +{ + unsigned short builTime; + unsigned short inkDot; // + unsigned char year; + unsigned char month; + unsigned char day; + +}build_dat_t; + +typedef struct +{ + quint8 print_data_xor; + quint8 counter1_current_value; + quint64 sync_counter_at_zero; + +}xor_sync_couter; + +typedef struct + { + unsigned short startValue; // 起始值 + unsigned short StepValue; // 跳米间隔 + unsigned short endValue; // 结束值 + unsigned char enbale; // + unsigned char nncc; // 实际跳米数 + }stepPrint_t; // 8Byte + +typedef struct + { + unsigned short startValue; // 起始值 + unsigned short repeatValue; // 重复间隔 + unsigned short repeatPrintTimes; //重复打印次数 + unsigned char DistanceTail; //距离尾部 + unsigned char enable:2; // 交替便能 + unsigned char lineSpace:6; //行距 + //unsigned int bak[10]; // 保留参数 + }alterPrint_t; // 8Byte + +//隐藏功能 +typedef struct + { + unsigned char SpecialVarEnable; //特殊变量使能 + unsigned char MeterEnable; //计数器4带米标使能 + unsigned short SpecialConditionValue; // 隐藏条件倍数值 + unsigned short SpecialVarCountEnd; + unsigned short SpecialVarColStart; + unsigned short SpecialVarColEnd; + unsigned char SpecialVarRowStart; + unsigned char SpecialVarRowEnd; + }SpecialVarPrint; // 8Byte + +typedef struct // BarCodeOption +{ + unsigned char xpos; + unsigned char font; + unsigned char width; + unsigned char height; + unsigned char scale; + unsigned char type:6; + unsigned char InkColor:1; + unsigned char autoFlash:1; + + unsigned char RecFromHost:1;// RecFromHost + unsigned char DisplayUpdate:1; //变量更新标志 + unsigned char AutoCount:1; // 自动变化 + unsigned char var1En:1; //变量1使用 + unsigned char var2En:1; //变量2使用 + + unsigned char barType;// 条形码类型 + + unsigned short var1Type;// 变量1类型 + unsigned short var2Type;// 变量2类型 + unsigned char var1Num;// 变量1位数 + unsigned char var2Num;// 变量2位数 + + + unsigned char NC2[11]; + char text[80]; + char TxtModule[40]; + char TxtLine[30]; + char TxtLine1[30]; +// unsigned char var3Num;// 变量3位数 +}bcOption_t; + +typedef struct { + unsigned int posx; + unsigned char cntNum; + unsigned char width; + unsigned char height; + unsigned char VarNum:3; //1 + unsigned char AutoRefresh:1; + unsigned char AutoCount:1; + unsigned char InkColor:1; + unsigned char RecFromHost:1;// RecFromHost + unsigned char DisplayUpdate:1; //变量更新标志 + unsigned char type; //0-DataMatrix, 1-QRCode,2-BAR + unsigned long counter; + char text[100]; + char textCnt[10]; + char text2[80]; + char text3[8]; + unsigned short CntInc; + unsigned char barCodeFlag:1;//条形码 +}qrOption_t; + +typedef struct { + int type; + int width; + int height; + int startColPos; + int endRowPos; + int startRowPos; + unsigned int Counter; // + unsigned char countEn; + unsigned char TimeEn; + unsigned char cntNum; // 未使用 + unsigned char NNC2; // 未使用 + //--------------------- + char text[100]; //指向申请内存的空间 生成字模数据 + char textCnt[10]; + char text2[90]; + bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 +}QRvars_t; + +/* 分段计米相关设定 */ +typedef struct { + unsigned char cnt1GroupCnt; //总共组数 + struct{ + int StartValue; + int EndValue; + //int StepValue; + //int RepeateValue; + int LoopTimes; + }cnt1GroupSettings[MAX_CNT1_GROUPS_NUM]; +}Cnt1ByGroup_t; +typedef struct { + unsigned char cnt2GroupCnt; //总共组数 + struct{ + int StartValue; + int EndValue; + //int StepValue; + //int RepeateValue; + int LoopTimes; + }cnt2GroupSettings[MAX_CNT1_GROUPS_NUM]; +}Cnt2ByGroup_t; + +typedef struct +{ + int type;// + int width; + int height; + int startColPos; + int endRowPos; + int startRowPos; + unsigned int year; // + unsigned char month; + unsigned char day; + unsigned char separate[3]; + unsigned char bold; + unsigned char letterSpace; + unsigned char splitMode;// '-','/',年05月24日 + //unsigned int addDays; // + //--------------------- + char text2[20]; + //bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 +}EXPIRYVAR_t; +// 打印参数 +/* +typedef struct { + // 打印参数 + unsigned int printTotalColNum:16; // 0,1 + unsigned int printDirection:8; // 2[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 + unsigned int reducedPixelNum:6; // 3 冗余点数 + unsigned int reducedPixelMode:2; // 冗余点比例 + + unsigned int printRowDelay:8; //4 打印模式 + unsigned int printColDelay:24; // 打印设置下的 5,6,7 字宽 + + unsigned char charBold; //8 字体加宽 + unsigned char pixNumPerCol; // 9 每列点阵数 + unsigned int timeTriggerPrintDelayMs:16; //a,b + unsigned int photoElectricityRepeateNum:16; //c,d + unsigned short eleEyeTriggerPrintDelay; // e,f + + unsigned int printTriggerMode:8; // 10 + unsigned int totalSynPulseNum:24; //11,12,13 + unsigned int elecEyeTriggerInterval:32; //14,15,16,17 + unsigned char lineEndAdjustPointCnt; //18 + unsigned char lineEndAdjustPointDelay; //19 + short lastLineEndPointFixedDACValue; //1a 1b + unsigned char extClearAllCntEnable; // 1c --- 通过外部(同步器或电眼)清零 0x3a + unsigned char HighVoltageAmplitude; //0x1d 字高// 字高电压系数 + unsigned char mmmee[2]; + //unsigned short timeTriggerPrintDelayMsH:16; // no use 1e,1f + + // FPGA ADDR 0x60~0x63 + unsigned short productNumToGenerateOutputPulse; //0x1d,1e num产品 out put a pulse + unsigned short outputPulseDelayMs; // 0x1f,0x20 + + // FPGA ADDR 0x44~ + alterPrint_t alterPrint; // 8Byte FPAG由地址0x44~0x4B + unsigned char Cnt1NatureValue:1; //0自然数 + unsigned char eleEyeTriggerSynPrintEn:1; //1电眼触发的同步打印使能 + unsigned char autoSynSpeedEn:1; //2同步打印自动模式 + unsigned char newAmplifyPlate:1;//新放大板选项 + unsigned char SynCntEn1:1; // 4 不打印走米 + unsigned char Vol1of8En:1; // 5 1/8电压打印 + unsigned char eleEyeReTrigDisable:1; // 6 + unsigned char set_HVData_Flag:1; // checkBoxYH + + unsigned char rrr_nc[1]; // 0x4d + unsigned short synPulsePerMmX8 ;// 0x4e~4f + + + bool leftRightInverse; + bool upDownInverse; + bool scanInverse; + int currPrintMode; + + int cnt1EndValue; + int cnt1StartValue; + int cnt1StepValue; + int cnt1RepeateValue; + int cnt1CurrValue; + int cnt2EndValue; + int cnt2StartValue; + int cnt2StepValue; + int cnt2RepeateValue; + int cnt2CurrValue; + + float synTriggerPrintLenMm; + + int synTriggerPrintLenRatio; + + int timeTriggerPrintMode; + int printDelayMs; + int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 + int synCharWidthRatio; + int rowSequenceMode; + int pointVoltageAdjustPos; + int PointVoltageAdjustValue; + + int synClearCntInEleEyeMode; //在电眼触发模式下通过同步器清零 + int eleEyeClearCntInSynMode; + int reducedPixelNumRatio; + int lastLineEndPointFixedValue; //对高压部分点的修正 + int pulseOutputEnable; // 脉冲使能输出 + int productCntPerOutputPulse;// + + int startVoltage; //首行电压 + int endVoltage; //行末电压 + + float synPulseNumPerMm;// 同步器参数 脉冲/毫米 + // 添加参数 + unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 + int FullColFixVal; + unsigned char SynCntEn:1; + unsigned char ENNCC:7; + unsigned char NCCC22; + unsigned short eleMaskTime; // 16bit + unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation + unsigned short headLen; + unsigned short endLen;//6 + unsigned char varLenEn;// + short varLen; // 可变长 + short varLen1; // 可变长 + unsigned char NCCC; + QRvars_t QRvars[MAX_QVARI_NUM]; + //BCvars_t BCvars[MAX_QVARI_NUM]; + stepPrint_t stepPrint; // 8Byte + int phaseHighLowRatio; //保存相检 + short phaseShift; //相位偏移 + unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数 + int phaseDetectVol; + unsigned int phase_detect_pulse_num:4; // 检测个数 + unsigned int phase_detect_voltage:12; // 相检电压阀值 + unsigned short phaseDetectDelay; + unsigned char rrrccc[2]; + quint16 phaseHighCnt; +#ifdef COUNTER1_BY_GROUP //分段计米 + Cnt1ByGroup_t Cnt1ByGroup; +#endif + EXPIRYVAR_t ExpiryVar; //有效期变量 2018.5.24 + EXPIRYVAR_t CurDateVar; + EXPIRYVAR_t ClassVari; + int ExpiryDay; //有效期天数 + //unsigned char ExpirySplitMode; + + int cnt4CurrValue; + int HiddenConditionValue; + bool HiddenFuncEnable; + bool HiddenMeterEnable; + +// int cnt3EndValue; +// int cnt3StartValue; +// int cnt3StepValue; +// int cnt3RepeateValue; + int cnt3CurrValue; + int textEditLineSpace; + unsigned char speedoverPaushPrint; // 3速度超速不打印标志 +}printPara_t; +*/ + + +typedef struct{ + /* 打印参数 */ +// unsigned int printTotalColNum:16; // 0,1 +// unsigned int printDirection:8; // 2[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 +// unsigned int reducedPixelNum:6; // 3 冗余点数 +// unsigned int reducedPixelMode:2; // 冗余点比例 +// unsigned int printRowDelay:8; //4 打印模式 + unsigned int printColDelay:24; // 打印设置下的 5,6,7 字宽 + + unsigned char charBold; //8 字体加宽 +// unsigned char pixNumPerCol; // 9 每列点阵数 + unsigned int timeTriggerPrintDelayMs:16; //a,b + unsigned int photoElectricityRepeateNum:16; //c,d + unsigned short eleEyeTriggerPrintDelay; // e,f + + unsigned int printTriggerMode:8; // 10 +// unsigned int totalSynPulseNum:24; //11,12,13 + unsigned int elecEyeTriggerInterval:32; //14,15,16,17 + +// unsigned char extClearAllCntEnable; // 1c --- 通过外部(同步器或电眼)清零 0x3a + + unsigned char HighVoltageAmplitude; //0x1d 字高// 字高电压系数 +// unsigned char mmmee[2]; + + // FPGA ADDR 0x60~0x63 +// unsigned short productNumToGenerateOutputPulse; //0x1d,1e num产品 out put a pulse + unsigned short outputPulseDelayMs; // 0x1f,0x20 + + // FPGA ADDR 0x44~ + alterPrint_t alterPrint; // 8Byte FPAG由地址0x44~0x4B + unsigned char Cnt1NatureValue:1; //0自然数 + unsigned char eleEyeTriggerSynPrintEn:1; //1电眼触发的同步打印使能 +// unsigned char autoSynSpeedEn:1; //2同步打印自动模式 +// unsigned char newAmplifyPlate:1;//新放大板选项 +// unsigned char SynCntEn1:1; // 4 不打印走米 +// unsigned char Vol1of8En:1; // 5 1/8电压打印 + unsigned char eleEyeReTrigDisable:1; // 6 +// unsigned char set_HVData_Flag:1; // checkBoxYH + + unsigned char decimalBits; // 0x4d 小数点位数 + +// unsigned short synPulsePerMmX8 ;// 0x4e~4f + + bool leftRightInverse; + bool upDownInverse; + bool scanInverse; + int currPrintMode; + + int cnt1EndValue; + int cnt1StartValue; + int cnt1StepValue; + int cnt1RepeateValue; + int cnt1CurrValue; + int cnt2EndValue; + int cnt2StartValue; + int cnt2StepValue; + int cnt2RepeateValue; + int cnt2CurrValue; + float synTriggerPrintLenMm; + int timeTriggerPrintMode; + int printDelayMs; + int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 + int rowSequenceMode; + + int synClearCntInEleEyeMode; //在电眼触发模式下通过同步器清零 + int eleEyeClearCntInSynMode; + int reducedPixelNumRatio; + int pulseOutputEnable; // 脉冲使能输出 + int productCntPerOutputPulse;// + + int startVoltage; //首行电压 +// int endVoltage; //行末电压 + + float synPulseNumPerMm;// 同步器参数 脉冲/毫米 + // 添加参数 + unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 +// int FullColFixVal; + unsigned char SynCntEn:1; +// unsigned char ENNCC:7; +// unsigned char NCCC22; + unsigned short eleMaskTime; // 16bit +// unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation + unsigned short headLen; + unsigned short endLen;//6 + unsigned char varLenEn;// + short varLen; // 可变长 + short varLen1; // 可变长 +// unsigned char NCCC; + QRvars_t QRvars[MAX_QVARI_NUM]; + //BCvars_t BCvars[MAX_QVARI_NUM]; + stepPrint_t stepPrint; // 8Byte +// int phaseHighLowRatio; //保存相检 +// short phaseShift; //相位偏移 +// unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数 +// int phaseDetectVol; +// unsigned int phase_detect_pulse_num:4; // 检测个数 +// unsigned int phase_detect_voltage:12; // 相检电压阀值 +// unsigned short phaseDetectDelay; +// unsigned char rrrccc[2]; +// quint16 phaseHighCnt; + bool cnt1ByGroupEnalbe; // hlp todo 上面注释内容大概率要使用 + bool cnt2ByGroupEnalbe; +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + Cnt1ByGroup_t Cnt1ByGroup; +#endif +#ifdef COUNTER2_BY_GROUP /* 分段计米2 */ + Cnt2ByGroup_t Cnt2ByGroup; +#endif + EXPIRYVAR_t ExpiryVar; //有效期变量 2018.5.24 + EXPIRYVAR_t CurDateVar; + EXPIRYVAR_t ClassVari; + int ExpiryDay; //有效期天数 + + int cnt4CurrValue; + int HiddenConditionValue; + bool HiddenFuncEnable; + bool HiddenMeterEnable; + + int cnt3CurrValue; + int textEditLineSpace; + int textEditCharSpace; +// unsigned char speedoverPaushPrint; // 3速度超速不打印标志 +}printPara_t; + + +typedef struct { + + unsigned int printTotalColNum:16; + unsigned int printDirection:8; //[0] 上下颠倒 [1] 左右颠倒 [2] 扫描颠倒 + unsigned int reducedPixelNum:6; + unsigned int reducedPixelMode:2; + + unsigned int printRowDelay:8; + unsigned int printColDelay:24; + + unsigned char oscillatorVoltage; //0x08 + unsigned char phaseByHand; + unsigned char charBold; + unsigned char pixNumPerCol; + + unsigned int timeTriggerPrintDelayMs:16; + unsigned int photoElectricityRepeateNum:16; + + unsigned int printTriggerMode:8; //0x10 + unsigned int totalSynPulseNum:24; + + + unsigned int elecEyeTriggerInterval:32; + + unsigned short divideRatio; //0x18 + unsigned char lineEndAdjustPointCnt; // 0x1a + unsigned char lineEndAdjustPointDelay; // 0x1b + unsigned char enableChargeFullTime; // 0x1c + unsigned char timeTriggerPrintDelayMsH:8; // 0x1 + //unsigned char phaseGroupCount:8; // 0x1 + short lastLineEndPointFixedDACValue; + + unsigned int synNumPerCol:16; //0x20,小数位占8位 //每列同步起脉冲数 + unsigned int dotNumPerCol:16; // 平均每列的像素点(减去冗余的点后) + 列延迟(即打印设置界面中的字体宽度printColDelay) + + unsigned short phase_detect_high_cnt; // + unsigned int phase_detect_pulse_num:4; // 检测个数 + unsigned int phase_detect_voltage:12; // 相检电压阀值 + + unsigned short maxHighVoltageDAC;//0x28 + + unsigned short phaseDetectDelay; //相检延迟 //可以认为是相检的间隔, 以墨点为单位 + short phaseShift; // 相位偏移 + unsigned char HighVoltageAmplitude; + unsigned char magicNum; + + unsigned short productNumToGenerateOutputPulse; //产生一个脉冲所需的产品计数个数//0x30 + unsigned short outputPulseDelayMs; + unsigned short septalPostion; //设置的隔膜位置 + unsigned short blinkLightPeriod; //频闪灯周期,以墨点为单位 + unsigned short eleEyeTriggerPrintDelay; // 0x38 + unsigned char extClearAllCntEnable; //通过外部(同步器或电眼)清零 0x3a + unsigned char FullColFixDacVal; // 0x3b + // 0x3C 0x3D 3E 3F USEING + + alterPrint_t alterPrint; // 8Byte + + unsigned char Cnt1NatureValue:1; //自然数 + unsigned char eleEyeTriggerSynPrintEn:1; //电眼触发的同步打印使能 + unsigned char autoSynSpeedEn:1; //同步打印自动模式 + unsigned char newAmplifyPlate:1; + unsigned char SynCntEn1:1; // 不打印走米 + unsigned char Vol1of8En:1; //打印优化 + unsigned char eleEyeReTrigDisable:1; // 6 + unsigned char set_HVData_Flag:1; // + unsigned char mode0211:1; //0211 模式 + unsigned char synchronizorActType:2; // 0b00:同步器正反转打印; 0b01:同步器只正转打印; 0b10:同步器只反转打印 + unsigned char cnt1ResetToInitValue:1; // 电眼复位时,选择复位到起始值还是当前值 + unsigned char flagOfFastMode:1; + unsigned char rrr_nc0:1; // 0x4D :[5:5] + unsigned char printNumPoint:1; // 0x4D :[6:6]计数器1打印小数点使能位 + unsigned char rrr_nc:1; // 0x4D :[7:7] + + unsigned short synPulsePerMmX8 ;// 0x4e~4f + /*-------------------------------cut line--------------------------------------*/ + + stepPrint_t stepPrint; // 8Byte + unsigned int reserved_reg[12]; // 4*(12)=48Byte // 地址: ~0x7F + unsigned short highVoltageRecord[10]; // 0x80 = 128开始 + int reclaimPumpPWMWidth; + bool leftRightInverse; + bool upDownInverse; + bool scanInverse; + int currPrintMode; + float synPulseNumPerMm; // 每100mm同步器脉冲数 + int cnt1EndValue; + int cnt1StartValue; + int cnt1StepValue; + int cnt1RepeateValue; + int cnt1CurrValue; + int cnt2EndValue; + int cnt2StartValue; + int cnt2StepValue; + int cnt2RepeateValue; + int cnt2CurrValue; + + int startVoltage; + int endVoltage; + float synTriggerPrintLenMm; + + int highVoltageLevel; + int pressure; + int viscosityPumpInterval; + int reclaimTankTime; + int temperature;//喷头温度 + int viscosity; + int viscosityAdjust; + bool stopCounterMeterAfterFault; + bool suspendAfterPhaseFault; + int oscillatoFreq; + int synTriggerPrintLenRatio; + char lastOpenedFileName[100]; + int phaseHighLowRatio; //相位高电平占空比 + int phaseDetectVol; //因为和实际的值有一个转换过程,所以用此变量做中转 + int oscillatorFreqFix; + unsigned int totalProductCnt; + int timeTriggerPrintMode; + int printDelayMs; + int sysTriggerPrintMode; //在同步模式下选择按字宽或时喷印比例进行打印 + int synCharWidthRatio; //字符宽度 或 喷印比例 触发设置界面 + int rowSequenceMode; + int pointVoltageAdjustPos; // 点距电压调整位置 + int PointVoltageAdjustValue; //点距调压调整值, 超过调整位置就需要增加充电电压 + int RecycleWarnAction; + int powerOffAfterPhaseFault; + int synClearCntInEleEyeMode; //在点眼触发模式下通过同步器清零 + int eleEyeClearCntInSynMode; // CNT2 D5=0选择电眼复位 D5=1选择电眼加1 ; + // CNT1 D4=0选择电眼复位 D4=1选择电眼加1 ; + // D2D1D0 =00 禁止电眼操作,01 电眼复位,打印完成,10 电眼立即复位 + + int fontPixelSize; //用来记录上一次设置的字体大小 + //int septalPostion; + int mixValveisNewVersion; //混和阀是否是新管路 + int lastLineEndPointFixedValue; //对高压部分点的修正 + int textEditLineSpace; + int textEditCharSpace; + int industryIndex; + int recommendedPrintSpeed; + int pulseOutputEnable; + int productCntPerOutputPulse; + int reducedPixelNumRatio; + int EditMode; //编辑模式 0 txt , 1 dot, 2 场景 + //int nncc:31; + int AlterMode; // 交替状态 0,1,2 + int SynCntEn:1; + int ResetProductCntEn:1; // 复位产品计数器 + int ResetAllProductCntEn:1;// 复位总产品计数器 + int HVFaultCloseEn:1;// 高压故障关回收槽 + int MirrABCEnable:2; // 0 无镜像,1 水平,2 垂直 + int checkSpace:1; //使用空列 + int varLenEn:1;// + int ExtScreenType:3;// 外接屏类型 + int ExtMeterType:3; // 显示屏显示米数类型 + int unc:15; // + int FullColFixVal; + unsigned char ReadFileErrorCnt; // + unsigned char PowerOnErrorCnt; // + unsigned char NozzleType; // 0 -- 小,1- 大 + unsigned char NNCC; //预留,这样可以保证每次的配置文件大小一致 + short varLen; // 头部可变长 + short varLen1; // 尾部可变长 + unsigned short OuputPulseCol; //桂林客户,精准控制输出脉冲的位置,精确到打印的列数-->现在用作充电脉宽 + // short reverse; //留,这样可以保证每次的配置文件大小一致 + unsigned char diameter:3; // 喷嘴直径,0->50um; 1->60um; 2->70um + unsigned char Reciclar:1; + unsigned char ResetSendData:1; + unsigned char reverse:2; + bool isCheckInsertTime; + calandar_and_dat_t calandar_and_dat; + // 添加参数 + unsigned char adjVolDacRate[40]; //增加了DAC电压间隔调整比例 + + bcOption_t bcOption; + qrOption_t qrOption; + unsigned short eleMaskTime; //0x3C,3D 电眼锁定(屏蔽)间隔ms + unsigned short AltMirrorGap;// 镜像打印间隔 Mirror image alternation + long long openInkLineTime; //记录墨线开关时间 136年 以秒为单位 + long TrunOnPowerCnt; // 开机次数 20151218 +// int varLenEn:1;// +// unsigned char varLen; // 可变长 + unsigned short headLen; + unsigned short endLen; + int ExpiryDay; //有效期天数 + unsigned char ExpirySplitMode; + quint16 diaphramOffset; // 隔膜位置偏移,当隔膜位置低于(设定的隔膜位置-偏移),主墨泵就开启 + unsigned char gearPumpEnable:1; + + quint16 gearPumpValue; + quint16 steal_dac_row; + quint16 phaseHighCnt; + int reserved2[13];// 23 -1预留,这样可以保证每次的配置文件大小一致 + unsigned short reverse3; + bool isCheckBarDate; //条形码加入日期 + bool isCheckBarTime; //条形码加入时间 + bool cnt1ByGroupEnalbe; + bool cnt2ByGroupEnalbe; +#ifdef COUNTER1_BY_GROUP /* 分段计米 */ + Cnt1ByGroup_t Cnt1ByGroup; +#endif +#ifdef COUNTER2_BY_GROUP + Cnt2ByGroup_t Cnt2ByGroup; +#endif + quint16 printed_adj_dac[40]; + quint16 printed_continue_col_dac[40]; + quint16 printed_full_col_dac[40]; + quint16 dacScale; + unsigned int pulse_sinal_value:16; + + int cnt3EndValue; + int cnt3StartValue; + int cnt3StepValue; + int cnt3RepeateValue; + int cnt3CurrValue; + stru_counter3 Counter3; + stru_counter4 Counter4; + int cnt4CurrValue; + int HiddenConditionValue; + bool HiddenFuncEnable; + bool HiddenMeterEnable; + + //quint16 Json_device_code; + unsigned char Json_IP[4]; + quint16 Json_server_port; + bool charWidthSetEnable; + bool isCheckMagnet;//检测喷头盖磁铁 + bool isRemoveCode;//不显示二维码 + bool isCheckPrintLight;// + bool isEnableGetDataButton;//使能获取数据按钮 + bool isRemoveDigitCode;//不显示数字码 + bool isCntSaveStateValue;//计数器保存关机值 + bool isCheckBarCodeAddText; + bool isCnt1ShowNumPoint; //计数器1是否显示小数点 + char FanTemperature; + char Json_device_code[10]; + unsigned char speedoverPaushPrint:1; // 速度超速不打印标志 + bool flagOfModuleDecimal; + bool flagOfModuleHide; + bool flagOfstepPrint; + bool flagOfCnt1GroupDisp; + bool flagOfReclaimPumEnable; + unsigned int gearPumpSpeedAlarm; + char comport[20]; + bool flagOfContinueHeat; + unsigned int heatTime; + bool RFIDSolventWarn; + int RFIDSolventWarnMixCnt; + bool RFIDInkWarn; + bool flagOf5Row5Dot; + unsigned int inkWarnDate; + unsigned int inkWarnTime; + unsigned int solventWarnDate; + unsigned int solventWarnTime; + unsigned short moduleSelection; + bool flagOfAdjustVoltage; + unsigned short currSelectVolPara; + + int airPushDurationSec; // 排气时间,单位 秒 + /* */ + // 1108Bytes +}sysPara_t; + +typedef struct +{ + quint8 header[32]; + qint16 pixel_full_table[40]; + qint16 pixel_1_table[40]; + qint16 pixel_2_table[40][2]; + qint16 pixel_3_table[40][3]; + qint16 pixel_4_table[40][4]; + qint16 pixel_para_table[16]; + qint16 pixel_5_table[40][5]; + qint16 pixel_gap_table[48][5]; + qint16 pixel_pre_table[16][5]; + qint16 pixel_c_table[32][4]; +}voltePara_t; + +typedef struct +{ + quint16 matchTotalTableDACArray1[64]; + quint16 matchTotalTableDACArray2[64][2]; + quint16 matchTotalTableDACArray3[64][3]; + quint16 matchTotalTableDACArray4[64][4]; + quint16 matchTotalTableDACArray5[64][5]; + quint16 matchContinousDACArray[64]; + qint8 matchTotalDiffVoltageValue[50][64]; + quint8 matchExtraLineDACArray[64]; + qint8 matchFirstOnePointExtraLineDACArray[64]; + qint8 matchAdjustParaDACArray[8]; + qint8 matchGiantPointVoltageValue[16][64]; + quint16 matchTotalTableDACArrayFirst1[64]; //调一列的第一个单点 +}voltePara_t_25Dots; +typedef struct +{ + quint8 header[32]; + qint16 pixel_full_table[48]; + qint16 pixel_steal_table[48]; + qint16 pixel_head2_table[48]; + qint16 pixel_head3_table[48]; + + qint16 pixel_1_table[48]; + qint16 pixel_tail2_table[48]; + + qint16 pixel_2_table[48][2]; + + qint16 pixel_3_table[48][3]; + + qint16 pixel_4_table[48][4]; + + qint16 pixel_para_table[16]; + + qint16 pixel_5_table[48][5]; + qint16 pixel_continous_table[48]; + qint16 pixel_gap_table[48][5]; // kongdian + qint8 pixel_big_table[8][8]; + qint16 pixel_gap_post_3dot_table[48][5]; // 3 kongdian + + qint16 row_delay_table[48]; + qint16 head1_row_delay_table[48]; + qint16 full_row_delay_table[48]; + qint16 pixel_general_dac_parameter[64]; +}voltePara_t_No73; +typedef struct +{ + unsigned int PrintInkDots; + unsigned int InkEmptyCnt; + unsigned int SOLVEmptyCnt; + unsigned int InkRFIDCnt; + unsigned int SOLVRFIDCnt; + unsigned short solventNumber; +}RFIDPara_t; + +#define MDT 0 +#define QR 1 +#define BAR 2 +#define QR_NETWORK 3 // 网络二维码 + +#define MAX_SELF_CHECK_CNT 6000 //60S,以10ms为单位s + +#if defined(BNS_AARCH64_DEBUG) || defined(FPGATEST) +#undef MAX_SELF_CHECK_CNT +#define MAX_SELF_CHECK_CNT 1000 +#endif + +#define MIX_VALVE_OPEN_DELAY 90 //混合阀打开的时间 +#define RECYCLE_WARN_DELAY 50 //回收故障延时,以100ms为单位 +#define MAX_VISCOSITY_WORK_TIME 500 //10ms为单位 +#define MAX_MAIN_INK_PUMP_RUN_TIME 1000 //10s +#define MAX_HEATER_TIME 3000 //300s +#define MAX_COMPRESS_PUMP_RUN_TIME 6000 //60 + +#define FPGA_MAGIC_NUM_AFTER_CONF 0x73 +#define MAX_CYCLEVALVE_OPEN_TIME_AFTER_SWITN_OFF 280 // 以10ms为单位 230 + + + +#define FPGA_STATUS_BYTE_NUM 0x44 + +#define MAX_PRINT_COL_NUM_Wide (1000*8 - 1) +#define MAX_PRINT_COL_NUM_Normal (500*8 - 1) +#define MAX_PRINT_ROW_NUM 40 +#define MAX_PRINT_ROW_BYTE_NUM 5 +#define BLANK_COL_NUM 3 //信息前空3列 +#define RECLAIM_PUMP_FULL_SPEED_CNT 5300 //5s钟 +#define MAX_VARI_NUM 8 + + +#define CALANDAR_YEAR 0 +#define CALANDAR_MONTH 1 +#define CALANDAR_DAY 2 +#define CALANDAR_WEEK 3 +#define CALANDAR_HOUR 4 +#define CALANDAR_MINUTE 5 +#define CALANDAR_SECOND 6 +#define CALANDAR_CNT1 7 +#define CALANDAR_CNT2 8 +#define CALANDAR_CNT3 13 +#define CALANDAR_XDAY 14 +#define CALANDAR_CNT4 15 +#define RANDOMNUM 12 +#define EXPIRYDATE 80 +#define CURDATE 81 +#define CURCLASS 82 + +#define MAX_INK_EMTYTIME 86400//10800 // s 3hour 3*60*60 = 10800s +#define MAX_SOLV_EMTYTIME 21600//10800 // s 3hour 3*60*60 = 10800s +#define MAX_INK_RFIDTIME 86400//10800 // s 3hour 3*60*60 = 10800s +#define MAX_SOLV_RFIDTIME 7200//21600//10800 // s 3hour 3*60*60 = 10800s +#define MAX_INK_DOTS 2300000000//PrintInkDots +#define MAX_SOLV_OPENNUM 400//OpenNumber +#define MAX_INK_SOLV_EMTYTIME 10800 // s 3hour 3*60*60 = 10800s + +#define AUTOCLEAN_STATUS_NONE 0 +#define AUTOCLEAN_STATUS_STEP1 1 +#define AUTOCLEAN_STATUS_STEP2 2 +#define AUTOCLEAN_STATUS_STEP3 3 +#define AUTOCLEAN_STATUS_STEP1_TIME 60 +#define AUTOCLEAN_STATUS_STEP2_TIME (60*3) +#define AUTOCLEAN_STATUS_STEP3_TIME (5) + +typedef struct { + int type; + int digitalNum; + int width; // 字模的宽度 + int height; // 字模的高度 + int startColPos; + int endRowPos; + int startRowPos; + int bassAddr; // 字模的地址, 从0开始,不同类型会一直增加 + int currVal; + int bold; + int letterSpace; + //int chartype;// 字体类型:0 常规,1 左横,2 右横, 4 倒立(Nc) + //--------------------- + unsigned char *dat; //指向申请内存的空间 生成字模数据 + int datWidth; //datWidth * datHeight为像素的数目,申请空间的大小为datWidth*rowByteNum; + int datHeight; // 变量的高度 + int rowByteNum; + bool original; //表示当前dat是通过calloc申请而来还是直接引用别人的指针,主要是影响到指针的释放 + char fontname[128]; // 字体名 +}vars_t; + + +typedef struct{ + + unsigned int unUse1:16; + unsigned int unUse2:16; + + unsigned int unUse3:16; + unsigned int unUse4:16; + + unsigned int unUse5:16; + unsigned int unUse6:16; + + unsigned int unUse7:16; + unsigned int unUse8:16; + + + unsigned int maginNum:8; //0x10 + + unsigned int unUse9:8; + + unsigned int flightTm:16; + + unsigned int phase:16; + + unsigned int unUse10:16; + + unsigned char phaseChargeResult[8]; + +/* + unsigned short ink_dot_num:6; //飞过相检头上的墨点数 0x20 + unsigned short detect_phase_error:1; + unsigned short flight_tm_error:1; + unsigned short synPulseCntPer1sH:8; + unsigned short synPulseCntPer1s:16; +*/ + unsigned int ink_dot_num:6; //飞过相检头上的墨点数 0x20 + unsigned int detect_phase_error:1; + unsigned int flight_tm_error:1; + unsigned int synPulseCntPer1s:24; + + unsigned int productCnt; + + unsigned int synColDelay:16; //0x28 + unsigned char phasePosEdge; //0x2a + unsigned char phaseNegEdge; //0x2b + + unsigned int synTotalPulseCnt; //0x2c~2f + + unsigned int warm_InkPump:1; // 0x30 + unsigned int ink_Ctrl:1; + unsigned int adj_warn:1; // 自动调速状态 NC 20140305 + unsigned int lesslen_warn:1; // 喷印不完整报警 20140305 + unsigned int wait_phdetect_ok:1; // 等待相检完成 V3W 版还没有对此作修改。 原V6S的参数 + unsigned int set_HVData_Flag:1; // 设置高压包电流标志 + unsigned int dummy:2; //FPGA回传是否正在打印 20260306 + unsigned char unUse11; // 0x31 130113 + unsigned short unUse12; // 0x32 33 电机当前开关时长(s) 130113 + unsigned char read_nc11[2]; //34,35 // no use + unsigned char ele_product_cnt_reset; //36 {ele_product_cnt_reset[1:0]}; + unsigned char RandomNum; // 目前实际只[4:0] 37 + unsigned int totalProductCnt ; // 总产品计数器 38393A3B // [1:0] 11立即清零, [2]计数器1单独清零 [3]计数2单独清零 [4]总产品计数器清零 + unsigned int total_syn_pulse_num ; // + unsigned int volGap_pulse_num:24; // + unsigned int AlterMode:8; // 交替状态 0,1,2; //0x43 共 0x44个字节 + unsigned int VREF:16; + unsigned int MOTOR_ISEN:16; + + unsigned int TEMP_ADIN:16; + unsigned int HV_DETOUT:16; + + unsigned int AD_FIXED:16; + unsigned int SEPTAL_POSITION:16; + + unsigned int PRESSURE:16; + unsigned int AD_UNUSED:16; + unsigned int statWarn:8; //0x11 + unsigned int viscosity:16; + unsigned int mainPumpWarm:8; + unsigned char reclaimTankstatus; // 0x31 130113 + unsigned short curr_reclaimTankTime; // 0x32 33 电机当前开关时长(s) 130113 + //unsigned char read_ncba[6]; // 不用 3C + + + /*----------------------------cut line----------------------------*/ + unsigned short phaseDetectHighTm[64]; //每一个相位的高电平时间 + + unsigned char RandomDigitNum;// 随机码长度 + unsigned char RandomBackCnt; // 0不需要备份,>0需要备份 + + bool isPumpValveControledByHand; //0x20 + bool isCleanUp; + int reclaimCloseCnt; + bool selfCheckDone; + int selfCheckCnt; + int viscosityDelayCnt; + int viscosityFaultCnt; + int rWarnViscoReady; + int viscosityMaxFaultCnt; + int reclaimPumpFullSpeedCnt; //全速开 + bool mainInkPumpError; //主墨泵故障 + int mainInkPumpRunTmCnt; + bool compressPumpError; + int compressPumpRunTmCnt; + int currPrintCol; + int currPrintRow; + unsigned char printDat[MAX_PRINT_COL_NUM_Wide*MAX_PRINT_ROW_BYTE_NUM]; + unsigned char printDat_Normal[MAX_PRINT_COL_NUM_Normal*MAX_PRINT_ROW_BYTE_NUM]; + int currAlterPrintCol; + int currAlterPrintRow; + // unsigned char printAlterDat1[MAX_PRINT_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; + // unsigned char printAlterDat2[MAX_PRINT_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]; + int delay10ms; + int delay100ms; + int delay1s; + int delay10s; + int delay100s; + int viscosityFault;// 0 正常,1-粘度值高,2-粘度值低 + int lastViscosityFault; //用来记录上一次的粘度错误状态 + int lastStatWarn; + int lastPhaseFault; + int phaseErrorCnt; + + /* Yang */ + int lastRecycleWarn; //记录上一次的回收故障状态 + int RecycleWarnCnt; + int LightUpCnt; + + bool gearPumpRunStopFlag; + unsigned short gearPumpRunSpeed; //齿轮泵转速 + int visocityValueOverflowNum; /*记录粘度溢出次数*/ + unsigned int lastProductCnt; + unsigned int lastSynPulseCntPer1s; // + int lastSynColDelay; + int configDone; //配置完成 + unsigned int fpgaVersionNum; + unsigned char FPGAChipType; //VX4区分E15和E22芯片,VX5不需要 + bool detectHighVoltageAppending; //检测高压 + bool detectedValidHighVoltage; //是否检测到高压 + unsigned int detectHighVoltageCnt; //检测高压的次数 + int lastwarmInkPump; + int variNum,QRvariNum,BCvariNum,ExpiryVarNum,ExpiryDispUpdate,CurrDateVariNum,classVariNum; + vars_t vars[MAX_VARI_NUM]; + //QRvars_t QRvars[MAX_QVARI_NUM]; + calandar_and_dat_t calandar_and_dat; + + /*---------------回收槽控制相关----------------------*/ + int currReclaimTankPos; + int currReclaimOperationCnt; + bool reclainTankReachEnd; //完全打开 + bool reclainOpenAppending; + bool reclainCloseAppending; + bool canRunAirPushing; + + int currMsCnt; + /*---------------------------------------------*/ + bool cnt1CurrentValueInitDoneFlag; // 将这两个值设为false,会另cnt1和cnt2的当前值初始化 + bool cnt2CurrentValueInitDoneFlag; // + /*----------------------------------------------*/ + /*----------------------------------------------*/ + bool RedLightOnFlag; + bool GreenLightOnFlag; + bool YellowLightOnFlag; + + bool beeperOnFlag; + /*--------------------------------------------*/ + int heaterONTimeCnt; //连续加热有时间限制 + + bool lostCommuFlag; //失去通信 + + bool isPrinting; // + + int cycleValveOpenCntAfterSWintOff; //墨线关掉的时候关循环阀的时间 + int cycleValveOpenCntAfterSWintOn; //墨线开启的时候开循环阀的时间 + + //2019/10/26 + bool autoCtlReclaimAfterSWintOff; + int reclaimOpenCntAfterSWintOff; //墨线关掉的时候关回收阀的时间 + bool byHandStore; // 为了控制主墨泵, 保存当前是否在手动状态,然后切换手动状态, + + bool powerOffAppending; //按下快速关机 + + bool reclaimTankBlockedAppending; //回收槽被卡住 + int airPushingOnTime; // 排气的运行时间 + bool airPushing; // 开回收槽执行排气动作 + bool airPushingDone; // 开回收槽执行排气动作完成 + + bool DACDisable; //相位故障,DAC被disable + bool WorkTimeOut; + bool detectBestOscillatorFreqAppending; //检测最佳晶振频率 + bool detectBestOscillatorVoltageAppending; //检测最佳晶振频率 + int currentDetectBestOscillatorCnt; + int longestPhaseHightLevelTm; //最长的相位高电平时间 + int detectedBestOscillatorFreq; // + int detectedStartOscillatorFreq; + int detectedBestOscillatorVoltage; // + int releaseValveDelayCnt; //开泄压阀后立刻关掉,等一定间隔在检测 + int reclaimBlockedCnt; + bool releaseValveOpenApending; + int powerOffAfterPhaseFaultAppending; + unsigned int pressureOverFlowCnt; + unsigned int septalPositionOverFlowCnt; + bool powerOffAfterInkOrSOLVEmptyAppending; //墨水或溶剂空3小时标志 + // + alterPrint_t alterPrint; // 交替打印 + stepPrint_t stepPrint; // 跳米打印 + build_dat_t build_dat; + xor_sync_couter xor_sync; + unsigned int InkOrSOLVEmptyCnt; + unsigned char EditMode; // + + unsigned char updateSoftEN:1; + unsigned char adjHightVolInitEN:1; + unsigned char FileChangeRestCntFlag:1; // 更换文件,清除计数器 + unsigned char HVFaultCloseEn:1;// 高压故障关回收槽 + unsigned char ExtScreenEn; // 外接屏连接正常 + unsigned char waitHightVolOff,waitHightVolOn; // + unsigned char addSpace;//sysPara->para.checkSpace + unsigned char autoCleanStatus; // clean status, 0: NONE,1: Step1 ... + unsigned int autoCleanTime; // clean time + + unsigned int cnt1GroupCurrentLoop; //分段计米 计数器1当前第几次循环 + unsigned int cnt2GroupCurrentLoop; //分段计米 计数器2当前第几次循环 + unsigned char cnt1GroupRunningIndex; //分段计米 计数器1当前第几次段 + unsigned char cnt2GroupRunningIndex; //分段计米 计数器2当前第几次段 + unsigned int indoorTemperature; //开机记录喷头温度,作为是否调整粘度的根据 + unsigned int needPowerOffTimerout; + unsigned char bLanConfigManual; //手动设定有线ip 地址 + quint16 r_print_q; + quint8 col_state; + quint8 r_row_sequcence; + quint8 dot_num; + quint8 curr_index; + quint16 RowADC; + quint16 w_curr_DAC; + quint16 curr_DAC; + quint16 printed_column; + + quint16 printed_adj_dac[40]; + bool cnt3CurrentValueInitDoneFlag; + stru_counter3 Status_Counter3; + bool printDoneFlag; + bool oneCodePrintOnce; + bool forTemplateUse; + SpecialVarPrint specialVarPrint; + bool lastHighVoltageFault; //高压错误 + bool circleProductCnt; + unsigned int printTotalColNum:16; + unsigned char pixNumPerCol; + unsigned short XXXDay; + int cnt4CurrValue; + bool flagOfAdjustWidth_1; + unsigned char splitMode_Adjust_1; + bool flagOfAdjustWidth_2; + unsigned char splitMode_Adjust_2; +//edit-12.2 + bool flagOfNo67FPGA; //识别67版本,67版本使用4000列,其他版本使用8000列 + short FPGAVersionType; //兼容旧的FPGA版本,0=新FPGA. 旧FPGA: 1=No66,2=No67,3=No72,4=No73 //VX4使用,VX5不需要 + unsigned int textEditTotalCol; + quint16 gearspeed; + int sizeFPGA; + int sizeSTM32; + bool flagOfSpeedAlarm; + bool flagOfPressureFault; + int currVoltageVersion; + int lastVoltageVersion; + unsigned int stm32Verion; + bool stm32Time; + unsigned int machineMac; + int sizequeueFPGA; + bool flagOfRebootEnable; + bool logflag; + unsigned int TextInkDots; + bool flagOfSolventMaxNum; + bool flagOfInkMaxDot; + bool flagOfNeedInkCard; + bool flagOfNeedSolventCard; + bool flagOfKeyBoardType; + bool flagOfAbnormalStatus;//如果在打印过程中死机,重启后为异常状态 + bool flagOfPowerOnMode;//0为正常开机,1为24小时自动开机 + unsigned int waitPowerOffTime; +}sysStatus_t; + +#include + +/* input registers */ +typedef struct { + uint16_t printFinishFlag;//(0) + uint16_t orderCode;//顺序号(1) + + uint8_t usedFileName[100];//(2-51) + uint16_t printStatus;// 1:正在打印, 2:暂停打印, 3:停止打印(52) + uint16_t statWarn;//(53) + calandar_and_dat_t curCalendarAndDate;//(54-79) + uint32_t mbCurrPrintRow;//(80-81) + uint32_t mbCurrPrintCol;//(82-83) + uint32_t productCnt; //产品计数器(84-85) + uint16_t receiveEnbleFlag;//(86) +}ModbusPrintStatus; + +/* holding registers */ +typedef struct { + uint8_t QRcode_buf[110]; //存二维码的buf(0-54) + uint16_t printCommand; // 1:开始打印, 2:暂停打印, 3:停止打印(55) + uint8_t selectFileName[100]; // 选择要打印的文件(56-105) + uint16_t faultRusume;//(106) + calandar_and_dat_t setCalendar;//(107-133) + uint32_t lineSpaceAndCharSpace; //高16作为行间距,低16位作为字符间距(134-135) + uint16_t clearProductCnt; //产品计数器(136) + uint16_t printContent;//2位数的打印内容(137) +}ModbusPrintParas; + + +/* net data */ +typedef struct { + //get data + char PrintingContent[2048]; + int ProductPlanQty; + char ProductUniqueCode[110];// 产品唯一编码 + int ProductionTask; + char QRCodeContent[110]; + int StartMetre; + bool TasdNeedConfirm; + int TaskSwitchingMode; +}JSON_DATA; + +class SysPara{ + //Q_OBJECT +public : + + SysPara(void); + QString sysFile; + printPara_t print; + printPara_t printPre; + printPara_t printInit; + sysPara_t para; + voltePara_t voltePara; + voltePara_t_25Dots voltePara_25Dots; + voltePara_t_No73 voltePara_No73; + RFIDPara_t RFIDPara; + sysStatus_t status; + ModbusPrintStatus modbusStatus; + ModbusPrintParas modbusParas; + JSON_DATA Get_JSON_DATA; + DevOp *devOp; /*设备操作*/ + void loadParaFromFile(); + void saveParaToFile(); + void loadDefaultPara(); + void loadDefaultPrintPara(); + void loadPrintParaFromFile(QString fileName); + void savePrintParaToFile(); + void loadVolteParaFromFile(PRINT_MODE mode); + void saveRFIDPara(); + bool loadRFIDPara(); + void comparePrintStruct(); + void loadParaToPrintInit(); + void updatePrintInitToPara(); + private: + +}; + +#endif /* SYSPARA_H_ */ diff --git a/SystemSetting.cpp b/SystemSetting.cpp index 4998e92..3297555 100644 --- a/SystemSetting.cpp +++ b/SystemSetting.cpp @@ -1,847 +1,847 @@ -#include "SystemSetting.h" -#include "ui_systemsetting.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include "LogInfo.h" -#include "myinclude.h" -#include "QInputDialog" -#include "dlgmutilanguage.h" -//#define FINDVOL -#include "InputMethod.h" - -int convertFreq(int index){ -// qDebug()<<"index="<setupUi(this); - progressBar.setGeometry(200,200,300,40); //将其放在最中间 - progressBar.hide(); - timer = new QTimer(); - connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); - timer2 = new QTimer(); - connect(timer2, SIGNAL(timeout()), this, SLOT(timerHandler2())); - timerAuto = new QTimer(); - connect(timerAuto,SIGNAL(timeout()),this,SLOT(autoControlPressure())); - enCleanUpAppendFlag=0; // 0空闲,1关开回收槽,2手动,3清洗,4恢复,5停止,6 - dialogUpateMm =new DialogAuthorization; - connect(dialogUpateMm,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted())); - - - // 隐藏部分过时选项 byons@2026年5月5日 - // 频率修正, 放到更高权限里 - setFreqFixVisible(false); - - // 粘度泵动作间隔 - ui->label_18->setVisible(false); - ui->spinBoxPumpInterval->setVisible(false); - - // 隔膜位置 - ui->label_20->setVisible(false); - ui->spinBoxSeptalPostion->setVisible(false); - ui->labelSpetalPosition->setVisible(false); - - // 隔膜位置偏移 - ui->label_19->setVisible(false); - ui->comboBoxDiaphramOffset->setVisible(false); -} - -SystemSetting::~SystemSetting() -{ - delete ui; - delete timer; - delete timer2; - -} - -void SystemSetting::SystemupdateSysParaToUI(){ - updateSysParaToUI(); -} - -void SystemSetting::on_pushButtonApply_pressed() -{ - applyUIPara(); - SystemSettingLog(); - - int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq); - sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2; - sysPara->devOp->setDivideRatio(sysPara->para.divideRatio); -} - -void SystemSetting::SystemSettingLog(){ - - qDebug()<spinBoxOscillatorVoltage->value()); - qDebug()<spinBoxHighVoltageLevel->value()); - qDebug()<spinBoxReclaimPumpPower->value()); - qDebug()<ViscosityAdujstSelect->currentIndex()); - qDebug()<spinBoxPumpInterval->value()); - qDebug()<spinBoxReclaimTankTime->value()); - qDebug()<spinBoxSeptalPostion->value()); - qDebug()<comboBoxDiaphramOffset->currentIndex()); - qDebug()<comboBoxEditMode->currentIndex()); - qDebug()<spinBoxPressure->value()); - qDebug()<spinBoxVIscosity->value()); - qDebug()<spinBoxTemperature->value()); - qDebug()<comboBoxOscillatorFreq->currentIndex()); - qDebug()<spinBoxOscillatorFreqFix->value()); - qDebug()<comboBoxDiameter->currentIndex()); -} - -void SystemSetting::setFreqFixVisible(bool visible) -{ - ui->label_13->setVisible(visible); - ui->spinBoxOscillatorFreqFix->setVisible(visible); - ui->label_15->setVisible(visible); -} - -void SystemSetting::updateSysParaToUI(){ - if(sysPara){ - ui->spinBoxHighVoltageLevel->setValue(sysPara->para.highVoltageLevel); - ui->spinBoxOscillatorVoltage->setValue((sysPara->para.oscillatorVoltage)); - ui->spinBoxPressure->setValue(sysPara->para.pressure); - ui->spinBoxPumpInterval->setValue(sysPara->para.viscosityPumpInterval); - ui->spinBoxReclaimPumpPower->setValue(sysPara->para.reclaimPumpPWMWidth); - ui->spinBoxReclaimTankTime->setValue(sysPara->para.reclaimTankTime); - ui->spinBoxTemperature->setValue(sysPara->para.temperature); - ui->spinBoxFanTemperature->setValue(sysPara->para.FanTemperature); - ui->spinBoxVIscosity->setValue( sysPara->para.viscosity); - ui->ViscosityAdujstSelect->setCurrentIndex(sysPara->para.viscosityAdjust); - ui->comboBoxOscillatorFreq->setCurrentIndex(sysPara->para.oscillatoFreq); - ui->spinBoxOscillatorFreqFix->setValue(sysPara->para.oscillatorFreqFix); - ui->spinBoxSeptalPostion->setValue(sysPara->para.septalPostion); - 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); - } -} - - - -extern bool gearPumpRunNormalFlag; - -void SystemSetting::applyUIPara(){ - if(sysPara){ - sysPara->para.highVoltageLevel = ui->spinBoxHighVoltageLevel->value(); - sysPara->para.oscillatorVoltage = ui->spinBoxOscillatorVoltage->value(); - sysPara->para.pressure = ui->spinBoxPressure->value(); - gearPumpRunNormalFlag = false;//重新设置压力标志设置 - sysPara->para.viscosityPumpInterval = ui->spinBoxPumpInterval->value(); - sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value(); - sysPara->para.reclaimTankTime = ui->spinBoxReclaimTankTime->value(); - sysPara->para.temperature = ui->spinBoxTemperature->value(); - sysPara->para.viscosity = ui->spinBoxVIscosity->value(); - //sysPara->para.viscosityAdjust = ui->spinBoxViscosityAdjust->value(); - sysPara->para.viscosityAdjust = ui->ViscosityAdujstSelect->currentIndex(); - sysPara->para.oscillatoFreq = ui->comboBoxOscillatorFreq->currentIndex(); - sysPara->para.oscillatorFreqFix = ui->spinBoxOscillatorFreqFix->value(); - sysPara->para.EditMode = ui->comboBoxEditMode->currentIndex(); - sysPara->para.diameter = ui->comboBoxDiameter->currentIndex();// qDebug()<<"EditMode1"<para.EditMode; - int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq); - - if(freq > 0){ - sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2; - } - else { - QMessageBox::critical(this,tr("错误"),tr("实际频率不能为%1").arg(freq)); - } - sysPara->para.FanTemperature = ui->spinBoxFanTemperature->value(); - 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("应用成功")); - } - emit changeEditMode(sysPara->para.EditMode); - //qDebug()<<"EditMode"<para.EditMode; - } -} - -void SystemSetting::updateSysStatusToUI(){ - if(sysPara){ - ui->pushButtonHighVoltageData->setEnabled( sysPara->status.currReclaimTankPos <5 ); - //ui->pushButtonHighVoltageData->setEnabled( !sysPara->status.isPrinting); - ui->spinBoxPressure->setEnabled( !sysPara->status.isPrinting); - - ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); - //ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + "600");//FPGA那边已固定600 - ui->labelMotorCurrent->setText(QString::number(sysPara->status.MOTOR_ISEN)); - ui->labelPressure->setText(QString::number(sysPara->status.PRESSURE)); - ui->labelTemperature->setText(QString::number(sysPara->status.TEMP_ADIN/4)); - ui->labelPulseCounter->setText(QString::number(sysPara->status.synTotalPulseCnt)); - //ui->label_PulseCounterZero->setText(QString::number(sysPara->status.xor_sync.sync_counter_at_zero)); -// if( sysPara->status.viscosityFaultCnt || sysPara->status.rWarnViscoReady ) -// sysPara->status.viscosity = 0;//sysPara->status.rWarnViscoReady - ui->labelVIscosity->setText(QString::number(sysPara->status.viscosity)); - ui->labelReclaimTankCloseTime->setText(QString::number(sysPara->status.currReclaimTankPos/10)); - //ui->labelTotalPulseNum->setText(QString::number(sysPara->status.synTotalPulseCnt));//不需要显示 - ui->labelSpetalPosition->setText(QString::number(sysPara->status.SEPTAL_POSITION)); - if(sysPara->para.gearPumpEnable) - { - setSpinBoxPressureMaxValue(900); - } - else - { - setSpinBoxPressureMaxValue(5000); - } - if(!sysPara->para.isCheckMagnet) - { - ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT)); // sysPara->status.currReclaimTankPos - } - else - { - ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) ); - } - if(sysPara->status.currReclaimTankPos<55 && sysPara->status.currReclaimTankPos>44 && enCleanUpAppendFlag==2) - { - if(timer2->isActive()) timer2->stop(); - enCleanUpAppendFlag=3; - sysPara->devOp->controlReclaimTankOpen(0); - emit onCleanUPNow();// start cleanup - } - else if(sysPara->status.currReclaimTankPos >0 && enCleanUpAppendFlag==4) //? - { - enCleanUpAppendFlag=5; - //sysPara->devOp->controlReclaimTankClose(1); - //ui->label_status->setText(tr("正在关回收槽......")); - } - else if(sysPara->status.currReclaimTankPos ==0 && (enCleanUpAppendFlag==5 ||enCleanUpAppendFlag==4)) //? - { - if(sysPara->status.reclaimCloseCnt)sysPara->status.reclaimCloseCnt--; - else { - sysPara->devOp->controlReclaimTankOpen(0); - timerHandler2(); - if(timer2->isActive()) timer2->stop(); - enCleanUpAppendFlag=0; - } - } - else - { - - } - } -} - -void SystemSetting::on_pushButtonCleanUP_pressed() -{ - if(sysPara){ - QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("自动清洗时间约为一分钟,然后自动停止")); - QPushButton *cleanButton; - QPushButton *cancleCleanButton; - cleanButton=NULL; - cancleCleanButton=NULL; - r_PumpValveControledByHand = false; - if( enCleanUpAppendFlag==0) cleanButton = msgBox.addButton(tr("开始清洗"), QMessageBox::ActionRole); - else cancleCleanButton = msgBox.addButton(tr("停止清洗"), QMessageBox::ActionRole); - msgBox.addButton(QMessageBox::Cancel); - msgBox.exec(); - if (msgBox.clickedButton() == cleanButton) - { - r_PumpValveControledByHand = sysPara->status.isPumpValveControledByHand; - //ui->label_status->setText(tr("正在进入手动模式......")); - sysPara->status.isPumpValveControledByHand=true; - sysPara->devOp->controlCompressPump(false); - sysPara->devOp->controlCycleValve(true); - sysPara->devOp->controlInkValve(false); - sysPara->devOp->controlInkValvePWM(false); - sysPara->devOp->controlMainInkPump(false); - sysPara->devOp->controlMixValve(false); - sysPara->devOp->controlReclaimPump(true,true); - sysPara->devOp->controlViscosityPump(false); - sysPara->devOp->controlReleaseValve(false); - - if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){ - sysPara->devOp->controlCycleValve(true); - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlReclaimPump(true,false); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - sysPara->devOp->controlInkValvePWM(false); - } - - enCleanUpAppendFlag=1;// 开始启动手动模式 - sysPara->devOp->mainInkCtrl(); - timer2->start(2000); // 暂时循环一下2s - } - else if (msgBox.clickedButton() == cancleCleanButton) { - enCleanUpAppendFlag=3; - timerHandler2(); - return ; - } - } - -} -void SystemSetting::onCleanUPNow() -{ - if(sysPara){ - emit setRunStatus(tr("正在喷嘴逆清洗......")); - if(!(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)){ - sysPara->devOp->controlCycleValve(true); - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlReclaimPump(true,false); - } - timer2->start(60000); - } -} - -void SystemSetting::autoControlPressure(){ - emit pressureAdjust(); -} - -void SystemSetting::timerHandler2(){ - if(sysPara){ - if(enCleanUpAppendFlag==1) - { - //2s循环结束 - // sysPara->devOp->controlCycleValve(false); - // sysPara->devOp->controlReclaimPump(false,false); - if(timer2->isActive()) timer2->stop(); - // 已经进入手动模式了 - // 判断回收槽位置,并控制回收槽打开10mm以上; - enCleanUpAppendFlag=2; - if(sysPara->status.currReclaimTankPos<45) - { - sysPara->devOp->controlReclaimTankOpen(1); - //ui->label_status->setText(tr("正在开回收槽......")); - } - else if(sysPara->status.currReclaimTankPos>55){ - sysPara->devOp->controlReclaimTankClose(1); - //ui->label_status->setText(tr("正在关回收槽......")); - } - timer2->start(5500); - } - else if(enCleanUpAppendFlag==2) // 正在开回收槽 - { - if(timer2->isActive()) timer2->stop(); - enCleanUpAppendFlag=3; - sysPara->devOp->controlReclaimTankOpen(0); - emit onCleanUPNow();// start cleanup - } - else if(enCleanUpAppendFlag==3){// 清洗完成 - enCleanUpAppendFlag=4; - // emit setRunStatus(tr("清洗完成")); - sysPara->devOp->controlCycleValve(false); - sysPara->devOp->controlViscosityPump(false); - sysPara->devOp->controlReclaimTankClose(1); - sysPara->status.reclaimCloseCnt=10; - if(timer2->isActive()) timer2->stop(); - timer2->start(8300); // close reclaimTandk - if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){ - timerAuto->start(100); - } - } - else if(enCleanUpAppendFlag==4){ - emit setRunStatus(tr("清洗完成")); - if(sysPara->status.currReclaimTankPos==0){ - enCleanUpAppendFlag=0; - if(timer2->isActive()) timer2->stop(); - sysPara->devOp->controlReclaimTankClose(0); - } - sysPara->status.isPumpValveControledByHand = false; - if(timerAuto->isActive()) timerAuto->stop(); - sysPara->devOp->mainInkCtrl(); - } - else if(enCleanUpAppendFlag==5){ - if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0; - sysPara->devOp->controlReclaimTankClose(0); - sysPara->status.isPumpValveControledByHand =false; - sysPara->devOp->mainInkCtrl(); - } - else if(enCleanUpAppendFlag==6){ - if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0; - sysPara->status.isPumpValveControledByHand =false ; - } - else {if(timer2->isActive()) timer2->stop();} - } -} - -void SystemSetting::on_spinBoxReclaimPumpPower_valueChanged(int arg1) -{ - Q_UNUSED(arg1); - if(sysPara){ - if(sysPara->devOp->isReclaimPumpOpen()){ //在当前是开的情况下重设pwm - sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value(); - sysPara->devOp->controlReclaimPump(true,false); - } - } -} - - - -void SystemSetting::on_pushButtonHighVoltageData_pressed() -{ - ondialogAuthorizationAccepted(); -} - -void SystemSetting::ondialogAuthorizationAccepted() -{ - if(sysPara){ - QMessageBox::StandardButton ret; - if(sysPara->status.adjHightVolInitEN==0){ - { - sysPara->status.adjHightVolInitEN =1; - } - } - - ret = QMessageBox::information(this, tr("Application"), - tr("是否更新高压包电流数据?"), - QMessageBox::Ok | QMessageBox::Cancel); - - if (ret == QMessageBox::Ok){ - if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ - QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); - return ; - } - lastHighVoltageOpen = sysPara->devOp->isHighVoltageOpen(); - - sysPara->status.detectHighVoltageAppending = true; - sysPara->status.detectedValidHighVoltage = false; - sysPara->status.detectHighVoltageCnt = 0; - detectValidHVCnt = 0; - progressBar.setMaximum (ARRAY_SIZE(sysPara->para.highVoltageRecord)); - progressBar.setMinimum (0); - progressBar.setValue(sysPara->status.detectHighVoltageCnt); - progressBar.show(); - timer->start(1000); - //ui->label_HVFlag->setText(tr("")); - sysPara->para.set_HVData_Flag = 1; // - sysPara->devOp->writeFpgaPrintPara(true); - //--sysPara->devOp->setCtrlFlags(); - //qDebug()<<"set_HVData_Flag"<para.set_HVData_Flag ; - - } - } -} -//#define VOLDIV 5 // 原来的值 -//#define VOLNUM 20 // 原来的值 -#define VOLDIV 2 // 测试的值 -#define VOLNUM 50 // 测试的值 -void SystemSetting::on_pushButtonSearchBestOscillatorVoltage_pressed() -{ - if(sysPara){ - if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ - QMessageBox::information(this,tr("错误"),tr("墨线开关未开,请先打开墨线开关!")); - return ; - } - if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ - QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); - return ; - } - if(!sysPara->status.reclainTankReachEnd){ - QMessageBox::information(this,tr("错误"),tr("回收槽未全部打开!")); - return ; - } - - QMessageBox::StandardButton ret; - - ret = QMessageBox::information(this, tr("Application"), - tr("自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->printCtrl(PRINT_CTRL_STOP); //停止打印 - sysPara->devOp->highVoltageCtrl(0); // 关高压 - progressBar.setMaximum (VOLNUM); - progressBar.setMinimum (0); - progressBar.setValue(0); - progressBar.show(); - sysPara->status.detectBestOscillatorVoltageAppending = true; - sysPara->status.currentDetectBestOscillatorCnt = 0; - sysPara->status.longestPhaseHightLevelTm = 0; - sysPara->status.detectedBestOscillatorVoltage = 0; - sysPara->devOp->setOscillatorVoltage(0); - - timer->start(6000); - } - } -} - -void SystemSetting::on_pushButtonSearchBestOscillatorFreq_pressed() -{ - if(sysPara){ - if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ - QMessageBox::information(this,tr("错误"),tr("墨线开关未开,请先打开墨线开关!")); - return ; - } - if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ - QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); - return ; - } - if(!sysPara->status.reclainTankReachEnd){ - QMessageBox::information(this,tr("错误"),tr("回收槽未全部打开!")); - return ; - } - - QMessageBox::StandardButton ret; - - ret = QMessageBox::information(this, tr("Application"), - tr("自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->printCtrl(PRINT_CTRL_STOP); //停止打印 - sysPara->devOp->highVoltageCtrl(0); // 关高压 - progressBar.setMaximum (20); - progressBar.setMinimum (0); - progressBar.setValue(0); - progressBar.show(); - - if(sysPara->para.divideRatio){ - sysPara->status.detectedStartOscillatorFreq = FPGA_SYS_HZ/(2*sysPara->para.divideRatio); - sysPara->status.detectedStartOscillatorFreq -= 2000; - } - else { - sysPara->status.detectedStartOscillatorFreq = 63000; - } - if(sysPara->status.detectedStartOscillatorFreq < 50000 || sysPara->status.detectedStartOscillatorFreq > 110000){ - QMessageBox::critical(this, tr("错误"), - tr("搜索的起始频率%1 HZ超出范围?").arg(sysPara->status.detectedStartOscillatorFreq)); - return ; - } - sysPara->status.detectBestOscillatorFreqAppending = true; - sysPara->status.currentDetectBestOscillatorCnt = 0; - sysPara->status.longestPhaseHightLevelTm = 0; - sysPara->status.detectedBestOscillatorFreq = sysPara->status.detectedStartOscillatorFreq; - sysPara->devOp->setDivideRatio(0); - timer->start(6000); - } - } -} - -//排序函数 -void bubbleSort(unsigned short arr[], int n) { - for (int i = 0; i < n - 1; i++) { - for (int j = 0; j < n - i - 1; j++) { - if (arr[j] > arr[j + 1]) { - int temp = arr[j]; - arr[j] = arr[j + 1]; - arr[j + 1] = temp; - } - } - } -} - -void SystemSetting::timerHandler(){ - if(sysPara){ - /*-------------------------------------高压检测-----------------------------------*/ - if(sysPara->status.detectHighVoltageAppending){ - if(sysPara->status.detectHighVoltageCnt < ARRAY_SIZE(sysPara->para.highVoltageRecord)-1){ - sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] = - sysPara->status.detectHighVoltageCnt?sysPara->status.HV_DETOUT:0; - sysPara->devOp->maxHighVoltageDACCtrl(0); //将其detectHighVoltageCnt设置为零,不处理高压故障 - sysPara->devOp->resumeFault(); //如果有高压故障,恢复高压故障 - progressBar.setValue(sysPara->status.detectHighVoltageCnt); - /* 应要求去掉多余到信息*/ - LogInfo::setRunStatusText(QString("High voltage %1 --- value %2") - .arg(sysPara->status.detectHighVoltageCnt).arg(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt])); - - if(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] > 30) //起始电压太小不算 - { - if(sysPara->status.detectedValidHighVoltage) - sysPara->status.detectHighVoltageCnt ++; - else{ //从无到有第一次检测高压的话,计数不加1 - - } - sysPara->status.detectedValidHighVoltage = true; - } - else - sysPara->status.detectHighVoltageCnt ++; - int actHvAmp = sysPara->status.detectHighVoltageCnt*10; - sysPara->devOp->highVoltageCtrl(actHvAmp); - sysPara->para.HighVoltageAmplitude = actHvAmp; - }else { - sysPara->para.highVoltageRecord[9] = sysPara->para.highVoltageRecord[8]; - sysPara->status.detectHighVoltageAppending = 0; - LogInfo::setRunStatusText(tr("高压设置完成")); - sysPara->para.set_HVData_Flag = 0; // - sysPara->devOp->writeFpgaPrintPara(true); //在这里面不能产生阻塞 - progressBar.hide(); - timer->stop(); - - if(lastHighVoltageOpen){ - sysPara->devOp->highVoltageCtrl(1); - }else{ - sysPara->devOp->highVoltageCtrl(0); - } - - } - } - else if(sysPara->status.detectBestOscillatorFreqAppending){ - sysPara->devOp->readPhaseDetectHighTm(); - int longestPhaseHightLevelTm = 0; - if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ - int n = ARRAY_SIZE(sysPara->status.phaseDetectHighTm); - bubbleSort(sysPara->status.phaseDetectHighTm, n); - - int sum = 0; - for (int i= 1; i < n -1; i++) - { - sum += sysPara->status.phaseDetectHighTm[i]; - } - longestPhaseHightLevelTm = sum / (n-2); - - } - LogInfo::setRunStatusText(tr("Oscillator Freq %1 --- 最长高电平时钟 %2") - .arg( sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200).arg(longestPhaseHightLevelTm)); - - if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ - sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; - sysPara->status.detectedBestOscillatorFreq = sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200; - } - sysPara->status.currentDetectBestOscillatorCnt++; - sysPara->devOp->setDivideRatio((FPGA_SYS_HZ/(sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200))/2); - progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); - if(sysPara->status.currentDetectBestOscillatorCnt == 20){ //100分了20份 - sysPara->status.detectBestOscillatorFreqAppending= false; - int bestRatio = (FPGA_SYS_HZ/(sysPara->status.detectedBestOscillatorFreq))/2; - /*------------------------------------------------------------------------------------*/ - ui->spinBoxOscillatorFreqFix->setValue(sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq)); - sysPara->para.oscillatorFreqFix = sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq); - /*------------------------------------------------------------------------------------*/ - sysPara->devOp->setDivideRatio(bestRatio); - sysPara->para.divideRatio = bestRatio; - progressBar.hide(); - timer->stop(); - LogInfo::setRunStatusText(tr("最佳晶振频率完成")); - } - } -#ifdef FINDVOL - else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压 - sysPara->devOp->readPhaseDetectHighTm(); - int longestPhaseHightLevelTm = 0; - if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ - for(int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){ - if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){ - longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i]; - } - } - } - LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2") - .arg(sysPara->status.currentDetectBestOscillatorCnt*3).arg(longestPhaseHightLevelTm)); - - if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ - sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; - sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*3; - } - sysPara->status.currentDetectBestOscillatorCnt++; - sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*3); - progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); - if(sysPara->status.currentDetectBestOscillatorCnt == 32){ //分了32份 - sysPara->status.detectBestOscillatorVoltageAppending = false; - ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage); - sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage); - sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage; - progressBar.hide(); - timer->stop(); - LogInfo::setRunStatusText(tr("最佳晶振电压完成")); - } - } -#else - else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压 - sysPara->devOp->readPhaseDetectHighTm(); - - int longestPhaseHightLevelTm = 0; - if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ - for(unsigned int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){ - if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){ - longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i]; - } - } - } - LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2") - .arg(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV).arg(longestPhaseHightLevelTm)); - - if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ - sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; - sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*VOLDIV; - } - sysPara->status.currentDetectBestOscillatorCnt++; - sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV); - - progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); - if(sysPara->status.currentDetectBestOscillatorCnt == VOLNUM){ //分了20份 - sysPara->status.detectBestOscillatorVoltageAppending = false; - ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage); - sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage); - - sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage; - progressBar.hide(); - timer->stop(); - LogInfo::setRunStatusText(tr("最佳晶振电压完成")); - } - } -#endif - - } -} - - - -void SystemSetting::updateReclaimTime(int time){ - if(sysPara){ - ui->spinBoxReclaimTankTime->setValue(time); - } -} -void SystemSetting::updateViscosityAdjust(int offset){ - if(sysPara){ - int viscostyRealValue; - if(offset>0) - { - if(offset>5) - offset = 5; - if(sysPara->para.viscosityAdjust==1)//0.6% - { - //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/5/100; - viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/500; - } - else if(sysPara->para.viscosityAdjust==2)//1.0% - { - //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*5)/5/100; - viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset/100; - } - else if(sysPara->para.viscosityAdjust==3)//1.6% - { - //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*8)/5/100; - viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*8/500; - } - else if(sysPara->para.viscosityAdjust==4)//2.0% - { - //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*10)/5/100; - viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*2/100; - } - else - { - viscostyRealValue = sysPara->para.viscosity; - } - } - else - { - viscostyRealValue = sysPara->para.viscosity; - } - if(sysPara->para.viscosityAdjust!=0) - { - ui->ViscosityAdjustText->setText(QString("%1").arg(viscostyRealValue)); - } - } -} - -void SystemSetting::updateAuthorization(int auth){ - if(sysPara){ - } -} - void SystemSetting::setSpinBoxPressureMaxValue(int pressureVal) - { - ui->spinBoxPressure->setMaximum(pressureVal); - } - -//简单的使用输入框值变化事件时,会在用户输入个位数(未输入完成时),就触发发送修改命令,造成断点不正常 -void SystemSetting::on_spinBoxOscillatorVoltage_valueChanged(int arg1) -{ - static int vol=0; // - if(sysPara){ - if(vol-1==arg1 || vol+1==arg1) - { - //qDebug()<<"OSCVOL:"<devOp->setOscillatorVoltage(ui->spinBoxOscillatorVoltage->value()); - - } - vol = arg1; - } -} -#include "Public.h" - -void SystemSetting::on_pushButtonInterFace_pressed() -{ - QString s1 = Public::ReadLanguageName(); - if(s1 =="English") { - dlgLanguage.LangIndex =INPUT_METHOD_TYPE_ENGLISH; - } - else if(s1 =="Korean") { - dlgLanguage.LangIndex =INPUT_METHOD_TYPE_KOREAN; - } - else{ - dlgLanguage.LangIndex =INPUT_METHOD_TYPE_CHINESE; - } - - dlgLanguage.setCurrentLanguage(); - dlgLanguage.show(); - - -/* - QFile file(SYS_ROOT_DIR"UseEn"); - - QMessageBox::StandardButton ret; - ret = QMessageBox::information(this, tr("警告"), - tr("确定要切换显示语言吗?\r\n(重启才能生效)"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret != QMessageBox::Ok){ - return; - } - - QString s1 = Public::ReadLanguageName(); - - if(file.open(QIODevice::ReadWrite| QIODevice::Truncate)) { - QByteArray buf; - buf.clear(); - if(s1 =="English") {// English--> Vietnamese - QMessageBox::information(this,tr("提示"),tr("重启后切换到越南语界面")); - buf.append("Vietnamese\r\n"); - buf.append("YN_utf8.txt\r\n"); - } - else if(s1 =="Vietnamese") {// Vietnamese--> Chinese - QMessageBox::information(this,tr("提示"),tr("重启后切换到中文界面")); - buf.append("Chinese\r\n"); - buf.append("WINPY_utf8.txt\r\n"); - } - else{// Chinese--> English - QMessageBox::information(this,tr("提示"),tr("重启后切换到英文界面")); - buf.append("English\r\n"); - buf.append("WINPY_utf8.txt\r\n"); - } - file.write(buf); - file.close(); - setInterfaceMode(); - } -*/ -} - -void SystemSetting::setInterfaceMode() -{ - QString s1 = Public::ReadLanguageName(); - if(s1 =="English") {// English--> Vietnamese - ui->pushButtonInterFace->setText( tr("Tiếng Việt(Vietnamese interface)")); - } - else if(s1 =="Vietnamese") {// Vietnamese--> Chinese - ui->pushButtonInterFace->setText( tr("Chinese interface(中文界面)")); - } - else{// Chinese--> English - ui->pushButtonInterFace->setText( tr("English interface(英文界面)")); - } - -} +#include "SystemSetting.h" +#include "ui_systemsetting.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "LogInfo.h" +#include "myinclude.h" +#include "QInputDialog" +#include "dlgmutilanguage.h" +//#define FINDVOL +#include "InputMethod.h" + +int convertFreq(int index){ +// qDebug()<<"index="<setupUi(this); + progressBar.setGeometry(200,200,300,40); //将其放在最中间 + progressBar.hide(); + timer = new QTimer(); + connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler())); + timer2 = new QTimer(); + connect(timer2, SIGNAL(timeout()), this, SLOT(timerHandler2())); + timerAuto = new QTimer(); + connect(timerAuto,SIGNAL(timeout()),this,SLOT(autoControlPressure())); + enCleanUpAppendFlag=0; // 0空闲,1关开回收槽,2手动,3清洗,4恢复,5停止,6 + dialogUpateMm =new DialogAuthorization; + connect(dialogUpateMm,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted())); + + + // 隐藏部分过时选项 byons@2026年5月5日 + // 频率修正, 放到更高权限里 + setFreqFixVisible(false); + + // 粘度泵动作间隔 + ui->label_18->setVisible(false); + ui->spinBoxPumpInterval->setVisible(false); + + // 隔膜位置 + ui->label_20->setVisible(false); + ui->spinBoxSeptalPostion->setVisible(false); + ui->labelSpetalPosition->setVisible(false); + + // 隔膜位置偏移 + ui->label_19->setVisible(false); + ui->comboBoxDiaphramOffset->setVisible(false); +} + +SystemSetting::~SystemSetting() +{ + delete ui; + delete timer; + delete timer2; + +} + +void SystemSetting::SystemupdateSysParaToUI(){ + updateSysParaToUI(); +} + +void SystemSetting::on_pushButtonApply_pressed() +{ + applyUIPara(); + SystemSettingLog(); + + int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq); + sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2; + sysPara->devOp->setDivideRatio(sysPara->para.divideRatio); +} + +void SystemSetting::SystemSettingLog(){ + + qDebug()<spinBoxOscillatorVoltage->value()); + qDebug()<spinBoxHighVoltageLevel->value()); + qDebug()<spinBoxReclaimPumpPower->value()); + qDebug()<ViscosityAdujstSelect->currentIndex()); + qDebug()<spinBoxPumpInterval->value()); + qDebug()<spinBoxReclaimTankTime->value()); + qDebug()<spinBoxSeptalPostion->value()); + qDebug()<comboBoxDiaphramOffset->currentIndex()); + qDebug()<comboBoxEditMode->currentIndex()); + qDebug()<spinBoxPressure->value()); + qDebug()<spinBoxVIscosity->value()); + qDebug()<spinBoxTemperature->value()); + qDebug()<comboBoxOscillatorFreq->currentIndex()); + qDebug()<spinBoxOscillatorFreqFix->value()); + qDebug()<comboBoxDiameter->currentIndex()); +} + +void SystemSetting::setFreqFixVisible(bool visible) +{ + ui->label_13->setVisible(visible); + ui->spinBoxOscillatorFreqFix->setVisible(visible); + ui->label_15->setVisible(visible); +} + +void SystemSetting::updateSysParaToUI(){ + if(sysPara){ + ui->spinBoxHighVoltageLevel->setValue(sysPara->para.highVoltageLevel); + ui->spinBoxOscillatorVoltage->setValue((sysPara->para.oscillatorVoltage)); + ui->spinBoxPressure->setValue(sysPara->para.pressure); + ui->spinBoxPumpInterval->setValue(sysPara->para.viscosityPumpInterval); + ui->spinBoxReclaimPumpPower->setValue(sysPara->para.reclaimPumpPWMWidth); + ui->spinBoxReclaimTankTime->setValue(sysPara->para.reclaimTankTime); + ui->spinBoxTemperature->setValue(sysPara->para.temperature); + ui->spinBoxFanTemperature->setValue(sysPara->para.FanTemperature); + ui->spinBoxVIscosity->setValue( sysPara->para.viscosity); + ui->ViscosityAdujstSelect->setCurrentIndex(sysPara->para.viscosityAdjust); + ui->comboBoxOscillatorFreq->setCurrentIndex(sysPara->para.oscillatoFreq); + ui->spinBoxOscillatorFreqFix->setValue(sysPara->para.oscillatorFreqFix); + ui->spinBoxSeptalPostion->setValue(sysPara->para.septalPostion); + 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); + } +} + + + +extern bool gearPumpRunNormalFlag; + +void SystemSetting::applyUIPara(){ + if(sysPara){ + sysPara->para.highVoltageLevel = ui->spinBoxHighVoltageLevel->value(); + sysPara->para.oscillatorVoltage = ui->spinBoxOscillatorVoltage->value(); + sysPara->para.pressure = ui->spinBoxPressure->value(); + gearPumpRunNormalFlag = false;//重新设置压力标志设置 + sysPara->para.viscosityPumpInterval = ui->spinBoxPumpInterval->value(); + sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value(); + sysPara->para.reclaimTankTime = ui->spinBoxReclaimTankTime->value(); + sysPara->para.temperature = ui->spinBoxTemperature->value(); + sysPara->para.viscosity = ui->spinBoxVIscosity->value(); + //sysPara->para.viscosityAdjust = ui->spinBoxViscosityAdjust->value(); + sysPara->para.viscosityAdjust = ui->ViscosityAdujstSelect->currentIndex(); + sysPara->para.oscillatoFreq = ui->comboBoxOscillatorFreq->currentIndex(); + sysPara->para.oscillatorFreqFix = ui->spinBoxOscillatorFreqFix->value(); + sysPara->para.EditMode = ui->comboBoxEditMode->currentIndex(); + sysPara->para.diameter = ui->comboBoxDiameter->currentIndex();// qDebug()<<"EditMode1"<para.EditMode; + int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq); + + if(freq > 0){ + sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2; + } + else { + QMessageBox::critical(this,tr("错误"),tr("实际频率不能为%1").arg(freq)); + } + sysPara->para.FanTemperature = ui->spinBoxFanTemperature->value(); + 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("应用成功")); + } + emit changeEditMode(sysPara->para.EditMode); + //qDebug()<<"EditMode"<para.EditMode; + } +} + +void SystemSetting::updateSysStatusToUI(){ + if(sysPara){ + ui->pushButtonHighVoltageData->setEnabled( sysPara->status.currReclaimTankPos <5 ); + //ui->pushButtonHighVoltageData->setEnabled( !sysPara->status.isPrinting); + ui->spinBoxPressure->setEnabled( !sysPara->status.isPrinting); + + ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); + //ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + "600");//FPGA那边已固定600 + ui->labelMotorCurrent->setText(QString::number(sysPara->status.MOTOR_ISEN)); + ui->labelPressure->setText(QString::number(sysPara->status.PRESSURE)); + ui->labelTemperature->setText(QString::number(sysPara->status.TEMP_ADIN/4)); + ui->labelPulseCounter->setText(QString::number(sysPara->status.synTotalPulseCnt)); + //ui->label_PulseCounterZero->setText(QString::number(sysPara->status.xor_sync.sync_counter_at_zero)); +// if( sysPara->status.viscosityFaultCnt || sysPara->status.rWarnViscoReady ) +// sysPara->status.viscosity = 0;//sysPara->status.rWarnViscoReady + ui->labelVIscosity->setText(QString::number(sysPara->status.viscosity)); + ui->labelReclaimTankCloseTime->setText(QString::number(sysPara->status.currReclaimTankPos/10)); + //ui->labelTotalPulseNum->setText(QString::number(sysPara->status.synTotalPulseCnt));//不需要显示 + ui->labelSpetalPosition->setText(QString::number(sysPara->status.SEPTAL_POSITION)); + if(sysPara->para.gearPumpEnable) + { + setSpinBoxPressureMaxValue(900); + } + else + { + setSpinBoxPressureMaxValue(5000); + } + if(!sysPara->para.isCheckMagnet) + { + ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT)); // sysPara->status.currReclaimTankPos + } + else + { + ui->pushButtonCleanUP->setEnabled( (sysPara->status.currReclaimTankPos<70) ); + } + if(sysPara->status.currReclaimTankPos<55 && sysPara->status.currReclaimTankPos>44 && enCleanUpAppendFlag==2) + { + if(timer2->isActive()) timer2->stop(); + enCleanUpAppendFlag=3; + sysPara->devOp->controlReclaimTankOpen(0); + emit onCleanUPNow();// start cleanup + } + else if(sysPara->status.currReclaimTankPos >0 && enCleanUpAppendFlag==4) //? + { + enCleanUpAppendFlag=5; + //sysPara->devOp->controlReclaimTankClose(1); + //ui->label_status->setText(tr("正在关回收槽......")); + } + else if(sysPara->status.currReclaimTankPos ==0 && (enCleanUpAppendFlag==5 ||enCleanUpAppendFlag==4)) //? + { + if(sysPara->status.reclaimCloseCnt)sysPara->status.reclaimCloseCnt--; + else { + sysPara->devOp->controlReclaimTankOpen(0); + timerHandler2(); + if(timer2->isActive()) timer2->stop(); + enCleanUpAppendFlag=0; + } + } + else + { + + } + } +} + +void SystemSetting::on_pushButtonCleanUP_pressed() +{ + if(sysPara){ + QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("自动清洗时间约为一分钟,然后自动停止")); + QPushButton *cleanButton; + QPushButton *cancleCleanButton; + cleanButton=NULL; + cancleCleanButton=NULL; + r_PumpValveControledByHand = false; + if( enCleanUpAppendFlag==0) cleanButton = msgBox.addButton(tr("开始清洗"), QMessageBox::ActionRole); + else cancleCleanButton = msgBox.addButton(tr("停止清洗"), QMessageBox::ActionRole); + msgBox.addButton(QMessageBox::Cancel); + msgBox.exec(); + if (msgBox.clickedButton() == cleanButton) + { + r_PumpValveControledByHand = sysPara->status.isPumpValveControledByHand; + //ui->label_status->setText(tr("正在进入手动模式......")); + sysPara->status.isPumpValveControledByHand=true; + sysPara->devOp->controlCompressPump(false); + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + sysPara->devOp->controlMainInkPump(false); + sysPara->devOp->controlMixValve(false); + sysPara->devOp->controlReclaimPump(true,true); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReleaseValve(false); + + if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){ + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlReclaimPump(true,false); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + sysPara->devOp->controlInkValvePWM(false); + } + + enCleanUpAppendFlag=1;// 开始启动手动模式 + sysPara->devOp->mainInkCtrl(); + timer2->start(2000); // 暂时循环一下2s + } + else if (msgBox.clickedButton() == cancleCleanButton) { + enCleanUpAppendFlag=3; + timerHandler2(); + return ; + } + } + +} +void SystemSetting::onCleanUPNow() +{ + if(sysPara){ + emit setRunStatus(tr("正在喷嘴逆清洗......")); + if(!(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)){ + sysPara->devOp->controlCycleValve(true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlReclaimPump(true,false); + } + timer2->start(60000); + } +} + +void SystemSetting::autoControlPressure(){ + emit pressureAdjust(); +} + +void SystemSetting::timerHandler2(){ + if(sysPara){ + if(enCleanUpAppendFlag==1) + { + //2s循环结束 + // sysPara->devOp->controlCycleValve(false); + // sysPara->devOp->controlReclaimPump(false,false); + if(timer2->isActive()) timer2->stop(); + // 已经进入手动模式了 + // 判断回收槽位置,并控制回收槽打开10mm以上; + enCleanUpAppendFlag=2; + if(sysPara->status.currReclaimTankPos<45) + { + sysPara->devOp->controlReclaimTankOpen(1); + //ui->label_status->setText(tr("正在开回收槽......")); + } + else if(sysPara->status.currReclaimTankPos>55){ + sysPara->devOp->controlReclaimTankClose(1); + //ui->label_status->setText(tr("正在关回收槽......")); + } + timer2->start(5500); + } + else if(enCleanUpAppendFlag==2) // 正在开回收槽 + { + if(timer2->isActive()) timer2->stop(); + enCleanUpAppendFlag=3; + sysPara->devOp->controlReclaimTankOpen(0); + emit onCleanUPNow();// start cleanup + } + else if(enCleanUpAppendFlag==3){// 清洗完成 + enCleanUpAppendFlag=4; + // emit setRunStatus(tr("清洗完成")); + sysPara->devOp->controlCycleValve(false); + sysPara->devOp->controlViscosityPump(false); + sysPara->devOp->controlReclaimTankClose(1); + sysPara->status.reclaimCloseCnt=10; + if(timer2->isActive()) timer2->stop(); + timer2->start(8300); // close reclaimTandk + if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){ + timerAuto->start(100); + } + } + else if(enCleanUpAppendFlag==4){ + emit setRunStatus(tr("清洗完成")); + if(sysPara->status.currReclaimTankPos==0){ + enCleanUpAppendFlag=0; + if(timer2->isActive()) timer2->stop(); + sysPara->devOp->controlReclaimTankClose(0); + } + sysPara->status.isPumpValveControledByHand = false; + if(timerAuto->isActive()) timerAuto->stop(); + sysPara->devOp->mainInkCtrl(); + } + else if(enCleanUpAppendFlag==5){ + if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0; + sysPara->devOp->controlReclaimTankClose(0); + sysPara->status.isPumpValveControledByHand =false; + sysPara->devOp->mainInkCtrl(); + } + else if(enCleanUpAppendFlag==6){ + if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0; + sysPara->status.isPumpValveControledByHand =false ; + } + else {if(timer2->isActive()) timer2->stop();} + } +} + +void SystemSetting::on_spinBoxReclaimPumpPower_valueChanged(int arg1) +{ + Q_UNUSED(arg1); + if(sysPara){ + if(sysPara->devOp->isReclaimPumpOpen()){ //在当前是开的情况下重设pwm + sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value(); + sysPara->devOp->controlReclaimPump(true,false); + } + } +} + + + +void SystemSetting::on_pushButtonHighVoltageData_pressed() +{ + ondialogAuthorizationAccepted(); +} + +void SystemSetting::ondialogAuthorizationAccepted() +{ + if(sysPara){ + QMessageBox::StandardButton ret; + if(sysPara->status.adjHightVolInitEN==0){ + { + sysPara->status.adjHightVolInitEN =1; + } + } + + ret = QMessageBox::information(this, tr("Application"), + tr("是否更新高压包电流数据?"), + QMessageBox::Ok | QMessageBox::Cancel); + + if (ret == QMessageBox::Ok){ + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + lastHighVoltageOpen = sysPara->devOp->isHighVoltageOpen(); + + sysPara->status.detectHighVoltageAppending = true; + sysPara->status.detectedValidHighVoltage = false; + sysPara->status.detectHighVoltageCnt = 0; + detectValidHVCnt = 0; + progressBar.setMaximum (ARRAY_SIZE(sysPara->para.highVoltageRecord)); + progressBar.setMinimum (0); + progressBar.setValue(sysPara->status.detectHighVoltageCnt); + progressBar.show(); + timer->start(1000); + //ui->label_HVFlag->setText(tr("")); + sysPara->para.set_HVData_Flag = 1; // + sysPara->devOp->writeFpgaPrintPara(true); + //--sysPara->devOp->setCtrlFlags(); + //qDebug()<<"set_HVData_Flag"<para.set_HVData_Flag ; + + } + } +} +//#define VOLDIV 5 // 原来的值 +//#define VOLNUM 20 // 原来的值 +#define VOLDIV 2 // 测试的值 +#define VOLNUM 50 // 测试的值 +void SystemSetting::on_pushButtonSearchBestOscillatorVoltage_pressed() +{ + if(sysPara){ + if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ + QMessageBox::information(this,tr("错误"),tr("墨线开关未开,请先打开墨线开关!")); + return ; + } + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + if(!sysPara->status.reclainTankReachEnd){ + QMessageBox::information(this,tr("错误"),tr("回收槽未全部打开!")); + return ; + } + + QMessageBox::StandardButton ret; + + ret = QMessageBox::information(this, tr("Application"), + tr("自动搜索耗时较长,期间请不要进行其他操作,是否确认自动搜索最佳晶振电压?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->printCtrl(PRINT_CTRL_STOP); //停止打印 + sysPara->devOp->highVoltageCtrl(0); // 关高压 + progressBar.setMaximum (VOLNUM); + progressBar.setMinimum (0); + progressBar.setValue(0); + progressBar.show(); + sysPara->status.detectBestOscillatorVoltageAppending = true; + sysPara->status.currentDetectBestOscillatorCnt = 0; + sysPara->status.longestPhaseHightLevelTm = 0; + sysPara->status.detectedBestOscillatorVoltage = 0; + sysPara->devOp->setOscillatorVoltage(0); + + timer->start(6000); + } + } +} + +void SystemSetting::on_pushButtonSearchBestOscillatorFreq_pressed() +{ + if(sysPara){ + if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ + QMessageBox::information(this,tr("错误"),tr("墨线开关未开,请先打开墨线开关!")); + return ; + } + if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ + QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); + return ; + } + if(!sysPara->status.reclainTankReachEnd){ + QMessageBox::information(this,tr("错误"),tr("回收槽未全部打开!")); + return ; + } + + QMessageBox::StandardButton ret; + + ret = QMessageBox::information(this, tr("Application"), + tr("自动搜索耗时较长,是否确认自动搜索当前频率2K范围内最佳晶振频率?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + sysPara->devOp->printCtrl(PRINT_CTRL_STOP); //停止打印 + sysPara->devOp->highVoltageCtrl(0); // 关高压 + progressBar.setMaximum (20); + progressBar.setMinimum (0); + progressBar.setValue(0); + progressBar.show(); + + if(sysPara->para.divideRatio){ + sysPara->status.detectedStartOscillatorFreq = FPGA_SYS_HZ/(2*sysPara->para.divideRatio); + sysPara->status.detectedStartOscillatorFreq -= 2000; + } + else { + sysPara->status.detectedStartOscillatorFreq = 63000; + } + if(sysPara->status.detectedStartOscillatorFreq < 50000 || sysPara->status.detectedStartOscillatorFreq > 110000){ + QMessageBox::critical(this, tr("错误"), + tr("搜索的起始频率%1 HZ超出范围?").arg(sysPara->status.detectedStartOscillatorFreq)); + return ; + } + sysPara->status.detectBestOscillatorFreqAppending = true; + sysPara->status.currentDetectBestOscillatorCnt = 0; + sysPara->status.longestPhaseHightLevelTm = 0; + sysPara->status.detectedBestOscillatorFreq = sysPara->status.detectedStartOscillatorFreq; + sysPara->devOp->setDivideRatio(0); + timer->start(6000); + } + } +} + +//排序函数 +void bubbleSort(unsigned short arr[], int n) { + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + int temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } +} + +void SystemSetting::timerHandler(){ + if(sysPara){ + /*-------------------------------------高压检测-----------------------------------*/ + if(sysPara->status.detectHighVoltageAppending){ + if(sysPara->status.detectHighVoltageCnt < ARRAY_SIZE(sysPara->para.highVoltageRecord)-1){ + sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] = + sysPara->status.detectHighVoltageCnt?sysPara->status.HV_DETOUT:0; + sysPara->devOp->maxHighVoltageDACCtrl(0); //将其detectHighVoltageCnt设置为零,不处理高压故障 + sysPara->devOp->resumeFault(); //如果有高压故障,恢复高压故障 + progressBar.setValue(sysPara->status.detectHighVoltageCnt); + /* 应要求去掉多余到信息*/ + LogInfo::setRunStatusText(QString("High voltage %1 --- value %2") + .arg(sysPara->status.detectHighVoltageCnt).arg(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt])); + + if(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] > 30) //起始电压太小不算 + { + if(sysPara->status.detectedValidHighVoltage) + sysPara->status.detectHighVoltageCnt ++; + else{ //从无到有第一次检测高压的话,计数不加1 + + } + sysPara->status.detectedValidHighVoltage = true; + } + else + sysPara->status.detectHighVoltageCnt ++; + int actHvAmp = sysPara->status.detectHighVoltageCnt*10; + sysPara->devOp->highVoltageCtrl(actHvAmp); + sysPara->para.HighVoltageAmplitude = actHvAmp; + }else { + sysPara->para.highVoltageRecord[9] = sysPara->para.highVoltageRecord[8]; + sysPara->status.detectHighVoltageAppending = 0; + LogInfo::setRunStatusText(tr("高压设置完成")); + sysPara->para.set_HVData_Flag = 0; // + sysPara->devOp->writeFpgaPrintPara(true); //在这里面不能产生阻塞 + progressBar.hide(); + timer->stop(); + + if(lastHighVoltageOpen){ + sysPara->devOp->highVoltageCtrl(1); + }else{ + sysPara->devOp->highVoltageCtrl(0); + } + + } + } + else if(sysPara->status.detectBestOscillatorFreqAppending){ + sysPara->devOp->readPhaseDetectHighTm(); + int longestPhaseHightLevelTm = 0; + if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ + int n = ARRAY_SIZE(sysPara->status.phaseDetectHighTm); + bubbleSort(sysPara->status.phaseDetectHighTm, n); + + int sum = 0; + for (int i= 1; i < n -1; i++) + { + sum += sysPara->status.phaseDetectHighTm[i]; + } + longestPhaseHightLevelTm = sum / (n-2); + + } + LogInfo::setRunStatusText(tr("Oscillator Freq %1 --- 最长高电平时钟 %2") + .arg( sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200).arg(longestPhaseHightLevelTm)); + + if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ + sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; + sysPara->status.detectedBestOscillatorFreq = sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200; + } + sysPara->status.currentDetectBestOscillatorCnt++; + sysPara->devOp->setDivideRatio((FPGA_SYS_HZ/(sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200))/2); + progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); + if(sysPara->status.currentDetectBestOscillatorCnt == 20){ //100分了20份 + sysPara->status.detectBestOscillatorFreqAppending= false; + int bestRatio = (FPGA_SYS_HZ/(sysPara->status.detectedBestOscillatorFreq))/2; + /*------------------------------------------------------------------------------------*/ + ui->spinBoxOscillatorFreqFix->setValue(sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq)); + sysPara->para.oscillatorFreqFix = sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq); + /*------------------------------------------------------------------------------------*/ + sysPara->devOp->setDivideRatio(bestRatio); + sysPara->para.divideRatio = bestRatio; + progressBar.hide(); + timer->stop(); + LogInfo::setRunStatusText(tr("最佳晶振频率完成")); + } + } +#ifdef FINDVOL + else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压 + sysPara->devOp->readPhaseDetectHighTm(); + int longestPhaseHightLevelTm = 0; + if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ + for(int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){ + if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){ + longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i]; + } + } + } + LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2") + .arg(sysPara->status.currentDetectBestOscillatorCnt*3).arg(longestPhaseHightLevelTm)); + + if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ + sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; + sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*3; + } + sysPara->status.currentDetectBestOscillatorCnt++; + sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*3); + progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); + if(sysPara->status.currentDetectBestOscillatorCnt == 32){ //分了32份 + sysPara->status.detectBestOscillatorVoltageAppending = false; + ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage); + sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage); + sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage; + progressBar.hide(); + timer->stop(); + LogInfo::setRunStatusText(tr("最佳晶振电压完成")); + } + } +#else + else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压 + sysPara->devOp->readPhaseDetectHighTm(); + + int longestPhaseHightLevelTm = 0; + if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){ + for(unsigned int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){ + if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){ + longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i]; + } + } + } + LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2") + .arg(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV).arg(longestPhaseHightLevelTm)); + + if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){ + sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm; + sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*VOLDIV; + } + sysPara->status.currentDetectBestOscillatorCnt++; + sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV); + + progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt); + if(sysPara->status.currentDetectBestOscillatorCnt == VOLNUM){ //分了20份 + sysPara->status.detectBestOscillatorVoltageAppending = false; + ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage); + sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage); + + sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage; + progressBar.hide(); + timer->stop(); + LogInfo::setRunStatusText(tr("最佳晶振电压完成")); + } + } +#endif + + } +} + + + +void SystemSetting::updateReclaimTime(int time){ + if(sysPara){ + ui->spinBoxReclaimTankTime->setValue(time); + } +} +void SystemSetting::updateViscosityAdjust(int offset){ + if(sysPara){ + int viscostyRealValue; + if(offset>0) + { + if(offset>5) + offset = 5; + if(sysPara->para.viscosityAdjust==1)//0.6% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/500; + } + else if(sysPara->para.viscosityAdjust==2)//1.0% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*5)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset/100; + } + else if(sysPara->para.viscosityAdjust==3)//1.6% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*8)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*8/500; + } + else if(sysPara->para.viscosityAdjust==4)//2.0% + { + //viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*10)/5/100; + viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*2/100; + } + else + { + viscostyRealValue = sysPara->para.viscosity; + } + } + else + { + viscostyRealValue = sysPara->para.viscosity; + } + if(sysPara->para.viscosityAdjust!=0) + { + ui->ViscosityAdjustText->setText(QString("%1").arg(viscostyRealValue)); + } + } +} + +void SystemSetting::updateAuthorization(int auth){ + if(sysPara){ + } +} + void SystemSetting::setSpinBoxPressureMaxValue(int pressureVal) + { + ui->spinBoxPressure->setMaximum(pressureVal); + } + +//简单的使用输入框值变化事件时,会在用户输入个位数(未输入完成时),就触发发送修改命令,造成断点不正常 +void SystemSetting::on_spinBoxOscillatorVoltage_valueChanged(int arg1) +{ + static int vol=0; // + if(sysPara){ + if(vol-1==arg1 || vol+1==arg1) + { + //qDebug()<<"OSCVOL:"<devOp->setOscillatorVoltage(ui->spinBoxOscillatorVoltage->value()); + + } + vol = arg1; + } +} +#include "Public.h" + +void SystemSetting::on_pushButtonInterFace_pressed() +{ + QString s1 = Public::ReadLanguageName(); + if(s1 =="English") { + dlgLanguage.LangIndex =INPUT_METHOD_TYPE_ENGLISH; + } + else if(s1 =="Korean") { + dlgLanguage.LangIndex =INPUT_METHOD_TYPE_KOREAN; + } + else{ + dlgLanguage.LangIndex =INPUT_METHOD_TYPE_CHINESE; + } + + dlgLanguage.setCurrentLanguage(); + dlgLanguage.show(); + + +/* + QFile file(SYS_ROOT_DIR"UseEn"); + + QMessageBox::StandardButton ret; + ret = QMessageBox::information(this, tr("警告"), + tr("确定要切换显示语言吗?\r\n(重启才能生效)"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret != QMessageBox::Ok){ + return; + } + + QString s1 = Public::ReadLanguageName(); + + if(file.open(QIODevice::ReadWrite| QIODevice::Truncate)) { + QByteArray buf; + buf.clear(); + if(s1 =="English") {// English--> Vietnamese + QMessageBox::information(this,tr("提示"),tr("重启后切换到越南语界面")); + buf.append("Vietnamese\r\n"); + buf.append("YN_utf8.txt\r\n"); + } + else if(s1 =="Vietnamese") {// Vietnamese--> Chinese + QMessageBox::information(this,tr("提示"),tr("重启后切换到中文界面")); + buf.append("Chinese\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + else{// Chinese--> English + QMessageBox::information(this,tr("提示"),tr("重启后切换到英文界面")); + buf.append("English\r\n"); + buf.append("WINPY_utf8.txt\r\n"); + } + file.write(buf); + file.close(); + setInterfaceMode(); + } +*/ +} + +void SystemSetting::setInterfaceMode() +{ + QString s1 = Public::ReadLanguageName(); + if(s1 =="English") {// English--> Vietnamese + ui->pushButtonInterFace->setText( tr("Tiếng Việt(Vietnamese interface)")); + } + else if(s1 =="Vietnamese") {// Vietnamese--> Chinese + ui->pushButtonInterFace->setText( tr("Chinese interface(中文界面)")); + } + else{// Chinese--> English + ui->pushButtonInterFace->setText( tr("English interface(英文界面)")); + } + +} diff --git a/SystemSetting.h b/SystemSetting.h index f8aaabc..9ec1d0e 100644 --- a/SystemSetting.h +++ b/SystemSetting.h @@ -1,70 +1,70 @@ -#ifndef SSYSTEMSETTING_H -#define SSYSTEMSETTING_H - -#include -#include -#include "ParaSettingUI.h" -#include "TimeSettingDialog.h" -#include -#include "DialogAuthorization.h" -#include "dlgmutilanguage.h" -#include -namespace Ui { -class SystemSetting; -} - -class SystemSetting : public QWidget,public ParaSettingUI -{ - Q_OBJECT - -public: - explicit SystemSetting(QWidget *parent = 0); - ~SystemSetting(); - - void updateSysParaToUI(); //重载 - void applyUIPara(); //重载 - void updateSysStatusToUI(); //重载 - QProgressBar progressBar; - void updateReclaimTime(int time); - void updateViscosityAdjust(int offset); - void updateAuthorization(int auth); - void setSpinBoxPressureMaxValue(int pressureVal); - void SystemSettingLog(); - - bool lastHighVoltageOpen; - -public slots: - void setFreqFixVisible(bool visible); - -Q_SIGNALS: - void changeEditMode(int); - void setRunStatus(QString); - void pressureAdjust(); -private slots: - void setInterfaceMode(); - void SystemupdateSysParaToUI(); - - void on_spinBoxReclaimPumpPower_valueChanged(int arg1); - void on_pushButtonCleanUP_pressed(); - void on_pushButtonHighVoltageData_pressed(); - void on_pushButtonApply_pressed(); - void on_pushButtonSearchBestOscillatorVoltage_pressed(); - void on_pushButtonSearchBestOscillatorFreq_pressed(); - void timerHandler(); - void on_spinBoxOscillatorVoltage_valueChanged(int arg1); - void on_pushButtonInterFace_pressed(); - void ondialogAuthorizationAccepted(); - void onCleanUPNow(); - void timerHandler2(); - void autoControlPressure(); - -private: - Ui::SystemSetting *ui; - DlgMutiLanguage dlgLanguage; - QTimer *timer,*timer2, *SetinkcloseCountTimer, *timerAuto; - unsigned char enCleanUpAppendFlag; // 0空闲,1关开回收槽,2手动,3清洗,4恢复,5停止,6 - bool r_PumpValveControledByHand; - DialogAuthorization *dialogUpateMm; -}; - -#endif // SSYSTEMSETTING_H +#ifndef SSYSTEMSETTING_H +#define SSYSTEMSETTING_H + +#include +#include +#include "ParaSettingUI.h" +#include "TimeSettingDialog.h" +#include +#include "DialogAuthorization.h" +#include "dlgmutilanguage.h" +#include +namespace Ui { +class SystemSetting; +} + +class SystemSetting : public QWidget,public ParaSettingUI +{ + Q_OBJECT + +public: + explicit SystemSetting(QWidget *parent = 0); + ~SystemSetting(); + + void updateSysParaToUI(); //重载 + void applyUIPara(); //重载 + void updateSysStatusToUI(); //重载 + QProgressBar progressBar; + void updateReclaimTime(int time); + void updateViscosityAdjust(int offset); + void updateAuthorization(int auth); + void setSpinBoxPressureMaxValue(int pressureVal); + void SystemSettingLog(); + + bool lastHighVoltageOpen; + +public slots: + void setFreqFixVisible(bool visible); + +Q_SIGNALS: + void changeEditMode(int); + void setRunStatus(QString); + void pressureAdjust(); +private slots: + void setInterfaceMode(); + void SystemupdateSysParaToUI(); + + void on_spinBoxReclaimPumpPower_valueChanged(int arg1); + void on_pushButtonCleanUP_pressed(); + void on_pushButtonHighVoltageData_pressed(); + void on_pushButtonApply_pressed(); + void on_pushButtonSearchBestOscillatorVoltage_pressed(); + void on_pushButtonSearchBestOscillatorFreq_pressed(); + void timerHandler(); + void on_spinBoxOscillatorVoltage_valueChanged(int arg1); + void on_pushButtonInterFace_pressed(); + void ondialogAuthorizationAccepted(); + void onCleanUPNow(); + void timerHandler2(); + void autoControlPressure(); + +private: + Ui::SystemSetting *ui; + DlgMutiLanguage dlgLanguage; + QTimer *timer,*timer2, *SetinkcloseCountTimer, *timerAuto; + unsigned char enCleanUpAppendFlag; // 0空闲,1关开回收槽,2手动,3清洗,4恢复,5停止,6 + bool r_PumpValveControledByHand; + DialogAuthorization *dialogUpateMm; +}; + +#endif // SSYSTEMSETTING_H diff --git a/inkjetprinter.ui b/inkjetprinter.ui index 17625d8..019231c 100644 --- a/inkjetprinter.ui +++ b/inkjetprinter.ui @@ -1,2595 +1,2595 @@ - - - InkJetPrinter - - - - 0 - 0 - 800 - 600 - - - - - 0 - 0 - - - - TabWidget - - - QTabBar::scroller -{ - width:60px; -}; -background-color: rgb(186, 189, 182); - - - QTabWidget::North - - - QTabWidget::Rounded - - - 0 - - - - 16 - 16 - - - - true - - - false - - - - 主窗口 - - - - - 信息编辑 - - - - - 图案编辑 - - - - - 打印设置 - - - - - 触发设置 - - - - - 系统设置 - - - - - 系统管理 - - - - - 其他信息 - - - - - 日志信息 - - - - - 网络管理 - - - - - 电压调整 - - - - - 510 - 410 - 85 - 27 - - - - Save - - - - - - 10 - 0 - 611 - 411 - - - - Qt::StrongFocus - - - 3 - - - - 不连续电压 - - - - - 10 - 0 - 581 - 371 - - - - - - - vol0 - - - - - - - 20 - - - 4096 - - - 1 - - - - - - - 20 - - - 4095 - - - - - - - vol1 - - - - - - - vol2 - - - - - - - vol3 - - - - - - - vol4 - - - - - - - vol5 - - - - - - - vol6 - - - - - - - vol7 - - - - - - - vol8 - - - - - - - vol9 - - - - - - - vol10 - - - - - - - vol11 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - vol12 - - - - - - - vol13 - - - - - - - vol14 - - - - - - - vol15 - - - - - - - vol16 - - - - - - - vol17 - - - - - - - vol18 - - - - - - - vol19 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - vol20 - - - - - - - vol21 - - - - - - - vol22 - - - - - - - vol23 - - - - - - - vol24 - - - - - - - vol25 - - - - - - - vol26 - - - - - - - vol27 - - - - - - - vol28 - - - - - - - vol29 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - vol30 - - - - - - - vol31 - - - - - - - vol32 - - - - - - - vol33 - - - - - - - vol34 - - - - - - - vol35 - - - - - - - vol36 - - - - - - - vol37 - - - - - - - vol38 - - - - - - - vol39 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - - - 连续电压 - - - - - 0 - 0 - 581 - 371 - - - - - - - vol0 - - - - - - - 20 - - - 4096 - - - 1 - - - - - - - 20 - - - 4095 - - - - - - - vol1 - - - - - - - vol2 - - - - - - - vol3 - - - - - - - vol4 - - - - - - - vol5 - - - - - - - vol6 - - - - - - - vol7 - - - - - - - vol8 - - - - - - - vol9 - - - - - - - vol10 - - - - - - - vol11 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - vol12 - - - - - - - vol13 - - - - - - - vol14 - - - - - - - vol15 - - - - - - - vol16 - - - - - - - vol17 - - - - - - - vol18 - - - - - - - vol19 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - vol20 - - - - - - - vol21 - - - - - - - vol22 - - - - - - - vol23 - - - - - - - vol24 - - - - - - - vol25 - - - - - - - vol26 - - - - - - - vol27 - - - - - - - vol28 - - - - - - - vol29 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - vol30 - - - - - - - vol31 - - - - - - - vol32 - - - - - - - vol33 - - - - - - - vol34 - - - - - - - vol35 - - - - - - - vol36 - - - - - - - vol37 - - - - - - - vol38 - - - - - - - vol39 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - - - 满列电压 - - - - - 10 - 0 - 581 - 371 - - - - - - - fvol0 - - - - - - - 20 - - - 4096 - - - 1 - - - - - - - 20 - - - 4095 - - - - - - - fvol1 - - - - - - - fvol2 - - - - - - - fvol3 - - - - - - - fvol4 - - - - - - - fvol5 - - - - - - - fvol6 - - - - - - - fvol7 - - - - - - - fvol8 - - - - - - - fvol9 - - - - - - - fvol10 - - - - - - - fvol11 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4095 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - fvol12 - - - - - - - fvol13 - - - - - - - fvol14 - - - - - - - fvol15 - - - - - - - fvol16 - - - - - - - fvol17 - - - - - - - fvol18 - - - - - - - fvol19 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - fvol20 - - - - - - - fvol21 - - - - - - - fvol22 - - - - - - - fvol23 - - - - - - - fvol24 - - - - - - - fvol25 - - - - - - - fvol26 - - - - - - - fvol27 - - - - - - - fvol28 - - - - - - - fvol29 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - fvol30 - - - - - - - fvol31 - - - - - - - fvol32 - - - - - - - fvol33 - - - - - - - fvol34 - - - - - - - fvol35 - - - - - - - fvol36 - - - - - - - fvol37 - - - - - - - fvol38 - - - - - - - fvol39 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - 20 - - - 4096 - - - - - - - - - 其他调整 - - - - - 0 - 10 - 154 - 31 - - - - - - - 整体缩放(%) : - - - - - - - 40 - - - 150 - - - 100 - - - - - - - - - - - FpgaDebug - - - - - 320 - 60 - 101 - 27 - - - - WriteByte - - - - - - 480 - 60 - 101 - 27 - - - - ReadByte - - - - - - 20 - 10 - 581 - 31 - - - - - - - Address: - - - - - - - Qt::Vertical - - - - - - - 65535 - - - - - - - Qt::Vertical - - - - - - - Value: - - - - - - - Qt::Vertical - - - - - - - 255 - - - - - - - - - 20 - 120 - 581 - 31 - - - - - - - Address: - - - - - - - Qt::Vertical - - - - - - - 65535 - - - - - - - Qt::Vertical - - - - - - - Value: - - - - - - - Qt::Vertical - - - - - - - 65535 - - - - - - - - - 320 - 180 - 101 - 27 - - - - WriteWord - - - - - - 480 - 180 - 101 - 27 - - - - ReadWord - - - - - - 480 - 370 - 101 - 27 - - - - ReadDword - - - - - - 320 - 370 - 101 - 27 - - - - WriteDword - - - - - - 20 - 250 - 581 - 80 - - - - - - - Address: - - - - - - - 65535 - - - - - - - ValueH: - - - - - - - 65535 - - - - - - - 65535 - - - - - - - ValueL: - - - - - - - - - - MainWindow - QWidget -
mainwindow.h
- 1 -
- - PicEdit - QWidget -
PicEdit.h
- 1 -
- - PrintSetting - QWidget -
PrintSetting.h
- 1 -
- - SystemSetting - QWidget -
SystemSetting.h
- 1 -
- - OtherInfo - QWidget -
OtherInfo.h
- 1 -
- - LogInfo - QWidget -
LogInfo.h
- 1 -
- - TriggerCtrl - QWidget -
TriggerCtrl.h
- 1 -
- - SystemManage - QWidget -
SystemManage.h
- 1 -
- - ZkEdit - QWidget -
ZkEdit.h
- 1 -
- - NetworkManager - QWidget -
Network/NetworkManager.h
- 1 -
-
- - -
+ + + InkJetPrinter + + + + 0 + 0 + 800 + 600 + + + + + 0 + 0 + + + + TabWidget + + + QTabBar::scroller +{ + width:60px; +}; +background-color: rgb(186, 189, 182); + + + QTabWidget::North + + + QTabWidget::Rounded + + + 0 + + + + 16 + 16 + + + + true + + + false + + + + 主窗口 + + + + + 信息编辑 + + + + + 图案编辑 + + + + + 打印设置 + + + + + 触发设置 + + + + + 系统设置 + + + + + 系统管理 + + + + + 其他信息 + + + + + 日志信息 + + + + + 网络管理 + + + + + 电压调整 + + + + + 510 + 410 + 85 + 27 + + + + Save + + + + + + 10 + 0 + 611 + 411 + + + + Qt::StrongFocus + + + 3 + + + + 不连续电压 + + + + + 10 + 0 + 581 + 371 + + + + + + + vol0 + + + + + + + 20 + + + 4096 + + + 1 + + + + + + + 20 + + + 4095 + + + + + + + vol1 + + + + + + + vol2 + + + + + + + vol3 + + + + + + + vol4 + + + + + + + vol5 + + + + + + + vol6 + + + + + + + vol7 + + + + + + + vol8 + + + + + + + vol9 + + + + + + + vol10 + + + + + + + vol11 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol12 + + + + + + + vol13 + + + + + + + vol14 + + + + + + + vol15 + + + + + + + vol16 + + + + + + + vol17 + + + + + + + vol18 + + + + + + + vol19 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol20 + + + + + + + vol21 + + + + + + + vol22 + + + + + + + vol23 + + + + + + + vol24 + + + + + + + vol25 + + + + + + + vol26 + + + + + + + vol27 + + + + + + + vol28 + + + + + + + vol29 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol30 + + + + + + + vol31 + + + + + + + vol32 + + + + + + + vol33 + + + + + + + vol34 + + + + + + + vol35 + + + + + + + vol36 + + + + + + + vol37 + + + + + + + vol38 + + + + + + + vol39 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + + + 连续电压 + + + + + 0 + 0 + 581 + 371 + + + + + + + vol0 + + + + + + + 20 + + + 4096 + + + 1 + + + + + + + 20 + + + 4095 + + + + + + + vol1 + + + + + + + vol2 + + + + + + + vol3 + + + + + + + vol4 + + + + + + + vol5 + + + + + + + vol6 + + + + + + + vol7 + + + + + + + vol8 + + + + + + + vol9 + + + + + + + vol10 + + + + + + + vol11 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol12 + + + + + + + vol13 + + + + + + + vol14 + + + + + + + vol15 + + + + + + + vol16 + + + + + + + vol17 + + + + + + + vol18 + + + + + + + vol19 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol20 + + + + + + + vol21 + + + + + + + vol22 + + + + + + + vol23 + + + + + + + vol24 + + + + + + + vol25 + + + + + + + vol26 + + + + + + + vol27 + + + + + + + vol28 + + + + + + + vol29 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + vol30 + + + + + + + vol31 + + + + + + + vol32 + + + + + + + vol33 + + + + + + + vol34 + + + + + + + vol35 + + + + + + + vol36 + + + + + + + vol37 + + + + + + + vol38 + + + + + + + vol39 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + + + 满列电压 + + + + + 10 + 0 + 581 + 371 + + + + + + + fvol0 + + + + + + + 20 + + + 4096 + + + 1 + + + + + + + 20 + + + 4095 + + + + + + + fvol1 + + + + + + + fvol2 + + + + + + + fvol3 + + + + + + + fvol4 + + + + + + + fvol5 + + + + + + + fvol6 + + + + + + + fvol7 + + + + + + + fvol8 + + + + + + + fvol9 + + + + + + + fvol10 + + + + + + + fvol11 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4095 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + fvol12 + + + + + + + fvol13 + + + + + + + fvol14 + + + + + + + fvol15 + + + + + + + fvol16 + + + + + + + fvol17 + + + + + + + fvol18 + + + + + + + fvol19 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + fvol20 + + + + + + + fvol21 + + + + + + + fvol22 + + + + + + + fvol23 + + + + + + + fvol24 + + + + + + + fvol25 + + + + + + + fvol26 + + + + + + + fvol27 + + + + + + + fvol28 + + + + + + + fvol29 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + fvol30 + + + + + + + fvol31 + + + + + + + fvol32 + + + + + + + fvol33 + + + + + + + fvol34 + + + + + + + fvol35 + + + + + + + fvol36 + + + + + + + fvol37 + + + + + + + fvol38 + + + + + + + fvol39 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + 20 + + + 4096 + + + + + + + + + 其他调整 + + + + + 0 + 10 + 154 + 31 + + + + + + + 整体缩放(%) : + + + + + + + 40 + + + 150 + + + 100 + + + + + + + + + + + FpgaDebug + + + + + 320 + 60 + 101 + 27 + + + + WriteByte + + + + + + 480 + 60 + 101 + 27 + + + + ReadByte + + + + + + 20 + 10 + 581 + 31 + + + + + + + Address: + + + + + + + Qt::Vertical + + + + + + + 65535 + + + + + + + Qt::Vertical + + + + + + + Value: + + + + + + + Qt::Vertical + + + + + + + 255 + + + + + + + + + 20 + 120 + 581 + 31 + + + + + + + Address: + + + + + + + Qt::Vertical + + + + + + + 65535 + + + + + + + Qt::Vertical + + + + + + + Value: + + + + + + + Qt::Vertical + + + + + + + 65535 + + + + + + + + + 320 + 180 + 101 + 27 + + + + WriteWord + + + + + + 480 + 180 + 101 + 27 + + + + ReadWord + + + + + + 480 + 370 + 101 + 27 + + + + ReadDword + + + + + + 320 + 370 + 101 + 27 + + + + WriteDword + + + + + + 20 + 250 + 581 + 80 + + + + + + + Address: + + + + + + + 65535 + + + + + + + ValueH: + + + + + + + 65535 + + + + + + + 65535 + + + + + + + ValueL: + + + + + + + + + + MainWindow + QWidget +
mainwindow.h
+ 1 +
+ + PicEdit + QWidget +
PicEdit.h
+ 1 +
+ + PrintSetting + QWidget +
PrintSetting.h
+ 1 +
+ + SystemSetting + QWidget +
SystemSetting.h
+ 1 +
+ + OtherInfo + QWidget +
OtherInfo.h
+ 1 +
+ + LogInfo + QWidget +
LogInfo.h
+ 1 +
+ + TriggerCtrl + QWidget +
TriggerCtrl.h
+ 1 +
+ + SystemManage + QWidget +
SystemManage.h
+ 1 +
+ + ZkEdit + QWidget +
ZkEdit.h
+ 1 +
+ + NetworkManager + QWidget +
Network/NetworkManager.h
+ 1 +
+
+ + +
diff --git a/mainwindow.cpp b/mainwindow.cpp index 4e3ed6e..9489473 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,4608 +1,4602 @@ -/* -* -* -*2013-9-15高压报警停止充电 -*/ - -/* - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否初始化产品计数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - updateTotalCnt(0); - sysPara->devOp->clearProductCnt(1); - sysPara->saveParaToFile(); - - } - */ -#include "mainwindow.h" -#include "ui_mainwindow.h" -#include "InputMethod.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef Q_OS_WIN -#include -#else -#define reboot(a,...) (0 == 0) -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "DevOp.h" -#include "Public.h" -#include "LogInfo.h" -#include "QBarCode.h" -#include "scene/picscene.h" -#include -#include "MyInputMethod.h" -#include -#include "VerBVersion.h" -//#define SAVEWHENPREVIEW // 预览时先保存 -#include -#include -#include - -#define MDTFLAG 0xff00FF10 -#define QRFLAG 0xff00FF20 -#define BARFLAG 0xff00FF30 - -// 统一使用相同的掩码和比较值 -#define COLOR_MASK 0x00FFFFF0 // 忽略 Alpha 通道 -// 定义比较用的 RGB 值 -#define MDT_RGB 0x00FF10 -#define QR_RGB 0x00FF20 -#define BAR_RGB 0x00FF30 - -#define MMVAR 1 -#define MAX_ALLOW_VISICOSITY_OVERFLOW_NUM 120 //连续超那么多次,会被认为粘度故障 - -#define EXPIRY_VARI_RECONISE 0x0000FF -#define RECICLARNUMBER 22 - -int firstGetFpgaVersionNumFlag=0; - -static int weekendPowerOff = 0; -unsigned char test_flag,open_close; -extern QFile PrintDatafile; -extern MyInputMethod *myInputMethod; - -MainWindow::MainWindow(QWidget *parent) : - QWidget(parent), - ui(new Ui::MainWindow) -{ - ui->setupUi(this); //不使用布局 - - //ui->textEdit->verticalScrollBar()->setStyleSheet("QScrollBar:vertical { width: 40px; }"); - QFont font = ui->textEdit->font(); - font.setPixelSize(12); - ui->textEdit->setFont(font); - previewFlag =0; - ui->textEditOption->bindText(ui->textEdit); - ui->textEditOption->bindPicWidget(ui->PicWidgetDisp); - ui->textEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); - //ui->textEditOption->setl -#ifdef _2DCODE_ - // dlgqrcode = new dlgQrCode(); - dlgqrcode = ui->textEditOption->qrcode; // 实时更新二维码,使用同一个界面 - //barcode = ui->textEditOption->barcode; - barcode = new QBarCode(); -#endif - //ui->pushButtonEditBarCode->hide(); - - connect(ui->labelFaultResume,SIGNAL(pressed()),this,SLOT(onLabelFaultRusumePressed())); -#ifdef EnableArabic - connect(ui->textEditOption,SIGNAL(fontSizeArabicSelect(bool)),myInputMethod,SLOT(getArabicFlag(bool))); - connect(myInputMethod,SIGNAL(selectArabicPage(int)),ui->textEditOption,SLOT(changeArabicPage(int))); - connect(myInputMethod,SIGNAL(switchEnglishOrArabic(bool)),ui->textEditOption,SLOT(swithchEnglisOrArabic(bool))); - connect(ui->textEditOption,SIGNAL(EnableSwitchArabicFlag(bool)),myInputMethod,SLOT(switchArabicFlag(bool))); -#endif - connect(ui->labelStatusHighVoltageFault,SIGNAL(pressed()),this,SLOT(onStatusHighVoltageFault())); - connect(ui->labelStatusInkLeak,SIGNAL(pressed()),this,SLOT(onStatusInkLeak())); - connect(ui->labelStatusInkSwint,SIGNAL(pressed()),this,SLOT(onStatusInkSwint())); - connect(ui->labelStatusInkWaterLevel,SIGNAL(pressed()),this,SLOT(onStatusInkWaterLevel())); - connect(ui->labelStatusRecycleWarn,SIGNAL(pressed()),this,SLOT(onStatusRecycleWarn())); - connect(ui->labelStatusSolvLevelWarn,SIGNAL(pressed()),this,SLOT(onStatusSolvLevelWarn())); - connect(ui->labelStatusViscosityWarn,SIGNAL(pressed()),this,SLOT(onStatusViscosityWarn())); - connect(ui->labelStatusChargefault,SIGNAL(pressed()),this,SLOT(onStatusChargefault())); - //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); labelStatusChargefault - //connect(ui->labelStatu,SIGNAL(pressed()),this,SLOT(on())); - - - connect(ui->textEdit,SIGNAL(textChanged ()),this,SLOT(ontextEdittextChanged())); - connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(onTextEditCursorPositionChanged())); - connect(ui->textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)), ui->textEditOption, SLOT(currentCharFormatChanged(QTextCharFormat))); - - timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(displayTime())); - timer->start(1000); - airPushTimer = new QTimer(this); - connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess())); - timerShowItem = new QTimer(this); - connect(timerShowItem, SIGNAL(timeout()), this, SLOT(onShowAndHideItem())); - - timerPowerOff = new QTimer(this); - connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd())); - - printingFlag = false; - startPrintingFlag = false; - - connect(ui->labelProductCnt,SIGNAL(pressed()),this,SLOT(onLabelProductCntPressed())); - connect(ui->labelTotalProductCnt,SIGNAL(pressed()),this,SLOT(onLabelTotalProductCntPressed())); - connect(ui->textEditOption->getPushButtonPreview(),SIGNAL(pressed()),this,SLOT(onPushButtonPreviewPressed())); -#ifndef EnableArabic - connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); -#else - connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(setOpenFileName(QString))); -#endif - connect(ui->textEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); - //edit@02-07 - connect(ui->textEditOption,SIGNAL(switchBengalLanguage(bool)),myInputMethod,SLOT(switchBangalInput(bool))); - - connect(ui->textEditOption,SIGNAL(PicfileNameOpen(QString,bool)),this,SLOT(openPicFIleOpen(QString,bool))); // 由TEXTOPTION界面按键触发 - connect(ui->pushButtonTXTOpen,SIGNAL(clicked()),ui->textEditOption,SLOT( showDlg())); - connect(ui->pushButtonCNTResetNow,SIGNAL(pressed()),this,SLOT(onPushButtonCNTResetNowPressed())); -#ifdef _2DCODE_ - connect(ui->pushButtonEditBarCode,SIGNAL(pressed()),this,SLOT(onEditBarCode())); - connect(ui->pushButtonQREnCode,SIGNAL(pressed()),this,SLOT(onEditQRCode())); - - connect(ui->textEditOption, SIGNAL(fontSizeChange(int)), barcode, SLOT(setFontSize(int))); - connect(barcode,SIGNAL(onBarCodeClose()),this,SLOT(onBarCodeClose())); - connect(dlgqrcode,SIGNAL(onQRCodeCloseNow()),this,SLOT(onQRCodeClose())); - - //专门处理网络发送的二维码 - connect(dlgqrcode,SIGNAL(sig_updateNetworkQR()),this,SLOT(slt_updateNetworkQR())); - connect(dlgqrcode, SIGNAL(sig_clearAllQRCode()), this, SLOT(slt_clearAllQRCode())); -#endif - connect(this,SIGNAL(ShowWarnningText(QString,QString)),this,SLOT(ShowWarnningText1(QString,QString))); - - msgtest = new QMessageBox(this); - connect(msgtest, SIGNAL(finished(int)), this, SLOT(OnFinished(int))); - - //QFile file(SYS_ROOT_DIR"UseEn"); - if( Public::ReadLanguageName()!="Chinese") - { - ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); - //ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); - ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); - if(Public::ReadLanguageName()=="Thai"){ - ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint3.png")); - ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint3.png")); - } - } - // 立即清零 -#ifdef ENGLISH - ui->pushButtonStartPrint->setIcon(QIcon(":/icon/Estartprint2.png")); - ui->pushButtonPausePrint->setIcon(QIcon(":/icon/Epauseprint2.png")); - ui->pushButtonStopPrint->setIcon(QIcon(":/icon/EstopPrint2.png")); -#endif - -#ifndef CLEARCNTNOW - ui->pushButtonCNTResetNow->hide(); -#endif - fileChange=true; - pushButtonFlag = true; - - if(sysPara) - { - sysPara->status.FileChangeRestCntFlag=0; - } - - Public::derivePixelSizeFromHeight(12); - pPicScene = new PicScene(this); - //edit@12-09 - pPicScene->setSceneRect(QRectF(0,0, 3999, 220)); - ui->graphicsView->setScene(pPicScene); - ui->graphicsView->centerOn(0,0); - ui->senceEditOption->bindScene(pPicScene, ui->graphicsView, ui->textEdit); - ui->senceEditOption->bindStackWidget(ui->stackedWidgetOption,ui->stackedWidgetText); - connect(ui->senceEditOption,SIGNAL(generateQRCode(QString)),this,SLOT(onGenerateQRCode(QString))); - connect(ui->senceEditOption,SIGNAL(previewScene()),this,SLOT(onPreviewScene())); - connect(ui->textEditOption,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); - connect(this,SIGNAL(scenefileOpen(QString,bool)),ui->senceEditOption,SLOT(onFileOpen(QString,bool))); - connect(ui->senceEditOption,SIGNAL(editItemMode()),ui->textEditOption,SLOT(onEditItemMode())); - connect(ui->textEditOption,SIGNAL(editItemDone()),ui->senceEditOption,SLOT(onEditItemDone())); - - connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),ui->labelOpenedFileName,SLOT(setText(QString))); - connect(ui->senceEditOption,SIGNAL(fileNameChanged(QString)),this,SLOT(changeTxtMode(QString))); - - m_2sFlag = false; - moveToThread(&ShowThead); - ShowThead.start(); - ui->pushButtonStart->setHidden(true);//屏蔽紧急停机按钮 - ui->textEdit->viewport()->setProperty("cursor", QVariant(QCursor(Qt::IBeamCursor))); - - // 在 textChanged 信号中处理 - connect(ui->textEdit, &QTextEdit::textChanged, [=]() { - QTextCursor c = ui->textEdit->textCursor(); - QRect r = ui->textEdit->cursorRect(c); - int viewportWidth = ui->textEdit->viewport()->width(); - - if (r.right() > viewportWidth - 20) { - int diff = r.right() - viewportWidth + 20; - ui->textEdit->horizontalScrollBar()->setValue( - ui->textEdit->horizontalScrollBar()->value() + diff - ); - } - }); -} - -MainWindow::~MainWindow() -{ - disconnect(&ShowThead, SIGNAL(started()), this, SLOT(onShowAndHideItem())); - if (ShowThead.isRunning()) { - ShowThead.quit(); - ShowThead.wait(); - } - - delete ui; - delete timer; - delete pPicScene; - -} - -/*显示当前系统时间 */ -void MainWindow::displayTime() -{ - if(sysPara){ - ui->labelCurrentTime->setText(tr("机箱:")+QString().sprintf("%d ",sysPara->status.AD_FIXED/4)+"°C"); // 机箱温度 - ui->labDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); - - static bool CleanUPEn=1,preCleanUP=0; - if(!sysPara->para.isCheckMagnet) - { - CleanUPEn = (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT); - } - else - { - CleanUPEn = (sysPara->status.currReclaimTankPos<70) ; - } - if(CleanUPEn != preCleanUP){ - ui->pushButtonCleanUP->setEnabled(CleanUPEn); - } - preCleanUP=CleanUPEn; - if(m_2sFlag) - { - { - sysPara->devOp->controlInkValve(!sysPara->devOp->isInkValveOpen()); //控制供墨阀开关 - sysPara->devOp->controlInkValvePWM(!sysPara->devOp->isInkValveOpen1()); //控制供墨阀开关 - } - - } - } -} - -void MainWindow::bindSysPara(SysPara *sysPara){ - this->sysPara = sysPara; - ui->textEditOption->bindSysPara(sysPara); - ui->widgetPrintTextDisplay->bindSysPara(sysPara); -#ifdef _2DCODE_ - barcode->bindSysPara(sysPara); - dlgqrcode->setSysPara(sysPara); - dlgqrcode->barCodeFlag = this->sysPara->para.qrOption.barCodeFlag; - dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); -#endif -#ifdef PICSCENE - ui->senceEditOption->bindSysPara(sysPara); -#endif -} - -void MainWindow::updateSysParaToUI(){ - if(sysPara){ - //nothing here - ui->textEditOption->updateSysParaToUI(); - } -} - -void MainWindow::applyUIPara(){ - if(sysPara){ - - } -} - -void MainWindow::CheckStatus(int Flag){ - if(sysPara){ - static unsigned int lastProductCnt=0; - int AutoCount=0; - int bcAutoCount=0; - static int lastMinutes = 0; - //QDate curDate=QDate::currentDate(); - int currMinutes = QDateTime::currentDateTime().time().minute(); - int usbDate = sysPara->status.ExpiryVarNum || sysPara->status.CurrDateVariNum ||sysPara->status.classVariNum; - if(usbDate) - { - //qDebug()<<"CheckStatus"; - bool needSendPrintData=false; - //if(sysPara->print.CurDateVar.endRowPos && (sysPara->print.CurDateVar.day != curDate.day())) - if (sysPara->status.ExpiryVarNum && (lastMinutes != currMinutes)) - { - ExpiryDotUpdate(1); - needSendPrintData = true; - } - //if(sysPara->print.ExpiryVar.endRowPos && (sysPara->para.ExpiryDay != r_ExpiryDay)) - if(sysPara->status.CurrDateVariNum && (lastMinutes != currMinutes)) - { - ExpiryDotUpdate(2); - needSendPrintData = true; - } - if(sysPara->status.classVariNum && (lastMinutes != currMinutes)) - { - ExpiryDotUpdate(3); - needSendPrintData = true; - } - lastMinutes = currMinutes; - //sysPara->print.CurDateVar.day = curDate.day(); - if(needSendPrintData) - { - sysPara->status.ExpiryDispUpdate=10; - SendPrintDataToFpga(0); - } - //if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) - // ui->widgetPrintTextDisplay->update(); - //sysPara->status.ExpiryDispUpdate=1; - - } - if(sysPara->status.productCnt != lastProductCnt) - //if( sysPara->para.calandar_and_dat.cnt1CurrValue != sysPara->para.qrOption.counter ) - { - lastProductCnt = sysPara->status.productCnt; - //sysPara->para.qrOption.counter ++;//= sysPara->para.calandar_and_dat.cnt1CurrValue; - // 荆州-四机赛瓦要求:跟计数器同步 此处优化逻辑,增量大于0才+= - if (sysPara->para.qrOption.CntInc > 0) - sysPara->para.qrOption.counter += sysPara->para.qrOption.CntInc; - - AutoCount = (sysPara->status.QRvariNum?1:0); - //bcAutoCount = (sysPara->status.BCvariNum?1:0); -#ifdef MYARMTEST - qDebug()<<"CheckStatus:"<para.qrOption.counter<status.productCnt<para.qrOption.counter <status.QRvariNum; - } - //else qDebug()<<"P:"<status.productCnt; - - if( sysPara->para.qrOption.RecFromHost || AutoCount ) - { - sysPara->para.qrOption.RecFromHost=0; - sysPara->para.qrOption.type = sysPara->print.QRvars[0].type; - sysPara->para.qrOption.height = sysPara->print.QRvars[0].height; - sysPara->para.qrOption.width = sysPara->print.QRvars[0].width; - - if(ui->stackedWidgetText->currentWidget()==ui->pagePrintTextDisplay) - { - onUpdateDispQRCode(1); // 更新二维码显示 - //qDebug()<<"PN:"<status.LightUpCnt ++ ; - if((sysPara->status.LightUpCnt%3) == 0){ - if(printingFlag && startPrintingFlag && !sysPara->status.RedLightOnFlag && !sysPara->status.YellowLightOnFlag) - sysPara->status.GreenLightOnFlag = true; - else - sysPara->status.GreenLightOnFlag = false; - if(sysPara->status.GreenLightOnFlag){ - if(!sysPara->para.isCheckPrintLight) - sysPara->devOp->controlGreenLight(!sysPara->devOp->isGreenLightEnable()); - else - sysPara->devOp->controlGreenLight(true); - } - else{ - sysPara->devOp->controlGreenLight(false); // 只在确定不亮时才发关灯 - } - } - Test_Start_Stop(); - if(sysPara->status.circleProductCnt && (sysPara->status.productCnt >= sysPara->para.cnt1EndValue)) - { - if(sysPara) - { - sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt = 0; - } - } - } - - } -} - - -void MainWindow::RefreshStatusLight(){//100ms - if(sysPara){ - static int hdint = 0; - static int reclainTankReachEnd = 0; - if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关 - if (sysPara->status.reclainTankReachEnd) { - // sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - sysPara->devOp->highVoltageCtrl(0); - } - } - hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT); - - if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底 - if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态 - // sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - sysPara->devOp->highVoltageCtrl(0); - } - } - reclainTankReachEnd = sysPara->status.reclainTankReachEnd; - - if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){ - if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关 - ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - } - - if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){//喷头盖 - ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - - if(printingFlag && startPrintingFlag) - setRunStatus(tr("正在喷印...............")); - } - else { - ui->labelStatusHDINT->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - if(printingFlag && startPrintingFlag) - setRunStatus(tr("喷头盖开, 喷印无法正常进行!!!")); - } - - - if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告 - ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - strTitle = tr("墨水缸满报警"); - if(sysPara->devOp->isMixValveOpen()) { - sysPara->devOp->controlMixValve(false); //关掉混合阀 - } - } - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){ - ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - strTitle = tr("墨水液位报警"); - - - } - if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){ - ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - strTitle = tr("溶剂液位报警"); - - } - - if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){ - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - - } - else { - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - - } - - //static int HVfaultCnt=0; - if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ - if(!sysPara->status.lastHighVoltageFault) - { - flagOfClearHighVltageWarnning = false; - ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - // HVfaultCnt=0; - //sysPara->status.HVFaultCloseEn=0; - } - else { - ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电 - on_pushButtonPausePrint_pressed(); - LogInfo::setRunStatusText(tr("高压故障,暂停打印")); - setRunStatus(tr("高压故障,暂停打印")); - - strTitle = tr("高压故障,暂停打印."); - - sysPara->status.lastHighVoltageFault = true; - } - - if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn ) - { - //HVfaultCnt++; - // 高压故障关回收槽 - if(sysPara->status.HVFaultCloseEn==0){ - sysPara->status.reclaimTankBlockedAppending=0; - sysPara->status.reclaimCloseCnt=100; - on_pushButtonReclaimTankClose_pressed(); - sysPara->status.reclaimTankBlockedAppending=1; - LogInfo::setRunStatusText(tr("高压故障,关回收槽")); - setRunStatus(tr("高压故障,关回收槽和墨线")); - } - sysPara->status.HVFaultCloseEn=1; - } - } - - } - - /*-----------------------------------------------------------------------------------*/ - sysPara->status.lastStatWarn = sysPara->status.statWarn; - if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){ - if(sysPara->status.viscosityFault==0){ - ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - else { - if(sysPara->status.viscosityFault==1){ - - ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - - } - else if(sysPara->status.viscosityFault==2) { - ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); - - } - } - } - sysPara->status.lastViscosityFault = sysPara->status.viscosityFault; - /*-----------------------------------------------------------------------------------*/ - if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie - if(sysPara->status.RecycleWarnCnt) - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - sysPara->status.RecycleWarnCnt = 0; - sysPara->status.lastRecycleWarn = 0; - } - else { - // 速度过快时墨线可能瞬时偏移导致误报回收故障,此时抑制计数器累加并重置,避免误触发关槽 - if(sysPara->status.lesslen_warn && (sysPara->para.printTriggerMode != PRINT_TRIGGER_TIME)) - { - sysPara->status.RecycleWarnCnt = 0; - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); - } - else if(!sysPara->status.lastRecycleWarn && !sysPara->status.isPumpValveControledByHand && sysPara->status.selfCheckDone) - { - if(sysPara->status.RecycleWarnCnt > RECYCLE_WARN_DELAY) - { - sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - sysPara->status.reclaimCloseCnt=100; - if(sysPara->para.RecycleWarnAction) - { - if((sysPara->status.currReclaimTankPos != 0) && !sysPara->devOp->isReclaimTankCloseEnable()){ - on_pushButtonStopPrint_pressed(); - on_pushButtonReclaimTankClose_pressed(); - LogInfo::setRunStatusText(tr("回收故障,关闭回收槽,关墨线")); - setRunStatus(tr("回收故障,关闭回收槽,关墨线")); - } - } - else setRunStatus(tr("回收故障.")); - - } - else - { - sysPara->status.RecycleWarnCnt ++ ; - ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG"))); - if(sysPara->status.RecycleWarnCnt%10==9) - LogInfo::setRunStatusText(tr("回收异常,墨线可能偏离.(%1)").arg(sysPara->status.RecycleWarnCnt)); - } - } - else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--; - } - - if(ui->labelRunStatus->text().length()<4){ - if(startPrintingFlag ){ - if(printingFlag) - setRunStatus(tr("正在喷印...............")); - else - setRunStatus(tr("暂停喷印...............")); - } - } - - // 20160620 新增主界面显示:压力,粘度,隔膜位置,晶振电压数,相位 - ui->labPress->setText(QString("%1/%2").arg(sysPara->status.PRESSURE).arg(sysPara->para.pressure)); - ui->labViso->setText(QString("%1/%2").arg(sysPara->status.viscosity).arg(sysPara->para.viscosity) ); - if(sysPara->para.gearPumpEnable) - { - ui->labPosition->setText(QString("%1").arg(sysPara->status.gearPumpRunSpeed)); - } - else - { - ui->labPosition->setText(QString("%1/%2").arg(sysPara->status.SEPTAL_POSITION).arg(sysPara->para.septalPostion) ); - } - ui->labOscVol->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC)); - } -} - - -bool MainWindow::updatePhaseIndicatorLight(){ - if(sysPara==0) return 0; - - if(dlgMyWarringShowDlyCnt)dlgMyWarringShowDlyCnt--; - if(dlgMyWarringShowDlyCnt==1) dlgMyWarring.hide(); - - /*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/ - if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){ - //故障后必须等手动按故障恢复才会继续 - if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){ - if(sysPara->status.lastPhaseFault){ - sysPara->status.lastPhaseFault = 0; - ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - } - } - sysPara->status.phaseErrorCnt = 0; - } - else { - if(sysPara->status.phaseErrorCnt < 10) - sysPara->status.phaseErrorCnt ++ ; - else { - if(!sysPara->status.lastPhaseFault){ - ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); - sysPara->status.lastPhaseFault = 1; - if(sysPara->status.flight_tm_error) - { - LogInfo::setRunStatusText(tr("相位故障:飞行时间错误!")); - } - if(sysPara->status.detect_phase_error) - { - LogInfo::setRunStatusText(tr("相位故障:相位检测错误!")); - } - - } - if(sysPara->para.powerOffAfterPhaseFault ){ - if(!sysPara->status.powerOffAfterPhaseFaultAppending){ - sysPara->status.powerOffAfterPhaseFaultAppending = 1; - _on_pushButtonPowerOff_pressed(false); - LogInfo::setRunStatusText(tr("相位故障,准备关机")); - setRunStatus(tr("相位故障,准备关机")); - strTitle = tr("相位故障,准备关机"); - - - } - } - else if(sysPara->para.suspendAfterPhaseFault){ - if(sysPara->para.stopCounterMeterAfterFault){ - if(startPrintingFlag && printingFlag){ //已经在打印,则暂停打印 - on_pushButtonPausePrint_pressed(); - LogInfo::setRunStatusText(tr("相位故障,暂停打印")); - setRunStatus(tr("相位故障,暂停打印")); - strTitle = tr("相位故障,暂停打印"); - - } - } - else if(!sysPara->status.DACDisable){ - sysPara->devOp->printCtrl(PRINT_CTRL_DAC_DISABLE); - sysPara->status.DACDisable = true; - LogInfo::setRunStatusText(tr("相位故障,屏蔽DAC输出")); - setRunStatus(tr("相位故障,屏蔽充电")); - strTitle = tr("相位故障,屏蔽充电"); - - } - - } - } - } - - - return sysPara->status.lastPhaseFault; -} - -double MainWindow::getMaxSpeedCalcPara(){ - sysPara->para.printRowDelay = sysPara->para.currPrintMode; - if(sysPara->status.isPrinting == false) - sysPara->status.pixNumPerCol = sysPara->status.currPrintRow; - // else - // sysPara->status.currPrintRow = sysPara->status.pixNumPerCol; - sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol; - - sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100; - int dotNumPerCol = (sysPara->para.pixNumPerCol- sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.printRowDelay + 1) - + (sysPara->para.lineEndAdjustPointCnt)*(sysPara->para.lineEndAdjustPointDelay + 1); - dotNumPerCol = sysPara->para.pixNumPerCol? - ((dotNumPerCol*(sysPara->para.pixNumPerCol - sysPara->para.reducedPixelNum))/sysPara->para.pixNumPerCol):1; - // sysPara->para.dotNumPerCol += sysPara->para.printColDelay; - dotNumPerCol =( sysPara->para.alterPrint.enable)? dotNumPerCol/2:dotNumPerCol; - - int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) - int colNum = dotNumPerCol?dotNum/dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 - double pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 - - if(sysPara->para.divideRatio == 0 || sysPara->para.synPulseNumPerMm == 0) - return 600.0f; - - double freq = (FPGA_SYS_HZ/(sysPara->para.divideRatio*2)); - double ddotNumPerCol = sysPara->status.currPrintRow - (sysPara->status.currPrintRow * sysPara->para.reducedPixelNumRatio / 100.0); - pulseNum = sysPara->para.printColDelay / sysPara->para.synPulseNumPerMm / 1000.0 * freq / ddotNumPerCol * 60.0; - return qBound(0.0, pulseNum, 600.0); -} - -static int reclaimTankDelay = 0; -void MainWindow::updateSysStatusToUI(){ //100ms - if(sysPara){ - if(sysPara->para.gearPumpEnable) - { - ui->label_11->setText(tr("齿轮泵转速")); - } - else - { - ui->label_11->setText(tr("隔膜位置")); - } - RefreshStatusLight(); - if(sysPara->status.lastProductCnt != sysPara->status.productCnt){ //产品计数 - ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); - updateTotalCnt(0); - } - if(sysPara->status.ExpiryDispUpdate >0 ) - { - sysPara->status.ExpiryDispUpdate--; - ui->widgetPrintTextDisplay->update();// 2018.5.25 - } - if(sysPara->para.alterPrint.enable==1) ui->labelXFileName->setText (tr("交替打印")); - else if(sysPara->para.alterPrint.enable==2) ui->labelXFileName->setText (tr("电眼交替")); - else ui->labelXFileName->setText (""); - /*--------------------------------------------------------------------------*/ - //if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && printintFlag){ //同步器速度 - if(( - (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - ||(((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL) - ||(sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - )&& sysPara->para.eleEyeTriggerSynPrintEn) - ) - )//&&printintFlag - { - if(sysPara->para.synPulseNumPerMm) { - - unsigned int tmp = ((unsigned int) sysPara->status.synPulseCntPer1s ) & 0xffffff; - unsigned int mm = tmp /sysPara->para.synPulseNumPerMm * 60; // 1min总脉冲/毫米脉冲数 = 1min走过的距离mm数 - int dotNum = sysPara->para.divideRatio?(FPGA_SYS_HZ/(sysPara->para.divideRatio*2)):0;// 1s时间内墨点数 (即晶振频率 64000) - int colNum = sysPara->para.dotNumPerCol?dotNum/sysPara->para.dotNumPerCol:0; // 第列可用墨点数 = 1s时间内墨点数/ 列需要墨点数 - int pulseNum = colNum*sysPara->para.synNumPerCol/(1<<8); //synNumPerCol是被放大后的值 - - int maxMM = 0; - if(!sysPara->para.charWidthSetEnable) - { - if( (sysPara->status.currPrintRow != 0) - && (sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - /*&& (sysPara->para.currPrintMode == FAST_PRINT || sysPara->para.currPrintMode == STANDARD_PRINT) */){ - maxMM = calculateMaxSpeed(pulseNum); - maxMM = maxMM *60; - if(sysPara->para.alterPrint.enable) - { - maxMM = maxMM * 2; - } - } - else - { - maxMM = (pulseNum/sysPara->para.synPulseNumPerMm) * 60;// 列的最大间距 - // qDebug()<< "[Info] OLD COUNT mm" << maxMM; - } - } - else - { - double speed = getMaxSpeedCalcPara();//No67 - maxMM = int(speed * 1000.0); - } - ui->labelSynRate->setText(tr("%1.%2[%3.%4]米/分").arg(mm/1000).arg(mm%1000,3,10,QLatin1Char('0')) - .arg(maxMM/1000).arg(maxMM%1000,3,10,QLatin1Char('0'))); - } - else - ui->labelSynRate->setText(""); - sysPara->status.lastSynPulseCntPer1s = sysPara->status.synPulseCntPer1s; - } - else - ui->labelSynRate->setText(""); - - /*--------------------------------------------------------------------------*/ - if(sysPara->status.lastSynColDelay != sysPara->status.synColDelay){ - // if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL - ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - && sysPara->para.eleEyeTriggerSynPrintEn)) - ui->labelSynColDelay->setText(tr("列延时:%1点").arg(sysPara->status.synColDelay)); - sysPara->status.lastSynColDelay = sysPara->status.synColDelay; - } - /*--------------------------------------------------------------------------*/ - static int i=0; - i++; - if(sysPara->status.stm32Verion == 0){ - if(i % 10 == 0){ - sysPara->devOp->readSTM32Version(); - } - } - if(sysPara->status.stm32Time == 0){ - if(i % 10 == 0){ - sysPara->devOp->readSTM32Time(); - } - } - if(sysPara->status.fpgaVersionNum == 0){ //因为进入系统就会进主界面,马上就会将版本号读出 - if(i % 10 == 0){ - sysPara->devOp->readFpgaVersionNum(); - sysPara->devOp->readbuilDat(); - } - firstGetFpgaVersionNumFlag=1; - QString ARM_Version; - ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); - ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; - ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(0).arg(0).arg(0) ); - } - else{ - static bool logflag5 = true; - unsigned int num = sysPara->status.fpgaVersionNum & 0xf000; - if(num != 0x1000 && num != 0x6000 && num != 0x2000 && num != 0x8000 && logflag5){ - sysPara->status.fpgaVersionNum = 0; - } - else if(logflag5){ - emit readFPGAVersionReady(); - logflag5 = false; - sysPara->devOp->writeFpgaPrintPara(true); - QString ARM_Version; - ARM_Version.sprintf("%s.%s.", MACHINAE_VER, PUMP_VER); - ARM_Version = ARM_Version + (QString) Public::DateToString(__DATE__)+"."+SUB_VER+SUB_RFID; - ui->labelFpgaVersionNum->setText(QString("%1/F%2.%3.%4").arg(ARM_Version).arg(sysPara->status.fpgaVersionNum >> 12) - .arg((sysPara->status.fpgaVersionNum>>8) & 0x0f).arg(sysPara->status.fpgaVersionNum&0xff) ); - } - } - static bool logflag6 = false; - if(!logflag6){ - if(sysPara->status.fpgaVersionNum !=0 && sysPara->status.stm32Verion != 0){ - UpdateUIVersion(); - logflag6 = true; - } - } - - bool found_CNT1 = false; - bool found_CNT2 = false; - bool found_CNT3 = false; - bool found_CNT4 = false; - /*--------------------------------------------------------------------------*/ - if(sysPara->status.variNum && (ui->stackedWidgetText->currentWidget() == ui->pagePrintTextDisplay)){ - - bool updatePrintTextDisplayFlag = false; - - for(int i = 0; i < sysPara->status.variNum; i++){ - int val = 0; - switch( Public::getType(sysPara->status.vars[i].type)) - { - case CALANDAR_YEAR:val = sysPara->status.calandar_and_dat.year;break; - case CALANDAR_MONTH:val = sysPara->status.calandar_and_dat.month;break; - case CALANDAR_DAY:val = sysPara->status.calandar_and_dat.day;break; - case CALANDAR_WEEK:val = sysPara->status.calandar_and_dat.week;break; - case CALANDAR_HOUR:val = sysPara->status.calandar_and_dat.hour;break; - case CALANDAR_MINUTE:val = sysPara->status.calandar_and_dat.minute;break; - case CALANDAR_SECOND:val = sysPara->status.calandar_and_dat.second;break; - case CALANDAR_CNT1:val = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();found_CNT1=true;break; - case CALANDAR_CNT2:val = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();found_CNT2=true;break; - case CALANDAR_CNT3:val = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt();found_CNT3=true;break; - case CALANDAR_CNT4:val = QString::number(sysPara->para.cnt4CurrValue,10).toInt();found_CNT4=true;break; - case RANDOMNUM : val = QString::number( sysPara->status.calandar_and_dat.RandomValue1, 16).toInt(); break; - case CALANDAR_XDAY:val = sysPara->status.XXXDay;break; - case EXPIRYDATE: break; - default:qDebug() << "error,unknown variable type:" << sysPara->status.vars[i].type; - } - - if(sysPara->status.vars[i].currVal != val) - //{ - updatePrintTextDisplayFlag = true; - sysPara->status.vars[i].currVal = val; - //} - - } - if(updatePrintTextDisplayFlag) //减少不必要的刷新动作 - { - ui->widgetPrintTextDisplay->updateSysStatusToUI(); - } - } - emit setCNT1Select(found_CNT1); - emit setCNT2Select(found_CNT2); - emit setCNT3Select(found_CNT3); - if(sysPara->para.isEnableGetDataButton) - { - ui->pushButtonGetData->setEnabled(true); - } - else - { - ui->pushButtonGetData->setEnabled(false); - } - if(SIMULATE_PRINTING_MODE) - enablePrintButton(true); - ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32)); - - if(sysPara->status.currReclaimTankPos <= 5) - sysPara->status.flagOfRebootEnable = true; - else - sysPara->status.flagOfRebootEnable = false; - if(sysPara->status.flagOfRebootEnable || TEST_MODE){ - ui->pushButton_Reboot->setEnabled(true); - }else{ - ui->pushButton_Reboot->setEnabled(false); - } -#ifdef NETWORKQRCODE //荆州-四机赛瓦要求:跟计数器同步 - // ========== 新增:检测计数器1变化并同步更新二维码 ========== - int currentCnt1Value = - QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue, 16).toInt(); - - if(sysPara->para.qrOption.counter != currentCnt1Value){ - - // 检查是否有二维码变量需要更新 - if(sysPara->status.QRvariNum > 0 && sysPara->para.qrOption.AutoCount){ - // 更新二维码选项中的计数器值 - sysPara->para.qrOption.counter = currentCnt1Value; - // 触发二维码重新生成 - onUpdateDispQRCode(1); - - // 如果正在打印,重新发送打印数据 - if(startPrintingFlag && printingFlag){ - SendPrintDataToFpga(0); - } - } - } - // ======================================================== -#endif - } -} - -void MainWindow::showPrintBitImage(){ - if(sysPara){ - unsigned char *dat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - }else{ - dat =sysPara->status.printDat; - } - for(int j = sysPara->status.currPrintCol - 1; j >= 0 ; j --){ - for(int i = 0; i < sysPara->status.currPrintRow; i++){ - if(dat[j*MAX_PRINT_ROW_BYTE_NUM + i/8] & (1<<(i%8))) - printf("1"); - else - printf(" "); - } - printf("\n"); - } - } -} - -//void MainWindow::on_pushButtonTXTOpen_pressed(){ - -//} - -void MainWindow::openPicFIleOpen(QString filePath,bool insertFlag) { - fileChange=true; -#ifdef TXTEDIT - ui->textEditOption->onFileOpenN(filePath,insertFlag); - emit setMainTabNow(0); -#else - Q_UNUSED(insertFlag); - - if(sysPara) { - - - - if(//filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || - //filePath.endsWith(".jpg") || - // ||filePath.endsWith(".bmp") - filePath.endsWith(".png")) - { - QFile file(filePath); - if(!file.open(QIODevice::ReadOnly)){ - QMessageBox::warning(this,tr("警告"),tr("无法打开文件") + filePath); - return ; - } - else { - - QByteArray data = file.readAll(); - QTextCodec *codec = Qt::codecForHtml(data); - QString str = codec->toUnicode(data); - - if(filePath.startsWith(UDISK_DOC_ROOT_DIR)) - str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //做相应处理 - file.close (); - ui->PicWidgetDisp->loadImage (filePath,false); - ui->labelOpenedFileName->setText (QFileInfo(filePath).fileName()); - LogInfo::setRunStatusText(tr("打开文件:")+(QString)(QFileInfo(filePath).fileName())); - if(sysPara){ - //QString str1 =QFileInfo( filePath).fileName (); - sysPara->sysFile= PARA_ROOT_DIR+QFileInfo( filePath).baseName()+".dpn"; - sysPara->loadParaFromFile ();// 从磁盘读取参数文件 - emit openFileChange(); - // emit openFileChange(); - snprintf(sysPara->para.lastOpenedFileName,sizeof(sysPara->para.lastOpenedFileName),"%s",filePath.toLatin1().constData()); - } - /* other action */ - PreviewPressed(); - - - if(sysPara->status.addSpace) - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->widgetPrintTextDisplay->setScaleRatio(3); - //ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); - } - } - } -#endif - -} - -void MainWindow::on_pushButtonGetData_pressed() -{ - emit getJSONData(); -} - -void MainWindow::onPushButtonPreviewPressed(){ - if(sysPara) - { - sysPara->para.EditMode = TXTFILE; - if(previewFlag==0) { -#ifdef SAVEWHENPREVIEW - if(ui->textEditOption->fileName.isEmpty()){ - QMessageBox::StandardButton ret = QMessageBox::Ok; - ret = QMessageBox::warning(this, tr("提示"), - tr("文件未保存,是否先保存文件!"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok) - { - ui->textEditOption->on_bottonSave_clicked(); - } - } - else - ui->textEditOption->on_bottonSave_clicked(); -#else - -#endif - PreviewPressed(); - } - } -} - - -int MainWindow::getVarStarRow(int x,int y,int h,int w,char *dat) -{ - int t_x_start_pos = x; - int t_x_end_pos = t_x_start_pos + w; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); - int t_y_start_pos = y - h/2; - //int t_y_end_pos = y ; - if(t_y_start_pos < 0) - t_y_start_pos = 0; - - for(int j=y - h/2;j>0;j--) - { - char startRowFound=0; - for(int i = t_x_start_pos; i < t_x_end_pos; i++) - { - if( (dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8)))) - { - startRowFound=1; - dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] &=~ (1 << (j%8));//将画点取消掉 - } - } - if(startRowFound)continue; - t_y_start_pos=j+1; - // qDebug()<<"F:"<status.currPrintRow = 0; - sysPara->status.variNum = 0; - sysPara->status.QRvariNum = 0; - sysPara->status.ExpiryVarNum=0; - unsigned char *dat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - memset(dat,0,sizeof(sysPara->status.printDat_Normal)); - }else{ - dat =sysPara->status.printDat; - memset(dat,0,sizeof(sysPara->status.printDat)); - } - - //qDebug()<<"Preview:"; - //////////////////////////////////////////////////////在这里清变量参数 - sysPara->status.ExpiryVarNum=0; - sysPara->status.CurrDateVariNum = 0; - sysPara->status.classVariNum = 0; - sysPara->print.ExpiryVar.startColPos = 0; - sysPara->print.ExpiryVar.endRowPos = 0; - sysPara->print.ExpiryVar.letterSpace =0; - sysPara->print.CurDateVar.startColPos = 0; - sysPara->print.CurDateVar.endRowPos = 0; - sysPara->print.CurDateVar.letterSpace = 0; - ///////////////////////////////////////////////////////////////// - if(sysPara->para.EditMode==PICFILE) - { - - ui->PicWidgetDisp->getPrintDat (dat,0,sysPara); - ui->PicWidgetDisp->readVar (sysPara,0); - - // qDebug ()<<"v-n1:"<status.variNum<<"v-nLeter1:"<status.vars[0].letterSpace<<"v-nLeter2:"<status.vars[1].letterSpace<<"v-nLeter3:"<status.vars[2].letterSpace; - sysPara->status.variNum=ui->PicWidgetDisp->getVarNum (); - sysPara->status.currPrintCol=ui->PicWidgetDisp->getWidth (); - sysPara->status.currPrintRow=ui->PicWidgetDisp->getPicRealHeight(); - - ui->PicWidgetDisp->getCharRamData(sysPara); - - } - // end of PICFILE - else if(sysPara->para.EditMode==TXTFILE)// TXTFLE - { - sysPara->status.addSpace = sysPara->para.checkSpace; - ontextEdittextChanged(); - coldot = (int)ui->textEdit->document()->size().width(); - if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - { - coldot = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); - QMessageBox::warning(this, tr("警告"), - tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); - } - int maxPicHeight = MAX_PRINT_ROW_NUM + 12; - QSize size(coldot,maxPicHeight); - - sysPara->status.currPrintRow =0; - sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace - - - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff);//填充白色 - //image.fill(0x00f0f000);//填充白色 - QPainter painter(&image); - //image.save("./printImage.jpg"); - ui->textEdit->document()->drawContents (&painter, image.rect()); /*将text写到pic*/ - - image.save("./printImage.bmp"); - //ui->widgetPrintTextDisplay - int firstRow = maxPicHeight; - /*--------------------------------------------------------------------------*/ - for(int j = 0; j < maxPicHeight; j++){ //计算首行位置 - for(int i = 0; i < coldot; i++){ - QRgb rgb = image.pixel(i,j); - if(rgb !=0x00ffffff )//& 0xff000000) - { - //qDebug()<maxPicHeight)?maxPicHeight:lastRow; - sysPara->status.ExpiryVarNum=0; - sysPara->status.CurrDateVariNum = 0; - sysPara->status.classVariNum = 0; - sysPara->print.ExpiryVar.startColPos = 0; - sysPara->print.ExpiryVar.endRowPos = 0; - sysPara->print.ExpiryVar.letterSpace =0; - sysPara->print.CurDateVar.startColPos = 0; - sysPara->print.CurDateVar.endRowPos = 0; - sysPara->print.CurDateVar.letterSpace = 0; - - //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 - for(int j = 0; j < lastRow - firstRow; j++){ // Y - for(int i = 0; i < coldot; i++){ // - QRgb rgb = image.pixel(i,j + firstRow); - // 修改code判断逻辑 - long unsigned int rgbValue = rgb & COLOR_MASK; - - if(rgb&0x80000000) { //判断alpha,rgb<0xFFE0E0E0->过滤偏白背景 - if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 - - bool foundvar=0; - if(j>0){ - QRgb r_rgb = image.pixel(i,j + firstRow+1); - if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} - //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; - } - if(foundvar){ - if(sysPara->status.variNum < MAX_VARI_NUM){ - sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); - sysPara->status.vars[sysPara->status.variNum].endRowPos = j; - if(varLastRowstatus.variNum ++;TempVarNum++; - i+=5; - //qDebug()<<"VARr:"<status.QRvariNum>=4)continue; - if(rgbValue == MDT_RGB) { //MDT - handleCode(i,j,&varLastRow, MDT); - } - else if(rgbValue == QR_RGB) { //QR - handleCode(i,j,&varLastRow, QR); - } - else if(rgbValue == BAR_RGB) { //BAR - handleCode(i,j,&varLastRow, BAR); - } - - if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; - - } - //else if((rgb & 0xfffff0)==0xff00f0) - else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - bool foundExVar=0; - if(j>0){ - QRgb r_rgb = image.pixel(i,j + firstRow+1); - if((r_rgb & 0x00ffffff) != EXPIRY_VARI_RECONISE ){foundExVar =1;} - } - if(foundExVar) - { - qDebug()<<"expiryVar:"; - //if(sysPara->status.ExpiryVarNum <3) - { - sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0); - sysPara->print.ExpiryVar.endRowPos = j; - if(varLastRowstatus.ExpiryVarNum == 0) - sysPara->status.ExpiryVarNum ++; - i+=10; - } - //else TempVarNum++; - //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 - } - } - else if((rgb & 0xfffff0)==0xff0cf0) - { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 - //qDebug()<<"before found CurDateVar:"<0){ - QRgb r_rgb = image.pixel(i,j + firstRow+1); - if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} - } - if(foundExVar) - { - // qDebug()<<"found CurDateVar:"; - //if(sysPara->status.ExpiryVarNum <2) - { - sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0); - sysPara->print.CurDateVar.endRowPos = j; - if(varLastRowstatus.CurrDateVariNum == 0) - sysPara->status.CurrDateVariNum ++; - i+=10; - } - - //else TempVarNum++; - //dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] |= 1 << (j%8); //画黑点 - } - } - //else if((rgb & 0xffffff)==0x0032c8) - else if((rgb & 0x0000ff)>0x0000c0 && (rgb & 0x00ff00)>0x002F00 && (rgb & 0x00ff0000)==0x00000000) - { - //qDebug()<<"before found class:"<status.classVariNum <3) - { - EXPIRYVAR_t *currCLass = &sysPara->print.ClassVari ; - currCLass->startColPos = i+(sysPara->status.addSpace?i:0); - if (currCLass->startColPos>1) - currCLass->startColPos = currCLass->startColPos - 1; - currCLass->endRowPos = j; - if(varLastRowstatus.classVariNum == 0) - sysPara->status.classVariNum ++; - i+=5; - } - } - } - else { //Y = 0.299*R' + 0.587*G' + 0.114*B - int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; - if(y < 125 ) { - dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 - - if((j+1) > sysPara->status.currPrintRow) { - sysPara->status.currPrintRow = j+1; - } - } - } - }/*判断alpha end*/ - } - } - - // var - //qDebug() <<"VarNum"<8){ - setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); - strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); - strTitle.append("\r\n"); - strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); - QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); - } - - //qDebug()<status.vars[0].startRowPos<status.vars[0].endRowPos<< sysPara->status.currPrintRow; - // ==============查找QRV, DMTV,BARV 变量 MAX_QVARI_NUM - //qDebug()<<"qrvar"<status.QRvariNum; - searchQrVar(); - //if(sysPara->status.ExpiryVarNum) - searchExpiryVar(); - //ui->widgetPrintTextDisplay->update(); - //=============== - if(sysPara->status.variNum){ - // - /*--------------------------------提取变量------------------------------------------*/ - QString pattern = ""; - QRegExp rx(pattern); - QString textHtml = ui->textEdit->toHtml(); - - int from = 0; - int varNum = 0; - // 正常变量 - while(from < textHtml.size() && from != -1) { - from = textHtml.indexOf(rx,from);//返回匹配到到起始地址 - bool ok; - - if(from != -1){//找到匹配的 - from ++; - if(varNum < sysPara->status.variNum){ - - qDebug() << rx.capturedTexts(); - - sysPara->status.vars[varNum].digitalNum = rx.cap(4).toInt(&ok);//第二个匹配,数字到个数 - sysPara->status.vars[varNum].bold = (sysPara->status.vars[varNum].digitalNum%100) == 75; - if(sysPara->status.vars[varNum].bold) - sysPara->status.vars[varNum].digitalNum = sysPara->status.vars[varNum].digitalNum/100; - - sysPara->status.vars[varNum].type = rx.cap(2).toInt(&ok);//第一个匹配 - strcpy(sysPara->status.vars[varNum].fontname,rx.cap(3).toUtf8().data()); - sysPara->status.vars[varNum].width = rx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); - sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); - - //qDebug() <status.vars[varNum].startRowPos - // << "endRowPos" << sysPara->status.vars[varNum].endRowPos - // <<"Height"<status.vars[varNum].height; - //sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].startRowPos + sysPara->status.vars[varNum].height-1; - sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+1; - if(sysPara->status.vars[varNum].startRowPos<0)sysPara->status.vars[varNum].startRowPos=0; - //sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].endRowPos - sysPara->status.vars[varNum].height+(sysPara->status.vars[varNum].height==15||sysPara->status.vars[varNum].height==16?0:1); - // qDebug()<<"Hei:"<status.vars[varNum].height; - /*-----------------------------------------------------------------------------------------*/ - int t_x_start_pos = sysPara->status.vars[varNum].startColPos; - int t_x_end_pos = t_x_start_pos + sysPara->status.vars[varNum].width ; - if(t_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - t_x_end_pos = (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide); - int t_y_start_pos = sysPara->status.vars[varNum].startRowPos; - int t_y_end_pos = sysPara->status.vars[varNum].endRowPos+1 ; - if(t_y_start_pos < 0) - t_y_start_pos = 0; - for(int i = t_x_start_pos; i < t_x_end_pos; i++){ - for(int j = t_y_start_pos; j < t_y_end_pos; j++){ - - dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 - - } - } - - sysPara->status.vars[varNum].height = rx.cap(6).toInt(&ok); - if(sysPara->status.vars[varNum].height>16 ){ - if(sysPara->status.vars[varNum].height==24) - ; - else { - if(sysPara->status.vars[varNum].startRowPos) - { - sysPara->status.vars[varNum].endRowPos--; - sysPara->status.vars[varNum].startRowPos--; - } - } - } - - if(sysPara->status.vars[varNum].type == RANDOMNUM) - { - //qDebug()<<"RAND:"<status.vars[varNum].type<< sysPara->status.vars[varNum].digitalNum; - sysPara->status.RandomDigitNum = sysPara->status.vars[varNum].digitalNum; - - - } - - if(sysPara->status.vars[varNum].type >59 && sysPara->status.vars[varNum].type<70) - { - sysPara->status.vars[varNum].endRowPos = sysPara->status.vars[varNum].endRowPos-3; - sysPara->status.vars[varNum].startRowPos = sysPara->status.vars[varNum].startRowPos-3; - } - /*-----------------------------------------------------------------------------------------*/ - int pixelSize = Public::derivePixelSizeFromHeight(sysPara->status.vars[varNum].height); - - //qDebug()<<"MainWindows"<status.vars[varNum].height<status.vars[varNum].letterSpace = 0; - if(sysPara->status.vars[varNum].digitalNum){ //算出letterspace - QFont font; - //font.setFamily(Public::getFontFamily(pixelSize)); - font.setFamily(sysPara->status.vars[varNum].fontname); // 20160812 - //pixelSize==7? font.setFamily(ui->textEditOption->getLabelFontFamily()->text()):font.setFamily(Public::getFontFamily(pixelSize, 0)); - // font.setPixelSize(pixelSize); - font.setPixelSize(sysPara->status.vars[varNum].height); - font.setWeight(sysPara->status.vars[varNum].bold?QFont::Bold:QFont::Normal); - font.setLetterSpacing(QFont::AbsoluteSpacing, 0); - QFontMetrics fontMetrics(font); - int charWidth = (fontMetrics.horizontalAdvance("0123456789")) / 10 ; - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - charWidth = (fontMetrics.horizontalAdvance("0123456789.m "))/13; - } - - sysPara->status.vars[varNum].letterSpace = - (sysPara->status.vars[varNum].width - charWidth * sysPara->status.vars[varNum].digitalNum) - / (sysPara->status.vars[varNum].digitalNum); - //sysPara->status.vars[varNum].width/sysPara->status.vars[varNum].digitalNum/(sysPara->status.addSpace?2:1) - charWidth; - } - - if(varNum<7) varNum ++; - } - else - { - qDebug() << tr("warning,界面上有变量未显示完全"); - } - } - } - } - - //if(sysPara->status.variNum) qDebug()<< sysPara->status.vars[0].startColPos<status.vars[0].endRowPos ; - - /*--------------------------------------------------------------------------*/ - generateCharRamData(); - - /*---------------------------------------------------------------------------*/ - //sysPara->status.currPrintRow ++;//总的行数,从1~n,而不是从0~n, - //if(sysPara->status.currPrintRow>39)sysPara->status.currPrintRow=39; - if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1) sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; - bool found=0; - - lastRow = sysPara->status.currPrintRow; - //qDebug()<<"lastRow:"<status.currPrintRow; j >2 ; j--){ //计算首行位置 - for(int i = 0; i < coldot; i++){ - if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ - lastRow = j+1; - found=1;//qDebug()<<"fOUND:"<status.currPrintRow; - break; - } - } - if(found) - break; - } - if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow =MAX_PRINT_ROW_NUM-1; - if(lastRow20 &&lastRow<=25) lastRow =24; - - sysPara->status.currPrintRow =lastRow; - //sysPara->status.currPrintRow = (lastRow > varLastRow) ? lastRow : varLastRow; //配合賴工省点打印少行問题 - - if(sysPara->status.specialVarPrint.SpecialVarEnable) - { - sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&sysPara->status.specialVarPrint,sizeof(SpecialVarPrint)); // Send specialVarPrint 20240716 - } - } - // end of TxtMode - - // 交替打印 - // sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; - - -#ifdef _2DCODE_ - if(sysPara->status.QRvariNum) { - onUpdateDispQRCode(1); - } -#endif - //if(sysPara->status.currPrintRow==11) sysPara->status.currPrintRow=12; - int wmax = sysPara->status.currPrintRow; - sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; - if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; - else { - if(sysPara->para.AlterMode==0)sysPara->para.AlterMode=1; - wmax = sysPara->status.currAlterPrintRow; - } - /*-------------------------------切换到显示窗口-----------------------------------*/ - if(sysPara->status.addSpace) - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol/2,sysPara->status.currPrintRow); - else ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->status.currPrintRow); - - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, - sysPara->para.AlterMode? - sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); - ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); - ui->widgetPrintTextDisplay->update(); - //qDebug()<<"3"<status.currPrintRow; - } - previewFlag=0; -} - -void MainWindow::showDat(unsigned char * Dat) -{ - Q_UNUSED(Dat); -} -void MainWindow::alterDataPrint(unsigned char m) -{ - if(sysPara) - { - - ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol,sysPara->para.AlterMode?sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); - emit ui->widgetPrintTextDisplay->update(); - - } -} - -void MainWindow::generateCharRamData(){/* 生成字模数据 */ - if(sysPara->status.variNum){ - QTextEdit textEdit; - textEdit.document()->setDocumentMargin(0); - textEdit.setLineWrapMode(QTextEdit::NoWrap); - int ramAddress = 0; - int i; - qDebug()<<"sysPara->status.variNum:"<status.variNum; - for( i = 0; i < sysPara->status.variNum; i++){ - vars_t *p_var = &sysPara->status.vars[i]; - p_var->bassAddr = -1; - if(p_var->original){ //清除原来的记录 - if(p_var->dat){ - free(p_var->dat); - } - p_var->original = false; - } - - int width; - if(p_var->bassAddr == -1){ - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide) - width = (p_var->digitalNum)?(13*(p_var->width/p_var->digitalNum)):12; - else - width = (p_var->digitalNum)?(10*(p_var->width/p_var->digitalNum)):12; - int width2 = width;//+(sysPara->status.addSpace?width:0); - int height = Public::derivePixelSizeFromHeight(p_var->height); - // int height = p_var->height; - - textEdit.clear(); - int DPI = textEdit.logicalDpiX(); - DPI = DPI?DPI:1; //Pixel = DPI * Point / 72 - - auto fontFamily = QString(p_var->fontname); - textEdit.setFontFamily(fontFamily); - - if(sysPara->para.flagOfModuleDecimal || sysPara->para.flagOfModuleHide){ - textEdit.insertHtml(QString("0123456789.m ") - .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*96/DPI).arg(p_var->bold?600:400)); //600表示加粗,400表示普通 - }else{ - textEdit.insertHtml(QString("0123456789") - .arg(fontFamily) // 20160812 增加横向字体 p_var->type <9 正常, p_var->type 20~28 左横 p_var->type 40~48 右横 - .arg(height*96/DPI).arg(p_var->bold?600:400)); - } - - - QFont font = textEdit.font(); - font.setLetterSpacing(QFont::AbsoluteSpacing, p_var->letterSpace); - textEdit.setFont(font); - // width = p_var->width; - qDebug() << "letterSpace: " << p_var->letterSpace<< "font:" << font.family()<< "font width:" << width; - int imgHeight = height + 12; - QSize size(width,imgHeight); - QImage image(size,QImage::Format_ARGB32); - image.fill(0x00ffffff); - QPainter painter(&image); - textEdit.show(); //如果不显示,似乎不会绘制 - textEdit.document()->drawContents (&painter, image.rect()); /*将text写到pic*/ - - QString fileName = "/home/plg/doc/002.html"; - QTextDocumentWriter writer(fileName); - bool success = writer.write(textEdit.document()); - - textEdit.hide(); - image.save(QString::number(i) + "varRam.png"); - // 找到最下面的行 - int lastValidRow = 0; - for(int k = imgHeight - 1; k >= 0 ; k--){ - for(int j = 0; j < width; j ++){ - QRgb rgb = image.pixel(j,k); - if(rgb&0xff000000){ - lastValidRow = k + 1; - break; - } - } - if(lastValidRow != 0) - break; - } - - qDebug()<<"lastValidRow"<endRowPos<< p_var->startRowPos; - int rowDiff = p_var->endRowPos - p_var->startRowPos; - - int firstValidRow = -1; // 变量的第一行所处的行地址 - for(int y = 0; y < image.height(); ++y) { - for(int x = 0; x < image.width(); ++x) { - if(image.pixel(x, y) & 0xff000000) { - firstValidRow = y; - break; - } - } - - if(firstValidRow != -1) - break; - } - - firstValidRow = qMax(firstValidRow, 0); - - int rowByteNum = rowDiff/8 + ((rowDiff%8)?1:0); // 一列占用字节数 - if (rowByteNum > 0) {// 防崩溃保护 - unsigned char *dat = (unsigned char *)calloc(width2,rowByteNum); - for(int k = firstValidRow; k < lastValidRow; k++){ - for(int j = 0; j < width; j ++){ - QRgb rgb = image.pixel(j,k); - - int currRow = k - firstValidRow; - if(((rgb >> 24)&0xff) > 0x80){ // 判断是否有效的像素点 - dat[rowByteNum*(j+(sysPara->status.addSpace?j:0) )+ currRow/8] |= (1<<(currRow%8)); - } - } - } - p_var->bassAddr = ramAddress; - p_var->datHeight = height; - - p_var->datWidth = width2; - p_var->rowByteNum = rowByteNum; - p_var->dat = dat; - p_var->original = true; - p_var->currVal = -1; //相当于初始化 - ramAddress += rowByteNum * width2; - } - } - } - } -} - -void MainWindow::updateTotalCnt(int en) -{ - // No50 USEING - //sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt: - // (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0; - //if(en) sysPara->para.totalProductCnt=0; - - //sysPara->para.totalProductCnt = sysPara->status.totalProductCnt; // No51版本改进 - sysPara->status.lastProductCnt = sysPara->status.productCnt; - ui->labelProductCnt->setText(QString::number(sysPara->status.productCnt)); - ui->labelTotalProductCnt->setText(QString::number( sysPara->para.totalProductCnt+sysPara->status.totalProductCnt)); - -} -static int numOfTextChange = 0; -void MainWindow::on_pushButtonStartPrint_pressed() -{ - unsigned int type = sysPara->status.fpgaVersionNum >> 12; - if(sysPara->status.isPrinting){ - qDebug("Mainwindow: Printing 开始打印"); - }else{ - qDebug("Mainwindow: Non printing 开始打印"); - } - static int fileCount = 0; - fileCount++; - if(fileCount > 5) - { - fileCount = 1; - } - - if(sysPara){ - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - test_flag = 0; - /******2020/2/29*****/ - if(sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER && type == 8) //同步模式下,判断喷印间隔是否设置合理 - { - QSizeF size = ui->textEdit->document()->size(); - float stroke,print_len_min; - stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; - print_len_min = stroke * size.width(); - if(print_len_min > sysPara->para.synTriggerPrintLenMm && !sysPara->para.charWidthSetEnable) - { - QMessageBox::information(this,tr("错误"),tr("喷印间隔过短,应高于%1!").arg(print_len_min)); - return; - } - } - /******2020/2/29 end*****/ -#ifndef FPGATEST - if(!SIMULATE_PRINTING_MODE){ - if (!sysPara->status.reclainTankReachEnd) { - return; - } - if((sysPara->status.statWarn & WARN_STATUS_HDINT)){ - QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!")); - return ; - } - if((sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){ - QMessageBox::information(this,tr("错误"),tr("墨线未开,请先开墨线开关!")); - return ; - } - } -#endif - sysPara->devOp->highVoltageCtrl(1); - sysPara->devOp->setHighVoltageAmplitudetoSTM32(); - sysPara->status.waitHightVolOff = 0; - if(!printingFlag)setRunStatus(tr("正在加高压...")); - // 复位计数器 - if(sysPara->status.FileChangeRestCntFlag){ - if(sysPara->para.ResetAllProductCntEn) - { - sysPara->devOp->clearProductCnt(3 | 0x10); // [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt=0; - } - else if(sysPara->para.ResetProductCntEn) - { - sysPara->devOp->clearProductCnt(3); - } - sysPara->status.FileChangeRestCntFlag=0; - sysPara->saveParaToFile(); - } - if(sysPara->para.EditMode == TXTFILE||sysPara->para.EditMode== PICFILE) - PreviewPressed(); //生成打印数据,确定变量的位置和对应生成字模 - else if(sysPara->para.EditMode == SCENE) - onPreviewScene(); - - if(numOfTextChange >= 5){ - numOfTextChange = 0; - emit autoUpdateFontWidthByMainWindow((const unsigned int)sysPara->status.currPrintCol); - } - - if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ - QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); - return ; - } - // LogInfo::setRunStatusText(tr("有效打印区域 %1行 x %2 列").arg(sysPara->status.currPrintRow).arg(sysPara->status.currPrintCol)); - //if(sysPara->para.printTriggerMode != PRINT_TRIGGER_SYNCHRONIZER) - if(!((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER) - ||((sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL - ||sysPara->para.printTriggerMode == PRINT_TRIGGER_ELEC_EYE_EDGE) - && sysPara->para.eleEyeTriggerSynPrintEn)) - ) - { - int dotNumPerCol = sysPara->status.currPrintRow*(1 + sysPara->para.printRowDelay) + sysPara->para.printColDelay; - long printTmUs = 1.0f*dotNumPerCol*(1 + sysPara->para.charBold)*sysPara->status.currPrintCol*(2*sysPara->para.divideRatio)/(FPGA_SYS_HZ/1000000); - if((printTmUs/1000 + 3) > (sysPara->para.printDelayMs) - && (sysPara->para.timeTriggerPrintMode == TIME_TRIGGER_PRINT_MODE_HEAD_TO_HEAD) - && (sysPara->para.printTriggerMode == PRINT_TRIGGER_TIME ) - ) // 在电眼方式下,是否需要判呢? - { - QMessageBox::critical(0,tr("错误"),tr("打印耗时 %1ms ,触发间隔 :%2ms ,触发间隔至少应当大于打印耗时3ms").arg(printTmUs/1000).arg(sysPara->para.printDelayMs)); - return ; - } - } - sysPara->status.isPrinting=false; - - setRunStatus(tr("开始打印1")); - qDebug()<textEdit->toPlainText()); - - SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, - if(sysPara->para.isCheckInsertTime) - { - if(!startPrintingFlag) - { - LogInfo::setRunStatusText(tr("开始打印")); - } - } - else - { - LogInfo::setRunStatusText(tr("开始打印")); - } - /*-------------------------------------------------------------------*/ - ui->labelSynColDelay->setText(""); - sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据 - /*--------------------------------暂停按钮------------------------------*/ - ui->pushButtonPausePrint->setEnabled(true); - // ui->pushButtonPausePrint->setText(tr("暂停打印")); - /*---------------------------------开关回收槽------------------------------*/ - enableReclaimCtrlButton(false); - updatePrintDisplayLabel(); - // 20170717 移动此,以观察条形码打印异常问题。 - if(!startPrintingFlag) - { - sysPara->devOp->printCtrl(PRINT_CTRL_START); - printingFlag = true; - } - else - { - //如果已经在打印,则不要在发送start命令,只要更新相应的数据即可 - if(!printingFlag) //如果在暂停,重复取消暂停 - on_pushButtonPausePrint_pressed(); - } - startPrintingFlag = true;sysPara->status.isPrinting=true; - } -} -unsigned char blankDat1[BLANK_COL_NUM*MAX_PRINT_ROW_BYTE_NUM]={0}; -void MainWindow::SendPrintDataToFpga(unsigned char alterEnable) -{ - if(!sysPara) return ; - fileChange=false; - - sysPara->devOp->writeFpgaPrintPara(1); /*务必放在最后一步*/ - sysPara->devOp->writeFpgaVariCtrl(); - - sysPara->devOp->fpgaWr(0,blankDat1,sizeof(blankDat1));//...所加的空白偏移地址 - // 交替打印处理 - unsigned char *dat; - size_t sizeofdat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - sizeofdat = sizeof(sysPara->status.printDat_Normal); - }else{ - dat =sysPara->status.printDat; - sizeofdat = sizeof(sysPara->status.printDat); - } - if(sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM <= 20000) - sysPara->devOp->fpgaWr(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); - else - sysPara->devOp->fpgaWrD2(sizeof(blankDat1),dat, sysPara->status.currPrintCol* MAX_PRINT_ROW_BYTE_NUM); -} -int MainWindow::getCurrPrintStatus() -{ - int printStatus; - if (startPrintingFlag ) { - if(printingFlag) { - printStatus = 1; // 正在打印 - } - else { - printStatus = 2; // 暂停喷印 - } - } - else { - printStatus = 3; // 停止打印 - } - return printStatus; -} - -void MainWindow::updatePrintDisplayLabel(){ - if(sysPara && !sysPara->status.reclainTankReachEnd){ - setRunStatus(tr("回收槽未到底!!!!!!")); - } - else if(startPrintingFlag ){ - if(printingFlag) - setRunStatus(tr("正在喷印...............")); - else - setRunStatus(tr("暂停喷印...............")); - } - else - setRunStatus(""); -} - -void MainWindow::on_pushButtonStopPrint_pressed() -{ - if(sysPara->status.isPrinting){ - qDebug("Mainwindow: Printing 停止打印"); - }else{ - qDebug("Mainwindow: Non printing 停止打印"); - } - - if(sysPara){ - -#ifndef FPGATEST - if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { - return; - } -#endif - - sysPara->status.flagOfAbnormalStatus = false; - sysPara->status.isPrinting=false; - sysPara->devOp->printCtrl2(1); - sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT - LogInfo::setRunStatusText(tr("停止打印")); - ui->pushButtonStartPrint->setEnabled(true); - - ui->pushButtonPausePrint->setEnabled(false); - // ui->pushButtonPausePrint->setText(tr("暂停打印")); - enableReclaimCtrlButton(true); - printingFlag = false; - startPrintingFlag = false; - updatePrintDisplayLabel(); - sysPara->status. waitHightVolOff = 1; - sysPara->saveParaToFile(); // 将相关配置保存 - - if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) - { - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("提示"), - tr("随机码文本将展出到U盘,请插入U盘"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); - sysPara->devOp->RandTxtBakup(0); //备份到U盘 - LogInfo::setRunStatusText("随机码文件导出完成."); - } - } - } -} - -void MainWindow::on_pushButtonPausePrint_pressed() -{ - if(sysPara){ - if(sysPara->status.WorkTimeOut && !SIMULATE_PRINTING_MODE) { sysPara->devOp->printCtrl(PRINT_CTRL_STOP); - return; - } - if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { - return; - } - sysPara->devOp->printCtrl(PRINT_CTRL_PAUSE); - LogInfo::setRunStatusText(printingFlag?tr("暂停打印"):tr("继续打印")); - ui->pushButtonStartPrint->setEnabled(true); - printingFlag = !printingFlag; - if(printingFlag) - { - ui->pushButtonPausePrint->setText(tr("继续打印\n保持高压")); - ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(0, 255, 0)}"); - sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - } - else - { - ui->pushButtonPausePrint->setText(tr("暂停打印\n停止高压")); - ui->pushButtonPausePrint->setStyleSheet("QPushButton{color:rgb(255, 0, 0)}"); - } - updatePrintDisplayLabel(); - sysPara->saveParaToFile(); // 将相关配置保存 - - if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0)) - { - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("提示"), - tr("随机码文本将展出到U盘,请插入U盘"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - LogInfo::setRunStatusText("正在导出随机码文件到U盘......"); - sysPara->devOp->RandTxtBakup(0); //备份到U盘 - LogInfo::setRunStatusText("随机码文件导出完成."); - } - } - } -} - -void MainWindow::resetReclaimCtrlButtonText(){ - ui->pushButtonReclaimTanOpen->setText(tr("开")); - ui->pushButtonReclaimTankClose->setText(tr("关")); -} - -void MainWindow::enableReclaimCtrlButton(bool enable) { - ui->pushButtonReclaimTanOpen->setEnabled(enable); - ui->pushButtonReclaimTankClose->setEnabled(enable); -} - -void MainWindow::enablePushButtonStart(bool enable) -{ - ui->pushButtonStart->setEnabled(enable); -} - -void MainWindow::enablePrintButton(bool enable){ - ui->pushButtonPausePrint->setEnabled(false); -#ifdef FPGATEST - enable = true; -#endif - - ui->pushButtonStartPrint->setEnabled(enable); - ui->pushButtonStopPrint->setEnabled(enable); -} - -void MainWindow::airPushingProcess() -{ - if(sysPara){ - if (sysPara->status.airPushing) { - setRunStatus(tr("正在排气 ...............")); - // 执行排气 4 秒 - sysPara->status.airPushingOnTime += 100; - - if(sysPara->para.airPushDurationSec <= 0 || sysPara->para.airPushDurationSec > 30) { - sysPara->para.airPushDurationSec = 4; - sysPara->saveParaToFile(); - } - - // 延迟 7 秒后才开回收槽,正式结束排气阶段. reclaimTanOpen:会延迟半秒 - if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 6500){ - airPushTimer->stop(); - setRunStatus(tr("排气结束, 打开回收槽.")); - LogInfo::setRunStatusText(tr("排气结束, 打开回收槽.")); - - reclaimTanOpen(); - sysPara->status.airPushingDone = 1; - sysPara->status.airPushing = 0; - sysPara->status.airPushingOnTime = 0; - return; - } - - if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){ - sysPara->devOp->controlViscosityPump(false); - sysPara->devOp->controlCycleValve(false); - - if(!sysPara->devOp->isReclaimPumpOpen()) - sysPara->devOp->controlReclaimPump(true, false); - - setRunStatus(tr("排气结束, 准备打开回收槽.")); - LogInfo::setRunStatusText(tr("排气结束, 准备打开回收槽.")); - sysPara->status.isPumpValveControledByHand = false; - return; - } - } - } -} - -void MainWindow::reclaimTanOpen() -{ - sysPara->status.isPumpValveControledByHand = false; - sysPara->devOp->mainInkCtrl(); - // 如果是排气流程,则不需要先收 - if (sysPara->status.airPushingDone) - sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 - 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) -{ - int idx = sysPara->status.QRvariNum; - sysPara->print.QRvars[idx].type=type; - sysPara->print.QRvars[idx].countEn=1; - sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; - sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0); - sysPara->print.QRvars[idx].endRowPos=row+1; - if(*varLastRowstatus.QRvariNum++; -} - -void MainWindow::handleCodeScene(int col, int row, int *varLastRow, int type, int textItemPosX, int textItemPosY) -{ - int idx = sysPara->status.QRvariNum; - sysPara->print.QRvars[idx].type=type; - sysPara->print.QRvars[idx].countEn=1; - sysPara->print.QRvars[idx].Counter=sysPara->status.productCnt; - sysPara->print.QRvars[idx].startColPos=col+(sysPara->status.addSpace?col:0)+textItemPosX; - sysPara->print.QRvars[idx].endRowPos=row+1+textItemPosY; - if(*varLastRowstatus.QRvariNum++; -} - -void MainWindow::on_pushButtonReclaimTanOpen_pressed() -{ - if(sysPara){ - if (!sysPara->status.reclaimTankBlockedAppending) { - if (sysPara->status.canRunAirPushing && (sysPara->status.currReclaimTankPos == 0)) { // 回收槽关闭的情况下才可以执行排气;//2019/10/24 当回收槽未在顶的位置,不需要排气 - if (!sysPara->status.airPushing) { - // 先执行排气后开回收槽 - sysPara->status.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); //墨水阀 - - sysPara->status.airPushing = 1; - sysPara->status.airPushingDone = 0; - sysPara->status.airPushingOnTime = 0; - airPushTimer->start(100); // 100ms - } - } - else - reclaimTanOpen(); - } - if(sysPara->status.reclaimTankBlockedAppending) { - sysPara->status.reclaimTankBlockedAppending = false; - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10; - onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10); - } - } - } -} - -void MainWindow::on_pushButtonReclaimTankClose_pressed() -{ - if(sysPara){ - if(sysPara->status.reclaimTankBlockedAppending){ - sysPara->status.reclaimTankBlockedAppending = false; - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("回收槽之前发生阻塞或回收槽时间设置错误,是否强制将当前位置设为到顶位置?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->status.currReclaimTankPos = 0; - onReclainTankPositionChanged(0); - } - } - - sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); - ui->pushButtonReclaimTanOpen->setText(tr("开")); - ui->pushButtonReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("停止"):tr("关")); - enablePrintButton(SIMULATE_PRINTING_MODE); - sysPara->devOp->highVoltageCtrl(0); - // sysPara->status.reclaimTankstatus = 2; - setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭")); - if(!sysPara->para.reclaimTankTime){ - LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!")); - } - sysPara->status.currReclaimOperationCnt = 0; - sysPara->status.reclainTankReachEnd = false; - sysPara->status.reclainOpenAppending = false; - sysPara->status.reclainCloseAppending = true; - sysPara->status.reclaimBlockedCnt = 0; - - } -} - -void MySleep(unsigned int msec); -/* - * 关机前务必保存参数 - * */ -void MainWindow::checkForPowerOff(){ - if(sysPara->status.powerOffAppending){ - if(!sysPara->status.selfCheckDone) - sysPara->status.selfCheckDone = true; - this->setDisabled(true); - emit setDisableAll(); - ////////关机时提高转速和回收泵压力,粘度泵和循环阀///// - quint16 gearPumpValue_backup = sysPara->para.gearPumpValue; - int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;; - if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) - { - if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ - for(int i=25;i>21;i--) - { - if(i == 25){ - sysPara->status.isPumpValveControledByHand = true; //停止自动 - sysPara->devOp->controlInkValve(true); - sysPara->devOp->controlInkValvePWM(true); - sysPara->devOp->controlReclaimPump(true,true); - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlCycleValve(true); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - if(i == 22){ - sysPara->devOp->controlInkValve(false); - sysPara->devOp->controlInkValvePWM(false); - } - this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*2)); - MySleep(2000); - } - } - sysPara->devOp->controlReclaimTankOpen(true); - sysPara->status.isPumpValveControledByHand = true; //停止自动 - if(sysPara->para.gearPumpEnable ){ - if(!sysPara->para.flagOfReclaimPumEnable){ - sysPara->para.gearPumpValue = 360; - sysPara->devOp->WriteMoterPump(); - } - else{ - sysPara->devOp->controlReclaimPump(true,false); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - } - else{ - sysPara->para.reclaimPumpPWMWidth = 95; - sysPara->devOp->controlReclaimPump(true,true); - } - - if(!sysPara->devOp->isViscosityPumpOpen()) - sysPara->devOp->controlViscosityPump(true); - sysPara->devOp->controlCycleValve(true); - sysPara->devOp->controlInkValve(false); //关供墨 - sysPara->devOp->controlInkValvePWM(false); //关供墨 - - if(!TEST_MODE){ - for(int i=14;i>7;i--) - { - if(i==13) - sysPara->devOp->controlReclaimTankOpen(false); - this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); - MySleep(3000); - } - } - - if(!sysPara->status.lostCommuFlag){ - sysPara->para.calandar_and_dat.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); - sysPara->para.calandar_and_dat.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); - sysPara->para.Counter3.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); - - updateTotalCnt(0); - sysPara->saveParaToFile(); // 关机前将相关配置保存 - } - sysPara->status.powerOffAppending = false; - if(!TEST_MODE){ - for(int i=7;i>0;i--) - { - if(i == 3) - sysPara->devOp->controlReclaimTankClose(true); - if(i == 2){ - sysPara->devOp->controlViscosityPump(false); - sysPara->devOp->controlCycleValve(false); - sysPara->devOp->controlReclaimPump(false,false); - sysPara->para.gearPumpValue = 0; - sysPara->devOp->WriteMoterPump(); - } - this->setRunStatus(tr("正在准备关机,请等待%1秒...............").arg(i*3)); - MySleep(3000); - } - } - } - emit CloseJd(); - sysPara->para.gearPumpValue=gearPumpValue_backup; - sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup; - sysPara->devOp->controlCompressPump(false); - setRunStatus(tr("准备关机......")); - qDebug()<<"准备关机"; - sysPara->para.totalProductCnt +=sysPara->status.totalProductCnt; - sysPara->devOp->clearProductCnt(3 | 0x10);//总产器计数器立即清零 - sysPara->para.ReadFileErrorCnt=0; - sysPara->para.PowerOnErrorCnt=0; - if(sysPara->para.isCntSaveStateValue) - { - sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt(); - sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt(); - sysPara->para.cnt3CurrValue = QString::number(sysPara->status.Status_Counter3.cnt3CurrValue,16).toInt(); - } - updateTotalCnt(0); - sysPara->saveParaToFile(); // 关机前将相关配置保存 - sysPara->saveRFIDPara(); - system("sync");//缓存同步 - - timerPowerOff->start(1000); - } -} - -static int numOfPowerOffCMD = 0; -void MainWindow::sendPowerOffCmd(){ - if(++numOfPowerOffCMD == 120){ - sysPara->devOp->color_flag = 2; - setRunStatus(tr("关机失败!!!")); - timerPowerOff->stop(); - numOfPowerOffCMD = 0; - return; - } - sysPara->devOp->powerOff(); -} - -void MainWindow::powerOffConfirmed(){ - timerPowerOff->stop(); - QProcess process; - process.startDetached("poweroff"); - qApp->exit(0); -} - -void MainWindow::on_pushButtonStart_pressed() -{ - QMessageBox::StandardButton ret; - if(pushButtonFlag) - ret = QMessageBox::information(this, tr("提示"), - tr("是否关闭齿轮泵,关闭齿轮泵会导致墨水停止流动!"), - QMessageBox::Ok | QMessageBox::Cancel); - else - ret = QMessageBox::information(this, tr("提示"), - tr("是否启动齿轮泵?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - pushButtonFlag = !pushButtonFlag; - if(pushButtonFlag) - { - ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(0, 255, 0)}"); - ui->pushButtonStart->setText(tr("泵启动")); - } - else - { - ui->pushButtonStart->setStyleSheet("QPushButton{background-color:rgb(255, 0, 0)}"); - ui->pushButtonStart->setText(tr("泵停止")); - } - //ui->pushButtonStart->setEnabled(false); - emit pushButtonStartPressed(pushButtonFlag); - } -} - -void MainWindow::_on_pushButtonPowerOff_pressed(bool notice){ - if(sysPara){ - if(sysPara->status.currReclaimTankPos != 0) - { - QMessageBox::StandardButton ret = QMessageBox::Ok; - if(notice) - ret = QMessageBox::warning(this, tr("警告"), - tr("回收槽未关,是否关闭回收槽后关机!"), - QMessageBox::Ok | QMessageBox::Cancel); - if (!notice || ret == QMessageBox::Ok){ - - system((char *)((QString("mkdir %1").arg(TESTDIR)).toLatin1().data())); - system((char *)((QString("cp %1/*.bin %2/. ").arg(PARA_ROOT_DIR).arg(TESTDIR)).toLatin1().data())); //先备份UP* - sysPara->status.reclaimCloseCnt=10; - on_pushButtonStopPrint_pressed(); - on_pushButtonReclaimTankClose_pressed(); - sysPara->status.powerOffAppending = true; - enableReclaimCtrlButton(false); //所有的按钮全部屏蔽 - } - } - else { - QMessageBox::StandardButton ret = QMessageBox::Ok; - if(notice) - ret = QMessageBox::warning(this, tr("警告"), - tr("是否确认关机?"), - QMessageBox::Ok | QMessageBox::Cancel); - - if (!notice || ret == QMessageBox::Ok){ - sysPara->status.powerOffAppending = true; - checkForPowerOff(); - } - } - } -} - - -void MySleep(unsigned int msec) -{ - QTime dieTime = QTime::currentTime().addMSecs(msec); - while( QTime::currentTime() < dieTime ) - QCoreApplication::processEvents(QEventLoop::AllEvents, 100); -} - -//extern MyInputMethod *myInputMethod; - -void MainWindow::ontextEdittextChanged() -{ - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - QSizeF size = ui->textEdit->document()->size(); - sysPara->status.textEditTotalCol = size.width(); - //编辑界面 - ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(size.height()).arg(size.width())); - if(size.width() > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ - myInputMethod->getInputMethod()->on_Key_Backspace_released(); - MySleep(300); - } - if(size.width() == 0) - { //在通过关标选择文本然后删除的时候,不会调用cursorPosition事件 - onTextEditCursorPositionChanged(); - } - - if(0 10) - { - numOfTextChange = 0; - emit autoUpdateFontWidthByMainWindow((const unsigned int)size.width()); - } -} -QPoint QTextCursorPos(const QTextEdit * myTextEdit) -{ - QPoint pt; - QTextCursor tc=myTextEdit->textCursor(); - QTextLayout *pLayout=tc.block().layout(); - pt.setY(tc.position()-tc.block().position()); - pt.setX(pLayout->lineForTextPosition(pt.y()).lineNumber()+tc.block().firstLineNumber()); - return pt; -} - -extern MyInputMethod *myInputMethod; -void MainWindow::onTextEditCursorPositionChanged(){ - for(int i = 0; i < 2; i++){ - QTextCharFormat fmt = ui->textEdit->currentCharFormat (); - QString s = ui->textEdit->document()->toPlainText(); - QFont font = fmt.font(); - QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); - QLabel *labelFontFamily = ui->textEditOption->getLabelFontFamily(); - QCheckBox *checkBoxBold = ui->textEditOption->getCheckBoxBold(); - bool ok; - //qDebug()<<"onTextEditCursorPositionChanged"<< font.family()<text().toInt(&ok,10)<logicalDpiX(); - DPI = DPI?DPI:1; - int pixeSize = font.pointSizeF()*DPI/72; - if(pixeSize >= Public::getMinFontPixelSize()){ - labelFontSize->setText(QString::number(Public::getAdjustedPixelSize(pixeSize))); - checkBoxBold->setChecked(font.weight() == QFont::Bold); - labelFontFamily->setText(font.family()); - barcode->setFontSize(Public::getAdjustedPixelSize(pixeSize)); - break; - } - else { - if(s.length()<=1) { - ui->textEdit->selectAll(); - font.setFamily(Public::getFontFamily(labelFontSize->text().toInt(&ok,10) )); - ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 - ui->textEdit->moveCursor(QTextCursor::End); - } else - ui->textEditOption->setFontFormat(); //设置完格式后,在第二轮重设字体 - } - } - } - -} - -void MainWindow::onLabelFaultRusumePressed(){ - if(sysPara){ - sysPara->status.flagOfSpeedAlarm = false; - sysPara->status.mainInkPumpError = false; - sysPara->status.mainInkPumpRunTmCnt = 0; - sysPara->status.compressPumpError = false; - sysPara->status.compressPumpRunTmCnt = 0; - sysPara->devOp->resumeFault(); - ui->labelRunStatus->clear(); - sysPara->status.beeperOnFlag = false; - sysPara->devOp->controlBeeper(false); - sysPara->status.heaterONTimeCnt = 0; //加热块计数清零 - ui->labelStatusChargefault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); - sysPara->status.DACDisable = false; - sysPara->status.lastPhaseFault = 0; - sysPara->status.phaseErrorCnt = 0; - if(sysPara->status.lastHighVoltageFault && !(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ - sysPara->status.lastHighVoltageFault = false; - flagOfClearHighVltageWarnning = true; - } - - if(sysPara->status.gearPumpRunStopFlag && pushButtonFlag) - { - emit repeatInitedPid(); - sysPara->status.gearPumpRunStopFlag = false;//齿轮泵报警恢复 - } - if((sysPara->devOp->color_flag == 2) ||(sysPara->devOp->color_flag == 1)) - { - sysPara->devOp->color_flag = 3; - sysPara->devOp->controlYellowLight(false); - sysPara->devOp->controlRedLight(false); - } - sysPara->status.visocityValueOverflowNum = 0; - - if(sysPara->status.visocityValueOverflowNum>=MAX_ALLOW_VISICOSITY_OVERFLOW_NUM) // - sysPara->status.viscosityFault = 0; - - sysPara->status.powerOffAfterPhaseFaultAppending = 0; - sysPara->status.lastwarmInkPump = 0; - sysPara->status.RecycleWarnCnt =0; - sysPara->status.lastRecycleWarn =0 ; - sysPara->status.powerOffAfterInkOrSOLVEmptyAppending=0; - //sysPara->status.lastStatWarn=0; // 机器报故障后,点击故障恢复按钮,再点击打印按钮,“正在喷印中…”字符未立即显示出来,需等待大约10秒才会出现。 - //LogInfo::setRunStatusText(tr("故障恢复")); - sysPara->status.RecycleWarnCnt=0; - sysPara->status.HVFaultCloseEn=0; - if(sysPara->status.flagOfPressureFault){ - sysPara->status.flagOfPressureFault = false; - sysPara->status.isPumpValveControledByHand = false; - sysPara->devOp->mainInkCtrl(); - emit clearPressureFault(); - } - if(printingFlag) { - sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); - } - } -} - -void MainWindow::onEnableReclaimCtrlButton(bool flag) -{ - enableReclaimCtrlButton(flag); -} - -void MainWindow::onInkJetPrinterCurrentChanged(int index) -{ - ui->senceEditOption->onInkJetPrinterCurrentChanged(index); -} - -void MainWindow::onLabelProductCntPressed(){ - if(sysPara){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否初始化产品计数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - updateTotalCnt(0); - sysPara->devOp->clearProductCnt(1); - sysPara->saveParaToFile(); - - } - } -} - -void MainWindow::onLabelTotalProductCntPressed(){ - if(sysPara){ - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否清除总产品计数?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->clearProductCnt(1 | 0x10 );// [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt = 0; - - } - } -} - -void MainWindow::onPushButtonCNTResetNowPressed(){ - if(sysPara){ - // emit closeSerial(); - - QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("警告"), - tr("是否立即重新计米?"), - QMessageBox::Ok | QMessageBox::Cancel); - if (ret == QMessageBox::Ok){ - sysPara->devOp->clearProductCnt(3 | 0x10);// [3]总产品计数器清零FPGA - sysPara->para.totalProductCnt = 0; - } - - } - - - -} - -void MainWindow::on_bottonEditText_pressed() -{ - //qDebug()<<"EditMode"<para.EditMode; - if(sysPara->para.EditMode==TXTFILE){ - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - ontextEdittextChanged(); //显示大小 - int coldot = (int)ui->textEdit->document()->size().width(); - if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) - { - coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; - QMessageBox::warning(this, tr("警告"), - tr("最多支持的列数目为:%1请减小信息长度.").arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); - } - } - else if(sysPara->para.EditMode==PICFILE){ - emit openCurrFile(sysPara->para.lastOpenedFileName); - } - else if(sysPara->para.EditMode==SCENE){ - //qDebug()<<"SCENE"; - //emit openCurrFile(sysPara->para.lastOpenedFileName); - ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); - ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); - } - -} - -void MainWindow::on_pushButtonReduceTextDisplay_pressed() -{ - ui->widgetPrintTextDisplay->reduceDisplay(); -} - -void MainWindow::on_pushButtonEnlargeTextDisplay_pressed() -{ - - ui->widgetPrintTextDisplay->enlargeDisplay(); - //update(); -} - -/* - * value以100ms为单位 - * */ -void MainWindow::onReclainTankPositionChanged(int value){ - static bool init = false; - static int totalCharNum = 0; - if(!init){ - int w = ui->labelReclaimStatus->geometry().width() - 1; //预留几个像素 - QFontMetrics fontMetrics = QApplication::fontMetrics(); - w -= fontMetrics.width(QString(" |>|")); - int t = fontMetrics.width(QChar('-')); - if(fontMetrics.width(QChar('-')) != fontMetrics.width(QChar(' '))){ - LogInfo::setRunStatusText(tr("警告:‘-’和空格的宽度不一样")); //可能有的字体两者宽度不同 - } - totalCharNum = t?w/t:w; //t永远都不应该为零,保险起见 - init = true; - } - if(sysPara){ - int reclaimTime = sysPara->para.reclaimTankTime?sysPara->para.reclaimTankTime:15; - int charNum = value*totalCharNum/(reclaimTime*10); - - charNum = (charNum > totalCharNum)?totalCharNum:charNum; - QString str = " |"; - for(int i = 0; i <= totalCharNum; i++) { //多加”>|“ - if(i < charNum) - str.append(QChar('-')); - else if(i == charNum) - str.append(QChar('>')); - else - str.append(QChar(' ')); - } - str.append(QChar('|')); - ui->labelReclaimStatus->setText(str); - } -} - - -void MainWindow::setRunStatus(QString str){ - switch(sysPara->devOp->color_flag){ - case 1: - ui->labelRunStatus->setStyleSheet("color:yellow"); - break; - case 2: - ui->labelRunStatus->setStyleSheet("color:red"); - break; - default: - ui->labelRunStatus->setStyleSheet("color:black"); - break; - } - ui->labelRunStatus->setText(str); -} - - -void MainWindow::changeTxtMode(QString str){ - if(sysPara){ - fileChange=true; - sysPara->status.FileChangeRestCntFlag = true; - emit openFileChange(); - unsigned char SpecialVarEnable = 0; - sysPara->devOp->fpgaWr(0xa4b0,(unsigned char *)&SpecialVarEnable,1); - } -} - -void MainWindow::update_scroll() -{ - ui->widgetPrintTextDisplay->scroll_update(); -} - -void MainWindow::changeEditMode(int editMode) -{ - if(sysPara){ - //qDebug()<<"changeEditMode"<para.EditMode; - if(sysPara->para.EditMode==PICFILE){ - ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); - ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); - ui->widgetPrintTextDisplay->update(); - ui->pushButtonTXTOpen->show(); - ui->textEditOption->editMode=sysPara->para.EditMode; - } - else if(sysPara->para.EditMode==TXTFILE) - { - // ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - // ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - sysPara->para.EditMode=TXTFILE; - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - ui->widgetPrintTextDisplay->update(); - ui->pushButtonTXTOpen->hide(); - ui->textEditOption->editMode=sysPara->para.EditMode; - ui->textEditOption->editItemModeDone(); - } - else if(sysPara->para.EditMode==SCENE) - { - //qDebug()<<"CCCCCENE"; - sysPara->para.EditMode=SCENE; - ui->stackedWidgetText->setCurrentWidget(ui->fileSceneViewer); - ui->stackedWidgetOption->setCurrentWidget(ui->senceEditOption); - ui->widgetPrintTextDisplay->update(); - ui->pushButtonTXTOpen->hide(); - ui->textEditOption->editMode=sysPara->para.EditMode; - //edit@12-12 - ui->senceEditOption->show_scene_new_dlg(); - } - //ontextEdittextChanged(); //显示大小 20140831 - if(sysPara->para.EditMode==SCENE) - { - onSwitchTimerShowItem(true); - } - else - { - onSwitchTimerShowItem(false); - } - } -} - -TextEditOption* MainWindow::getTexteditOption() -{ - return ui->textEditOption; -} - -void MainWindow::SetEditMode(int mode) -{ - ui->textEditOption->editMode = sysPara->para.EditMode; - // if(sysPara->para.EditMode==SCENE) - // { - // timerShowItem->start(10); - // } -} - -void MainWindow::setRunStatus(QPixmap pixMap){ - ui->labelRunStatus->setPixmap(pixMap); -} -void MainWindow::SetMainTabEdit(int n){ - -} - -void MainWindow::testPrint(){ - //on_pushButtonStartPrint_pressed(); -} - - -void MainWindow::onEditBarCode(){ -#ifdef _2DCODE_ - if(sysPara) { - dlgqrcode->move( 0,10); - barcode->setWindowTitle(tr("条形码信息编辑")); - //qDebug()<<"bcOption->height"<para.bcOption.height; - barcode->SetOption((bcOption_t*)&sysPara->para.bcOption); - barcode->show(); - //barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); - } -#endif - -} -void MainWindow::onBarCodeClose(){ -#ifdef _2DCODE_ - barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); - unsigned char *dat; - bool MaxCol4000; - if(sysPara->status.flagOfNo67FPGA) - MaxCol4000 = true; - else - MaxCol4000 = false; - if(MaxCol4000){ - dat =sysPara->status.printDat_Normal; - }else{ - dat =sysPara->status.printDat; - } - if(barcode->flagCount) - { - barcode->getDat(dat,0); - barcode->flagCount=0; - ui->widgetPrintTextDisplay->update(); - } - if(barcode->flagInsert ) - { - barcode->flagInsert=0; - if(sysPara->para.EditMode==PICFILE) - { - - } - else - { - //ui->textEditOption->InsertBarCodeToEdit(barcode->pictureName,barcode->imgBar.width(),barcode->imgBar.height()); - QString html = ""; - QTextCharFormat fmt = ui->textEditOption->textEdit->currentCharFormat (); - ui->textEditOption->textEdit->insertHtml (html); - ui->textEditOption->textEdit->mergeCurrentCharFormat(fmt); - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - } - } - sysPara->saveParaToFile(); -#endif -} - -void MainWindow::onEditQRCode(){ -#ifdef _2DCODE_ - if(sysPara) { - dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); - dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); - dlgqrcode->setWindowTitle(tr("二维码信息编辑")); - - dlgqrcode->setCntCheckBoxHide(1); - - dlgqrcode->show(); - } -#endif -} -void MainWindow::onInitQRCode(){ -#ifdef _2DCODE_ - if(sysPara) { - dlgqrcode->SetOption((qrOption_t*)&sysPara->para.qrOption); - dlgqrcode->move( (this->width() - dlgqrcode->width())/2 ,10); - dlgqrcode->setWindowTitle(tr("二维码信息编辑")); - //dlgqrcode->show(); - } -#endif -} -void MainWindow::onQRCodeClose(){ -#ifdef _2DCODE_ - // dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); - if(dlgqrcode->flagInsert ) { - dlgqrcode->GetOption((qrOption_t*)&sysPara->para.qrOption); - dlgqrcode->flagInsert=0; - if(sysPara->para.EditMode==PICFILE){ - return; - } - // qDebug()<<"flagInsert2"<flagInsert<bcWidth<bcHeight; - ui->textEditOption->InsertBarCodeToEdit(dlgqrcode->pictureName,dlgqrcode->bcWidth,dlgqrcode->bcHeight); - ui->stackedWidgetText->setCurrentWidget(ui->pageTextEdit); - ui->stackedWidgetOption->setCurrentWidget(ui->textEditOption); - - } - if( sysPara->para.qrOption.barCodeFlag != dlgqrcode->barCodeFlag) - { - sysPara->para.qrOption.barCodeFlag = dlgqrcode->barCodeFlag; - ui->textEditOption->textEdit->setHtml(QApplication::translate("MainWindow", "\n" - "\n" - "


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

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

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


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

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

< + // + QRegExp rx(pattern); + //QString textHtml = ui->textEdit->toHtml(); + ///////////// + QTextEdit textEdit ; + for(int i=0;istatus.QRvariNum;i++) + { + + if(sysPara->print.QRvars[i].type==0){ + textEdit.insertHtml(QString("") + .arg(9).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->print.QRvars[i].type==1){ + textEdit.insertHtml(QString("") + .arg(10).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + else if(sysPara->print.QRvars[i].type==2){ + textEdit.insertHtml(QString("") + .arg(11).arg(sysPara->para.qrOption.height).arg(sysPara->para.qrOption.width)); //插入索引后 + } + } + QString textHtml = textEdit.toHtml(); + //////////// + int from = 0; + // int xx =textHtml.size(); + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(rx,from); + bool ok; + //qDebug()<=9 && (sysPara->print.QRvars[varNum].type ==type-9)) + { + //sysPara->print.QRvars[varNum].type = type-9; + sysPara->para.qrOption.type = type-9; + sysPara->para.qrOption.width=sysPara->print.QRvars[varNum].width = rx.cap(3).toInt(&ok);// *(sysPara->status.addSpace && type==9 ?2:1) ; + sysPara->para.qrOption.height =sysPara->print.QRvars[varNum].height = rx.cap(4).toInt(&ok); + sysPara->print.QRvars[varNum].startRowPos = sysPara->print.QRvars[varNum].endRowPos-sysPara->print.QRvars[varNum].height; + + //qDebug()<<"type:"<print.QRvars[varNum].type<status.QRvariNum + // <print.QRvars[varNum].startColPos<print.QRvars[varNum].startRowPos<print.QRvars[varNum].endRowPos + // <print.QRvars[varNum].width<print.QRvars[varNum].height + // <status.statWarn & WARN_STATUS_POWER_MON)) return; +#endif + strTitle = tr("高压故障,暂停打印."); + + strWarring = tr("高压故障:两高压偏转板间的电压检测异常");strWarring.append("\r\n"); + strWarring.append(tr("1.高压偏转板和高压底座潮湿、脏污,请清洗并吹干高压板和高压底座;"));strWarring.append("\r\n"); + strWarring.append( tr("2.机器更换主板或者高压包,请进入“系统设置”点击“重置高压”,字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); + //strWarring.append( tr("字高设置为90时,重置高压报警值应在480—550之间;"));strWarring.append("\r\n"); + strWarring.append( tr("3.高压线路漏电,请更换高压线路;"));strWarring.append("\r\n"); + strWarring.append( tr("4.高压底座漏电,请更换高压底座。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + +} +void MainWindow::onStatusInkLeak(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)) return; +#endif + strTitle = tr("墨水缸满报警"); + + strWarring = tr("墨水过多:墨水溢出");strWarring.append("\r\n"); + strWarring.append(tr("1. 请停止添加墨水;"));strWarring.append("\r\n"); + strWarring.append(tr("2. 请排出多余墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} + +void MainWindow::onStatusInkSwint(){ + + if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)) return; + +} +void MainWindow::onStatusInkWaterLevel(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)) return; +#endif + strTitle = tr("墨水液位报警"); + + strWarring = tr("墨水液位:墨水即将耗尽");strWarring.append("\r\n"); + strWarring.append(tr("1. 墨水耗尽,3小时后将自动关机,请及时添加墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusRecycleWarn(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)) return; +#endif + strTitle = tr("回收故障,关闭回收槽,关墨线"); + strWarring = tr("回收故障:未检测到有墨水回收");strWarring.append("\r\n"); + strWarring.append( tr("1. 墨水未射入回收管,请修正墨线方向;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 墨水粘度太低,请更换新墨水;"));strWarring.append("\r\n"); + strWarring.append( tr("3. 回收管堵塞,请清通或者更换回收管;"));strWarring.append("\r\n"); + strWarring.append(tr("4. 回收泵故障,请清洗或者更换回收泵;"));strWarring.append("\r\n"); + strWarring.append( tr("5. 确认各参数及设备无异常后请进入“打印设置”取消“回收故障处理”的勾选,退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); + //strWarring.append( tr(" 退回主窗口界面点击“故障恢复”按钮."));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusSolvLevelWarn(){ +#ifdef X86TEST + +#else + if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) return; +#endif + + strTitle = tr("溶剂液位报警"); + + strWarring = tr("溶剂液位:溶剂即将耗尽");strWarring.append("\r\n"); + strWarring .append(tr("1. 溶剂耗尽,3小时后将自动关机,请及时添加溶剂。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +} +void MainWindow::onStatusViscosityWarn(){ +#ifdef X86TEST + +#else + if(sysPara->status.viscosityFault==1) +#endif + { + strTitle = tr("粘度故障报警"); + strWarring = tr("粘度故障:墨水粘度无法自动调整");strWarring.append("\r\n"); + strWarring.append( tr("1. 混合阀失灵,请冲洗或者更换混合阀;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 墨水罐内的墨水异常,请更换新墨水;"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); +#ifdef X86TEST + +#else + } + else if(sysPara->status.viscosityFault==2) + { + +#endif + strTitle = tr("粘度故障报警"); + strWarring= tr("粘度计异常:");strWarring.append("\r\n"); + strWarring.append(tr("1. 泵前过滤网堵塞,请更换泵前滤网;"));strWarring.append("\r\n"); + strWarring.append( tr("2. 粘度泵异常,请清洗或更换粘度泵;"));strWarring.append("\r\n"); + strWarring.append(tr("3. 粘度传感器异常,请检查传感器线路或者更换传感器."));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + } + +} +void MainWindow::onStatusChargefault(){ +#ifdef X86TEST + +#else + if(sysPara->status.lastPhaseFault) +#endif + { + + strTitle = tr("相位故障报警"); + strWarring = tr("相位故障:相位信号检测异常");strWarring.append("\r\n"); + strWarring.append(tr("1. 墨水分裂不正常,请调整墨水分裂;"));strWarring.append("\r\n"); + strWarring.append(tr("2. 充电槽或者相检头脏污,请清洗充电槽和相检头;"));strWarring.append("\r\n"); + strWarring.append(tr("3. 放大板功能性异常,请更换放大板;"));strWarring.append("\r\n"); + strWarring.append( tr("4. 相检头和墨线的距离过远,请检测喷头活动机构,调整相检头和墨线间的距离;"));strWarring.append("\r\n"); + strWarring.append( tr("5. 地线未接或者外界干扰,请连接地线或者隔离外界干扰;"));strWarring.append("\r\n"); + strWarring.append( tr("6. 墨水质量异常,请更换新墨水。"));strWarring.append("\r\n"); + emit ShowWarnningText(strTitle,strWarring); + + } +} + +void MainWindow::OnFinished(int event){ + //msgtest->setText("孔一:60分钟灌浆结束条件!请点击\"结束\"按钮!"); + //msgtest->show(); + msgtest->hide(); + +} + +void MainWindow::onPreviewScene() +{ + pPicScene->clearSelection(); + QSize size(pPicScene->itemsBoundingRect().width(),pPicScene->itemsBoundingRect().height()); + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + QPainter painter(&image); + pPicScene->render(&painter,QRectF(),pPicScene->itemsBoundingRect()); + + int coldot=0; + if(sysPara){ + bool MaxCol4000 = sysPara->status.flagOfNo67FPGA; + previewFlag=1; + sysPara->status.currPrintRow = 0; + sysPara->status.variNum = 0; + sysPara->status.QRvariNum = 0; + unsigned char *dat; + if(MaxCol4000){ + dat =sysPara->status.printDat_Normal; + memset(dat,0,sizeof(sysPara->status.printDat_Normal)); + }else{ + dat =sysPara->status.printDat; + memset(dat,0,sizeof(sysPara->status.printDat)); + } + + { + sysPara->status.addSpace = sysPara->para.checkSpace; + + coldot = (int)ui->textEdit->document()->size().width(); + coldot = pPicScene->itemsBoundingRect().width(); + if(coldot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + coldot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int maxPicHeight = MAX_PRINT_ROW_NUM + 12; + QSize size(coldot,maxPicHeight); + + sysPara->status.currPrintRow =0; + sysPara->status.currPrintCol = coldot + ( sysPara->status.addSpace?coldot:0) ; //checkSpace + + QImage image(size,QImage::Format_ARGB32); + image.fill(0x00ffffff);//填充白色 + QPainter painter(&image); + QRectF validRectF(pPicScene->itemsBoundingRect().x(),pPicScene->itemsBoundingRect().y(),coldot,maxPicHeight); + pPicScene->render(&painter,QRectF(),validRectF); + + int firstRow = 0; + int lastRow = MAX_PRINT_ROW_NUM > maxPicHeight? maxPicHeight:MAX_PRINT_ROW_NUM; //MAX_PRINT_ROW_NUM=40 + int TempVarNum=0; + int varLastRow=0; + + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + for(int j = 0; j < lastRow - firstRow; j++){ // Y + for(int i = 0; i < coldot; i++){ // + QRgb rgb = image.pixel(i,j + firstRow); + // 修改code判断逻辑 + long unsigned int rgbValue = rgb & COLOR_MASK; + if(rgb&0x80000000){ //判断alpha + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + bool foundvar=0; + if(j>0){ + QRgb r_rgb = image.pixel(i,j + firstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ){foundvar =1;} + //QRgb r_rgb = image.pixel(i,j + firstRow-1);if((r_rgb & 0xf0f0ff) == 0xf0f000 )foundvar =0; + } + if(foundvar){ + if(sysPara->status.variNum < MAX_VARI_NUM){ +// sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0); +// sysPara->status.vars[sysPara->status.variNum].endRowPos = j; + } + else TempVarNum++; + } + } + + else if( (rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || + (rgbValue == BAR_RGB)){ + if(sysPara->status.QRvariNum>=4)continue; + if(rgbValue == MDT_RGB) { //MDT + handleCode(i,j,&varLastRow, MDT); + } + else if(rgbValue == QR_RGB) { //QR + handleCode(i,j,&varLastRow, QR); + } + else if(rgbValue == BAR_RGB) { //BAR + handleCode(i,j,&varLastRow, BAR); + } + + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + } + + else if((rgb & 0x00ffffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + } + else if((rgb & 0xfffff0)==0xff0cf0) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + } + else if((rgb & 0xffffff)==0xff00ff) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + } + else + { //Y = 0.299*R' + 0.587*G' + 0.114*B //非变量 + int y = (((rgb&0xff)*299 + ((rgb>>8)&0xff)*587 + ((rgb>>16)&0xff)*114))/1000; + if(y < 125 ){ + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?i:0)) + j/8] |= 1 << (j%8); //画黑点 + if((j+1) > sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+1; + } + } + } + + }/*判断alpha end*/ + } + } + + if(TempVarNum>MAX_VARI_NUM){ + setRunStatus(tr("变量数大于8个,某些变量将不起作用!!!")); + strTitle= tr("变量数大于8个,某些变量将不起作用!!!"); + strTitle.append("\r\n"); + strTitle.append(tr("请减少信息中的变量(或计数器)数量.")); + QMessageBox::warning(this, tr("警告"),strTitle,QMessageBox::Ok); + } + + sysPara->status.variNum = 0; + sysPara->status.ExpiryVarNum = 0; + sysPara->print.ExpiryVar.startColPos = 0; + sysPara->print.ExpiryVar.endRowPos = 0; + sysPara->print.ExpiryVar.letterSpace =0; + sysPara->print.CurDateVar.startColPos = 0; + sysPara->print.CurDateVar.endRowPos = 0; + sysPara->print.CurDateVar.letterSpace = 0; + sysPara->status.CurrDateVariNum = 0; + sysPara->status.QRvariNum=0;//lch add + + // 处理变量和常量的渲染和更新 + handleSceneShow(MaxCol4000, dat); + + if(sysPara->status.currPrintRow>MAX_PRINT_ROW_NUM-1)sysPara->status.currPrintRow=MAX_PRINT_ROW_NUM-1; + bool found=0; + lastRow = sysPara->status.currPrintRow; + for(int j = sysPara->status.currPrintRow; j >2 ; j--){ //计算首行位置 + for(int i = 0; i < coldot; i++){ + if(dat[MAX_PRINT_ROW_BYTE_NUM*i + j/8] & (1 << (j%8))){ + lastRow = j+1; + found=1; + break; + } + } + if(found) + break; + } + if(lastRow>MAX_PRINT_ROW_NUM-1)lastRow = MAX_PRINT_ROW_NUM-1; + if(lastRowstatus.currPrintRow = sysPara->status.currPrintRow > lastRow? + sysPara->status.currPrintRow : lastRow; + } + + if(sysPara->status.QRvariNum) { + onUpdateDispQRCode(1); + } + + int wmax = sysPara->status.currPrintRow; + sysPara->status.currAlterPrintRow = sysPara->status.currPrintRow/2; + if(sysPara->para.alterPrint.enable<1) sysPara->para.AlterMode=0; + else { + if(sysPara->para.AlterMode==0) sysPara->para.AlterMode=1; + wmax = sysPara->status.currAlterPrintRow; + } + /*-------------------------------切换到预览显示窗口-----------------------------------*/ + ui->widgetPrintTextDisplay->setDisplaySize(sysPara->status.currPrintCol, + sysPara->para.AlterMode? + sysPara->status.currAlterPrintRow : sysPara->status.currPrintRow); + ui->stackedWidgetText->setCurrentWidget(ui->pagePrintTextDisplay); + ui->stackedWidgetOption->setCurrentWidget(ui->pageOption); + ui->labelTextWidthHeight->setText(tr("[ %1行 x %2列 ]").arg(wmax).arg(sysPara->status.currPrintCol)); + ui->widgetPrintTextDisplay->update(); + } + previewFlag=0; +} + +int MainWindow::calculateMaxSpeed(int backup) +{ + float stroke; + int valid_array; + int rongdian = 0; + int mm; + int oscfreq = 0; + + // QSizeF size = ui->textEdit->document()->size(); + + switch (sysPara->para.oscillatoFreq) { + case CRYS_64K: + oscfreq = 64000; + break; + case CRYS_83K: + oscfreq = 83000; + break; + case CRYS_96K: + oscfreq = 96000; + break; + case CRYS_128K: + oscfreq = 128000; + break; + default: + break; + } + stroke = sysPara->para.printColDelay/sysPara->para.synPulseNumPerMm; + + rongdian = sysPara->status.currPrintRow * (float)sysPara->para.reducedPixelNumRatio/100; + valid_array = sysPara->status.currPrintRow - rongdian; + + switch (sysPara->para.currPrintMode) { + case FAST_PRINT: + mm = (float)(stroke * oscfreq /(sysPara->status.currPrintRow +1)); + break; + case STANDARD_PRINT: + mm = (float)( (stroke * oscfreq) / (valid_array * 2)); + break; + case SLOW_PRINT_ONE: + mm = (float)( (stroke * oscfreq) / (valid_array * 3)); + break; + case SLOW_PRINT_TWO: + mm = (float)( (stroke * oscfreq) / (valid_array * 4)); + break; + case SLOW_PRINT_THR: + mm = (float)( (stroke * oscfreq) / (valid_array * 5)); + break; + case SLOW_PRINT_FOR: + mm = (float)( (stroke * oscfreq) / (valid_array * 6)); + break; + case SLOW_PRINT_FIV: + mm = (float)( (stroke * oscfreq) / (valid_array * 7)); + break; + case SLOW_PRINT_SIX: + mm = (float)( (stroke * oscfreq) / (valid_array * 8)); + break; + case SLOW_PRINT_SEV: + mm = (float)( (stroke * oscfreq) / (valid_array * 9)); + break; + case SLOW_PRINT_EIG: + mm = (float)( (stroke * oscfreq) / (valid_array * 10)); + break; + case SLOW_PRINT_NIE: + mm = (float)( (stroke * oscfreq) / (valid_array * 11)); + break; + default: + mm = backup/sysPara->para.synPulseNumPerMm; + break; + } + + return mm; + +} + +void MainWindow::Test_Start_Stop() +{ + if(test_flag <=0) return; + if(test_flag >= RECICLARNUMBER){ + LogInfo::setRunStatusText(tr("回收槽开关检测完成!")); + test_flag = 0; + return; + } + if((test_flag%2) == 0){ + if(!open_close){ + on_pushButtonReclaimTanOpen_pressed(); + open_close = 1; + } + } + else if(test_flag%2 == 1){ + if(open_close){ + on_pushButtonReclaimTankClose_pressed(); + open_close = 0; + } + } +} + +int MainWindow::checkRange(QImage textImage, int textColdot, + int posX, int posY) +{ + int firstRow = 0;//变量显示底部会多一条横线 + int lastRow = MAX_PRINT_ROW_NUM; + + int variNum = 0; + for(int j = 0; j < lastRow - firstRow; j++){ // Y + for(int i = 0; i < textColdot; i++){ // + QRgb rgb = textImage.pixel(i,j + firstRow); + long unsigned int rgbValue = rgb & COLOR_MASK; + if((rgb&0x80000000)){ //判断alpha + if((rgb & 0xf0f0ff) == 0xf0f000){ //处理变量, 查找左下角,因为同一行的左下角是对齐的 看起来这个颜色是黄色 + + bool textfoundvar = 0; + if(j>0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if((r_rgb & 0xf0f0ff) != 0xf0f000 ) + { + textfoundvar =1; + } + } + if(textfoundvar) { + + if(sysPara->status.variNum < MAX_VARI_NUM){ + sysPara->status.vars[sysPara->status.variNum].startColPos = i+(sysPara->status.addSpace?i:0)+posX; + sysPara->status.vars[sysPara->status.variNum].endRowPos = j+posY; + + if(lastRowstatus.variNum ++; + variNum++; + i+=5;//scene 每一行可能都包含变量 + + } + else variNum++; + + } + } + + else if((rgbValue == MDT_RGB) || (rgbValue == QR_RGB) || + (rgbValue == BAR_RGB)){ + if(sysPara->status.QRvariNum>=4)continue; + if(rgbValue == MDT_RGB) { //MDT + handleCodeScene(i, j, &lastRow, MDT, posX, posY); + } + else if(rgbValue == QR_RGB) { //QR + handleCodeScene(i, j, &lastRow, QR, posX, posY); + } + else if(rgbValue == BAR_RGB) { //BAR + handleCodeScene(i, j, &lastRow, BAR, posX, posY); + } + + if(sysPara->status.QRvariNum>=4)sysPara->status.QRvariNum=4; + } + + else if((rgb & 0x0000ffff)==EXPIRY_VARI_RECONISE) + { // 有效期变量 : 处理变量, 查找左下角,因为同一行的左下角是对齐的 + bool foundExVar=0; + if(j>0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if(((r_rgb & 0x0000ffff) != EXPIRY_VARI_RECONISE )){foundExVar =1;} + } + if(foundExVar) + { + if(sysPara->status.ExpiryVarNum == 0) + { + sysPara->status.ExpiryVarNum ++; + } + sysPara->print.ExpiryVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; + sysPara->print.ExpiryVar.endRowPos = j+posY; + if(lastRow0){ + QRgb r_rgb = textImage.pixel(i,j + firstRow+1); + if((r_rgb & 0xfffff0) != 0xff0cf0 ){foundExVar =1;} + } + if(foundExVar) + { + if(sysPara->status.CurrDateVariNum == 0) + { + sysPara->status.CurrDateVariNum ++; + } + sysPara->print.CurDateVar.startColPos = i+(sysPara->status.addSpace?i:0)+posX; + sysPara->print.CurDateVar.endRowPos = j + posY; + if(lastRow sysPara->status.currPrintRow) { + sysPara->status.currPrintRow = j+posY; + } + } + } + } + return variNum; +} + +void MainWindow::handleSceneShow(bool MaxCol4000, unsigned char *dat) +{ + int myvariNum=0; + QList items = ui->senceEditOption->getPicSceneItems(); + foreach (QGraphicsItem *item, items) { + PicTextItem *picText = qgraphicsitem_cast(item); + bool ok; + + int textColdot=0; + textColdot = picText->boundingRect().width(); + if(textColdot > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + textColdot = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int maxTextHeight = MAX_PRINT_ROW_NUM + 12; + QSize textSize(textColdot, maxTextHeight); + QImage textImage(textSize,QImage::Format_ARGB32); + textImage.fill(0x00ffffff);//填充白色 + QPainter textPainter(&textImage); + + QRectF validtextRectF(picText->pos().x(),picText->pos().y(),textColdot,picText->document()->size().height()); + pPicScene->render(&textPainter,QRectF(),validtextRectF); + + /*--------------------------------------------------------------------------*/ + int textItemPosX; + int textItemPosY; + textItemPosX = picText->pos().x() - pPicScene->itemsBoundingRect().x(); + textItemPosY = picText->pos().y() - pPicScene->itemsBoundingRect().y(); + + //接下来就是要把打印到数据data填充以及确认变量的个数,变量对应的开始列和结束行 + checkRange(textImage, textColdot, textItemPosX, textItemPosY); + + //===================一般变量===================== + QString textVariPattern = ""; + QRegExp textrx(textVariPattern); + QString textHtml = picText->toHtml(); + int from = 0; + while(from < textHtml.size() && from != -1){ + from = textHtml.indexOf(textrx,from); + + if(from != -1){//找到匹配的 + from ++; + if(myvariNum < sysPara->status.variNum) + { + sysPara->status.vars[myvariNum].digitalNum = textrx.cap(4).toInt(&ok);//第二个匹配,数字到个数 + sysPara->status.vars[myvariNum].bold = (sysPara->status.vars[myvariNum].digitalNum%100) == 75; + if(sysPara->status.vars[myvariNum].bold) + sysPara->status.vars[myvariNum].digitalNum = sysPara->status.vars[myvariNum].digitalNum/100; + sysPara->status.vars[myvariNum].type = textrx.cap(2).toInt(&ok);//第一个匹配 + QByteArray fontNameUtf8 = textrx.cap(3).toUtf8(); + strncpy(sysPara->status.vars[myvariNum].fontname, fontNameUtf8.data(), sizeof(sysPara->status.vars[myvariNum].fontname) - 1); + sysPara->status.vars[myvariNum].fontname[sizeof(sysPara->status.vars[myvariNum].fontname) - 1] = '\0'; + sysPara->status.vars[myvariNum].width = textrx.cap(5).toInt(&ok)*(sysPara->status.addSpace?2:1); + sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); + sysPara->status.vars[myvariNum].startRowPos = sysPara->status.vars[myvariNum].endRowPos - sysPara->status.vars[myvariNum].height+1; + + if(sysPara->status.vars[myvariNum].startRowPos<0) + sysPara->status.vars[myvariNum].startRowPos=0; + + int item_x_start_pos = sysPara->status.vars[myvariNum].startColPos; + int item_x_end_pos = item_x_start_pos + sysPara->status.vars[myvariNum].width ; + if(item_x_end_pos > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)) + item_x_end_pos = MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide; + int item_y_start_pos = sysPara->status.vars[myvariNum].startRowPos; + int item_y_end_pos = sysPara->status.vars[myvariNum].endRowPos+1 ; + if(item_y_start_pos < 0) + item_y_start_pos = 0; + // 擦除占位图 + for(int i = item_x_start_pos; i < item_x_end_pos; i++){ + for(int j = item_y_start_pos; j < item_y_end_pos; j++){ + dat[MAX_PRINT_ROW_BYTE_NUM*(i+(sysPara->status.addSpace?0:0)) + j/8] &= ~(1 << (j%8)); //将画点取消掉 + } + } + sysPara->status.vars[myvariNum].height = textrx.cap(6).toInt(&ok); + if(sysPara->status.vars[myvariNum].height>16 ){ + if(sysPara->status.vars[myvariNum].height==24) + ; + else { + if(sysPara->status.vars[myvariNum].startRowPos) + { + sysPara->status.vars[myvariNum].endRowPos--; + sysPara->status.vars[myvariNum].startRowPos--; + } + } + } + + if(sysPara->status.vars[myvariNum].type == RANDOMNUM) + { + sysPara->status.RandomDigitNum = sysPara->status.vars[myvariNum].digitalNum; + } + + sysPara->status.vars[myvariNum].letterSpace = 0; + if(sysPara->status.vars[myvariNum].digitalNum){ //算出letterspace + QFont font; + font.setFamily(sysPara->status.vars[myvariNum].fontname); // 20160812 + font.setPixelSize(sysPara->status.vars[myvariNum].height); + font.setWeight(sysPara->status.vars[myvariNum].bold?QFont::Bold:QFont::Normal); + font.setLetterSpacing(QFont::AbsoluteSpacing, 0); + QFontMetrics fontMetrics(font); + int charWidth = (fontMetrics.horizontalAdvance("0123456789"))/10 ; + sysPara->status.vars[myvariNum].letterSpace = + (sysPara->status.vars[myvariNum].width - charWidth * sysPara->status.vars[myvariNum].digitalNum) + / (sysPara->status.vars[myvariNum].digitalNum); + } + myvariNum++; + } + } + } + //==========================一般变量结束======================= + + //=========================二维码变量================== + searchQrVar(); + + //=========================有效期/生产日期变量================== + searchExpiryVar(textHtml); + + //=========================数模转换================= + generateCharRamData(); + } +} + +void MainWindow::UpdateDateTimeQRCode(QString strContent) +{ + if(!printingFlag || !sysPara->para.isCheckInsertTime) + { + return ; + } + + QLabel *labelFontSize = ui->textEditOption->getLabelFontSize(); + bool ok; + int font_size = labelFontSize->text().toInt(&ok,10); + QString font_family = Public::getFontFamily(font_size); + if(sysPara->para.EditMode == TXTFILE) + { + QFile file("/home/plg/doc/modbusQR.bmp"); + if(file.exists()) + { + file.remove(); + } + if(dlgqrcode->barCodeFlag == 1) + { + barcode->extSetText(""); + barcode->GetOption((bcOption_t*)&sysPara->para.bcOption); + } + else + { + QString receiveContent = QString::fromUtf8(strContent.toStdString().c_str()); + dlgqrcode->extSetText(receiveContent,sysPara->para.qrOption.type); + dlgqrcode->GetOption((qrOption_t *)&sysPara->para.qrOption); + } + + QString txt_fomart = ""; + txt_fomart = QString::fromUtf8("").arg(font_family).arg(font_size) + .arg(ui->textEditOption->getCheckBoxBold()->isChecked()? 600:400); + txt_fomart += barcode->getLabe_TxtString().toUtf8(); + txt_fomart += " "; + txt_fomart += ""; + ui->textEditOption->textEdit->setHtml(txt_fomart); + ui->textEditOption->textEdit->moveCursor(QTextCursor::EndOfLine); + on_pushButtonStartPrint_pressed();//开始打印 + } + +} +QSizeF MainWindow::getDocSize()const +{ + QSizeF size = ui->textEdit->document()->size(); + return size; +} + +#ifdef EnableArabic +void MainWindow::setOpenFileName(QString fileName){ + qDebug()<<"set open fileName"<%1%2").arg(subname).arg(subsuffix2); + ui->labelOpenedFileName->setText(stringhtml); + }else{ + font.setFamily("biyang"); + ui->labelOpenedFileName->setFont(font); + ui->labelOpenedFileName->setText(fileName); + } + }else{ + font.setFamily("biyang"); + ui->labelOpenedFileName->setFont(font); + ui->labelOpenedFileName->setText(fileName); + } + }else{ + ui->labelOpenedFileName->setText(fileName); + } +} +#endif + + +void MainWindow::showFPGAData(QByteArray data){ + ui->textEdit->clear(); + ui->textEdit->setText(QString::fromUtf8(data)); +} + + +void MainWindow::showFPGAqueuesize(int size){ + sysPara->status.sizeFPGA = size; +} + +void MainWindow::showSTM32queuesize(int size){ + sysPara->status.sizeSTM32 = size; +} + +void MainWindow::showqueueFPGAsize(int size){ + sysPara->status.sizequeueFPGA = size; +} + +void MainWindow::on_pushButton_Reboot_clicked() +{ + QMessageBox::StandardButton ret = QMessageBox::Ok; + ret = QMessageBox::warning(this, tr("警告"), + tr("是否确认重启?"), + QMessageBox::Ok | QMessageBox::Cancel); + if (ret == QMessageBox::Ok){ + if(!sysPara->status.selfCheckDone) + sysPara->status.selfCheckDone = true; + this->setDisabled(true); + emit setDisableAll(); + if(!TEST_MODE && sysPara->para.flagOfReclaimPumEnable){ + for(int i=15;i>11;i--) + { + if(i == 15){ + sysPara->status.isPumpValveControledByHand = true; //停止自动 + sysPara->devOp->controlInkValve(true); + sysPara->devOp->controlInkValvePWM(true); + sysPara->devOp->controlReclaimPump(true,true); + sysPara->devOp->controlViscosityPump(true); + sysPara->devOp->controlCycleValve(true); + sysPara->para.gearPumpValue = 0; + sysPara->devOp->WriteMoterPump(); + } + if(i == 12){ + sysPara->devOp->controlInkValve(false); + sysPara->devOp->controlInkValvePWM(false); + } + this->setRunStatus(tr("正在准备重启,请等待%1秒...............").arg(i)); + MySleep(1000); + } + } + sysPara->devOp->controlReclaimTankOpen(true); + sysPara->status.isPumpValveControledByHand = true; //停止自动 + if(sysPara->para.gearPumpEnable ){ + if(sysPara->para.flagOfReclaimPumEnable) + sysPara->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; + } + } +} diff --git a/mainwindow.h b/mainwindow.h index 5a959cc..7397adc 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -63,7 +63,7 @@ public: void enableReclaimCtrlButton(bool enable); void resetReclaimCtrlButtonText(); void enablePushButtonStart(bool enable); - double getMaxSpeedCalcPara(); + int getMaxSpeedCalcPara(); void PreviewPressed(); int getCurrPrintStatus(); @@ -243,6 +243,7 @@ private: bool printingFlag; //判断当前是否在打印 bool startPrintingFlag; bool previewFlag; + bool m_powerOffInProgress = false; // 防止MySleep处理事件时重复进入关机流程 int searchExpiryVar(QString html = "");//检索有效期变量 void ExpiryDotUpdate(char Mode); diff --git a/systemsetting.ui b/systemsetting.ui index 6a70a8e..8bcbaad 100644 --- a/systemsetting.ui +++ b/systemsetting.ui @@ -1,1062 +1,1062 @@ - - - SystemSetting - - - - 0 - 0 - 800 - 600 - - - - - 0 - 0 - - - - Qt::StrongFocus - - - Form - - - - - - - - QLayout::SetDefaultConstraint - - - 3 - - - 3 - - - 3 - - - 3 - - - - - 电机电流: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - 晶振电压(%): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - °C - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - - - - - 回收泵力度(%): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 压力: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 喷嘴直径: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 脉冲计数器: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - 30 - - - 59 - - - - - - - - 0 - 0 - - - - - 64K - - - - - 83K - - - - - 96K - - - - - 128K - - - - - 新晶振 - - - - - - - - 晶振频率: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 粘度: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - 80 - - - 750 - - - 10 - - - 300 - - - - - - - 高压包容差: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - 2 - - - 99 - - - 10 - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - 99 - - - 50 - - - - - - - - 0 - 0 - - - - - 50 (UM) - - - - - 60 (UM) - - - - - 70 (UM) - - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - - 0 - - - - - 0.6 - - - - - 1.0 - - - - - 1.6 - - - - - 2.0 - - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - - 文本模式 - - - - - 点阵模式 - - - - - 场景模式 - - - - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - 1 - - - 59 - - - - - - - true - - - - 0 - 0 - - - - 0 - - - 70 - - - - - - - - 0 - 0 - - - - 500 - - - 3800 - - - - - - - - 0 - 0 - - - - 5000 - - - - - - - 信息编辑模式: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - 频率修正: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 粘度泵动作间隔(秒): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Hz - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - 隔膜位置: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - -80000 - - - 80000 - - - 0 - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - 5 - - - 300 - - - 5 - - - 50 - - - - - - - 墨水温度: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 粘度校正(%): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 喷头温度: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - 回收槽开关时间: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 隔膜位置偏移: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - - 16777215 - 37 - - - - - 5 - - - - - 10 - - - - - 15 - - - - - 20 - - - - - 25 - - - - - 30 - - - - - 40 - - - - - 45 - - - - - 50 - - - - - 55 - - - - - 60 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Qt::LeftToRight - - - 风扇开启温度: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 37 - - - - 25 - - - - - - - °C - - - - - - - 排气时间(秒): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 37 - - - - QAbstractSpinBox::NoButtons - - - 1 - - - 300 - - - 4 - - - - - - - - - Qt::Horizontal - - - - - - - - - true - - - - 0 - 40 - - - - - 260 - 16777215 - - - - Qt::LeftToRight - - - 重置高压 - - - - - - - true - - - - 0 - 40 - - - - - 260 - 16777215 - - - - 界面语言设置 - - - - - - - - 0 - 40 - - - - 喷嘴逆清洗 - - - - - - - - - Qt::Horizontal - - - - - - - 3 - - - 3 - - - 3 - - - 3 - - - - - - 0 - 70 - - - - 搜索最佳晶振频率 - - - - :/icon/searchsuitablefrequency.png:/icon/searchsuitablefrequency.png - - - - - - - - 0 - 70 - - - - 搜索最佳晶振电压 - - - - :/icon/searchsuitablevoltage.png:/icon/searchsuitablevoltage.png - - - - - - - - 0 - 70 - - - - - - - - - 255 - 170 - 127 - - - - - - - - - 255 - 170 - 127 - - - - - - - - - 255 - 170 - 127 - - - - - - - - 应用当前配置 - - - - :/icon/apply.png:/icon/apply.png - - - - - - - - - - - - ClickLabel - QLabel -
ClickLabel.h
-
-
- - - - -
+ + + SystemSetting + + + + 0 + 0 + 800 + 600 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Form + + + + + + + + QLayout::SetDefaultConstraint + + + 3 + + + 3 + + + 3 + + + 3 + + + + + 电机电流: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 晶振电压(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + °C + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + + + + + 回收泵力度(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 压力: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 喷嘴直径: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 脉冲计数器: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 30 + + + 59 + + + + + + + + 0 + 0 + + + + + 64K + + + + + 83K + + + + + 96K + + + + + 128K + + + + + 新晶振 + + + + + + + + 晶振频率: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 粘度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 80 + + + 750 + + + 10 + + + 300 + + + + + + + 高压包容差: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 2 + + + 99 + + + 10 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 99 + + + 50 + + + + + + + + 0 + 0 + + + + + 50 (UM) + + + + + 60 (UM) + + + + + 70 (UM) + + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + + 0 + + + + + 0.6 + + + + + 1.0 + + + + + 1.6 + + + + + 2.0 + + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + + 文本模式 + + + + + 点阵模式 + + + + + 场景模式 + + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 1 + + + 59 + + + + + + + true + + + + 0 + 0 + + + + 0 + + + 70 + + + + + + + + 0 + 0 + + + + 500 + + + 3800 + + + + + + + + 0 + 0 + + + + 5000 + + + + + + + 信息编辑模式: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + 频率修正: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 粘度泵动作间隔(秒): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Hz + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 隔膜位置: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + -80000 + + + 80000 + + + 0 + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + 5 + + + 300 + + + 5 + + + 50 + + + + + + + 墨水温度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 粘度校正(%): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 喷头温度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + 回收槽开关时间: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 隔膜位置偏移: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + + 16777215 + 37 + + + + + 5 + + + + + 10 + + + + + 15 + + + + + 20 + + + + + 25 + + + + + 30 + + + + + 40 + + + + + 45 + + + + + 50 + + + + + 55 + + + + + 60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::LeftToRight + + + 风扇开启温度: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + 25 + + + + + + + °C + + + + + + + 排气时间(秒): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 37 + + + + QAbstractSpinBox::NoButtons + + + 1 + + + 300 + + + 4 + + + + + + + + + Qt::Horizontal + + + + + + + + + true + + + + 0 + 40 + + + + + 260 + 16777215 + + + + Qt::LeftToRight + + + 重置高压 + + + + + + + true + + + + 0 + 40 + + + + + 260 + 16777215 + + + + 界面语言设置 + + + + + + + + 0 + 40 + + + + 喷嘴逆清洗 + + + + + + + + + Qt::Horizontal + + + + + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 70 + + + + 搜索最佳晶振频率 + + + + :/icon/searchsuitablefrequency.png:/icon/searchsuitablefrequency.png + + + + + + + + 0 + 70 + + + + 搜索最佳晶振电压 + + + + :/icon/searchsuitablevoltage.png:/icon/searchsuitablevoltage.png + + + + + + + + 0 + 70 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + + 255 + 170 + 127 + + + + + + + + 应用当前配置 + + + + :/icon/apply.png:/icon/apply.png + + + + + + + + + + + + ClickLabel + QLabel +
ClickLabel.h
+
+
+ + + + +