#pragma once
|
#include <pdh.h>
|
#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<double> VectorDouble;
|
typedef std::vector<double>::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<int> 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;
|
|
};
|