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 | 69 ++++++++++++++++++++++++++++++++++ ReviewSystem/ReviewSystem/ReviewSystem.vcxproj | 4 +- ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp | 9 ++++ ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h | 26 ++++++++++++ ReviewSystem/ReviewSystem/ReviewProcessor.h | 2 + 5 files changed, 105 insertions(+), 5 deletions(-) diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor.h b/ReviewSystem/ReviewSystem/ReviewProcessor.h index b5a7c74..e2b4678 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor.h +++ b/ReviewSystem/ReviewSystem/ReviewProcessor.h @@ -161,6 +161,8 @@ virtual int PostProcessWsiMultiShotResult(int nThreadIdx, SReviewResult* pReviewResult)=0; virtual int PostProcessWsiVLSIResult(int nThreadIdx, SReviewResult* pReviewResult)=0; virtual int CheckMotionComplete() = 0; + virtual void FileMonitorThreadStart() = 0; /* < KJG 20230630 - #4517 ADD >*/ + virtual void FileMonitorThreadStop() = 0; /* < KJG 20230630 - #4517 ADD >*/ virtual CString MakeWSIImageFileName( SReviewResult* pReviewResult )=0; virtual double GetCentertoOrginCoordinate(double dPosX,double dPosY,int nCornercut,int nOriginDirection)=0; diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp index 086a65f..9c8d564 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp @@ -12,10 +12,37 @@ #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; @@ -44,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) @@ -3897,3 +3930,37 @@ // 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 diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h index 6f456d3..237549c 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h +++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h @@ -3,6 +3,7 @@ #include "ReviewProcessor.h" #include "CHEdgeTriangle/EdgeTriangle.h" #include "LineChecker/LineChecker.h" +#include "CHThreadPools/TimerThreadPools.h" /* < KJG 20230630 - #4517 ADD Start >*/ #define ErrorCount 20 @@ -14,6 +15,23 @@ #define GLASS_SIZE_HEIGHT 2200000 enum RPCornerCutDirection { RPCLeftTop=0, RPCRightTop, RPCLeftBottom, RPCRightBottom }; enum RPOriginDirection { RPOLeftTop=0, RPORightTop, RPOLeftBottom, RPORightBottom }; + + +class CTimerThreadFileMonitor : public CTimerThreadPools /* < KJG 20230630 - #4517 ADD Start >*/ +{ +public: + explicit CTimerThreadFileMonitor(DWORD dwPeriod = 10000, int nThreadCount = 1); + ~CTimerThreadFileMonitor() = default; + + void SetParam(CDisplayMessage* pLog, CString strPath) { m_pLog = pLog; m_strFilePath = strPath; } + +private: + CDisplayMessage* m_pLog; + CString m_strFilePath; + + void TimerThreadProcess(PVOID pParameter); + +}; class CReviewProcessor_CPJT : public CReviewProcessor { @@ -48,6 +66,9 @@ BOOL CheckProcessSuccess(CRsRcpReviewInfo* pRsRcpReviewInfo); void ProcessSuccessReset(); + + void FileMonitorThreadStart() { m_threadFileMonitor.StartThread(); } /* < KJG 20230630 - #4517 ADD Start >*/ + void FileMonitorThreadStop() { m_threadFileMonitor.StopThread(); } /* < KJG 20230630 - #4517 ADD Start >*/ protected: virtual void WorkThreadProcess(PVOID pParameter); @@ -111,6 +132,9 @@ CString m_strReviewFirst; CString m_strReviewSecned; + CTimerThreadFileMonitor m_threadFileMonitor; /* < KJG 20230630 - #4517 ADD Start >*/ + protected: CString ErrorStringCode[ErrorCount]; -}; \ No newline at end of file +}; + diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj index e2bf5ed..dd5e65a 100644 --- a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj +++ b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj @@ -102,7 +102,7 @@ </Midl> <ClCompile> <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>../include;../../Internal_Library/include;../../External_Library/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>../include;../../Internal_Library/include;../../External_Library/include;../../FTPUploader/FTPUploader;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <MinimalRebuild>true</MinimalRebuild> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> @@ -118,7 +118,7 @@ <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ResourceCompile> <Link> - <AdditionalDependencies>CHVirtualGlassMapd_x64_vc15.lib;chartdir51.lib;CHCameraControlsd_x64_vc15.lib;LineCheckerd_x64_vc15.lib;CHImageControlsd_x64_vc15.lib;CHCommonClassesd_x64_vc15.lib;CHCommonControlsd_x64_vc15.lib;CHResultFileManagerd_x64_vc15.lib;CHReviewReciped_x64_vc15.lib;CHReviewSettingd_x64_vc15.lib;CHReviewResultd_x64_vc15.lib;CHEdgeTriangled_x64_vc15.lib;CHPathSchedulerd_x64_vc15.lib;CHMotorCalibratord_x64_vc15.lib;CHAutoLightControlsd_x64_vc15.lib;CHAlignFinderd_x64_vc15.lib;CHThreadPoolsd_x64_vc15.lib;CHReviewResultParserd_x64_vc15.lib;CHReviewDefectFinderd_x64_vc15.lib;CHReviewPrioritySorterd_x64_vc15.lib;CHDefectPickerd_x64_vc15.lib;IOCPNetworkd_x64_vc15.lib;CHMotorControlsd_x64_vc15.lib;CHLensChangeControlsd_x64_vc15.lib;CHLightControlsd_x64_vc15.lib;CHAfmControlsd_x64_vc15.lib;CHSignalControlsd_x64_vc15.lib;CHVcrControlsd_x64_vc15.lib;CHWsiControlsd_x64_vc15.lib;CHTotalPitchMeasured_x64_vc15.lib;M_AutoDiagnosisManagerd_x64_vc17.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>CHVirtualGlassMapd_x64_vc15.lib;chartdir51.lib;CHCameraControlsd_x64_vc15.lib;LineCheckerd_x64_vc15.lib;CHImageControlsd_x64_vc15.lib;CHCommonClassesd_x64_vc15.lib;CHCommonControlsd_x64_vc15.lib;CHResultFileManagerd_x64_vc15.lib;CHReviewReciped_x64_vc15.lib;CHReviewSettingd_x64_vc15.lib;CHReviewResultd_x64_vc15.lib;CHEdgeTriangled_x64_vc15.lib;CHPathSchedulerd_x64_vc15.lib;CHMotorCalibratord_x64_vc15.lib;CHAutoLightControlsd_x64_vc15.lib;CHAlignFinderd_x64_vc15.lib;CHThreadPoolsd_x64_vc15.lib;CHReviewResultParserd_x64_vc15.lib;CHReviewDefectFinderd_x64_vc15.lib;CHReviewPrioritySorterd_x64_vc15.lib;CHDefectPickerd_x64_vc15.lib;IOCPNetworkd_x64_vc15.lib;CHMotorControlsd_x64_vc15.lib;CHLensChangeControlsd_x64_vc15.lib;CHLightControlsd_x64_vc15.lib;CHAfmControlsd_x64_vc15.lib;CHSignalControlsd_x64_vc15.lib;CHVcrControlsd_x64_vc15.lib;CHWsiControlsd_x64_vc15.lib;CHTotalPitchMeasured_x64_vc15.lib;M_AutoDiagnosisManagerd_x64_vc17.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>../lib;../../Internal_Library/lib;../../External_Library/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <GenerateDebugInformation>true</GenerateDebugInformation> <SubSystem>Windows</SubSystem> diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp index 78fd1fe..6f4417f 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp @@ -954,6 +954,10 @@ //SetUploadResultFailCount(0); bFileFind = FALSE; + + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] FileMonitor Thread Stop Ready")); + m_pSP2P->ISP2P_GetReviewProcessor()->FileMonitorThreadStop(); /* < KJG 20230630 - #4517 ADD Start >*/ + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] FileMonitor Thread Stop Complete")); /*< LYW 20211109 - #3662 Delete Start >*/ //m_pSP2P->ISP2P_GetDiagnosisHistory(); @@ -1884,7 +1888,10 @@ //#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!")); - + + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] FileMonitor Thread Start Ready")); + m_pSP2P->ISP2P_GetReviewProcessor()->FileMonitorThreadStart(); /* < KJG 20230630 - #4517 ADD Start >*/ + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] FileMonitor Thread Start Complete")); } -- Gitblit v1.9.3