#pragma once #include #pragma comment(lib, "pdh.lib") #include "SequenceProcessor.h" //#include "akIPCNetAOISystem.h" #include "akAOISharedSystem.h"//20191017 #include "DitGlassRawClient.h" #include "DlgReviewHistoryTool.h" enum PCControlRecvSignalIndex_CPJT { PCControlRecvSignalIndex_State=0, //PCControlRecvSignalIndex_StateSub, PCControlRecvSignalIndex_Seq, PCControlRecvSignalIndex_Ack, PCControlRecvSignalAutoDignosis, PCControlRecvSignalAutoDignosisComplet, PCControlRecvSignalTime, PCControlRecvSignalWsiState, //PCControlRecvSignalAutoDignosis }; enum PCControlSendSignalIndex_CPJT { PCControlSendSignalIndex_State = 0, PCControlSendSignalIndex_Seq, PCControlSendSignalIndex_Ack, PCControlSendSignalIndex_DiagnoAck, PCControlSendSignalIndex_DiagnoComplete, PCControlSendSignalIndex_Time }; enum PCControlRecvSignalSeq_CPJT { PCControlRecv_Loading_CPJT=0, PCControlRecv_AlignStart_CPJT, PCControlRecv_ReadRawFile_CPJT, PCControlRecv_ReviewStart_CPJT, PCControlRecv_ReviewEnd_CPJT, PCControlRecv_ReviewUnloading_CPJT, PCControlRecv_AFM_Home_Move_CPJT, PCControlRecv_WSI_Home_Move_CPJT, PCControlRecv_TIME_SET, PCControlRecv_Autodiagnosis, RCControlRecv_AutoDiagnosisComplete }; enum ProcessStatus_CPJT { ProcessLoading_CPJT=0, ProcessAlignStart_CPJT, ProcessReadRawFile_CPJT, ProcessReviewStart_CPJT, ProcessReviewEnd_CPJT, ProcessReviewUnloding_CPJT }; enum PCControlSendSignalSeq_CPJT { PCControlSend_LoadingComplete_CPJT=0, PCControlSend_AlignComplete_CPJT, PCControlSend_ReviewReady_CPJT, PCControlSend_ReviewComplete_CPJT, PCControlSend_ResultDataComplete_CPJT }; enum PCControlSendSignalAck_CPJT { PCControlSend_LoadingAck_CPJT=0, PCControlSend_AlignStartAck_CPJT, PCControlSend_ReadRawFileAck_CPJT, PCControlSend_ReviewStartAck_CPJT, PCControlSend_ReviewEndAck_CPJT, PCControlSend_ReviewUnloadingAck_CPJT, PCControlSend_AFMHomeMoveAck_CPJT, PCControlSend_WSIHomeMoveAck_CPJT, PCControlSend_AutoDiagnosisAck_CPJT, PCControlSendSignalAckCount }; enum PCControlRecvSignalAck_CPJT { PCControlRecv_LoadingCompleteAck_CPJT=0, PCControlRecv_AlignCompleteAck_CPJT, PCControlRecv_ReviewReadyAck_CPJT, PCControlRecv_ReviewCompleteAck_CPJT, PCControlRecv_ResultDataCompleteAck_CPJT, PCControlRecv_ReviewAckSignalCount }; enum PCControlSendData_CPJT { PCControlSendData_DV_DATA_CPJT=0, //PCControlSendData_SV_DATA_CPJT, PCControlSendData_LoadingResult_CPJT, PCControlSendData_AlignResult_CPJT, PCControlSendData_ReviewResult_CPJT, PCControlSendData_ReviewComplete_CPJT, PCControlSendData_ReviewResultFileCreateComplete_CPJT, PCControlSendData_AlarmCode_CPJT }; enum PCControlRecvSignalState_B11 { PCControlRecv_ByPassMode_CPJT=0, PCControlRecv_AutoMode_CPJT, PCControlRecv_ManualMode_CPJT, PCControlRecv_ReviewManualMode_CPJT }; enum PCControlSendSignalState { PCControlSend_ReviewAlive_CPJT=0, PCControlSend_RecipeASCEND, PCControlSend_WSIError, PCControlSend_Defoucs, PCControlSend_Diagnosis //0412 ÀÚ°¡Áø´Ü ÄÚµåÃß°¡ }; enum PCControlRecvSignalState_WSI { PCControlRecv_WSI_ALIVE = 0, PCControlRecv_WSI_AFM_SAFE_POS }; enum ProcessMode_CPJT { ProcessBypassMode_CPJT=0, ProcessAutoMode_CPJT, ProcessManualMode_CPJT, ProcessReviewMode_CPJT}; enum ChangeZoomLevel_CPJT { ZoomLevel_Manual_CPJT=0, ZoomLevel_Auto_CPJT}; enum AFMChangeModeToWSISignal_CPJT { ChangeModeEnd_CPJT=0, ChangeModeStart_CPJT }; typedef std::vector VectorDouble; typedef std::vector::iterator VectorDoubleIt; class CSequenceProcessor_CPJT : public CSequenceProcessor { public: CSequenceProcessor_CPJT(void); virtual ~CSequenceProcessor_CPJT(void); virtual void RecvWSIResult(int nModuleIndex, const SWsiResult& measureResut); virtual void RecvWSIUserResult(int nModuleIndex, const SWsiResult& measureResut); virtual void RecvWSIReflowResult(int nModuleIndex, const SWsiResult& measureResut); virtual void RecvWSIMultiShotResult(int nModuleIndex, const SWsiResult& measureResut); virtual void RecvAlignResult(const CAlignResult* pCurAlignResult); virtual BOOL RecvSignalToSignalControl(int nSignalIndex, int nSignalValue, BOOL bSignalOn=TRUE); virtual BOOL SendSignalToSignalControl(int nSignalIndex, int nSignalValue); virtual BOOL SendSignalToSignalControl(int nSignalIndex, int nSignalValue,int nSignalOnTime); virtual BOOL SendSignalOffToSignalControl(int nSignalIndex, int nSignalValue); virtual BOOL RecvCIMSignalToSignalControl(int nAddrIndex, int nSignalIndex); virtual BOOL SendCIMSignalToSignalControl(int nAddrIndex, int nSignalIndex); virtual BOOL CIM_SendRecipeCreate(int nPPID) { return TRUE; }; virtual BOOL CIM_SendRecipeDelete(int nPPID) { return TRUE; }; virtual BOOL CIM_SendRecipeChange(int nPPID) { return TRUE; }; virtual BOOL CIM_SendRecipeModify(int nPPID) { return TRUE; }; virtual void CompletePlanIndex(int nReviewStatus, int nPlanIndex); virtual BOOL CIM_SendAlignAlarmSignal(int nPPID) { return TRUE; }; virtual BOOL CIM_SendNoPPIDSignal(int nPPID) { return TRUE; }; virtual BOOL CalculateReviewPathPlan(CDefectPicker* pDefectPicker, CGlassResult *pGlassResult); virtual BOOL CalculateReviewPathPlan(CDefectPicker* pDefectPicker, CGlassResult *pGlassResult, int nPlanIdx); virtual BOOL CalculateUserPathPlan(CPrioritySorter* pPrioritySorter, CGlassResult *pGlassResult); virtual BOOL CalculateWsiPathPlan(CDefectPicker* pDefectPicker, CGlassResult *pGlassResult); virtual BOOL CalculateReflowPathPlan(CPrioritySorter* pPrioritySorter, CGlassResult *pGlassResult); virtual BOOL CalculateWsiReflowPathPlan(CPrioritySorter* pPrioritySorter, CGlassResult *pGlassResult); virtual BOOL CalculateWsiUserPathPlan(CPrioritySorter* pPrioritySorter, CGlassResult *pGlassResult); virtual BOOL CalculateMeasurePathPlan(CPrioritySorter* pPrioritySorter, CGlassResult *pGlassResult); virtual BOOL CalculateWsiMultiShotPathPlan(CDefectPicker* pDefectPicker, CGlassResult *pGlassResult); virtual BOOL ReviewStartProcessing(CGlassResult *pGlassResult, int nPlanIndex=0); virtual BOOL UserStartProcessing(CGlassResult *pGlassResult, int nPlanIndex=0); virtual BOOL MeasureStartProcessing(CGlassResult *pGlassResult, int nPlanIndex=0); virtual BOOL WsiStartProcessing(CGlassResult *pGlassResult, int nPlanIndex=0); virtual BOOL ReflowStartProcessing(CGlassResult *pGlassResult, int nPlanIndex=0); virtual BOOL WsiReflowStartProcessing(CGlassResult *pGlassResult, int nPlanIndex=0); virtual BOOL WsiUserStartProcessing(CGlassResult *pGlassResult, int nPlanIndex=0); virtual BOOL WsiMultiShotStartProcessing(CGlassResult *pGlassResult, int nPlanIndex = 0); void WsiMultiShotReScheduling(CGlassResult* pGlassResult); virtual void SetStartTickCount(DWORD dwTick) { dwRevStartTickCount = dwTick; } virtual void SetEndTickCount(DWORD dwTick) { dwRevEndTickCount = dwTick; } virtual DWORD GetStartTickCount() { return dwRevStartTickCount; }; virtual DWORD GetEndTickCount() { return dwRevEndTickCount; }; protected: virtual void WorkThreadProcess(PVOID pParameter); static UINT ReviewThread(LPVOID pParam); void ReviewDo(); BOOL SetProcessStatus(int nProcessStatus); int nReviewCount; void SetReviewCount(int nCount) { nReviewCount = nCount; }; int GetReviewCount() { return nReviewCount; }; //#3358 KYH FDC µ¥ÀÌÅÍ Àü¼Û ½ÃÁ¡ °³¼± ADD START virtual void MakeDVData2(); //#3358 KYH FDC µ¥ÀÌÅÍ Àü¼Û ½ÃÁ¡ °³¼± ADD END int nHistoryCount = 0; void SetHistoryCount(int nCount) { nHistoryCount = nCount; } int GetHistoryCount() { return nHistoryCount; } private: void Process_Loading(); void Process_AlignStart(); void Process_ReadRawFile(); void Process_ReviewStart(); void Process_ReviewEnd(); void Process_ReviewUnloading(); BOOL ReJudgeProcessing(CDitGlassRawClient* pRawData); BOOL FindRawBinFile(CString strFileName); int ReJugdeWSIType(int nWsiType); BOOL ProcessSignal_State(int nSignalValue, BOOL bSignalOn); //BOOL ProcessSignal_StateSub(int nSignalValue, BOOL bSignalOn); BOOL ProcessSignal_Ack(int nSignalValue, BOOL bSignalOn); BOOL ProcessSignal_Seq(int nSignalValue, BOOL bSignalOn); BOOL ProcessSignal_Seq2(int nSignalValue, BOOL bSignalOn); BOOL ProcessSignal_WSI_State(int nSignalValue, BOOL bSignalOn); // signal BOOL SendResultToSignalControl(int nSingalIdx, int nResultValue); BOOL SendResultToSignalControl(int nSingalIdx, CString strResultValue); // transfer data BOOL ReadTransferDataFromSignalControl(STransferData* pTransferData); void UpdateGlassResultFromTransferData(CGlassResult *pGlassResult, STransferData* pTransferData); void UpdateHistoryResultFromTransferData(CGlassResult *pHistoryResult, CGlassResult* pGlassResult); void CreateResultDirectory(const CString& strGlassID, const CString& strDate); void SetSaveImageBasePathToReviewProcessor(const CString& strGlassID, const CString& strResultDate); void SetSaveImageBasePathToAlignCameraControl(const CString& strGlassID); // recipe BOOL ReadRecipeDataFromRecipeFile(const CString& strPPID_RC, CString& strRecipeName); BOOL FindRecipeFileName(const CString& strPPID_RC, CString& strRecipeName); BOOL ApplyRecipeDataToGlassResult(CGlassResult *pGlassResult); // result file BOOL ReadAOIRawFileToGlassResult(CGlassResult *pGlassResult); BOOL FindAOIRawFilePath(CGlassResult *pGlassResult, CString* pRawTDPath, CString* pRawCDPath, CString* pRawSDPath); // Resize Scheduler Result void ReviewScheduler_ResizeReviewResult(CPathSchedulerResult* pScheduleResult, CReviewResult* pReviewResult, CDefectPicker* pDefectPicker, int nSize); void ReviewScheduler_ResizeUserResult(CPathSchedulerResult* pScheduleResult, CReviewResult* pReviewResult, CPrioritySorter* pPrioritySorter, int nSize); void ReviewScheduler_ResizeWsiResult(CPathSchedulerResult* pScheduleResult, CReviewResult* pWsiResult, CDefectPicker* pDefectPicker, int nSize); void ReviewScheduler_ResizeReflowResult(CPathSchedulerResult* pScheduleResult, CReviewResult* pReviewResult, CPrioritySorter* pPrioritySorter, int nSize); void ReviewScheduler_ResizeWsiReflowResult(CPathSchedulerResult* pScheduleResult, CReviewResult* pReviewResult, CPrioritySorter* pPrioritySorter, int nSize); void ReviewScheduler_ResizeWsiUserResult( CPathSchedulerResult* pScheduleResult, CReviewResult* pReviewResult, CPrioritySorter* pPrioritySorter, int nSize); void ReviewScheduler_ResizeWsiMultiShotResult(CPathSchedulerResult* pScheduleResult, CReviewResult* pReviewResult, CDefectPicker* pDefectPicker, int nSize); // motor control int SendReviewPositionToMotorControl(CGlassResult *pGlassResult); int SendUserPositionToMotorControl(CGlassResult *pGlassResult); int SendMeasurePositionToMotorControl(CGlassResult *pGlassResult); int SendMeasurePositionToMotorControl_Old(CGlassResult *pGlassResult); int SendWsiPositionToMotorControl(CGlassResult* pGlassResult); int SendReflowPositionToMotorControl(CGlassResult* pGlassResult); int SendWsiReflowPositionToMotorControl(CGlassResult* pGlassResult); int SendWsiUserPositionToMotorControl(CGlassResult* pGlassResult); int SendWsiMultiShotPositionToMotorControl(CGlassResult* pGlassResult); // etc BOOL ReviewScheduler_AddMeasureResult_ShortestPath(CPrioritySorter* pPrioritySorter, CGlassResult *pGlassResult, double dTacTime); BOOL ReviewScheduler_AddMeasureResult(CPrioritySorter* pPrioritySorter, CGlassResult *pGlassResult); void ReviewScheduler_ResizeMeasureResult(CPathSchedulerResult& scheduleResult, CReviewResult* pReviewResult, CPrioritySorter* pPrioritySorter, int nSize); int ReviewScheduler_ResizeMeasureResult(CReviewResult* pReviewResult, CPrioritySorter* pPrioritySorter); int GetCorrectMoudleStatusIdex(CPathSchedulerResult* pReviewScheduleResult, int nModuleType = 1); BOOL IntVectorFinder(std::vector TargetData, int FindData); int SetModuleStatusForReviewResult(VectorReviewResult* pVecReviewResult, int nModuleType = 1); void SetModuleStatusSReviewProcessor(CReviewResult* pReviewResult, int nModuleIdx); int SetModuleStatusForWsiResult(VectorReviewResult* pVecWsiResult, int nModuleType = 4); void SetModuleStatusSWsiProcessor(CReviewResult* pWsiResult, int nModuleIdx); // Check Motor Motion End BOOL MotorMotionEnd(); // Change Magnification BOOL AllChangeMagnification(int nZoomIdx, int nCmd = ZoomLevel_Manual_CPJT, int nPlanMode=0); //Set DelayTime to Motor BOOL SetDelayTimeToMotor(); //Calculate Glass information int GetDirectionX(int nGlassDirection, int nMotorDirection); int GetDirectionY(int nGlassDirection, int nMotorDirection); // Sorting static BOOL CompareFuction(CModuleStatus* i, CModuleStatus* j); static BOOL GantrySorting(CReviewResult i, CReviewResult j); // Calculate Direction void GetAxisDirection(int nOrgGlass, int nOrgRecipe, int &nDirX, int& nDirY); void GetMeasureModuleIndex(int nDirX, int nDirY, int& nModuleIdx); // [2017:4:11]-[WEZASW] :CIM(DV Data) º¸°í Ç׸ñ Ãß°¡. BOOL SendDVDataToSignalControl(); int MakeDVData(CGlassResult *pGlassResult, char* pDVData, int nIndex=0); DWORD GetDiskUsage(); // [2017:4:13]-[WEZASW] : CIM(Change System Time) º¸°í Ç׸ñ Ãß°¡. BOOL ChangeReviewSystemTime(); int ReadCIMTimeData(CString strAddr, int nAddrCnt, int& nData); BOOL SendSystemTime(SYSTEMTIME sysTime); // to AFM & WSI System // 181130 SJB, Change Point Index (Wsi Reflow) int ChangeWsiReflowPointIndex(int nIdx); // 190130 SJB, Change CenterPosition BOOL ChangeUserReviewAxisCenterPosition(const CGlassResult *pGlassResult); // 190130 SJB, Motor AutoGo Count Remove void RemoveMotorCount(); // 190130 SJB, User,Reflow Plan Memory Update BOOL UpdateMemoryUserReflowPlanInfo(CDitGlassRawClient* pDitSharedGlassRaw); // 190130 SJB, All Ack Signal Off void AllAckSignalOff(); void SetUseAfmHomePosition(BOOL bUse) { m_bUseAFMHomePosition = bUse; } BOOL GetUseAfmHomePosition() { return m_bUseAFMHomePosition; } // 190130 SJB, WriteRawData -> Å×½ºÆ®¶§ ¾²·Á´Â°Ç°¡!?!?!? Ȥ½Ã ¸ô¶ó¼­ ³Ã°ÜµÒ void WriteRawData(CGlassResult* pGlassResult); void MakeWSIUpLoadDirectory(CString strGlassID); BOOL CompareRevType(int nInsType,int nRevType); _ProtocolReview* pProtocolData; //cmark BOOL SendReviewStartMotorPosition(int nModuleIndex,double dPosX,double dPosY,int nMoveAxis); BOOL MoveReviewStartMotorPosition(CGlassResult* pGlassResult,int nReviewType); void SendWsiErrorAlarm_CPJT(int Index); void SendWsiAlive_CPJT(); void WSIAliveCheckRunThread_CPJT(); static UINT WsiAliveCheckThread(LPVOID pParam); BOOL GetWSIAliveCheck(){return bWsiAliveCheck;}; void SetWSIAliveCheck(BOOL bCheck){ bWsiAliveCheck=bCheck;}; static BOOL bWsiAliveCheck; BOOL GetLastPointCheck() {return bLastPointEndCheck;}; void SetLastPointCheck(BOOL bCheck) { bLastPointEndCheck = bCheck; }; private: struct CompareModuleStatusX{ CSequenceProcessor_CPJT* pSequenceProcessor; CompareModuleStatusX(CSequenceProcessor_CPJT* p) : pSequenceProcessor(p) {}; bool operator()(int i, int j); }; struct CompareModuleStatusY{ CSequenceProcessor_CPJT* pSequenceProcessor; CompareModuleStatusY(CSequenceProcessor_CPJT* p) : pSequenceProcessor(p) {}; bool operator()(int i, int j); }; struct CompareReviewResultX{ CSequenceProcessor_CPJT* pSequenceProcessor; CompareReviewResultX(CSequenceProcessor_CPJT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; struct CompareReviewResultY{ CSequenceProcessor_CPJT* pSequenceProcessor; CompareReviewResultY(CSequenceProcessor_CPJT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; struct CompareWsiResultX{ CSequenceProcessor_CPJT* pSequenceProcessor; CompareWsiResultX(CSequenceProcessor_CPJT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; struct CompareWsiResultY{ CSequenceProcessor_CPJT* pSequenceProcessor; CompareWsiResultY(CSequenceProcessor_CPJT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; protected: int m_nGlassCount; BOOL m_nGlassCountCheck; BOOL m_bUseAFMHomePosition; DWORD dwRevStartTickCount; DWORD dwRevEndTickCount; BOOL bLastPointEndCheck; BOOL bFileFind; };