From c70166f3e86ffd0528884911483c067a6b21ebdd Mon Sep 17 00:00:00 2001
From: kojingeun <diteam.co.kr>
Date: 금, 30 6월 2023 15:48:59 +0900
Subject: [PATCH] Ongoing60 #4517 CF AOI Review 결과 파일 찾기 실패 개선 1. AOIServer RawBin 폴더 연결 TimerThread 추가  - file_dummy 생성 후 Open/Close 반복(10초) 2. 프로젝트 누락 경로 및 설정 추가  - FTPUploader Include Path, Debug모드 psapi.lib

---
 ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp |  268 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 227 insertions(+), 41 deletions(-)

diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
index 74cbfd8..9c8d564 100644
--- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -5,16 +5,44 @@
 #include "CameraControlReview.h"
 #include "CHImageControls/CHImageProcess.h"
 #include "CHMotorControls/MotorControl.h"
+#include "CHSignalControls/SignalControl.h"
 
 #include "CHEdgeTriangle/EdgeTriangle.h"
 #include "CHEdgeTriangle/RecipeManager.h"
 #include "CHReviewRecipe/RsRcpReviewInfo.h"
 #include "DitGlassRawClient.h"
 #include "LineChecker/LineChecker.h"
+
+#include <fstream> /* < KJG 20230630 - #4517 ADD >*/
 enum StackInfo { Stack_Unknown = 0, Stack_TD, Stack_SD, Stack_PD, Stack_SP, Stack_CD };
 using namespace CHImageControls;
 
-CReviewProcessor_CPJT::CReviewProcessor_CPJT(int nThreadCount) : CReviewProcessor(nThreadCount)
+const CString AOIRAWBIN_PATH = _T("\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin");
+
+CString GetFormatMessageString(DWORD dwError) /* < KJG 20230630 - #4517 ADD >*/
+{
+	LPVOID lpMsgBuf;
+
+	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
+		| FORMAT_MESSAGE_FROM_SYSTEM
+		| FORMAT_MESSAGE_IGNORE_INSERTS
+		, NULL
+		, dwError
+		, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
+		, (LPTSTR)&lpMsgBuf
+		, 0
+		, NULL
+	);
+
+	CString str;
+	str.Format(_T("%s"), lpMsgBuf);
+
+	LocalFree(lpMsgBuf);
+	return str;
+}
+
+CReviewProcessor_CPJT::CReviewProcessor_CPJT(int nThreadCount) 
+	: CReviewProcessor(nThreadCount)
 {
 	bProcessSuccess[CPJT_REVIEW_SUCCESS] = FALSE;
 	bProcessSuccess[CPJT_MEASURE_SUCCESS] = FALSE;
@@ -43,6 +71,12 @@
 	ErrorStringCode[17].Insert(17,_T("CircleCoefficientFail"));
 	ErrorStringCode[18].Insert(18,_T("ProcessSuccess"));
 	ErrorStringCode[19].Insert(19,_T("ProcessNone"));
+	
+	/* < KJG 20230630 - #4517 ADD Start >*/
+	CString strDummyFilePath;
+	strDummyFilePath.Format(_T("%s\\file_dummy"), AOIRAWBIN_PATH);
+	m_threadFileMonitor.StartThread();
+	/* < KJG 20230630 - #4517 ADD End >*/
 }
 
 CReviewProcessor_CPJT::~CReviewProcessor_CPJT(void)
@@ -359,7 +393,6 @@
 	}
 
 	LeaveCriticalSection(&m_csUserCriticalSection);
-.
 	m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
 	return;
 
@@ -1224,15 +1257,35 @@
 
 		  if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 		  {
-			  m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+			  const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			  int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			  int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+			  //m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+			  m_pRP2P->IRP2P_SetReview00ImageContrast(round(dFocusValue));
 			  m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
 			  m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
+
+			  if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+			  {
+				  m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+			  }
 		  }
 		  else if(pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
 		  {
-			  m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+			  const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			  int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			  int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+			  //m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+			  m_pRP2P->IRP2P_SetReview01ImageContrast(round(dFocusValue));
 			  m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
 			  m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
+
+			  if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+			  {
+				  m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+			  }
 		  }
 	  }
 	}
@@ -1256,15 +1309,36 @@
 
 		if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 		{
-			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+			//m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+			m_pRP2P->IRP2P_SetReview00ImageContrast(round(dFocusValue));
 			m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
 			m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
+			
+			if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+			{
+				m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+			}
+			
 		}
 		else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
 		{
-			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+			//m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+			m_pRP2P->IRP2P_SetReview01ImageContrast(round(dFocusValue));
 			m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
 			m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
+
+			if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+			{
+				m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+			}
 
 		}
 	}
@@ -1371,15 +1445,35 @@
 
 				if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 				{
-					m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+					const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+					int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+					int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+					//m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+					m_pRP2P->IRP2P_SetReview00ImageContrast(round(dFocusValue));
 					m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
 					m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
+
+					if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+					{
+						m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+					}
 				}
 				else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
 				{
-					m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+					const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+					int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+					int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+					//m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+					m_pRP2P->IRP2P_SetReview01ImageContrast(round(dFocusValue));
 					m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
 					m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
+
+					if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+					{
+						m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+					}
 
 				}
 
@@ -1424,15 +1518,35 @@
 
 		if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 		{
-			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+			//m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
+			m_pRP2P->IRP2P_SetReview00ImageContrast(round(dFocusValue));
 			m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
 			m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
+
+			if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+			{
+				m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+			}
 		}
 		else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
 		{
-			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
+			//m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
+			m_pRP2P->IRP2P_SetReview01ImageContrast(round(dFocusValue));
 			m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
 			m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
+
+			if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
+			{
+				m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
+			}
 
 		}
 	}
@@ -3732,49 +3846,121 @@
 	BYTE *pImageBufferByte = (BYTE*)(pImageBuffer);
 	if (pImageBuffer==NULL) return 0.;
 
+	//#3524_210902_LYW_MOD START
 	int nWidth = nImageWidth;
+	//int nWidthStep = nImageWidth;
 	int nHeight = nImageHeight;
-	int nCalWidth = nWidth/2;
-	int nCalHeight = nHeight/2;
+	// 	int nCalWidth = nWidth/2;
+	// 	int nCalHeight = nHeight/2;
+	// 
+	// 	int nStartX = nWidth/2 - nCalWidth/2;
+	// 	int nStartY = nHeight/2 - nCalHeight/2;
 
-	int nStartX = nWidth/2 - nCalWidth/2;
-	int nStartY = nHeight/2 - nCalHeight/2;
+	int nCalWidth = nWidth;
+	int nCalHeight = nHeight;
 
-	//
-	double Focusvalue = 0;
-	double SumValue = 0;
-	double TempValue = 0;
-	double m_nResultFocusValue = 0;
+	int nStartX = 0;
+	int nStartY = 0;
 
-	for (int y = 0; y < nHeight - 1; y++)
+	int nStep = 3;
+
+	double dXValue = 0., dYValue = 0., dCurr = 0., dSum = 0., dFocus = 0.;
+	for (int nH = nStartY; nH < nStartY + nCalHeight - nStep; nH++)
 	{
-		for (int x = 0; x < nWidth - 1; x++)
+		for (int nW = nStartX; nW < nStartX + nCalWidth - nStep; nW++)
 		{
-			TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[y*nWidth + x + 1]);
-			SumValue = TempValue * TempValue;
-			TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[(y + 1)*nWidth + x]);
-			SumValue += TempValue * TempValue;
-
-			Focusvalue += sqrt(SumValue);
-			//Focusvalue += SumValue;
-		}
-	}
-
-	m_nResultFocusValue = int(Focusvalue / (double)(nWidth*nHeight));
-
-	double dXValue=0., dYValue=0., dCurr=0., dSum=0., dFocus=0.;
-	for(int nH=nStartY ; nH<nStartY+nCalHeight-1 ; nH++)
-	{
-		for(int nW=nStartX ; nW<nStartX+nCalWidth-1 ; nW++)
-		{
-			dXValue = float((pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW]));
-			dYValue = float((pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW]));
+			dXValue = float((pImageBufferByte[nH*nWidth + nW + nStep] - pImageBufferByte[nH*nWidth + nW])*(pImageBufferByte[nH*nWidth + nW + nStep] - pImageBufferByte[nH*nWidth + nW]));
+			dYValue = float((pImageBufferByte[(nH + nStep)*nWidth + nW] - pImageBufferByte[nH*nWidth + nW])*(pImageBufferByte[(nH + nStep)*nWidth + nW] - pImageBufferByte[nH*nWidth + nW]));
 			dCurr = sqrt(dXValue + dYValue);
+			//break;
+
 			dSum += dCurr;
 		}
 	}
-	dFocus = dSum/double(nCalWidth*nCalHeight);
+	dFocus = dSum / double(nCalWidth*nCalHeight);
+
+	if (dFocus >= 10.0) dFocus = 10.0;
 
 	return dFocus;
+	//#3524_210902_LYW_MOD END
+	//Origin
+// 	int nWidth = nImageWidth;
+// 	int nHeight = nImageHeight;
+// 	int nCalWidth = nWidth/2;
+// 	int nCalHeight = nHeight/2;
+// 
+// 	int nStartX = nWidth/2 - nCalWidth/2;
+// 	int nStartY = nHeight/2 - nCalHeight/2;
+// 
+// 	//
+// 	double Focusvalue = 0;
+// 	double SumValue = 0;
+// 	double TempValue = 0;
+// 	double m_nResultFocusValue = 0;
+// 
+// 	for (int y = 0; y < nHeight - 1; y++)
+// 	{
+// 		for (int x = 0; x < nWidth - 1; x++)
+// 		{
+// 			TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[y*nWidth + x + 1]);
+// 			SumValue = TempValue * TempValue;
+// 			TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[(y + 1)*nWidth + x]);
+// 			SumValue += TempValue * TempValue;
+// 
+// 			Focusvalue += sqrt(SumValue);
+// 			//Focusvalue += SumValue;
+// 		}
+// 	}
+// 
+// 	m_nResultFocusValue = int(Focusvalue / (double)(nWidth*nHeight));
+// 
+// 	double dXValue=0., dYValue=0., dCurr=0., dSum=0., dFocus=0.;
+// 	for(int nH=nStartY ; nH<nStartY+nCalHeight-1 ; nH++)
+// 	{
+// 		for(int nW=nStartX ; nW<nStartX+nCalWidth-1 ; nW++)
+// 		{
+// 			dXValue = float((pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW]));
+// 			dYValue = float((pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW]));
+// 			dCurr = sqrt(dXValue + dYValue);
+// 			dSum += dCurr;
+// 		}
+// 	}
+// 	dFocus = dSum/double(nCalWidth*nCalHeight);
+// 
+// 	return dFocus;
 }
 
+CTimerThreadFileMonitor::CTimerThreadFileMonitor(DWORD dwPeriod /*=10000*/, int nThreadCount /*=1*/)
+	: CTimerThreadPools(dwPeriod, nThreadCount), m_pLog(nullptr)
+{
+
+}
+
+void CTimerThreadFileMonitor::TimerThreadProcess(PVOID pParameter)
+{
+	if (m_strFilePath.IsEmpty())
+		return;
+
+	std::ofstream file(m_strFilePath);
+
+	if (file.is_open())
+	{
+
+	}
+	else
+	{
+		DWORD dwError = GetLastError();
+
+		if(m_pLog)
+			m_pLog->DisplayMessage(_T("[FileMonitor Thread] Abort! Error Code[%d][%s] File Path[%s]"), dwError, GetFormatMessageString(dwError), m_strFilePath);
+
+		AfxBeginThread([](LPVOID pParam)->UINT {
+			CTimerThreadFileMonitor *pMain = static_cast<CTimerThreadFileMonitor*>(pParam);
+			pMain->StopThread();
+
+			return 0;
+		}, this);
+	}
+
+	return;
+}
\ No newline at end of file

--
Gitblit v1.9.3