#pragma once #include "SequenceProcessor.h" //#include "akIPCNetAOISystem.h" #include "akAOISharedSystem.h"//20191017 #include "DitGlassRawClient.h" enum PCControlRecvSignalIndex_CSOT { PCControlRecvSignalIndex_State=0, PCControlRecvSignalIndex_StateSub, PCControlRecvSignalIndex_Seq, PCControlRecvSignalIndex_Ack }; enum PCControlSendSignalIndex_CSOT { PCControlSendSignalIndex_State=0, PCControlSendSignalIndex_Seq, PCControlSendSignalIndex_Ack }; enum PCControlRecvSignalSeq_CSOT { PCControlRecv_Loading_CSOT=0, PCControlRecv_AlignStart_CSOT, PCControlRecv_ReadRawFile_CSOT, PCControlRecv_ReviewStart_CSOT, PCControlRecv_ReviewEnd_CSOT, PCControlRecv_AFM_Home_Move_CSOT, PCControlRecv_WSI_Home_Move_CSOT }; enum ProcessStatus_CSOT { ProcessLoading_CSOT=0, ProcessAlignStart_CSOT, ProcessReadRawFile_CSOT, ProcessReviewStart_CSOT, ProcessReviewEnd_CSOT }; enum PCControlSendSignalSeq_CSOT { PCControlSend_LoadingComplete_CSOT=0, PCControlSend_AlignComplete_CSOT, PCControlSend_ReviewReady_CSOT, PCControlSend_ReviewComplete_CSOT, PCControlSend_ResultDataComplete_CSOT }; enum PCControlSendSignalAck_CSOT { PCControlSend_LoadingAck_CSOT=0, PCControlSend_AlignStartAck_CSOT, PCControlSend_ReadRawFileAck_CSOT, PCControlSend_ReviewStartAck_CSOT, PCControlSend_ReviewEndAck_CSOT, PCControlSend_AFMHomeMoveAck_CSOT, PCControlSend_WSIHomeMoveAck_CSOT, PCControlSendSignalAckCount }; enum PCControlRecvSignalAck_CSOT { PCControlRecv_LoadingCompleteAck_CSOT=0, PCControlRecv_AlignCompleteAck_CSOT, PCControlRecv_ReviewReadyAck_CSOT, PCControlRecv_ReviewCompleteAck_CSOT, PCControlRecv_ResultDataCompleteAck_CSOT, PCControlRecv_ReviewAckSignalCount }; enum PCControlSendData_CSOT { PCControlSendData_DV_DATA_CSOT=0, PCControlSendData_SV_DATA_CSOT, PCControlSendData_LoadingResult_CSOT, PCControlSendData_AlignResult_CSOT, PCControlSendData_ReviewResult_CSOT, PCControlSendData_AlarmCode_CSOT }; enum PCControlRecvSignalState_B11 { PCControlRecv_ByPassMode_CSOT=0, PCControlRecv_AutoMode_CSOT, PCControlRecv_ManualMode_CSOT, PCControlRecv_ReviewManualMode_CSOT }; enum PCControlSendSignalState { PCControlSend_ReviewAlive_CSOT=0, PCControlSend_RecipeASCEND, PCControlSend_WSIError, PCControlSend_Defoucs }; enum ProcessMode_CSOT { ProcessBypassMode_CSOT=0, ProcessAutoMode_CSOT, ProcessManualMode_CSOT, ProcessReviewMode_CSOT}; enum ChangeZoomLevel_CSOT { ZoomLevel_Manual_CSOT=0, ZoomLevel_Auto_CSOT}; enum AFMChangeModeToWSISignal_CSOT { ChangeModeEnd_CSOT=0, ChangeModeStart_CSOT }; typedef std::vector VectorDouble; typedef std::vector::iterator VectorDoubleIt; class CSequenceProcessor_CSOT : public CSequenceProcessor { public: CSequenceProcessor_CSOT(void); virtual ~CSequenceProcessor_CSOT(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 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 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 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); protected: virtual void WorkThreadProcess(PVOID pParameter); static UINT ReviewThread(LPVOID pParam); void ReviewDo(); BOOL SetProcessStatus(int nProcessStatus); private: void Process_Loading(); void Process_AlignStart(); void Process_ReadRawFile(); void Process_ReviewStart(); void Process_ReviewEnd(); 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); // 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 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); // 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); // 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_CSOT, 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); // [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_CSOT(int Index); void SendWsiAlive_CSOT(); void WSIAliveCheckRunThread_CSOT(); static UINT WsiAliveCheckThread(LPVOID pParam); BOOL GetWSIAliveCheck(){return bWsiAliveCheck;}; void SetWSIAliveCheck(BOOL bCheck){ bWsiAliveCheck=bCheck;}; static BOOL bWsiAliveCheck; private: struct CompareModuleStatusX{ CSequenceProcessor_CSOT* pSequenceProcessor; CompareModuleStatusX(CSequenceProcessor_CSOT* p) : pSequenceProcessor(p) {}; bool operator()(int i, int j); }; struct CompareModuleStatusY{ CSequenceProcessor_CSOT* pSequenceProcessor; CompareModuleStatusY(CSequenceProcessor_CSOT* p) : pSequenceProcessor(p) {}; bool operator()(int i, int j); }; struct CompareReviewResultX{ CSequenceProcessor_CSOT* pSequenceProcessor; CompareReviewResultX(CSequenceProcessor_CSOT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; struct CompareReviewResultY{ CSequenceProcessor_CSOT* pSequenceProcessor; CompareReviewResultY(CSequenceProcessor_CSOT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; struct CompareWsiResultX{ CSequenceProcessor_CSOT* pSequenceProcessor; CompareWsiResultX(CSequenceProcessor_CSOT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; struct CompareWsiResultY{ CSequenceProcessor_CSOT* pSequenceProcessor; CompareWsiResultY(CSequenceProcessor_CSOT* p) : pSequenceProcessor(p) {}; bool operator()(CReviewResult i, CReviewResult j); }; protected: int m_nGlassCount; BOOL m_nGlassCountCheck; BOOL m_bUseAFMHomePosition; };