From bd13fa3f9396f1f681759f4623c55d5f91d74a9c Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 목, 29 7월 2021 11:42:19 +0900
Subject: [PATCH] Ongoing90 #3524 CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선

---
 ReviewSystem/ReviewSystem/ReviewInterface.cpp             |    6 +
 ReviewSystem/ReviewSystemSetting/DlgSignal.h              |    2 
 ReviewSystem/ReviewSystem/MainFrm.cpp                     |    7 +
 ReviewSystem/ReviewSystem/ReviewProcessor.h               |    1 
 ReviewSystem/ReviewSystem/ReviewInterface.h               |    1 
 ReviewSystem/ReviewSystem/MainFrm.h                       |    1 
 ReviewSystem/ReviewSystem/stdafx.h                        |   31 +++++++
 ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp        |   75 ++++++++++++++++++
 ReviewSystem/ReviewSystem/ReviewSystem.vcxproj            |    5 +
 ReviewSystem/ReviewSystemSetting/DlgSignal.cpp            |   13 +++
 ReviewSystem/ReviewSystemSetting/ReviewSystemSetting.rc   |    9 ++
 ReviewSystem/ReviewSystemSetting/resource.h               |   10 +-
 ReviewSystem/CHReviewSetting/Sys_SignalManager.cpp        |   14 +++
 ReviewSystem/include/CHSignalControls/SignalControlInfo.h |    6 +
 14 files changed, 172 insertions(+), 9 deletions(-)

diff --git a/ReviewSystem/CHReviewSetting/Sys_SignalManager.cpp b/ReviewSystem/CHReviewSetting/Sys_SignalManager.cpp
index 8278319..45e091f 100644
--- a/ReviewSystem/CHReviewSetting/Sys_SignalManager.cpp
+++ b/ReviewSystem/CHReviewSetting/Sys_SignalManager.cpp
@@ -38,6 +38,12 @@
 	strItem.Format(_T("SYS_SIGNAL_PERIOD_TIME"));
 	macroFile.SetItem(strItem, m_SignalInfo.GetMSPeriod());
 
+	strItem.Format(_T("SYS_SIGNAL_DEFOCUS_VALUE_MIN"));
+	macroFile.SetItem(strItem, m_SignalInfo.GetDefocusValueMin());
+
+	strItem.Format(_T("SYS_SIGNAL_DEFOCUS_VALUE_MAX"));
+	macroFile.SetItem(strItem, m_SignalInfo.GetDefocusValueMax());
+
 	strItem.Format(_T("SYS_SIGNAL_LOADING_SIGNAL_DELAY"));
 	macroFile.SetItem(strItem, m_SignalInfo.GetMSLoadingSignalDelay());
 
@@ -140,6 +146,14 @@
 	macroFile.GetItem(strItem, nData);
 	m_SignalInfo.SetMSPeriod(nData);
 
+	strItem.Format(_T("SYS_SIGNAL_DEFOCUS_VALUE_MIN"));
+	macroFile.GetItem(strItem, nData);
+	m_SignalInfo.SetDefocusValueMin(nData);
+
+	strItem.Format(_T("SYS_SIGNAL_DEFOCUS_VALUE_MAX"));
+	macroFile.GetItem(strItem, nData);
+	m_SignalInfo.SetDefocusValueMax(nData);
+
 	strItem.Format(_T("SYS_SIGNAL_LOADING_SIGNAL_DELAY"));
 	macroFile.GetItem(strItem, nData);
 	m_SignalInfo.SetMSLodingSignalDelay(nData);
diff --git a/ReviewSystem/ReviewSystem/MainFrm.cpp b/ReviewSystem/ReviewSystem/MainFrm.cpp
index 62cab8a..5687f0b 100644
--- a/ReviewSystem/ReviewSystem/MainFrm.cpp
+++ b/ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -41,6 +41,8 @@
 	ID_INDICATOR_SCRL,
 };
 
+// �젙�쓽 
+
 // CMainFrame �깮�꽦/�냼硫�
 
 CMainFrame::CMainFrame()
@@ -67,6 +69,8 @@
 {
 	if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
 		return -1;
+
+	SetUnhandledExceptionFilter(TopLevelExceptionFilterCallBack);
 
 	ModifyStyle(WS_CAPTION, NULL);
 
@@ -940,4 +944,5 @@
 		return TRUE;
 	}
 	return FALSE;
-}
\ No newline at end of file
+}
+
diff --git a/ReviewSystem/ReviewSystem/MainFrm.h b/ReviewSystem/ReviewSystem/MainFrm.h
index a112ee8..7c0297a 100644
--- a/ReviewSystem/ReviewSystem/MainFrm.h
+++ b/ReviewSystem/ReviewSystem/MainFrm.h
@@ -19,7 +19,6 @@
 
 #include "stdafx.h"
 
-
 class CMainFrame :	public CFrameWndEx, public CReviewInterface
 {
 	
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
index 6b2beb7..a933e74 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -3320,6 +3320,12 @@
 	return m_pDoc->System_GetSystemInfo();
 }
 
+const CSignalControlInfo* CReviewInterface::IRP2P_GetReviewSignalinfo()
+{
+	if (m_pDoc == NULL) return NULL;
+	return m_pDoc->System_GetSignalInfo();
+}
+
 CGlassResult* CReviewInterface::IRP2P_GetCurrentGlassResult()
 {
 	if (m_pDoc==NULL) return NULL;
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.h b/ReviewSystem/ReviewSystem/ReviewInterface.h
index 8f2d7ce..1d6e241 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.h
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -249,6 +249,7 @@
 	virtual void						IRP2P_UpdateCameraControl(int nModuleIdx, const SCameraControl *pCameraControl, const SCameraInfo* pCameraInfo);
 	virtual const CRsRcpReviewInfo*		IRP2P_Recipe_GetRsRcpReviewInfo();
 	virtual const CSystemInfo*          IRP2P_GetReviewSysteminfo();
+	virtual const CSignalControlInfo*	IRP2P_GetReviewSignalinfo();
 	virtual CGlassResult*				IRP2P_GetCurrentGlassResult();													
 	virtual void						IRP2P_DisplayMessage(const TCHAR* lpstrFormat, ...);
 	virtual CResultServerControl*		IRP2P_GetResultServerControl();
diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor.h b/ReviewSystem/ReviewSystem/ReviewProcessor.h
index 4de61ac..781547a 100644
--- a/ReviewSystem/ReviewSystem/ReviewProcessor.h
+++ b/ReviewSystem/ReviewSystem/ReviewProcessor.h
@@ -62,6 +62,7 @@
 	
 	virtual const CRsRcpReviewInfo* IRP2P_Recipe_GetRsRcpReviewInfo() = 0;
 	virtual const CSystemInfo*      IRP2P_GetReviewSysteminfo() = 0;
+	virtual const CSignalControlInfo*	IRP2P_GetReviewSignalinfo() = 0;
 	virtual CGlassResult*			IRP2P_GetCurrentGlassResult() = 0;													
 	virtual void					IRP2P_DisplayMessage(const TCHAR* lpstrFormat, ...) = 0;
 	virtual CResultServerControl*	IRP2P_GetResultServerControl() = 0;
diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
index 74cbfd8..3c4fe43 100644
--- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -5,6 +5,7 @@
 #include "CameraControlReview.h"
 #include "CHImageControls/CHImageProcess.h"
 #include "CHMotorControls/MotorControl.h"
+#include "CHSignalControls/SignalControl.h"
 
 #include "CHEdgeTriangle/EdgeTriangle.h"
 #include "CHEdgeTriangle/RecipeManager.h"
@@ -359,7 +360,6 @@
 	}
 
 	LeaveCriticalSection(&m_csUserCriticalSection);
-.
 	m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
 	return;
 
@@ -1224,15 +1224,33 @@
 
 		  if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 		  {
+			  const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			  int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			  int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 			  m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = 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())
 		  {
+			  const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			  int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			  int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 			  m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = 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 +1274,34 @@
 
 		if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 		{
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = 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())
 		{
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = 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 +1408,33 @@
 
 				if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 				{
+					const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+					int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+					int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 					m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = 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())
 				{
+					const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+					int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+					int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 					m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = 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,16 +1479,34 @@
 
 		if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
 		{
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = 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())
 		{
+			const CSignalControlInfo* pSignalInfo = m_pRP2P->IRP2P_GetReviewSignalinfo();
+			int nDefocusValueMin = pSignalInfo->GetDefocusValueMin();
+			int nDefocusValueMax = pSignalInfo->GetDefocusValueMax();
+
 			m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = 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);
+			}
+
 		}
 	}
 	//#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 ADD End
diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
index c479f2d..0b78cfd 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
+++ b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
@@ -143,7 +143,7 @@
       <TargetEnvironment>X64</TargetEnvironment>
     </Midl>
     <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
+      <Optimization>Disabled</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <AdditionalIncludeDirectories>../include;../../Internal_Library/include;../../External_Library/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -185,6 +185,9 @@
     <PreBuildEvent>
       <Command>updateDlls.bat</Command>
     </PreBuildEvent>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+    </ClCompile>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\include\M_AutoDiagnosisManager\StaticGNUPlot.cpp" />
diff --git a/ReviewSystem/ReviewSystem/stdafx.h b/ReviewSystem/ReviewSystem/stdafx.h
index adcb7cf..d482171 100644
--- a/ReviewSystem/ReviewSystem/stdafx.h
+++ b/ReviewSystem/ReviewSystem/stdafx.h
@@ -38,6 +38,9 @@
 #include "CHReviewResult/GlassResult.h"
 #include "CHReviewSetting/MotorParameter.h"
 
+#include <DbgHelp.h> 
+#pragma comment ( lib, "DbgHelp" )
+
 #include <WinNetWk.h>
 //#pragma comment(lib,"Mpr.lib")
 
@@ -403,4 +406,30 @@
 	char			strMessageString[MAX_PATH];
 };
 
-BOOL KillProcess(CString ProcessName);BOOL getStateProcess(CString ProcessName);
\ No newline at end of file
+BOOL KillProcess(CString ProcessName);BOOL getStateProcess(CString ProcessName);
+
+// �꽑�뼵 
+static LONG CALLBACK TopLevelExceptionFilterCallBack(EXCEPTION_POINTERS* exceptionInfo);
+
+LONG CALLBACK TopLevelExceptionFilterCallBack(EXCEPTION_POINTERS * exceptionInfo)
+{
+	MINIDUMP_EXCEPTION_INFORMATION dmpInfo = { 0 };
+	dmpInfo.ThreadId = ::GetCurrentThreadId(); // Threae ID 
+	dmpInfo.ExceptionPointers = exceptionInfo; // Exception Info 
+	dmpInfo.ClientPointers = FALSE;
+	CTime time;
+	CString strStamp;
+
+	SYSTEMTIME   currentTime;
+	::GetLocalTime(&currentTime);
+	time = CTime::GetCurrentTime();
+	strStamp.Format(_T("Dump\\%02d_%02d_%02d_%02d_%02d_%02d.dmp"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+
+	HANDLE hFile = CreateFile(strStamp, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+
+	// �뜡�봽 �깮�꽦
+	BOOL bWrite = ::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(), hFile, MiniDumpNormal, &dmpInfo, NULL, NULL);
+
+	return 0L;
+
+}
\ No newline at end of file
diff --git a/ReviewSystem/ReviewSystemSetting/DlgSignal.cpp b/ReviewSystem/ReviewSystemSetting/DlgSignal.cpp
index d70aaba..4ad556a 100644
--- a/ReviewSystem/ReviewSystemSetting/DlgSignal.cpp
+++ b/ReviewSystem/ReviewSystemSetting/DlgSignal.cpp
@@ -25,6 +25,8 @@
 	, m_nSignalReviewStartDelay(0)
 	, m_nSignalReviewEndDelay(0)
 	, m_nSignalUnloadingDelay(0)
+	, m_nSignalDefocusValueMin(0)
+	, m_nSignalDefocusValueMax(0)
 {
 	m_pDlgSignalReadData = NULL;
 	m_pDlgSignalWriteData = NULL;
@@ -95,6 +97,8 @@
 	DDX_Text(pDX, IDC_EDIT_SYS_SIGNAL_REVIEWSTART_DELAY, m_nSignalReviewStartDelay);
 	DDX_Text(pDX, IDC_EDIT_SYS_SIGNAL_REVIEWEND_DELAY, m_nSignalReviewEndDelay);
 	DDX_Text(pDX, IDC_EDIT_SYS_SIGNAL_UNLOADING_DELAY, m_nSignalUnloadingDelay);
+	DDX_Text(pDX, IDC_EDIT_DEFOCUSVALUE_MIN, m_nSignalDefocusValueMin);
+	DDX_Text(pDX, IDC_EDIT_DEFOCUSVALUE_MAX, m_nSignalDefocusValueMax);
 }
 
 
@@ -114,6 +118,7 @@
 	// TODO:  여기에 추가 초기화 작업을 추가합니다.
 	int nSignalConnectionType = -1, nSignalPort = -1, nSignalPeriodTime = -1, nTimerTime = 0, nTotalTime = 0;
 	int nLoadingDelay = 0, nAlignStartDelay = 0, nAlignEndDelay = 0, nReviewStartDelay = 0, nReviewEndDelay = 0, nUnloadingDelay = 0;
+	int nDefocusValueMin = 0, nDefocusValueMax = 0;
 	CString strTemp = _T(""), strSignalReceiveAddress = _T(""), strSignalSendAddress = _T("");
 	CReviewSystemSettingDlg* pDlg = (CReviewSystemSettingDlg*)AfxGetMainWnd();
 
@@ -127,6 +132,8 @@
 // 			strSignalReceiveAddress		= pSignalInfo->GetReadSignalAddress(0);
 // 			strSignalSendAddress		= pSignalInfo->GetSendSignalAddress(0);
 			nSignalPeriodTime			= pSignalInfo->GetMSPeriod();
+			nDefocusValueMin			= pSignalInfo->GetDefocusValueMin();
+			nDefocusValueMax			= pSignalInfo->GetDefocusValueMax();
 			nLoadingDelay				= pSignalInfo->GetMSLoadingSignalDelay();
 			nAlignStartDelay			= pSignalInfo->GetMSAlignStartSignalDelay();
 			nAlignEndDelay				= pSignalInfo->GetMSAlignEndSignalDelay();
@@ -180,6 +187,8 @@
 
 	m_strSendAddress = strSignalSendAddress;
 	m_nSignalPeriod = nSignalPeriodTime;
+	m_nSignalDefocusValueMin = nDefocusValueMin;
+	m_nSignalDefocusValueMax = nDefocusValueMax;
 	m_nSignalLodingDelay = nLoadingDelay;
 	m_nSignalAlignStartDelay = nAlignStartDelay;
 	m_nSignalAlignEndDelay = nAlignEndDelay;
@@ -275,6 +284,8 @@
 	m_nSignalReviewStartDelay = 0;
 	m_nSignalReviewEndDelay = 0;
 	m_nSignalUnloadingDelay = 0;
+	m_nSignalDefocusValueMin = 0;
+	m_nSignalDefocusValueMax = 0;
 	m_nTimerTime = 0;
 	m_nTotalTime = 0;
 
@@ -298,6 +309,8 @@
 	pSignalInfo->SetReadSignalAddress(m_strReceiveAddress);
 	pSignalInfo->SetSendSignalAddress(m_strSendAddress);
 	pSignalInfo->SetMSPeriod(m_nSignalPeriod);
+	pSignalInfo->SetDefocusValueMin(m_nSignalDefocusValueMin);
+	pSignalInfo->SetDefocusValueMax(m_nSignalDefocusValueMax);
 	pSignalInfo->SetMSLodingSignalDelay(m_nSignalLodingDelay);
 	pSignalInfo->SetMSAlignStartSignalDelay(m_nSignalAlignStartDelay);
 	pSignalInfo->SetMSAlignEndSignalDelay(m_nSignalAlignEndDelay);
diff --git a/ReviewSystem/ReviewSystemSetting/DlgSignal.h b/ReviewSystem/ReviewSystemSetting/DlgSignal.h
index 3529a8b..e1aa373 100644
--- a/ReviewSystem/ReviewSystemSetting/DlgSignal.h
+++ b/ReviewSystem/ReviewSystemSetting/DlgSignal.h
@@ -65,4 +65,6 @@
 	int m_nSignalReviewStartDelay;
 	int m_nSignalReviewEndDelay;
 	int m_nSignalUnloadingDelay;
+	int m_nSignalDefocusValueMin;
+	int m_nSignalDefocusValueMax;
 };
diff --git a/ReviewSystem/ReviewSystemSetting/ReviewSystemSetting.rc b/ReviewSystem/ReviewSystemSetting/ReviewSystemSetting.rc
index bd8a319..66cde8b 100644
--- a/ReviewSystem/ReviewSystemSetting/ReviewSystemSetting.rc
+++ b/ReviewSystem/ReviewSystemSetting/ReviewSystemSetting.rc
@@ -141,6 +141,10 @@
     RTEXT           "Unloading Signal Delay :",IDC_STATIC,178,94,93,14,SS_CENTERIMAGE
     EDITTEXT        IDC_EDIT_SYS_SIGNAL_UNLOADING_DELAY,276,92,70,14,ES_AUTOHSCROLL
     LTEXT           "ms",IDC_STATIC,348,95,14,12,SS_CENTERIMAGE
+    RTEXT           "DefocusValue :",IDC_STATIC,24,111,48,14,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDIT_DEFOCUSVALUE_MIN,77,111,24,13,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_DEFOCUSVALUE_MAX,122,110,23,13,ES_AUTOHSCROLL
+    RTEXT           "~",IDC_STATIC,107,109,8,14,SS_CENTERIMAGE
 END
 
 IDD_DIALOG_SYS_SETTING_SIGNAL_READ_DATA DIALOGEX 0, 0, 416, 342
@@ -746,6 +750,11 @@
     0
 END
 
+IDD_DIALOG_SYS_SETTING_SIGNAL AFX_DIALOG_LAYOUT
+BEGIN
+    0
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
diff --git a/ReviewSystem/ReviewSystemSetting/resource.h b/ReviewSystem/ReviewSystemSetting/resource.h
index 466d635..f91454f 100644
--- a/ReviewSystem/ReviewSystemSetting/resource.h
+++ b/ReviewSystem/ReviewSystemSetting/resource.h
@@ -1,6 +1,6 @@
 //{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by ReviewSystemSetting.rc
+// Microsoft Visual C++에서 생성한 포함 파일입니다.
+// ReviewSystemSetting.rc에서 사용되고 있습니다.
 //
 #define IDM_ABOUTBOX                    0x0010
 #define IDD_ABOUTBOX                    100
@@ -223,14 +223,16 @@
 #define IDC_EDIT_SYS_MOTOR_START_POINT_XPOS 1089
 #define IDC_EDIT_START_POINT_YPOS       1090
 #define IDC_EDIT_SYS_MOTOR_START_POINT_YPOS 1090
+#define IDC_EDIT_DEFOCUSVALUE_MIN       1092
+#define IDC_EDIT_DEFOCUSVALUE_MAX       1093
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        144
+#define _APS_NEXT_RESOURCE_VALUE        145
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1092
+#define _APS_NEXT_CONTROL_VALUE         1094
 #define _APS_NEXT_SYMED_VALUE           107
 #endif
 #endif
diff --git a/ReviewSystem/include/CHSignalControls/SignalControlInfo.h b/ReviewSystem/include/CHSignalControls/SignalControlInfo.h
index 37efb39..1ef4c7b 100644
--- a/ReviewSystem/include/CHSignalControls/SignalControlInfo.h
+++ b/ReviewSystem/include/CHSignalControls/SignalControlInfo.h
@@ -122,6 +122,8 @@
 	int			GetMSReviewStartSignalDelay() const	{ return m_pMsSignalDelayTime[SignalDelayIndex_ReviewStart]; }
 	int			GetMSReviewEndSignalDelay() const	{ return m_pMsSignalDelayTime[SignalDelayIndex_ReviewEnd]; }
 	int			GetMSUnloadingSignalDelay() const	{ return m_pMsSignalDelayTime[SignalDelayIndex_Unloading]; }
+	int			GetDefocusValueMin()const			{ return m_nDefocusValueMin; }
+	int			GetDefocusValueMax()const			{ return m_nDefocusValueMax; }
 
 	BOOL		GetUseContinuousReadAddress() const { return m_bUseContinuousReadAddr; }
 	BOOL		GetUseContinuousSendAddress() const { return m_bUseContinuousSendAddr; }
@@ -202,6 +204,8 @@
 	void		SetMSTotalTime(int nTime)						{ m_nMSTotalTime = nTime; }
 	void		SetUseContinuousReadAddress(BOOL bUse)			{ m_bUseContinuousReadAddr = bUse; }
 	void		SetUseContinuousSendAddress(BOOL bUse)			{ m_bUseContinuousSendAddr = bUse; }
+	void		SetDefocusValueMin(int nValue)					{ m_nDefocusValueMin = nValue; }
+	void		SetDefocusValueMax(int nValue)					{ m_nDefocusValueMax = nValue; }
 
 
 	void		SetReadSignalAddressCount(int nCnt)				{ m_vecReadSigAddr.resize(nCnt); }
@@ -226,6 +230,8 @@
 	int						m_nMSTimerTime;
 	int						m_nMSTotalTime;
 	int						m_pMsSignalDelayTime[SignalDelayIndex_Count];
+	int						m_nDefocusValueMin;
+	int						m_nDefocusValueMax;
 
 	BOOL					m_bUseContinuousReadAddr;
 	BOOL					m_bUseContinuousSendAddr;

--
Gitblit v1.9.3