hlp:merge
This commit is contained in:
@@ -1,380 +0,0 @@
|
||||
/*
|
||||
* DevOp.h
|
||||
*
|
||||
* Created on: Jun 25, 2013
|
||||
* Author: yiyu
|
||||
* QQ:1036184468
|
||||
* Descriptoin:
|
||||
|
||||
*/
|
||||
|
||||
#ifndef DEVOP_H_
|
||||
#define DEVOP_H_
|
||||
|
||||
#define JETV1 1
|
||||
#define JETV2 2
|
||||
#define JETV3 3 // EP3C10F144
|
||||
#define JETV23 4 // V5,V4主板编号均为4; V6没有正式投入使用
|
||||
#define JETV7 7 // EP4CE15F144, ARM 335X
|
||||
#define PRODUCT_VERSION(ver) ((ver>>13) & 0x7)
|
||||
|
||||
class SysPara;
|
||||
|
||||
#include <stdio.h>
|
||||
#include <QString>
|
||||
#include "myinclude.h"
|
||||
#include <QObject>
|
||||
#include <QQueue>
|
||||
#include <QMetaType>
|
||||
#include <QThread>
|
||||
#include <QMutex>
|
||||
#include <QReadWriteLock>
|
||||
|
||||
#ifdef UART2
|
||||
#include "posix_qextserialport.h"
|
||||
#endif
|
||||
|
||||
#define DisTraceMsg() printf("###############TRACE,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
|
||||
#define DisWarnmsg() printf("~~~~~~~~~~~~~~~WARN,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
|
||||
#define DisErrorMsg() printf("!!!!!!!!!!!!!!!ERROR! ,Line:%d File:%s Fun:%s\n",__LINE__,__FILE__,__FUNCTION__);
|
||||
|
||||
#define PRINT_CTRL_STOP 0
|
||||
#define PRINT_CTRL_START 1
|
||||
#define PRINT_CTRL_PAUSE 2
|
||||
#define PRINT_CTRL_DAC_DISABLE 3
|
||||
#define PRINT_CTRL_DAC_ENABLE 4
|
||||
#define PRINT_CTRL_STOPSYNCNT 5
|
||||
|
||||
|
||||
#define MAX_FPGA_DAC_VALUE_FOR_NEW ((1<<12)*95/100) //由于硬件原因,当DAC大于一定值后,电压不再变化,所以做一下限制
|
||||
#define MAX_FPGA_DAC_VALUE_FOR_V1 (255) //老板子的最大值到256
|
||||
#define MAX_FPGA_DAC_VALUE ((PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1)?MAX_FPGA_DAC_VALUE_FOR_V1:MAX_FPGA_DAC_VALUE_FOR_NEW)
|
||||
|
||||
#define MAX_POINT_DISTANCE_ADJUST_VAL (1<<10) //点距微调的最大值
|
||||
|
||||
#define MAX_MOTOR_RUN_CURRENT 600
|
||||
#define MIN_MOTOR_RUN_CURRENT 80
|
||||
|
||||
#define MAX_RECLAIM_BLOCK_CNT 5 //500ms
|
||||
|
||||
#define MAX_RELEASE_VALVE_DELAY_CNT 4
|
||||
/*所有警告都是高电平警告*/
|
||||
#define WARN_STATUS_INK_SWINT (1<<7) /*墨线开头,来自喷头,必须开的时候才能打印,关的时候为1,开的时候为0*/
|
||||
#define WARN_STATUS_POWER_MON (1<<6) //高压报警
|
||||
#define WARN_STATUS_RECYCLE_FAULT (1<<5) //高电平表示有故障
|
||||
#define WARN_STATUS_INK_WARN (1<<4)
|
||||
#define WARN_STATUS_SOLV_WARN (1<<3)
|
||||
#define WARN_STATUS_SUMP_WARN (1<<2) //墨水渗漏
|
||||
#define WARN_STATUS_HDINT (1<<1) /*喷头盖,盖上为0,否则为1,必须盖上才能打印,电磁铁有正反面*/
|
||||
#define WARN_STATUS_VISCOTITY_MEASURE_READY (1<<0) // 球已经到上位等灯
|
||||
|
||||
|
||||
#define FPGA_SYS_HZ 100000000
|
||||
|
||||
#define MAX_WR_MEM_SIZE (1<<16) //写空间最大地址范围
|
||||
#define MAX_WR_MEM_SIZE_MASK (MAX_WR_MEM_SIZE - 1)
|
||||
#define MAX_RD_MEM_SIZE (1<<9) //读空间最大地址范围
|
||||
#define MAX_RD_MEM_SIZE_MASK (MAX_RD_MEM_SIZE - 1)
|
||||
|
||||
/* am335x core board control pwm output */
|
||||
#define VISCO_PUMP_REQUEST "echo 1 > /sys/class/pwm/ecap.2/request"
|
||||
#define VISCO_PUMP_RELEASE "echo 0 > /sys/class/pwm/ecap.2/request"
|
||||
#define VISCO_PUMP_RUN "echo 1 > /sys/class/pwm/ecap.2/run"
|
||||
#define VISCO_PUMP_STOP "echo 0 > /sys/class/pwm/ecap.2/run"
|
||||
#define VISCO_PUMP_50Hz "echo 50 > /sys/class/pwm/ecap.2/period_freq"
|
||||
#define VISCO_PUMP_50P "echo 50 > /sys/class/pwm/ecap.2/duty_percent"
|
||||
#define VISCO_PUMP_HIGH "echo 1 > /sys/class/pwm/ecap.2/polarity"
|
||||
#define VISCO_PUMP_LOW "echo 0 > /sys/class/pwm/ecap.2/polarity"
|
||||
|
||||
#define SUCTION_PUMP_REQUEST "echo 1 > /sys/class/pwm/ehrpwm.0:1/request"
|
||||
#define SUCTION_PUMP_RELEASE "echo 0 > /sys/class/pwm/ehrpwm.0:1/request"
|
||||
#define SUCTION_PUMP_RUN "echo 1 > /sys/class/pwm/ehrpwm.0:1/run"
|
||||
#define SUCTION_PUMP_STOP "echo 0 > /sys/class/pwm/ehrpwm.0:1/run"
|
||||
#define SUCTION_PUMP_HIGH "echo 1 > /sys/class/pwm/ehrpwm.0:1/polarity"
|
||||
#define SUCTION_PUMP_LOW "echo 0 > /sys/class/pwm/ehrpwm.0:1/polarity"
|
||||
#define SUCTION_PUMP_90P "echo 90 > /sys/class/pwm/ehrpwm.0:1/duty_percent"
|
||||
#define SUCTION_PUMP_12000Hz "echo 12000 > /sys/class/pwm/ehrpwm.0:1/period_freq"
|
||||
|
||||
#ifdef __ADC_INPUT__
|
||||
#define BOART_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage4_raw"
|
||||
#define INK_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage5_raw"
|
||||
#define REVERSE_TEMP_DEVICE "/sys/bus/iio/devices/iio:device0/in_voltage6_raw"
|
||||
#endif
|
||||
|
||||
#ifdef UART2
|
||||
class UartThread;
|
||||
typedef struct {
|
||||
char mode;
|
||||
int addr;
|
||||
int len;
|
||||
char flag_m;
|
||||
QByteArray Buf;
|
||||
}rec_cmd_t;
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 请不要直接初始化此函数,如果需要,请通过SysPara的devOP来访问此类
|
||||
* */
|
||||
class DevOp : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public :
|
||||
DevOp(SysPara * sysPara);
|
||||
~DevOp();
|
||||
|
||||
void set_totalSynPulseNum(bool wren);// 设置可变长度
|
||||
void TTYS0ToConsole();
|
||||
void WriteMoterPump(int);
|
||||
void controlReleaseValve(bool openFlag);
|
||||
void controlMixValve(bool openFlag);
|
||||
void controlInkValve(bool openFlag); //控制墨线,即供墨阀
|
||||
void controlInkValvePWMSTM32(int PWMPulse);
|
||||
void controlCycleValve(bool openFlag);
|
||||
void controlCompressPump(bool openFlag);
|
||||
void controlViscosityPump(bool openFlag);
|
||||
void controlMainInkPump(bool openFlag);
|
||||
void setHighVoltageAmplitudetoSTM32();
|
||||
void controlReclaimPump(bool openFlag,bool fullSpeed);
|
||||
void controlReclaimPump2();
|
||||
void controlInkValvePWM(bool openFlag);
|
||||
void controlInkValvePWM2();
|
||||
void controlHeater(bool openFlag);
|
||||
void controlBeeper(bool openFlag);
|
||||
|
||||
void controlReclaimTankOpen(bool enableFlag);
|
||||
void controlReclaimTankClose(bool enableFlag);
|
||||
|
||||
void powerOff(void);
|
||||
|
||||
bool isReleaseValveOpen();
|
||||
bool isMixValveOpen();
|
||||
bool isInkValveOpen();
|
||||
bool isInkValveOpen1();
|
||||
bool isCycleValveOpen();
|
||||
bool isCompressPumpOpen();
|
||||
bool isViscosityPumpOpen();
|
||||
bool isMainInkPumpOpen();
|
||||
bool isReclaimPumpOpen();
|
||||
|
||||
bool isReclaimTankOpenEnable();
|
||||
bool isReclaimTankCloseEnable();
|
||||
bool isBeeperEnable();
|
||||
bool isHearterEnable();
|
||||
|
||||
int writeFpgaPrintPara(bool ignoreWarn = false);
|
||||
void readFgaStatus(void);
|
||||
void writeDacValue2Fpga_No73();
|
||||
|
||||
void printCtrl(int cmd);
|
||||
void ReadCnt1GroupStatus(void);
|
||||
void writeCnt1GroupSetting(bool bCntByGroupEnable);
|
||||
void writeFpgaCalandar(bool Enable);
|
||||
void writeFpgaVariCtrl();
|
||||
void readCalandarDat();
|
||||
void resumeFault();
|
||||
void highVoltageCtrl(int val);
|
||||
void maxHighVoltageDACCtrl(int val);
|
||||
void setPhaseByHand(int val);
|
||||
void readPhaseDetectHighTm();
|
||||
void setPhaseDetectVoltageDutyCycle(int duty);
|
||||
void setBlickLightPeriod(int value);
|
||||
void setOscillatorVoltage(int value);
|
||||
void setDivideRatio(int value);
|
||||
void setLastLineEndPointFixedValue(int value);
|
||||
// void checkAuthorization(QString str);
|
||||
|
||||
void mainInkCtrl();
|
||||
void pumpValveCtrl(int viscosityAdjustByTemp=0);
|
||||
void clearProductCnt(unsigned int mode);
|
||||
unsigned int readFpgaVersionNum(void);
|
||||
void fpgaWr(int addr,unsigned char*dat,int len);
|
||||
void fpgaRd(int addr,unsigned char*dat,int len);
|
||||
void fpgaWrD(int addr,unsigned int dat,int len);
|
||||
void fpgaResetWarning(char mode);
|
||||
bool fpgaDevOpenFlag;
|
||||
|
||||
void stm32Rd(int addr,unsigned char*dat,int len);
|
||||
void stm32Wr(int addr,unsigned char*dat,int len);
|
||||
|
||||
unsigned char memWrMap[MAX_WR_MEM_SIZE];
|
||||
unsigned char memRdMap[MAX_RD_MEM_SIZE];
|
||||
unsigned char color_flag;
|
||||
void controlRedLight(bool openFlag);
|
||||
void controlGreenLight(bool openFlag);
|
||||
void controlYellowLight(bool openFlag);
|
||||
void controlFan1(bool openFlag);
|
||||
void controlFan2(bool openFlag);
|
||||
|
||||
bool isGreenLightEnable();
|
||||
bool isYellowLightEnable();
|
||||
bool isRedLightEnable();
|
||||
void readbuilDat();
|
||||
void readPrintDataXor();
|
||||
void readSyncCounterAtZero();
|
||||
void printCtrl2(int cmd);
|
||||
void ReadSomeDataForLostPrint(void);
|
||||
|
||||
bool stopSendDataFPGA;
|
||||
bool stopSendDataSTM32;
|
||||
// unsigned char *dataOfViscosity;
|
||||
|
||||
#ifdef __STC_POWER__
|
||||
int Heartbeat(char bPowerOn);
|
||||
int setWakeUpTimer(char wakeUpTime_day);
|
||||
int getPowerSource(void);
|
||||
Posix_QextSerialPort *comForPower;
|
||||
void comForPower_init();
|
||||
#endif
|
||||
#ifdef __RFID_CARD
|
||||
Posix_QextSerialPort *comForRFID;
|
||||
void comForRFID_init();
|
||||
int comReadRFID_data();
|
||||
int comWriteRFID_data();
|
||||
int setRFIDCarKey(void);
|
||||
int setRFIDReaderKey(void);
|
||||
int setRFIDReaderOriginalKey(void);
|
||||
int setRFIDReaderWorkMode(void);
|
||||
int receiveReadRFID_data(void);
|
||||
int queryReadRFID_address(void);
|
||||
QString strRevdata;
|
||||
bool noticeICReaderError;
|
||||
bool setICReaderModeFlag;
|
||||
uint checkCardIntervalTime;
|
||||
QReadWriteLock CardDataRwLock;
|
||||
#endif
|
||||
|
||||
#ifdef __ADC_INPUT__
|
||||
qint8 GetTemp(QString ainFile, quint8 *pTemp);
|
||||
#endif
|
||||
void Read_RanddomFromFpga(); // 读FPGARANDFIFO
|
||||
void RandTxtBakup(char ok);
|
||||
// 上海外接屏功能
|
||||
int BigDisp(unsigned char Module[], unsigned char Wirediameter[]);
|
||||
int RecDim();//unsigned char buf[], unsigned char Dim[]);
|
||||
int SmallDisp(unsigned char Module[], unsigned char Wirediameter[]);
|
||||
void DatToDisp(char FileName[], bool big);
|
||||
void DatToDisp2();
|
||||
void showData(QByteArray dat);
|
||||
void uart2Init();
|
||||
void writeDacValue2Fpga_No72NewVoltData();
|
||||
|
||||
#ifdef UART2
|
||||
Posix_QextSerialPort *myCom;
|
||||
// MySerialPort * myserialport;
|
||||
QByteArray recData;
|
||||
QQueue<QByteArray> recQueue;
|
||||
int recLen;
|
||||
void stopReceiving();
|
||||
bool isReceivingEnable() const;
|
||||
void disableReceiving();
|
||||
void enableReceiving();
|
||||
|
||||
uchar sendData(const QByteArray &data);
|
||||
|
||||
void stopSending();
|
||||
bool isSendingEnable() const;
|
||||
void disableSending();
|
||||
void enableSending();
|
||||
uchar uartThreadStart();
|
||||
|
||||
//void printCtrl2(int cmd);
|
||||
int recUart2();
|
||||
|
||||
public slots:
|
||||
void readCom(char mode,QByteArray recData,int addr);
|
||||
void sendCom(QString s);
|
||||
void sendCom(char *buf, int len);
|
||||
void resendFPGADate(int,int,unsigned char *,int,int);
|
||||
void resendSTM32Date(int,int,unsigned char *,int,int);
|
||||
|
||||
signals:
|
||||
void dataReceived(char,const QByteArray &dataReceived,int);
|
||||
void sendSerialDataToSTM32(int,int,unsigned char *,int,int);
|
||||
void sendSerialDataToFPGA(int,int,unsigned char *,int,int);
|
||||
#endif
|
||||
|
||||
private:
|
||||
int WdgttyUsb0Cnt;
|
||||
bool releaseValveOpenFlag;
|
||||
bool mixValveFlag;
|
||||
bool inkValveOpenFlag;
|
||||
bool inkValveOpenFlag1;
|
||||
bool cycleValveOpenFlag;
|
||||
bool compressPumpOpenFlag;
|
||||
bool viscosityPumpOpenFlag;
|
||||
bool mainInkPumpOpenFlag;
|
||||
bool reclaimPumpOpenFlag;
|
||||
|
||||
bool reclaimTankOpenEnableFlag;
|
||||
bool reclaimTankCloseEnableFlag;
|
||||
bool beeperOnFlag;
|
||||
|
||||
bool RedLightOnFlag;
|
||||
bool GreenLightOnFlag;
|
||||
bool YellowLightOnFlag;
|
||||
|
||||
bool heaterOnFlag;
|
||||
int com2;
|
||||
int pwm_sp;
|
||||
int pwm_fd;
|
||||
int Interrupt_fd;
|
||||
int iocontrl;
|
||||
int DAdataout;
|
||||
int pwm_ink;
|
||||
int adc_fd;
|
||||
#ifdef __VX_OSC_VOL__
|
||||
qint8 OscillatorVoltage[100];//VX 电路不一样,所以需要重新调整
|
||||
#endif
|
||||
SysPara *sysPara;
|
||||
|
||||
|
||||
unsigned int fpgaRdD(int addr,int len);
|
||||
|
||||
// 0xA451--- 为什么ARM的顺序相反呢?
|
||||
typedef struct {
|
||||
unsigned int varDigitalNum:4; // 数字的个数
|
||||
unsigned int charRamBaseAddr:12; // 基址
|
||||
unsigned int colOffset:16; // 列偏移
|
||||
unsigned int horizonWidth:9;//字模宽度
|
||||
unsigned int verticalOffset:6; // 行偏移
|
||||
unsigned int charRowNum:6; // 每个字符占行个数
|
||||
unsigned int charColNum:6; // 每个字符占列个数
|
||||
unsigned int varTypeSel:4;
|
||||
unsigned int dummy:1;
|
||||
}reg_var_print_ctrl_t;
|
||||
|
||||
#ifdef UART2
|
||||
UartThread *uartThread;
|
||||
bool sendingEnable;
|
||||
bool receivingEnable;
|
||||
bool saveStateReceiveData;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
#ifdef UART2
|
||||
class UartThread : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
UartThread(Posix_QextSerialPort &adrPort);
|
||||
~UartThread();
|
||||
void stopReceiving();
|
||||
QQueue<QByteArray> dataToSend;
|
||||
QMutex mutexSend;
|
||||
void stopSending();
|
||||
void addDataToSend(const QByteArray &dataToAdd);
|
||||
protected:
|
||||
void run();
|
||||
signals:
|
||||
void dataReceived(char,const QByteArray &dataReceived,int);
|
||||
private :
|
||||
Posix_QextSerialPort &port;
|
||||
QMutex mutexReceive;
|
||||
bool stopped;
|
||||
rec_cmd_t rec_cmd;
|
||||
};
|
||||
#endif
|
||||
#endif /* DEVOP_H_ */
|
||||
+51
-21
@@ -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;
|
||||
@@ -1664,6 +1685,13 @@ void InkJetPrinter::timerHandler(void){
|
||||
gearPumpRunNormalFlag = false; // 泄漏保护重新学习
|
||||
gearPumpRunNormalValue = 0.0f;
|
||||
// 重置隔膜泵状态机,适应新模式
|
||||
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;
|
||||
@@ -1672,7 +1700,9 @@ void InkJetPrinter::timerHandler(void){
|
||||
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();
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
+1
-1
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <unistd.h>
|
||||
#include<iostream>
|
||||
#include<string>
|
||||
#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();
|
||||
|
||||
+27
-33
@@ -708,12 +708,12 @@ bool MainWindow::updatePhaseIndicatorLight(){
|
||||
return sysPara->status.lastPhaseFault;
|
||||
}
|
||||
|
||||
double MainWindow::getMaxSpeedCalcPara(){
|
||||
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;
|
||||
else
|
||||
sysPara->status.currPrintRow = sysPara->status.pixNumPerCol;
|
||||
sysPara->para.pixNumPerCol = sysPara->status.pixNumPerCol;
|
||||
|
||||
sysPara->para.reducedPixelNum = sysPara->para.reducedPixelNumRatio*sysPara->para.pixNumPerCol/100;
|
||||
@@ -726,15 +726,9 @@ double MainWindow::getMaxSpeedCalcPara(){
|
||||
|
||||
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是被放大后的值
|
||||
int 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);
|
||||
return pulseNum;
|
||||
}
|
||||
|
||||
static int reclaimTankDelay = 0;
|
||||
@@ -800,8 +794,8 @@ void MainWindow::updateSysStatusToUI(){ //100ms
|
||||
}
|
||||
else
|
||||
{
|
||||
double speed = getMaxSpeedCalcPara();//No67
|
||||
maxMM = int(speed * 1000.0);
|
||||
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')));
|
||||
@@ -2050,6 +2044,7 @@ void MainWindow::airPushingProcess()
|
||||
// 执行排气 4 秒
|
||||
sysPara->status.airPushingOnTime += 100;
|
||||
|
||||
|
||||
if(sysPara->para.airPushDurationSec <= 0 || sysPara->para.airPushDurationSec > 30) {
|
||||
sysPara->para.airPushDurationSec = 4;
|
||||
sysPara->saveParaToFile();
|
||||
@@ -2069,7 +2064,11 @@ void MainWindow::airPushingProcess()
|
||||
}
|
||||
|
||||
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())
|
||||
@@ -2214,13 +2213,16 @@ void MySleep(unsigned int msec);
|
||||
* 关机前务必保存参数
|
||||
* */
|
||||
void MainWindow::checkForPowerOff(){
|
||||
if(m_powerOffInProgress)
|
||||
return;
|
||||
|
||||
if(sysPara->status.powerOffAppending){
|
||||
m_powerOffInProgress = true;
|
||||
if(!sysPara->status.selfCheckDone)
|
||||
sysPara->status.selfCheckDone = true;
|
||||
this->setDisabled(true);
|
||||
emit setDisableAll();
|
||||
////////关机时提高转速和回收泵压力,粘度泵和循环阀/////
|
||||
quint16 gearPumpValue_backup = sysPara->para.gearPumpValue;
|
||||
////////关机时通过闭环控制维持压力,控制目标不超过650/////
|
||||
int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;;
|
||||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN))
|
||||
{
|
||||
@@ -2246,17 +2248,11 @@ void MainWindow::checkForPowerOff(){
|
||||
}
|
||||
}
|
||||
sysPara->devOp->controlReclaimTankOpen(true);
|
||||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
||||
sysPara->status.isPumpValveControledByHand = true; // 阀门保持手动,隔膜泵由关机闭环控制
|
||||
if(sysPara->para.gearPumpEnable ){
|
||||
if(!sysPara->para.flagOfReclaimPumEnable){
|
||||
sysPara->para.gearPumpValue = 360;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
else{
|
||||
if(sysPara->para.flagOfReclaimPumEnable)
|
||||
sysPara->devOp->controlReclaimPump(true,false);
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
// 不再固定输出360,隔膜泵由pressureAdj按关机目标压力闭环调节
|
||||
}
|
||||
else{
|
||||
sysPara->para.reclaimPumpPWMWidth = 95;
|
||||
@@ -2287,7 +2283,10 @@ void MainWindow::checkForPowerOff(){
|
||||
updateTotalCnt(0);
|
||||
sysPara->saveParaToFile(); // 关机前将相关配置保存
|
||||
}
|
||||
// 退出关机压力维持阶段,后续关闭泵阀时禁止隔膜泵再次启动
|
||||
sysPara->status.powerOffAppending = false;
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
if(!TEST_MODE){
|
||||
for(int i=7;i>0;i--)
|
||||
{
|
||||
@@ -2306,7 +2305,8 @@ void MainWindow::checkForPowerOff(){
|
||||
}
|
||||
}
|
||||
emit CloseJd();
|
||||
sysPara->para.gearPumpValue=gearPumpValue_backup;
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup;
|
||||
sysPara->devOp->controlCompressPump(false);
|
||||
setRunStatus(tr("准备关机......"));
|
||||
@@ -4424,15 +4424,9 @@ void MainWindow::on_pushButton_Reboot_clicked()
|
||||
sysPara->devOp->controlReclaimTankOpen(true);
|
||||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
||||
if(sysPara->para.gearPumpEnable ){
|
||||
if(!sysPara->para.flagOfReclaimPumEnable){
|
||||
sysPara->para.gearPumpValue = 360;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
else{
|
||||
if(sysPara->para.flagOfReclaimPumEnable)
|
||||
sysPara->devOp->controlReclaimPump(true,false);
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
// 不再固定输出360,由闭环控制维持压力
|
||||
}
|
||||
else{
|
||||
sysPara->para.reclaimPumpPWMWidth = 95;
|
||||
|
||||
+2
-1
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user