From 8ede40e3f7cfe1772ef7db2b1d74e905639cf343 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 금, 15 4월 2022 16:40:43 +0900
Subject: [PATCH] Ongoing90 #4086 CF AOI Review FDC SW Version 추가 요청

---
 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp |  669 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 495 insertions(+), 174 deletions(-)

diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
index 46db670..0a45de0 100644
--- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -428,6 +428,8 @@
  		g_pLog->DisplayMessage(_T("[AlignResult] Glass Result is NULL!"));
  		SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
  		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Signal!"));
+
+		AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 占쏙옙占쏙옙
  		return;
 	}
 
@@ -544,6 +546,8 @@
 		SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!"));
 	}
+
+	AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 蹂�寃�
 
 	SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
@@ -664,6 +668,8 @@
 		SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
 		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
+		//LONGREUN
+		//RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 4);
 		m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_None, nPlanIndex);
 		 
 		AFM_SetAFMTracking(FALSE);
@@ -759,7 +765,7 @@
 			if (( nTotalCount += pGlassResult->GetTotalSReviewResultCount()) > 0)
 			{
 				m_pSP2P->ISP2P_DisplayMessage(_T("[Sequence Processor] Review Plan Start!"));
-				//LYW DCOLL 임시조치
+				//LYW DCOLL 占쌈쏙옙占쏙옙치
 				CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
 				if (pDitRawClient->isConnect() == TRUE)
 				{
@@ -772,7 +778,7 @@
 
 					strcpy(pSharedDefectReview->m_strRevImageName, "");
 				}
-				//LYW DCOLL 임시조치
+				//LYW DCOLL 占쌈쏙옙占쏙옙치
 				::Sleep(nWaitTime);
 				m_pSP2P->ISP2P_GetReviewProcessor()->ResetGantryDone();
 				bExcute = ReviewStartProcessing(pGlassResult, nPlanIdx);
@@ -873,19 +879,27 @@
 
 	CSequenceProcessData* pProcessData = static_cast<CSequenceProcessData*>(pParameter);
 	m_nProcessStatus = pProcessData->nProcessStatus;
+	//LONGREUN
+	//SetSimulationMode(TRUE);
 
 	switch(pProcessData->nProcessStatus)
 	{
 	case ProcessLoading_CPJT:
 		Process_Loading();
+		//LONGREUN
+		//RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 2);
 		break;
 
 	case ProcessAlignStart_CPJT:
 		Process_AlignStart();
+		//LONGREUN
+		//RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 3);
 		break;
 
 	case ProcessReadRawFile_CPJT:
 		Process_ReadRawFile();
+		//LONGREUN
+		//RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 1);
 		break;
 
 
@@ -895,12 +909,20 @@
 
 	case ProcessReviewEnd_CPJT:
 		Process_ReviewEnd();
+		//LONGREUN
+		//RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 5);
+		
 		break;
 	case ProcessReviewUnloding_CPJT:
 		Process_ReviewUnloading();
+		//LONGREUN
+		//RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 0);
 		break;
 
 	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 ADD START
+	SetSimulationMode(FALSE);
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 ADD END
 	return;
 }
 
@@ -916,14 +938,24 @@
 
 	bFileFind = FALSE;
 
-	m_pSP2P->ISP2P_GetDiagnosisHistory();
+	/*< LYW 20211109 - #3662 Delete Start >*/
+	//m_pSP2P->ISP2P_GetDiagnosisHistory();
+	/*< LYW 20211109 - #3662 Delete End >*/
 
 	m_pSP2P->ISP2P_SetFirstReviewLeft(TRUE);
 	m_pSP2P->ISP2P_SetFirstReviewRight(TRUE);
-	
-	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT))
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!"));
 
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT))
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!"));
+	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+	//Original
+// 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT))
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!"));
+	
  	// read config file
  	if(!m_pSP2P->ISP2P_System_ReadConfigFile())
  		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor] System Value Loading FAIL!"));	
@@ -993,7 +1025,14 @@
 				{
 					if (nReconnect == 3)
 					{
-						SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+						//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+						if (GetSimulationMode() == FALSE)
+						{
+							SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+						}
+						//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+						//original
+						/*SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);*/
 						m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
 
 						break;
@@ -1036,11 +1075,20 @@
 
 			strFileName.Format(_T("%s_%s"), strGlassIDTemp, strGlassStepIdTemp);
 
-			//업데이트시
+			//占쏙옙占쏙옙占쏙옙트占쏙옙
 
-			//bFileFind = FindRawBinFile(strFileName);
-			bFileFind = TRUE;
-
+			//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+			if (GetSimulationMode() == FALSE)
+			{
+				bFileFind = FindRawBinFile(strFileName);
+			}
+			else
+			{
+				bFileFind = TRUE;
+			}
+			//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+			//original
+			/*bFileFind = FindRawBinFile(strFileName);*/
 
 			pDitRawClient->SetReviewStart();
 			Sleep(1000);
@@ -1145,19 +1193,36 @@
 
  	// review camera stop
 	ReviewCamera_CameraControl(CameraControlStop);	
-	//AlignCamera_CameraControl(CameraControlLive);
+	AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 占쏙옙占쏙옙
 
- 	// send signal to plc
- 	if (nResultCode==0)
- 	{
- 		SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
- 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Success Signal!"));
- 	}
- 	else
- 	{
- 		SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
- 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
- 	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+		// send signal to plc
+	if (GetSimulationMode() == FALSE)
+	{
+		if (nResultCode == 0)
+		{
+			SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Success Signal!"));
+		}
+		else
+		{
+			SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
+		}
+	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+	//original
+//  	send signal to plc
+//  	 	if (nResultCode==0)
+//  	 	{
+//  	 		SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+//  	 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Success Signal!"));
+//  	 	}
+//  	 	else
+//  	 	{
+//  	 		SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+//  	 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
+//  	 	}
  
  	// send cell data to review processorm_pDitGlass
  	CReviewProcessor* pReviewProcessor = m_pSP2P->ISP2P_GetReviewProcessor();
@@ -1185,8 +1250,16 @@
  		m_pSP2P->ISP2P_UpdateDefectFilter(pDefectFilter);
  	}	
 	
-	SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_LoadingComplete_CPJT);
-	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Complete Signal!"));
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_LoadingComplete_CPJT);
+		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Complete Signal!"));
+	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+	//original
+// 	SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_LoadingComplete_CPJT);
+// 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Complete Signal!"));
 
  	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::OUT] Loading!"));
 
@@ -1202,16 +1275,57 @@
 {
  	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] AlignStart!"));
 
-	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
+	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+
+	//#3561 210908 LYW ADD Start
+ 	int nAlignReconnectRetryMaxCount = 3;
+ 	for (int i = 0; i < nAlignReconnectRetryMaxCount; i++)
+	{
+		if (AlignCamera_CameraControl(CameraControlLive) == FALSE)
+		{
+			m_pSP2P->ISP2P_DisplayMessage(_T("[AlignStart] AlignConnect Fail! Reconect Start! ReconnectRetry count = %d"), nAlignReconnectRetryMaxCount + 1);
+			system("netsh interface set interface name = \"Align #1\" admin = disable&& netsh interface set interface name = \"Align #1\" admin = enable&& netsh interface set interface name = \"Align #2\" admin = disable&& netsh interface set interface name = \"Align #2\" admin = enable");
+			Sleep(10000);
+			m_pSP2P->ISP2P_InitAlignCamera();
+		}
+
+		else
+		{
+			m_pSP2P->ISP2P_DisplayMessage(_T("[AlignStart] AlignConnect Success! "));
+			break;
+		}
+
+	}
+	//#3561 210908 LYW ADD End
+
+	Sleep(300);
+
+	//original
+// 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
 
  	// 1. get current glass result
  	CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
- 	if (pGlassResult==NULL) {	return;	}
+ 	if (pGlassResult==NULL) 
+	{
+		Sleep(350);
+		AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 占쏙옙占쏙옙
+		return;	
+	}
  
 	const CRsRcpAlignInfo* pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo();
-	if(pRsRcpAlignInfo == NULL)	return;
-
+	if (pRsRcpAlignInfo == NULL)
+	{
+		Sleep(350);
+		AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 占쏙옙占쏙옙
+		return;
+	}
  	// 2. get align camera control	
  	CCameraControlAlign* pAlignCameraControl = m_pSP2P->ISP2P_GetAlignCameraControl();
  
@@ -1219,11 +1333,23 @@
 	if(pRsRcpAlignInfo->m_bAlignSkipMode)
 	{
 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Align Skip Mode !!!!!!!"));
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+		if (GetSimulationMode() == FALSE)
+		{
+			SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
+			SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
+			//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+		}
+		//original
+// 		SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
+// 		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
 
-		SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
-		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
+		Sleep(350);
+		AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 占쏙옙占쏙옙
 	}
 	else
 	{
@@ -1232,10 +1358,23 @@
 		{
 			if(pAlignCameraControl->AlignCameraDisconnectCheck() == FALSE)
 			{
-				SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
-				m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Algin Camera Disconnect!!!!"));
+				//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+				if (GetSimulationMode() == FALSE)
+				{
+					SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+					m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Algin Camera Disconnect!!!!"));
+				}
+				//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+				//original
+// 				SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+// 				m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Algin Camera Disconnect!!!!"));
 			}
 		}		
+		else
+		{
+			Sleep(350);
+			AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 占쏙옙占쏙옙
+		}
 
 		if (pGlassResult && pAlignCameraControl && pAlignCameraControl->AlignProcess())
 		{
@@ -1245,18 +1384,32 @@
 		{
 			Sleep(1000);
 			{
-				SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
-				m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
-			SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
-			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
-		}
+				//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+				if (GetSimulationMode() == FALSE)
+				{
+					SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+					m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
+					SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
+					m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
+				}
+				//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+				//original
+// 				SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+// 				m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
+// 				SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
+// 				m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
+			}
 
+			Sleep(350);
+			AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 占쏙옙占쏙옙
+
+			//占쌍쇽옙 풀占쏙옙
 			// 4. send align fail signal to plc
 			//SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
 			//m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!"));
 			//SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
 			//m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
-	}
+		}
 	}
 
 
@@ -1278,13 +1431,29 @@
 	m_pSP2P->ISP2P_GetSignalControl()->WriteData(_T("17110"), sizeof(pDitRawClient->GetGlassData()->m_strGlassJudge), pDitRawClient->GetGlassData()->m_strGlassJudge);
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] ReadRawFile!"));
 
-	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReadRawFileAck_CPJT))
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Read Raw File Ack!"));
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReadRawFileAck_CPJT))
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Read Raw File Ack!"));
+	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+	//original
+// 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReadRawFileAck_CPJT))
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Read Raw File Ack!"));
 
  	if (bFileFind == FALSE)
 	{
-		SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Find Raw File Fail"));
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+		if (GetSimulationMode() == FALSE)
+		{
+			SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Find Raw File Fail"));
+		}
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+		//original
+// 		SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Find Raw File Fail"));
 		return;
 	}	
 
@@ -1320,9 +1489,18 @@
 
 		Sleep(1000);
 		// send review ready
-		SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
-		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+		if (GetSimulationMode() == FALSE)
+		{
+			SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+			SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
+		}
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+		//original
+// 		SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+// 		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
 	}
 	else
 	{
@@ -1350,8 +1528,16 @@
 					m_pSP2P->ISP2P_DisplayMessage(_T("[Read Raw File] Review All Plan Total Count : %d"), nTotalPlanCount);
 
 					// send review ready
-					SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
-					m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
+					//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+					if (GetSimulationMode() == FALSE)
+					{
+						SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
+						m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
+					}
+					//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+					//original
+// 					SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
+// 					m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
 				}
 			}
 		}
@@ -1393,9 +1579,16 @@
 	SetLastPointCheck(FALSE);
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] %d Tick Count"), dwTime);
 
-
-	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewStartAck_CPJT))
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Start Ack!"));
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewStartAck_CPJT))
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Start Ack!"));
+	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+	//original
+// 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewStartAck_CPJT))
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Start Ack!"));
 
 	const CRsRcpAlignInfo* pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo();
 	if(pRsRcpAlignInfo == NULL)	return;
@@ -1458,9 +1651,18 @@
 	if(FirstReviewPlanStart() <= 0)
 	{
 		//Sleep(1000);
-		SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
-		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+		if (GetSimulationMode() == FALSE)
+		{
+			SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+			SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
+		}
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+		//original
+// 		SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+// 		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
 	}
 	else
 	{
@@ -1483,20 +1685,48 @@
 {
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] ReviewEnd!"));
 
-	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send Review End Ack!"));
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send Review End Ack!"));
+	}
+
+	CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
+	if (pGlassResult == NULL) return;
+
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+	//original
+// 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send Review End Ack!"));
 
 	CDitGlassRawClient* m_pDitGlassRaw = CDitGlassRawClient::GetInstance();
-	if (m_pSP2P->ISP2P_GetWSIControl(0)!=NULL)
+	if (GetSimulationMode() == FALSE && m_pSP2P->ISP2P_GetWSIControl(0)!=NULL)
 	{
 		m_pSP2P->ISP2P_GetWSIControl(0)->SetWsiTimeOver();
 		m_pSP2P->ISP2P_GetWSIControl(1)->SetWsiTimeOver();
+		/*< LYW 20211015 - #3662 ADD Start >*/
+// 		m_pSP2P->ISP2P_GetWSIControl(0)->SetWsiEnd();
+// 		m_pSP2P->ISP2P_GetWSIControl(1)->SetWsiEnd();
+		/*< LYW 20211015 - #3662 ADD End >*/
 	}
 	if (GetLastPointCheck() == FALSE)
 	{
 		Sleep(1000);
 	}
-	ReJudgeProcessing(m_pDitGlassRaw);
+	/*< LYW 20220401 - ##4006 MOD Start >*/
+	if (pGlassResult->m_AlignResult.GetResultCode() == Align_Success)
+	{
+		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Review ReJudgeProcessing Startl!"));
+		ReJudgeProcessing(m_pDitGlassRaw);
+	}
+	else
+	{
+		m_pSP2P->ISP2P_DisplayMessage(_T("Align Code = %d, ReJudgeProcessing SKIPl!"), pGlassResult->m_AlignResult.GetResultCode());
+	}
+	/*< LYW 20220401 - ##4006 MOD End >*/
+	//Origin
+	//ReJudgeProcessing(m_pDitGlassRaw);
 	m_pDitGlassRaw->GetGlassData()->m_tmReviewEnd = CTime::GetCurrentTime();
 	if (m_pDitGlassRaw->isConnect() != FALSE) 
 	{
@@ -1509,13 +1739,19 @@
 
 	if (GetLastPointCheck() == FALSE)
 	{
-		SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
-		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+		if (GetSimulationMode() == FALSE)
+		{
+			SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+			SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
+		}
+		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+		//original
+// 		SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+// 		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
 	}
-
-	CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
-	if (pGlassResult==NULL) return;
 	
 	// review camera stop
 	ReviewCamera_CameraControl(CameraControlStop);
@@ -1548,15 +1784,17 @@
 
 	}
 
-	g_pLog->DisplayMessage(_T("History map Start"));
-	int nGlassResultCount = 0;
-	CGlassResult*  pHistoryResult = m_pSP2P->ISP2P_GetNewHistoryResult(nGlassResultCount); //taek 210201
-	g_pLog->DisplayMessage(_T("History map Copy"));
-	ReadAOIMemory2(pHistoryResult);
-	g_pLog->DisplayMessage(_T("History map TransferData"));
-	UpdateHistoryResultFromTransferData(pHistoryResult, pGlassResult);
-	g_pLog->DisplayMessage(_T("History Button Enable"));
-	m_pSP2P->ISP2P_GetDiagnosisHistory2();
+	/*< LYW 20211109 - #3662 Delete Start >*/
+	// 	g_pLog->DisplayMessage(_T("History map Start"));
+	// 	int nGlassResultCount = 0;
+	// 	CGlassResult*  pHistoryResult = m_pSP2P->ISP2P_GetNewHistoryResult(nGlassResultCount); //taek 210201
+	// 	g_pLog->DisplayMessage(_T("History map Copy"));
+	// 	ReadAOIMemory2(pHistoryResult);
+	// 	g_pLog->DisplayMessage(_T("History map TransferData"));
+	// 	UpdateHistoryResultFromTransferData(pHistoryResult, pGlassResult);
+	// 	g_pLog->DisplayMessage(_T("History Button Enable"));
+	// 	m_pSP2P->ISP2P_GetDiagnosisHistory2();
+	/*< LYW 20211109 - #3662 Delete End >*/
 
 	/*int nModuleCount = m_pSP2P->ISP2P_GetModuleStatusCount(); 
 	for (int nModuleIdx = 0; nModuleIdx < nModuleCount; nModuleIdx++)
@@ -1575,9 +1813,17 @@
 		g_pLog->DisplayMessage(_T("PCControl Update Signal"));
 	}
 
-	SendResultToSignalControl(PCControlSendData_ReviewResultFileCreateComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
-	SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ResultDataComplete_CPJT);
-	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send ResultData Complete Signal!"));
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		SendResultToSignalControl(PCControlSendData_ReviewResultFileCreateComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+		SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ResultDataComplete_CPJT);
+		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send ResultData Complete Signal!"));
+	}
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+// 	SendResultToSignalControl(PCControlSendData_ReviewResultFileCreateComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
+// 	SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ResultDataComplete_CPJT);
+// 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send ResultData Complete Signal!"));
 
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::OUT] ReviewEnd!"));
 }
@@ -1585,9 +1831,16 @@
 void CSequenceProcessor_CPJT::Process_ReviewUnloading()
 {
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] Review Unloading!"));
-	
-	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT))
-		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!"));
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
+	if (GetSimulationMode() == FALSE)
+	{
+		if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT))
+			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!"));
+	}
+	//original
+	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD END
+// 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT))
+// 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!"));
 	
 }
 
@@ -3183,67 +3436,76 @@
 
 void CSequenceProcessor_CPJT::UpdateHistoryResultFromTransferData(CGlassResult *pHistoryResult, CGlassResult* pGlassResult)
 {
-	if (pHistoryResult == NULL || pGlassResult == NULL) return;
+	try
+	{
+		if (pHistoryResult == NULL || pGlassResult == NULL) return;
 
-	CTime time = CTime::GetCurrentTime();
+		CTime time = CTime::GetCurrentTime();
 
-	CString strTime = _T("");
-	strTime.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+		CString strTime = _T("");
+		strTime.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
 
-	// update transfer data to glass result
-	pHistoryResult->m_nGlassSizeX = pGlassResult->m_nGlassSizeX;
-	pHistoryResult->m_nGlassSizeY = pGlassResult->m_nGlassSizeY;
-	pHistoryResult->m_nCollisionDistanceX = pGlassResult->m_nCollisionDistanceX;
-	pHistoryResult->m_nCollisionDistanceY = pGlassResult->m_nCollisionDistanceY;
-	pHistoryResult->m_nCollisionXPos1 = pGlassResult->m_nCollisionXPos1;
-	pHistoryResult->m_nCollisionXPos2 = pGlassResult->m_nCollisionXPos2;
-	pHistoryResult->m_nOriginDir = pGlassResult->m_nOriginDir;
-	pHistoryResult->m_strResultDate = pGlassResult->m_strResultDate;
-	pHistoryResult->m_vecReviewScheduleResult = pGlassResult->m_vecReviewScheduleResult;
-	pHistoryResult->m_nCornerCutDir = pGlassResult->m_nCornerCutDir;
-	pHistoryResult->m_bReadRawFile = pGlassResult->m_bReadRawFile;
-	pHistoryResult->m_vecReviewResult = pGlassResult->m_vecReviewResult;
-	pHistoryResult->m_strGlassLastName = pGlassResult->m_strGlassLastName;
-	pHistoryResult->m_strGlassID = pGlassResult->m_strGlassID;
-	pHistoryResult->m_strGlassCode = pGlassResult->m_strGlassCode;
-	pHistoryResult->m_strMode = pGlassResult->m_strMode;
-	pHistoryResult->m_strGlassType = pGlassResult->m_strGlassType;
-	pHistoryResult->m_strDummyType = pGlassResult->m_strDummyType;
-	pHistoryResult->m_strProdID = pGlassResult->m_strProdID;
-	pHistoryResult->m_strOperID = pGlassResult->m_strOperID;
-	pHistoryResult->m_strLotID = pGlassResult->m_strLotID;
-	pHistoryResult->m_strPPID = pGlassResult->m_strPPID;
-	pHistoryResult->m_strPPID_RC = pGlassResult->m_strPPID_RC;
-	pHistoryResult->m_strJobType = pGlassResult->m_strJobType;
-	pHistoryResult->m_strJobID = pGlassResult->m_strJobID;
-	pHistoryResult->m_strLotSeqNum = pGlassResult->m_strLotSeqNum;
-	pHistoryResult->m_strSlotSeqNum = pGlassResult->m_strSlotSeqNum;
-	pHistoryResult->m_strPropertyCode = pGlassResult->m_strPropertyCode;
-	pHistoryResult->m_strJobJudgeCode = pGlassResult->m_strJobJudgeCode;
-	pHistoryResult->m_strJobGradeCode = pGlassResult->m_strJobGradeCode;
-	pHistoryResult->m_strSubstrateType = pGlassResult->m_strSubstrateType;
-	pHistoryResult->m_strProcessingFlag = pGlassResult->m_strProcessingFlag;
-	pHistoryResult->m_strInspectionFlag = pGlassResult->m_strInspectionFlag;
-	pHistoryResult->m_strSkipFlag = pGlassResult->m_strSkipFlag;
-	pHistoryResult->m_strJobSize = pGlassResult->m_strJobSize;
-	pHistoryResult->m_strGlassThickness = pGlassResult->m_strGlassThickness;
-	pHistoryResult->m_strJobAngle = pGlassResult->m_strJobAngle;
-	pHistoryResult->m_strJobFlip = pGlassResult->m_strJobFlip;
-	pHistoryResult->m_strCuttingGlassType = pGlassResult->m_strCuttingGlassType;
-	pHistoryResult->m_strProcessingCount = pGlassResult->m_strProcessingCount;
-	pHistoryResult->m_strInspectionJudgeData = pGlassResult->m_strInspectionJudgeData;
-	pHistoryResult->m_strPairJobID = pGlassResult->m_strPairJobID;
-	pHistoryResult->m_strPairFlag = pGlassResult->m_strPairFlag;
-	pHistoryResult->m_strOptionValue = pGlassResult->m_strOptionValue;
-	pHistoryResult->m_strReserved = pGlassResult->m_strReserved;
-	pHistoryResult->strGlassScanSchedule = pGlassResult->strGlassScanSchedule;// cmark
-	pHistoryResult->m_strStepID = pGlassResult->m_strRTMSStepID; //taek 210126
-	pHistoryResult->m_strEquipID = pGlassResult->m_strEquipID;
-	pHistoryResult->m_strProcessID = pGlassResult->m_strProcessID;
-	pHistoryResult->m_strUploadImgFileName = pGlassResult->m_strUploadImgFileName;
-	pHistoryResult->m_strUnLoadingTime = strTime;
-	pHistoryResult->m_mapDefectResult = pGlassResult->m_mapDefectResult;
-	pHistoryResult->m_AlignResult = pGlassResult->m_AlignResult;
+		// update transfer data to glass result
+		pHistoryResult->m_nGlassSizeX = pGlassResult->m_nGlassSizeX;
+		pHistoryResult->m_nGlassSizeY = pGlassResult->m_nGlassSizeY;
+		pHistoryResult->m_nCollisionDistanceX = pGlassResult->m_nCollisionDistanceX;
+		pHistoryResult->m_nCollisionDistanceY = pGlassResult->m_nCollisionDistanceY;
+		pHistoryResult->m_nCollisionXPos1 = pGlassResult->m_nCollisionXPos1;
+		pHistoryResult->m_nCollisionXPos2 = pGlassResult->m_nCollisionXPos2;
+		pHistoryResult->m_nOriginDir = pGlassResult->m_nOriginDir;
+		pHistoryResult->m_strResultDate = pGlassResult->m_strResultDate;
+		pHistoryResult->m_vecReviewScheduleResult = pGlassResult->m_vecReviewScheduleResult;
+		pHistoryResult->m_nCornerCutDir = pGlassResult->m_nCornerCutDir;
+		pHistoryResult->m_bReadRawFile = pGlassResult->m_bReadRawFile;
+		pHistoryResult->m_vecReviewResult = pGlassResult->m_vecReviewResult;
+		pHistoryResult->m_strGlassLastName = pGlassResult->m_strGlassLastName;
+		pHistoryResult->m_strGlassID = pGlassResult->m_strGlassID;
+		pHistoryResult->m_strGlassCode = pGlassResult->m_strGlassCode;
+		pHistoryResult->m_strMode = pGlassResult->m_strMode;
+		pHistoryResult->m_strGlassType = pGlassResult->m_strGlassType;
+		pHistoryResult->m_strDummyType = pGlassResult->m_strDummyType;
+		pHistoryResult->m_strProdID = pGlassResult->m_strProdID;
+		pHistoryResult->m_strOperID = pGlassResult->m_strOperID;
+		pHistoryResult->m_strLotID = pGlassResult->m_strLotID;
+		pHistoryResult->m_strPPID = pGlassResult->m_strPPID;
+		pHistoryResult->m_strPPID_RC = pGlassResult->m_strPPID_RC;
+		pHistoryResult->m_strJobType = pGlassResult->m_strJobType;
+		pHistoryResult->m_strJobID = pGlassResult->m_strJobID;
+		pHistoryResult->m_strLotSeqNum = pGlassResult->m_strLotSeqNum;
+		pHistoryResult->m_strSlotSeqNum = pGlassResult->m_strSlotSeqNum;
+		pHistoryResult->m_strPropertyCode = pGlassResult->m_strPropertyCode;
+		pHistoryResult->m_strJobJudgeCode = pGlassResult->m_strJobJudgeCode;
+		pHistoryResult->m_strJobGradeCode = pGlassResult->m_strJobGradeCode;
+		pHistoryResult->m_strSubstrateType = pGlassResult->m_strSubstrateType;
+		pHistoryResult->m_strProcessingFlag = pGlassResult->m_strProcessingFlag;
+		pHistoryResult->m_strInspectionFlag = pGlassResult->m_strInspectionFlag;
+		pHistoryResult->m_strSkipFlag = pGlassResult->m_strSkipFlag;
+		pHistoryResult->m_strJobSize = pGlassResult->m_strJobSize;
+		pHistoryResult->m_strGlassThickness = pGlassResult->m_strGlassThickness;
+		pHistoryResult->m_strJobAngle = pGlassResult->m_strJobAngle;
+		pHistoryResult->m_strJobFlip = pGlassResult->m_strJobFlip;
+		pHistoryResult->m_strCuttingGlassType = pGlassResult->m_strCuttingGlassType;
+		pHistoryResult->m_strProcessingCount = pGlassResult->m_strProcessingCount;
+		pHistoryResult->m_strInspectionJudgeData = pGlassResult->m_strInspectionJudgeData;
+		pHistoryResult->m_strPairJobID = pGlassResult->m_strPairJobID;
+		pHistoryResult->m_strPairFlag = pGlassResult->m_strPairFlag;
+		pHistoryResult->m_strOptionValue = pGlassResult->m_strOptionValue;
+		pHistoryResult->m_strReserved = pGlassResult->m_strReserved;
+		pHistoryResult->strGlassScanSchedule = pGlassResult->strGlassScanSchedule;// cmark
+		pHistoryResult->m_strStepID = pGlassResult->m_strRTMSStepID; //taek 210126
+		pHistoryResult->m_strEquipID = pGlassResult->m_strEquipID;
+		pHistoryResult->m_strProcessID = pGlassResult->m_strProcessID;
+		pHistoryResult->m_strUploadImgFileName = pGlassResult->m_strUploadImgFileName;
+		pHistoryResult->m_strUnLoadingTime = strTime;
+		pHistoryResult->m_mapDefectResult = pGlassResult->m_mapDefectResult;
+		pHistoryResult->m_AlignResult = pGlassResult->m_AlignResult;
+	}
+	catch (...)
+	{
+		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Review End] UpdateHistoryResultFromTransferData Error"));
+		return;
+	}
+	
 }
 
 void CSequenceProcessor_CPJT::CreateResultDirectory(const CString& strGlassID, const CString& strDate)
@@ -3400,6 +3662,10 @@
 	{
 		strPath.Format(_T("%s\\%s"), pNetworkInfo->m_strAlignImagePath, strGlassID);
 		pAlignCameraControl->SetSaveImageBasePath(strPath);
+		strPath.Format(_T("D:\\ResultData\\AlignOK\\%s"), strGlassID);
+		pAlignCameraControl->SetSaveImageOKPath(strPath);
+		strPath.Format(_T("D:\\ResultData\\AlignNG\\%s"), strGlassID);
+		pAlignCameraControl->SetSaveImageNGPath(strPath);
 	}
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make Align image path End "));
 }
@@ -3546,6 +3812,12 @@
 		pGlassResult->m_AlignRecipe.dMatchingRate		= pRsRcpAlignInfo->m_dMatchingRate;
 		pGlassResult->m_AlignRecipe.strFirstImageFile	= pRsRcpAlignInfo->m_strFirstImageFile;
 		pGlassResult->m_AlignRecipe.strSecondImageFile	= pRsRcpAlignInfo->m_strSecondImageFile;
+		/*< LYW 20211012 - #3671 ADD Start >*/
+		pGlassResult->m_AlignRecipe.strFirstAssistantImageFile = pRsRcpAlignInfo->m_strFirstAssistantImageFile;
+		pGlassResult->m_AlignRecipe.strSecondAssistantImageFile = pRsRcpAlignInfo->m_strSecondAssistantImageFile;
+		pGlassResult->m_AlignRecipe.strMatchingPixelStandard = pRsRcpAlignInfo->m_strMatchingPixelStandard;
+		pGlassResult->m_AlignRecipe.strMatchingAlarmCondition = pRsRcpAlignInfo->m_strMatchingAlarmCondition;
+		/*< LYW 20211012 - #3671 ADD End >*/
 		pGlassResult->m_AlignRecipe.strTotalPitchImageFile = pRsRcpAlignInfo->m_strTotalPitchImageFile;
 
 		// edge find param
@@ -4434,6 +4706,16 @@
 	SetWsiType(0);
 	WSIAllReadySignal(1);
 	Sleep(1000);
+
+	/*< LYW 20211028 - #3718 ADD Start >*/
+	// WSI Redeay �넚�떊�썑 Review TimeOver 1�쉶 異붽� 泥댄겕
+	if (GetProcessStatus() == ProcessReviewEnd_CPJT || GetProcessStatus() == ProcessReviewUnloding_CPJT)
+	{
+		g_pLog->DisplayMessage(_T("[ProcessStop] WSI StartProcessing Sequence Stop Status : %d"), GetProcessStatus());
+		return TRUE;
+	}
+	/*< LYW 20211028 - #3718 ADD End >*/
+
 	if(!WSIAllStartSignal())
 	{
 		g_pLog->DisplayMessage(_T("[WSI] WSI Start Fail!!"));
@@ -7395,8 +7677,13 @@
 	int nReviewAliveCamera01 = 0;
 
 	//foucs 
-	nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast * 1000;
-	nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview01ImageContrast * 1000;
+	/*< LYW 20211109 - #3662 MOD Start >*/
+	nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetReview00ImageContrast() * 1000;
+	nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetReview01ImageContrast() * 1000;
+	/*< LYW 20211109 - #3662 MOD End >*/
+	/*< Origin Code >*/
+// 	nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast * 1000;
+// 	nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview01ImageContrast * 1000;
 
 	//nRev_PC_HDD_CHECK = GetDiskUsage() * 1000;
 	//nWSI1_PC_HDD_CHECK = nRev_PC_HDD_CHECK;//GetDiskUsage() * 1000;
@@ -7484,6 +7771,9 @@
 	pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion);
 	pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
 	pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
+
+	/*< LYW 20220415 - #4086 ADD Start >*/ //異붽� �븘�슂
+	/*< LYW 20220415 - #4086 ADD End >*/
 
 
 	//CCHImageData pImageData;
@@ -7760,31 +8050,52 @@
 	int nWSI01Version = 20210422;
 	int nReviewAliveCamera00 = 1000;
 	int nReviewAliveCamera01 = 1000;
+	/*< LYW 20220415 - #4086 ADD Start >*/
+	int	nFDCGRMSWVersion = 20200101;
+	int	nFDCFTPUploaderSWVersion = 20200101;
+	int	nFDCSyncSWVersion = 20200101;
+	int	nFDCReviewSWVersion = 20200101;
+	/*< LYW 20220415 - #4086 ADD End >*/
 
 	//foucs 
+	/*< LYW 20211109 - #3662 MOD Start >*/
 	if (m_pSP2P != NULL)
 	{
-		if (m_pSP2P->ISP2P_GetCurrentGlassResult() != NULL)
-		{
-			
-			nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast * 1000;
-			nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview01ImageContrast * 1000;
+		nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetReview00ImageContrast() * 1000;
+		nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetReview01ImageContrast() * 1000;
 
-			if (m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast <=-2 || m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast >=999)
-			{
-				nRev_Cam1_Image_Contrast = 0 * 1000;
-			}
-			if (m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast <=-2|| m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast >=999)
-			{
-				nRev_Cam2_Image_Contrast = 0 * 1000;
-			}
-		}
-		else
-		{
-			nRev_Cam1_Image_Contrast = 0;
-			nRev_Cam2_Image_Contrast = 0;
-		}
+		/*< LYW 20220415 - #4086 ADD Start >*/
+		nFDCGRMSWVersion = m_pSP2P->ISP2P_GetGRMSWVersion();
+		nFDCFTPUploaderSWVersion = m_pSP2P->ISP2P_GetFTPUploaderSWVersion();
+		nFDCSyncSWVersion = m_pSP2P->ISP2P_GetSyncSWVersion();
+		nFDCReviewSWVersion = m_pSP2P->ISP2P_GetReviewSWVersion();
+		/*< LYW 20220415 - #4086 ADD End >*/
 	}
+	/*< LYW 20211109 - #3662 MOD End >*/
+	/*< Origin Code >*/
+// 	if (m_pSP2P != NULL)
+// 	{
+// 		if (m_pSP2P->ISP2P_GetCurrentGlassResult() != NULL)
+// 		{
+// 			
+// 			nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast * 1000;
+// 			nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview01ImageContrast * 1000;
+// 
+// 			if (m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast <=-2 || m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast >=999)
+// 			{
+// 				nRev_Cam1_Image_Contrast = 0 * 1000;
+// 			}
+// 			if (m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast <=-2|| m_pSP2P->ISP2P_GetCurrentGlassResult()->nReview00ImageContrast >=999)
+// 			{
+// 				nRev_Cam2_Image_Contrast = 0 * 1000;
+// 			}
+// 		}
+// 		else
+// 		{
+// 			nRev_Cam1_Image_Contrast = 0;
+// 			nRev_Cam2_Image_Contrast = 0;
+// 		}
+// 	}
 
 
 
@@ -7902,13 +8213,21 @@
 	pSignalControl->WritePacketData(_T("16116"), sizeof(nRev_Cam1_Image_Contrast), (short*)&nRev_Cam1_Image_Contrast);
 	pSignalControl->WritePacketData(_T("16120"), sizeof(nRev_Cam2_Image_Contrast), (short*)&nRev_Cam2_Image_Contrast);
 
-	pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK);
-	pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK);
-	pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK);
+	/*< LYW 20220415 - #4086 ADD Start >*/
+	pSignalControl->WritePacketData(_T("16124"), sizeof(nFDCSyncSWVersion), (short*)&nFDCSyncSWVersion);
+	pSignalControl->WritePacketData(_T("16128"), sizeof(nFDCReviewSWVersion), (short*)&nFDCReviewSWVersion);
+	pSignalControl->WritePacketData(_T("16132"), sizeof(nFDCFTPUploaderSWVersion), (short*)&nFDCFTPUploaderSWVersion);
+	pSignalControl->WritePacketData(_T("16136"), sizeof(nFDCGRMSWVersion), (short*)&nFDCGRMSWVersion);
 
-	pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion);
-	pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
-	pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
+	/*< LYW 20220415 - #4086 ADD End >*/
+
+// 	pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK);
+// 	pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK);
+// 	pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK);
+// 
+// 	pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion);
+// 	pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
+// 	pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
 
 
 	return;
@@ -8243,8 +8562,8 @@
 				m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Review Start Ack! => %d"), 1);
 				break;
 
-			case PCControlSend_ResultDataComplete_CPJT:
-				m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Result Data Complete! => %d"), 1);
+			case PCControlSend_ReviewEndAck_CPJT:
+				m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Review End Ack! => %d"), 1);
 				break;
 			}
 		}
@@ -8402,6 +8721,7 @@
 	case PCControlRecv_AutoMode_CPJT:		// auto mode on
 		{
 			m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Mode] Auto Mode"));
+			SetSimulationMode(FALSE);
 			bResult = SetProcessMode(ProcessAutoMode_CPJT);
 			if (bResult==FALSE) m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Mode] Auto Mode Error!"));
 		}
@@ -8409,8 +8729,10 @@
 
 	case PCControlRecv_ManualMode_CPJT:	// manual mode on
 		{
-			m_pSP2P->ISP2P_GetDiagnosisHistory2();
-
+		/*< LYW 20211109 - #3662 Delete Start >*/
+		//m_pSP2P->ISP2P_GetDiagnosisHistory2();
+		/*< LYW 20211109 - #3662 Delete End >*/
+			
 			m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Mode] Manual Mode"));
 			bResult = SetProcessMode(ProcessManualMode_CPJT);
 			if (bResult==FALSE) m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Mode] Manual Mode Error!"));
@@ -8605,12 +8927,11 @@
 	break;
 	case PCControlRecv_Autodiagnosis:
 	{
-		//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+		/*< LYW 20210719 : #3517 ADD Start >*/
 		CSignalControl* pSignalControl = m_pSP2P->ISP2P_GetSignalControl();
 		CString strDiagnosisMode;
 		pSignalControl->ReadData(_T("11160"), 2, strDiagnosisMode);
 		int nDiagnosisMode = atoi(strDiagnosisMode);
-		//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 
 		m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] Diagno start => %d, DiagnosisMode => %d"), bSignalOn, nDiagnosisMode);
 		if (bSignalOn) {
@@ -8620,7 +8941,7 @@
 			
 			m_pSP2P->ISP2P_GetDiagnosisManager()->RecvSignalToSignalControl(0, nDiagnosisMode);
 		}
-		//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
+		/*< LYW 20210719 : #3517 ADD End >*/
 		else
 			bResult = SendSignalOffToSignalControl(PCControlSendSignalIndex_DiagnoAck, 0);
 

--
Gitblit v1.9.3