Files
VX5_KRO_GearPump/DevOp.h
T
2026-06-04 14:08:28 +08:00

298 lines
9.9 KiB
C++

/*
* 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 <stdio.h>
#include <QString>
#include "myinclude.h"
#include <QObject>
#include <QQueue>
#include <QMetaType>
#include <QThread>
#include <QMutex>
#include <QReadWriteLock>
#include <QSerialPort>
#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"
/*
* 请不要直接初始化此函数,如果需要,请通过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);
/**
* @brief controlInkValve 控制墨线,即供墨阀
* @param openFlag
*/
void controlInkValve(bool openFlag);
/**
* @brief controlInkValvePWMSTM32
* @param PWMPulse
*/
void controlInkValvePWMSTM32(int PWMPulse);
/**
* @brief controlCycleValve 控制循环阀开关(墨水阀、主墨泵)
* @param openFlag
*/
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 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 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:数据长度*************************************************/
/***dat: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_ */