Files
newspark110/device/deviceproxy.h

704 lines
20 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef DEVICEPROXY_H
#define DEVICEPROXY_H
#include <QObject>
#include "base.h"
#include "ACSVariable.h"
#include "acscontroller.h"
#include "myexception.h"
#include <QTimer>
#include <QThread>
#include <QMutex>
#include "LaserMark.h"
#include "LaserMark_global.h"
#include "MarkEzdDll.h"
#include "opencv2/opencv.hpp"
#include "bllaserlib.h"
#include "BLLaserLib_global.h"
#include "coordinate.h"
#include"qtcpserver.h"
#include"qtcpsocket.h"
#include "rms_dll.h"
#define MACHINE001 1
#ifdef MACHINE001
#define XAXIS 0
#define YAXIS 1
#define ZAXIS 4
#define ZAAXIS 2
#define DAXIS 5
#define Z0AXIS 6
#define Z2AXIS 7
#else
#define XAXIS 0
#define YAXIS 1
#define ZAXIS 4
#define ZAAXIS 6
#define DAXIS 5
#define Z0AXIS 7
#define Z2AXIS 2
#endif
#define LASERMARKFOCUS 120
#define CAMERAFOCUS 120
#define FINDHEIGHTFOCUS 10
#define INCHES4 55
#define INCHES6 80
#define INCHES8 105
#define MAXHEIGHT 55
#define ZWORKPOS 0
#define PIANYIJIAODU 0
#define LASERMARKJIAODU 0
#define JIADINGJIAGONG 0
class CDeviceProxyWorker;
#define DEV DeviceProxy::instance()
class DeviceProxy:public QObject
{
Q_OBJECT
friend class CDeviceProxyWorker;
public:
static DeviceProxy* instance();
static void setAxisName(QMap<int,QString> axisName);
~DeviceProxy();
void DEVInit();
void reset();
void reset_z();
void setAlarm(bool flag);
void setDataCheck(bool flag);
int UpdateWorkData();
QTcpServer* server;
QTcpSocket* socket;//一个客户端对应一个socket
void ClientConnect();
void ReadData1();
double R_detection_pt{0};
double mode;
double R_detection_ps{0};
double R_detection_pm{0};
double R_detection_po{0};
double R_detection_set_ppt{0};
double R_detection_set_pps{0};
QString ingotNumber = "0000";
cv::Mat Func_merge(int left,int right);
std::vector<cv::Mat> srcImgs;
int BiaoDingFlag{false};
int PPValues[21];
double p2tBuf[21];
double p2sBuf[21];
double getPP(double ap,bool flag);
QImage imageR;
RMS_Dll rms;
QString StrPlotSixInch = "(0,-60)(-30,-50)(-20,-50)(-10,-50)(0,-50)(10,-50)(20,-50)(30,-50)(-40,-40)(-30,-40)(-20,-40)(-10,-40)(0,-40)(10,-40)"
"(20,-40)(30,-40)(40,-40)(-50,-30)(-40,-30)(-30,-30)(-20,-30)(-10,-30)(0,-30)(10,-30)(20,-30)(30,-30)(40,-30)(50,-30)"
"(-50,-20)(-40,-20)(-30,-20)(-20,-20)(-10,-20)(0,-20)(10,-20)(20,-20)(30,-20)(40,-20)(50,-20)(-50,-10)(-40,-10)(-30,-10)"
"(-20,-10)(-10,-10)(0,-10)(10,-10)(20,-10)(30,-10)(40,-10)(50,-10)(-60,0)(-50,0)(-40,0)(-30,0)(-20,0)(-10,0)(0,0)(10,0)"
"(20,0)(30,0)(40,0)(50,0)(60,0)(-50,10)(-40,10)(-30,10)(-20,10)(-10,10)(0,10)(10,10)(20,10)(30,10)(40,10)(50,10)(-50,20)"
"(-40,20)(-30,20)(-20,20)(-10,20)(0,20)(10,20)(20,20)(30,20)(40,20)(50,20)(-50,30)(-40,30)(-30,30)(-20,30)(-10,30)(0,30)"
"(10,30)(20,30)(30,30)(40,30)(50,30)(-40,40)(-30,40)(-20,40)(-10,40)(0,40)(10,40)(20,40)(30,40)(40,40)(-30,50)(-20,50)"
"(-10,50)(0,50)(10,50)(20,50)(30,50)(0,60)";
QString StrPlotEightInch = "(-44,-72)(-30,-72)(-16,-72)(-2,-72)(12,-72)(26,-72)(40,-72)(-58,-58)"
"(-44,-58)(-30,-58)(-16,-58)(-2,-58)(12,-58)(26,-58)(40,-58)(54,-58)"
"(-72,-44)(-58,-44)(-44,-44)(-30,-44)(-16,-44)(-2,-44)(12,-44)(26,-44)"
"(40,-44)(54,-44)(68,-44)(-72,-30)(-58,-30)(-44,-30)(-30,-30)(-16,-30)"
"(-2,-30)(12,-30)(26,-30)(40,-30)(54,-30)(68,-30)(-72,-16)(-58,-16)"
"(-44,-16)(-30,-16)(-16,-16)(-2,-16)(12,-16)(26,-16)(40,-16)(54,-16)"
"(68,-16)(82,-16)(-72,-2)(-58,-2)(-44,-2)(-30,-2)(-16,-2)(-2,-2)"
"(12,-2)(26,-2)(40,-2)(54,-2)(68,-2)(82,-2)(-72,12)(-58,12)(-44,12)"
"(-30,12)(-16,12)(-2,12)(12,12)(26,12)(40,12)(54,12)(68,12)(82,12)"
"(-72,26)(-58,26)(-44,26)(-30,26)(-16,26)(-2,26)(12,26)(26,26)(40,26)"
"(54,26)(68,26)(-72,40)(-58,40)(-44,40)(-30,40)(-16,40)(-2,40)(12,40)"
"(26,40)(40,40)(54,40)(68,40)(-58,54)(-44,54)(-30,54)(-16,54)(-2,54)"
"(12,54)(26,54)(40,54)(54,54)(-44,68)(-30,68)(-16,68)(-2,68)(12,68)"
"(26,68)(40,68)(-16,82)(-2,82)(12,82)";
QString StrPlotFourInch = "(-2,-44)(-30,-30)(-16,-30)(-2,-30)(12,-30)(26,-30)(-30,-16)(-16,-16)"
"(-2,-16)(12,-16)(26,-16)(40,-16)(-44,-2)(-30,-2)(-16,-2)(-2,-2)(12,-2)"
"(26,-2)(40,-2)(-30,12)(-16,12)(-2,12)(12,12)(26,12)(40,12)(-30,26)(-16,26)"
"(-2,26)(12,26)(26,26)(-16,40)(-2,40)(12,40)";
bool StopElectricResistanceCheckFlag{false};
LaserMark * pLaserMark;
double laserMarkHeight{1};
double laserMarkWidth{1};
double laserMarkInternal{1};
int laserMarkFrequency{1};
double laserMarkPulseWidth{1};
//BLLaserLib * pBLLaserLib;
bool bUserPower{false};
bool SuspendFlag{false};
void Record_xiao();
void laserCtlCnn();
void laserCtlClose();
void laserCtlSet(QString strParam);
void laserSetMode(int); //设置出发模式 =》 0为TOD模式 1为GATE模式
void laserSetEmissionOnOff(int); //设置内部激光器开光关光状态 =》 1为激光器出光 0为激光器关光
void laserSetExtTrigEnable(int); //设置外部激光器触发使能状态 =》 1为激光器使能开 0为激光器使能关
bool PidFlag{true};
bool DataCheckFlag{false};
QString strLaserMark_test;
// 连续相对运动
void XAxisCMoveN();
void XAxisCMoveNEnd();
void XAxisCMoveP();
void XAxisCMovePEnd();
void YAxisCMoveN();
void YAxisCMoveNEnd();
void YAxisCMoveP();
void YAxisCMovePEnd();
void ZAxisCMoveN();
void ZAxisCMoveNEnd();
void ZAxisCMoveP();
void ZAxisCMovePEnd();
void ZAAxisCMoveN();
void ZAAxisCMoveNEnd();
void ZAAxisCMoveP();
void ZAAxisCMovePEnd();
void Z0AxisCMoveN();
void Z0AxisCMoveNEnd();
void Z0AxisCMoveP();
void Z0AxisCMovePEnd();
void Z2AxisCMoveN();
void Z2AxisCMoveNEnd();
void Z2AxisCMoveP();
void Z2AxisCMovePEnd();
void DAxisCMoveN();
void DAxisCMoveNEnd();
void DAxisCMoveP();
void DAxisCMovePEnd();
// 单步相对运动
void XAxisSMoveN();
void XAxisSMoveP();
void YAxisSMoveN();
void YAxisSMoveP();
void ZAxisSMoveN();
void ZAxisSMoveP();
void ZAAxisSMoveN();
void ZAAxisSMoveP();
void DAxisSMoveN();
void DAxisSMoveP();
void Z2AxisSMoveN();
void Z2AxisSMoveP();
void Z0AxisSMoveN();
void Z0AxisSMoveP();
// 绝对运动
void ABSMove();
void ABSMove_DZ0Z2();
void ABSMove_Z0_test();
void RSToZero();
void RSToZero_Z0();
void MachSmallArea();
void SScan();
void compSScan();
int GetRatioP1P2Thread();
int SaveRatioP1P2ToCSV(float ApValue_P1[30],float ApValue_P2[30], float ApPercentage[30],float kb[],bool flag);
int ElectricResistanceCheckThread();
int ElectricResistanceCheckThread2();
void imageGet();
int FindEdgeThread();
int FindEdgeThread_6();
void MHCompOpen();
void MotionCompOpen(bool flag,double array[]);
void MotionCompClose();
void compClose();
void FindEdge();
void GetRatioP1P2();
void ElectricResistanceCheck();
void GetGlobalPhoto();
void GetGlobalPhotoSide();
int GetGlobalPhotoThread();
void stop();
void Suspend();
void ContinueBuffer();
void EStop();
void SMach();
void semiAutoMach();
void vacuumSuckerOpen();
void vacuumSuckerClose();
// 三色灯
void laserOpen();
void laserClose();
void greenLightOpen();
void greenLightClose();
void redLightOpen();
void redLightClose();
void yellowLightOpen();
void yellowLightClose();
void StopBtnOpen();
void StopBtnClose();
void RunBtnOpen();
void RunBtnClose();
void FanOpen();
void FanClose();
void VacuumBreakOpen();
void VacuumBreakClose();
void AirValveClose();
void AirValveOpen();
void CuCeGaoClose();
void CuCeGaoOpen();
void Pin18Close();
void Pin18Open();
void LightClose();
void LightOpen();
void AirValveClose2();
void AirValveOpen2();
void setLight();
// 轴使能操作
void enableDisableXAxis();
void enableDisableYAxis();
void enableDisableZAxis();
void enableDisableZAAxis();
void enableDisableDAxis();
void enableDisableZ0Axis();
void enableDisableZ2Axis();
//设置轴状态
void setAxisState();
// 相机,加工头,测距头位置转换
void MHToCamera();
void CameraToMH();
void RHToCamera();
void CameraToRH();
void RHToMH();
void MHToRH();
// 过程位置
void toLoadAndUnloadPos();
void toGloblaCameraPos();
void toSScanStartPos();
void toRSToZeroPos();
//void toMachStartPos();
void toZAAxisCPos();
void toLaserApTestPos();
void toLaserMarkPos();
void toHeightFindPos();
void toEdgeSearchPos();
void toCompenTestPos();
void toRecordPos();
void LoadFromCsv(QString fileName);
int devLaserNum{0};
int devLaserState{0};
int devPlaneScanCompState{0};
int devMotionCompState{0};
int devWorkpieceLockState{0};
int devLightingState{0};
bool devLaserCheck{false};
int devLaserOpenTime{0};
bool checkZaxisAlarmFlag{true};
bool LaserTestApFlag{false};
int LaserTestApIndex{1};
double LaserApValueP1{0};
double ApPercentage{0};
int Mach_T_S_flag{0};
int devInState{0};
int runBtnDINum;
int stopBtnDINum;
int estopBtnDINum;
int door1DINum;
int door2DINum;
int airValveOpenNum{0};
int airValveCloseNum{0};
int CuCeGaoDINum{0};
int airValveDoNum{0};
int CuCeGaoDoNum{0};
int airValveDoSts{0};
int airValveDoNum2{0};
int airValveDoSts2{0};
int AllPressureDINum{0};
int devLightNum{0};
int UPSDINum{0};
int airValveDiOpenSts;
int airValveDiCloseSts;
int runType{0};
bool bRunning;
bool bAutoLoadUnloadFlag{false};
int RFIDCount{0};
double Palletheight{0};
double LaserMarkOffset_Y{0};
double LaserMarkOffset_X{0};
double workpieceHeight{0};
//double ZZA{0};
bool lastTaskIsFinish{true};
QString lastTaskName;
int AxisMoveSafeCheckXY(int axisBuf[4],double distPos[4],int moveMode[2]);
void detectionZZAAxisPos();
bool getDevIsReset();
bool getDevIsInit();
bool getLastTaskIsFinish();
int ShangProc(void);
int XiaProc(void);
int deCode_file(QString strFileName);
QString deCodeString;
QStringList fFileContent;
signals:
void ShangLiaoFSGL(bool);
void XiaLiaoFSGL(bool);
void MsgLogInSuccess(bool);
void MsgSetValueSGL(int);
void RunSGL(bool);
void MHCompOpenFSGL();
void MHCompCloseFSGL();
void MotionCompOpenFSGL();
void MotionCompCloseFSGL();
void laserOpenFSGL();
void laserCloseFSGL();
void suspendBufferFSGL();
void continueBufferFSGL();
void vacuumSuckerOpenFSGL();
void vacuumSuckerCloseFSGL();
void FindEdgeFinishSGL(int);
void GetRatioP1P2FinishSGL(int);
void ElectricResistanceCheckFinishSGL(int);
void show_Q_PP_SGL();
void CMDRunFinishSGL();
void XAxisLimitStateSGL(LIMIT_STATE);
void YAxisLimitStateSGL(LIMIT_STATE);
void ZAxisLimitStateSGL(LIMIT_STATE);
void ZAAxisLimitStateSGL(LIMIT_STATE);
void XAxisEnableStateSGL(bool);
void YAxisEnableStateSGL(bool);
void ZAxisEnableStateSGL(bool);
void ZAAxisEnableStateSGL(bool);
void XAxisCtPosSGL(double);
void YAxisCtPosSGL(double);
void ZAxisCtPosSGL(double);
void ZAAxisCtPosSGL(double);
void DAxisCtPosSGL(double);
void Z0AxisCtPosSGL(double);
void Z2AxisCtPosSGL(double);
void StepNameSGL(int);
void TransferPLCSGL(int);
void SeparatePLCSGL(int);
void GetGlobalPhotoFinishSGL(int);
void PowerMeterValueSGL(float,float);
void EStopSGL(bool);
void SETRfidText(char *);
void DEVInitStateChangedSGL(bool);
//void DEVResetStateChangedSGL(bool);
void RSValueChangedSGL(double);
void stateDetectExceptSGL(int exceptCode);
void exceptSGL(MyException);
void exceptSGL_lhc(MyException);
void AutoExceptSGL_laser(MyException);
void AutoSmachStateSGL(bool);
void StopStateSGL(bool);
void SmachTypeStateSGL(bool);
void VacuumSuckerOnOrOffStateSGL(bool);
void GetRunTypeState();
void AutoExceptSGL(MyException);
void ShowSmallAreasSGL();
void ShowMergeSGL();
void DDEnableStateSGL(int);
void DDLimitStateSGL(int,LIMIT_STATE);
void InStateSGL(int);
private slots:
// 监控状态
void stateDetection();
void resetFHandl();
void XAxisSMoveNFHandl();
void XAxisSMovePFHandl();
void YAxisSMoveNFHandl();
void YAxisSMovePFHandl();
void ZAxisSMoveNFHandl();
void ZAxisSMovePFHandl();
void ZAAxisSMoveNFHandl();
void ZAAxisSMovePFHandl();
void DAxisSMoveNFHandl();
void DAxisSMovePFHandl();
void Z2AxisSMoveNFHandl();
void Z2AxisSMovePFHandl();
void Z0AxisSMoveNFHandl();
void Z0AxisSMovePFHandl();
void ABSMoveFHandl();
void toLoadAndUnloadPosFHandl();
void toGlobalCameraPosFHandl();
void toSScanStartPosFHandl();
void toRSToZeroPosFHandl();
void toLaserApTestPosFHandl();
void toLaserMarkPosFHandl();
void toHeightFindPosFHandl();
void toEdgeSearchPosFHandl();
void toCompenTestPosFHandl();
void toRecordPosFHandl();
void toZAAxisCPosFHandl();
void MHToCameraFHandl();
void CameraToMHFHandl();
void RHToCameraFHandl();
void CameraToRHFHandl();
void RHToMHFHandl();
void MHToRHFHandl();
void RSToZeroFHandl();
void RSToZeroFHandl_Z0();
void MachSmallAreaFHandl();
void SScanFHandl();
void compSScanFHandl();
void MHCompOpenFHandl();
void FindEdgeFHandl(int result);
void GetRatioP1P2FHandl(int result);
void ElectricResistanceCheckFHandl(int result);
void SMachFHandl();
void semiAutoMachFHandl();
void CSS_MHCompOpenFHandl();
void GetGlobalPhotoFHandl(int result);
private:
DeviceProxy();
DeviceProxy(DeviceProxy const&) = delete;
DeviceProxy& operator = (DeviceProxy const&) = delete;
//监控
void startStateDetection();
void stopStateDetection();
void detectionAllAxisCtPos();
void detectionAllAxisLimitState();
void detectionAllAxisEnableState();
void detectionCMDRunFState();
void detectionEStopState();
void detectionRCValue();
void detectionLaserValue();
void detectionInState();
bool getResetState();
//使能
void enableXAxis();
void enableYAxis();
void enableZAxis();
void enableZAAxis();
void disableXAxis();
void disableYAxis();
void disableZAxis();
void disableZAAxis();
void enableDAxis();
void enableZ0Axis();
void enableZ2Axis();
void disableDAxis();
void disableZ0Axis();
void disableZ2Axis();
void readSScanData();
void saveSScanData();
void buildSScanDataTable();
void saveSScanDataTable();
void readCompSScanData();
void saveCompSScanData();
void buildLookupTable();
void buildLookupTable2();
void buildLookupTable_lhc();
void buildLookupTable_lhc2();
void saveLookupTable();
void saveLookupTable_lhc();
void saveLookupTable_load();
void SScanDataCheck_lhc();
void SScanDataCheck();
void lookupTableHeadEndDataHandl();
void lookupTableHeadEndDataHandl_lhc();
void lookupTableHeadEndDataHandl_lhc2();
double DataHandlCheck_lhc(double data[6]);
void lookupTable_do_Gaussian();
void lookupPeripheralMakeUpZero();
void downLoadLookupTable();
void RSToZeroInSide();
void RSToZeroInSide_Z0();
void MachSmallAreaInSide();
void SScanInSide();
void compSScanInSide();
void MHCompOpenInSide();
void compCloseInSide();
void FindEdgeInSide();
void GetRatoP1P2Side();
void ElectricResistanceCheckSide();
// 过程位置
void toLoadAndUnloadPosInSide();
void GloblaCameraPosInSide();
void toSScanStartPosInSide();
void toRSToZeroPosInSide();
void toLaserApTestPosInSide();
void toLaserMarkPosInSide();
void toLaserMarkPosThreadInSide();
void toHeightFindPosInSide();
void toEdgeSearchPosInSide();
void toRecordPosInSide();
void toEdgeSearchPosThreadInSide();
void toCompenTestPosInSide();
void SMachInSide(int index);
void semiAutoMachInSide();
void vacuumSuckerOpenInSide();
void vacuumSuckerCloseInSide();
void laserOpenInSide();
void laserCloseInSide();
void RHToMHInSide();
void MHToRHInSide();
// 异常处理
void exceptHandl(MyException mye);
void exceptHandl_thread(MyException mye);
private:
static DeviceProxy* uniqueInstance;
ACSController *acsCtl;
QTimer *timer;
LIMIT_STATE XAxisLimitState{NORMAL};
LIMIT_STATE YAxisLimitState{NORMAL};
LIMIT_STATE ZAxisLimitState{NORMAL};
LIMIT_STATE ZAAxisLimitState{NORMAL};
LIMIT_STATE Z0AxisLimitState{NORMAL};
LIMIT_STATE Z2AxisLimitState{NORMAL};
LIMIT_STATE DAxisLimitState{NORMAL};
volatile double XAxisCtPos{0.0};
volatile double YAxisCtPos{0.0};
volatile double ZAxisCtPos{0.0};
volatile double ZAAxisCtPos{0.0};
volatile double Z0AxisCtPos{0.0};
volatile double Z2AxisCtPos{0.0};
volatile double DAxisCtPos{0.0};
double XAxisMin{0.0};
double XAxisMax{0.0};
double YAxisMin{0.0};
double YAxisMax{0.0};
double ZAxisAddZA{0.0};
bool XAxisIsEnable{false};
bool YAxisIsEnable{false};
bool ZAxisIsEnable{false};
bool ZAAxisIsEnable{false};
bool Z0AxisIsEnable{false};
bool Z2AxisIsEnable{false};
bool DAxisIsEnable{false};
bool devIsInit{false};
bool devIsReset{false};
bool devIsAlarm{false};
int devLightState{0};
int devRunStopBtnState{100};
bool devEStopState{false};
bool XAxisMoving{false};
bool YAxisMoving{false};
bool ZAxisMoving{false};
bool ZAAxisMoving{false};
bool Z0AxisMoving{false};
bool Z2AxisMoving{false};
bool DAxisMoving{false};
bool XAxisIsInPos{false};
bool YAxisIsInPos{false};
bool ZAxisIsInPos{false};
bool ZAAxisIsInPos{false};
bool Z0AxisIsInPos{false};
bool Z2AxisIsInPos{false};
bool DAxisIsInPos{false};
bool reqCMDRunFState{false};
//bool lastTaskIsFinish{true};
//QString lastTaskName;
QVector<double> CSS_RSData;
QVector<double> CSS_XPosData;
QVector<double> SScanArMsrZ;
QVector<double> SScanArPosY;
QVector<QVector<double>> SScanDataTable;
QVector<QVector<double>> lookupTable;
QVector<QVector<double>> lookupTable_Gaussian;
double lookupTableStartY{0.0};
double SSStartYPos{0.0};
double SSStartXPos{0.0};
bool XAxisErrorDetection{false};
bool YAxisErrorDetection{false};
bool ZAxisErrorDetection{false};
bool ZAAxisErrorDetection{false};
bool Z0AxisErrorDetection{false};
bool Z2AxisErrorDetection{false};
bool DAxisErrorDetection{false};
QThread thread;
int step{0};
CDeviceProxyWorker *worker;
QMutex mutex;
bool StopFindEdgeFlag{false};
bool StopGonglvCheckFlag{false};
bool StopGetRatioP1P2Flag{false};
bool ZZAPosCheckFlag{false};
int lRunStopTime[2]{0,0};
int lRunCheckAirValve{0};
};
class CDeviceProxyWorker :public QObject
{
Q_OBJECT
public:
CDeviceProxyWorker(DeviceProxy *parent) { mParent = parent; }
virtual ~CDeviceProxyWorker() {}
public slots :
void doWork_custom();
private:
DeviceProxy *mParent;
signals:void finished();
};
#endif // DEVICEPROXY_H