#ifndef DEVICEPROXY_H #define DEVICEPROXY_H #include #include "base.h" #include "ACSVariable.h" #include "acscontroller.h" #include "myexception.h" #include #include #include #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 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 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 CSS_RSData; QVector CSS_XPosData; QVector SScanArMsrZ; QVector SScanArPosY; QVector> SScanDataTable; QVector> lookupTable; QVector> 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