From 0c66940a8e2cf64c9890519901f433b3668216b6 Mon Sep 17 00:00:00 2001 From: KEJ <kimeungju@diteam.co.kr> Date: 수, 26 6월 2024 15:13:18 +0900 Subject: [PATCH] Ongoing80 #4942 CF AOI Review Bin File Loading 실패 개선 1. GlassRawMessenger 동기화 2. BIN파일 FindFile 제거(RawMessenger, Review 공통) 3. Unloading 시 BIN파일 제거 --- ReviewSystem/ReviewSystem/DitGlassRawClient.cpp | 61 +++-- ReviewSystem/ReviewSystem/DitGlassRawClient.h | 27 +- ReviewSystem/ReviewSystem/DisplayMessage.cpp | 2 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp | 14 + DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp | 3 DitGlassRawMessenger/Extern/DitGlassRawClient.h | 2 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp | 331 +++++++++++++++------------ DitGlassRawMessenger/Extern/DitGlassRawClient.cpp | 24 ++ DitGlassRawMessenger/Extern/DitGlassRawStruct.h | 12 + DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.h | 2 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h | 5 ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h | 1 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h | 12 + ReviewSystem/ReviewSystem/DitGlassRawStruct.h | 16 + DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp | 12 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp | 194 +++++++++------- 16 files changed, 436 insertions(+), 282 deletions(-) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp index acabcf6..0bde8c6 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp @@ -16,18 +16,16 @@ { } -BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData) +BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData, CString strPath) { - //return TRUE; - /* < KJG 20220225 - #4000 MOD Start >*/ - //CString strFilePathName; - //strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); char* pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; CString strFilePathName; CString strFileName = pData->GetGlassData()->m_strFileName; strFileName.Replace(".bin", ".csv"); - strFilePathName.Format("%s\\%s", pData->GetGlassData()->m_strPath, strFileName); - /* < KJG 20220225 - #4000 MOD End >*/ + /* < KJG 20240620 - #4942 MOD Start >*/ + //strFilePathName.Format("%s\\%s", pData->GetGlassData()->m_strPath, strFileName); + strFilePathName.Format(_T("%s\\%s"), strPath, strFileName); + /* < KJG 20240620 - #4942 MOD End > */ FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); if (pf == NULL) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.h b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.h index 78a5fb5..5a1ebb2 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.h @@ -9,7 +9,7 @@ virtual ~CAnaResultFile(void); public: - BOOL MakeAnaFile(CgrmGlassRawData* pData); + BOOL MakeAnaFile(CgrmGlassRawData* pData, CString strPath); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp index 1fdb749..e984f54 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp @@ -774,6 +774,8 @@ if(m_pGlassRawMaker) delete m_pGlassRawMaker; m_pGlassRawMaker = pNewRawMaker; + m_pGlassRawMaker->SetInterface_IGR2P(this); /* < KJG 20240620 - #4942 ADD Start >*/ + m_ConfigOption.m_nSelectRawType = nIndex; WriteConfigFile(); @@ -1676,4 +1678,14 @@ return CDialog::OnCopyData(pWnd, pCopyDataStruct); } -/* <LJC 20211122 : #3820 ADD End> */ \ No newline at end of file +/* <LJC 20211122 : #3820 ADD End> */ + +/* < KJG 20240620 - #4942 ADD Start >*/ +void CDitGlassRawMessengerDlg::IGR2P_ReportBinaryResult(BOOL bSucess) +{ + if(bSucess) + m_Server.GetGlassRawInfo()->m_ClientResultStep = APS_RES_BinarySuccess; + else + m_Server.GetGlassRawInfo()->m_ClientResultStep = APS_RES_BinaryFail; +} +/* < KJG 20240620 - #4942 ADD End >*/ diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h index 7465412..2069e41 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h @@ -27,6 +27,8 @@ // CDitGlassRawMessengerDlg 대화 상자 class CDitGlassRawMessengerDlg : public CDialog + , public IGlassRaw2Parent /* < KJG 20240620 - #4942 ADD >*/ + { // 생성입니다. public: @@ -149,4 +151,7 @@ /* <LJC 20211122 : #3820 ADD Start> */ afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct); /* <LJC 20211122 : #3820 ADD End> */ + + public: + void IGR2P_ReportBinaryResult(BOOL bSucess) override; /* < KJG 20240620 - #4942 ADD >*/ }; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp index cd1ae2b..310e9d3 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp @@ -4,6 +4,7 @@ #include "akLoggerExt.h" CGlassRawBase::CGlassRawBase(void) + : m_pParentInterface(nullptr) /* < KJG 20240620 - #4942 ADD >*/ { /* <LJC 20211122 : #3820 ADD Start> */ b_EnableFtpAck = FALSE; /* <LJC 20211122 : #3820 ADD End> */ @@ -39,9 +40,11 @@ } else { + m_pParentInterface->IGR2P_ReportBinaryResult(FALSE); /* < KJG 20240620 - #4942 ADD >*/ AKLOG("WriteBinFile Fail"); return FALSE; } + m_pParentInterface->IGR2P_ReportBinaryResult(TRUE); /* < KJG 20240620 - #4942 ADD >*/ AKLOG("WriteBinFile Finish"); return TRUE; } diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h index 59752dc..a20ea56 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h @@ -44,6 +44,14 @@ enum CAMTYPE { _eCT_Reflex = 0, _eCT_Transfer }; + +/* < KJG 20240620 - #4942 ADD Start >*/ +interface IGlassRaw2Parent +{ + virtual void IGR2P_ReportBinaryResult(BOOL bSucess) = 0; +}; +/* < KJG 20240620 - #4942 ADD End>*/ + class CGlassRawBase { public: @@ -79,4 +87,8 @@ BOOL b_EnableFtpAck; /* <LJC 20211122 : #3820 ADD End> */ + void SetInterface_IGR2P(_In_ IGlassRaw2Parent* pInterface) { m_pParentInterface = pInterface; } /* < KJG 20240620 - #4942 ADD >*/ + +protected: + IGlassRaw2Parent* m_pParentInterface; /* < KJG 20240620 - #4942 ADD >*/ }; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp index 64660aa..089c488 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp @@ -19,10 +19,12 @@ #define LOCAL_RAWPATH_INFO_INI_PATH "D:\\ResultData\\" #define RAWINFO_FILE_NAME "RESULT_INFO.ini" +#define LOCAL_AOI_DEFECT_INFO_FILE_PATH _T("D:\\DIT_ResultData\\DefectInfo") // 寃고븿 �긽�꽭 �젙蹂� �뙆�씪 �깮�꽦 寃쎈줈 #define LOCAL_AOIRAWDFS_PATH "D:\\DIT_ResultData\\Raw" #define LOCAL_AOIRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" #define NETWORK_AOIRAWDFS_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw" #define NETWORK_AOIRAWBIN_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin" +#define LOCAL_ReviewRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" #define NETWORK_AOIRAWFILE_SUB_PATH "\\\\126.100.100.1\\d\\Raw_im\\" #define NETWORK_AOI_IMAGE_PATH "\\\\126.100.100.1\\d\\Image\\Defect\\" @@ -89,6 +91,7 @@ CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL); CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL); CreateDirectory("D:\\Raw_im", NULL); + CreateDirectory(LOCAL_AOI_DEFECT_INFO_FILE_PATH, NULL); /* < KJG 20240620 - #4942 ADD >*/ /* <KMH 20220407 : #4053 ADD Start> */ CFileFind FileFinder; @@ -125,9 +128,9 @@ CString strStackFileLocalPath; strStackFileLocalPath.Format("%s\\%s", NETWORK_AOISTACKLOCAL_PATH, pData->GetGlassData()->m_strGlassID); - + CFileFind File; - + if (File.FindFile(strStackFileLocalPath)) { File.FindNextFile(); @@ -201,27 +204,30 @@ //210128 m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime(); pData->GetGlassData()->m_tmReviewEnd = m_tmReviewEnd; // Insp End �떆 Raw �뾽濡쒕뱶濡�, E_TIME, LD_TIME �엯�젰 [ 21-03-18 KJG ] + pData->GetGlassData()->m_tmInspectionEND = m_tmReviewEnd; // �떎�젣 Insp End �떆 Raw �뾽濡쒕뱶濡�, E_TIME, LD_TIME �엯�젰 //< KEJ 20240408 - #4808 ADD > m_tmFileCreateTime = CTime::GetCurrentTime(); //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] - pData->GetGlassData()->m_strFileName; - { - _grmGlassData* pGlassData = pData->GetGlassData(); - CTime CurrTime = pGlassData->m_tmGlassLoading; - CString strTime=_T(""), strFileName=_T(""); - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.bin", pGlassData->m_strGlassID, pGlassData->m_strStepID, strTime.GetBuffer(0)); - strcpy(pData->GetGlassData()->m_strFileName, strFileName.GetBuffer(0)); - } - strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - + //=> �꽌踰꾩뿉�꽌 �뜥以� 洹몃�濡� �깮�꽦�븯�룄濡� 蹂�寃� + /* < KJG 20240620 - #4942 DEL Start >*/ +// pData->GetGlassData()->m_strFileName; +// { +// _grmGlassData* pGlassData = pData->GetGlassData(); +// CTime CurrTime = pGlassData->m_tmGlassLoading; +// CString strTime=_T(""), strFileName=_T(""); +// strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), +// +// CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); +// strFileName.Format("%s_%s_%s.bin", pGlassData->m_strGlassID, pGlassData->m_strStepID, strTime.GetBuffer(0)); +// +// strcpy(pData->GetGlassData()->m_strFileName, strFileName.GetBuffer(0)); +// } +// strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); + /* < KJG 20240620 - #4942 DEL End >*/ if(!WriteBinFile(pData)) return FALSE; - //if(1) ReadMuraFile(pData); 211012 KJG - QD Macro 媛쒕퀎 �뾽濡쒕뱶 �븯誘�濡� Macro �뜲�씠�꽣 �쟻�젣 �젣嫄� �슂泥� @@ -261,8 +267,6 @@ // else sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); /* <KYH 211129 : #3806 ADD End> */ - - BOOL bIsBDI = strcmp((pData->GetGlassData()->m_strLine), _T("BDI")) == 0 ? TRUE : FALSE; if (bIsBDI) { @@ -305,69 +309,72 @@ //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] pData->GetGlassData()->m_strFileName; - strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWBIN_PATH); + //strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWBIN_PATH); + strcpy(pData->GetGlassData()->m_strPath, LOCAL_ReviewRAWBIN_PATH); //< KEJ 20240621 - #4942 MOD > //strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - + /* < KEJ 20240621 - #4942 MOD Start > */ +// CString strFindFile; +// int nCloseTime = 600*100000;//sec +// int nReTryTime = 30; +// { +// CTime tmReviewLoading = CTime::GetCurrentTime(); +// CString strWild; +// +// strWild.Format("%s\\%s_%s_*.bin", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strGlassID,pData->GetGlassData()->m_strStepID); +// CakFileUtil akFileFinder; +// while(nReTryTime--) +// { +// akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); +// VECFINDDATA* pFindData = akFileFinder.getFindData(); +// int nFileNamePos = strlen(akFileFinder.getProcessPath()); +// std::map<LONGLONG, CString> mapSpanFileName; +// for(int i=0; i<pFindData->size(); i++) +// { +// char* pFileName = &((*pFindData)[i]).name[nFileNamePos]; +// { +// CakParser parser; +// parser.process(pFileName, "_."); +// if(parser.getTokNum() < 4) continue; +// +// int nDataTime[8]={}; +// { +// int nTokIndex=0; +// const char* pGlassId = parser.getTokStr(nTokIndex++); +// const char* pStepId = parser.getTokStr(nTokIndex++); +// char* pDate = &pFileName[parser.getTokPos(nTokIndex++)]; +// char* pTime = &pFileName[parser.getTokPos(nTokIndex++)]; +// +// nDataTime[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; +// nDataTime[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; +// nDataTime[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; +// nDataTime[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; +// nDataTime[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; +// nDataTime[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; +// } +// +// CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5] ); +// CTimeSpan tmSpan = tmReviewLoading-tmTemp; +// mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName)); +// } +// } +// +// if(mapSpanFileName.empty() == FALSE) +// { +// if(mapSpanFileName.begin()->first < nCloseTime) +// { +// //媛��옣 理쒓렐 寃곌낵�뙆�씪 李얘린 �꽦怨� [源��깭�쁽 2019/7/17] +// strFindFile = mapSpanFileName.begin()->second; +// break; +// } +// } +// akFileFinder.clear(); +// Sleep(100); +// } +// } CString strFindFile; - int nCloseTime = 600*100000;//sec - int nReTryTime = 30; - { - CTime tmReviewLoading = CTime::GetCurrentTime(); - CString strWild; - - strWild.Format("%s\\%s_%s_*.bin", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strGlassID,pData->GetGlassData()->m_strStepID); - CakFileUtil akFileFinder; - while(nReTryTime--) - { - akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); - VECFINDDATA* pFindData = akFileFinder.getFindData(); - int nFileNamePos = strlen(akFileFinder.getProcessPath()); - std::map<LONGLONG, CString> mapSpanFileName; - for(int i=0; i<pFindData->size(); i++) - { - char* pFileName = &((*pFindData)[i]).name[nFileNamePos]; - { - CakParser parser; - parser.process(pFileName, "_."); - if(parser.getTokNum() < 4) continue; - - int nDataTime[8]={}; - { - int nTokIndex=0; - const char* pGlassId = parser.getTokStr(nTokIndex++); - const char* pStepId = parser.getTokStr(nTokIndex++); - char* pDate = &pFileName[parser.getTokPos(nTokIndex++)]; - char* pTime = &pFileName[parser.getTokPos(nTokIndex++)]; - - nDataTime[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; - nDataTime[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; - nDataTime[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; - nDataTime[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; - nDataTime[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; - nDataTime[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; - } - - CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5] ); - CTimeSpan tmSpan = tmReviewLoading-tmTemp; - mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName)); - } - } - - if(mapSpanFileName.empty() == FALSE) - { - if(mapSpanFileName.begin()->first < nCloseTime) - { - //媛��옣 理쒓렐 寃곌낵�뙆�씪 李얘린 �꽦怨� [源��깭�쁽 2019/7/17] - strFindFile = mapSpanFileName.begin()->second; - break; - } - } - akFileFinder.clear(); - Sleep(100); - } - } - + strFindFile.Format("%s_%s.bin", pData->GetGlassData()->m_strGlassID, pData->GetGlassData()->m_strStepID); + /* < KEJ 20240621 - #4942 MOD End > */ if(strFindFile.IsEmpty()) return FALSE; strcpy(pData->GetGlassData()->m_strFileName, strFindFile.GetBuffer(0)); @@ -507,7 +514,10 @@ bResult &= MakeAOIFile(pData); - m_GlassRawAna.MakeAnaFile(pData); + /* < KJG 20240620 - #4942 MOD Start >*/ + //m_GlassRawAna.MakeAnaFile(pData); + m_GlassRawAna.MakeAnaFile(pData, LOCAL_AOI_DEFECT_INFO_FILE_PATH); + /* < KJG 20240620 - #4942 MOD End > */ //m_GlassRawRTMS.WriteAOIFile(pData); AKLOG("WriteAOIFile Complete"); @@ -636,6 +646,7 @@ /* <LJC 20220425 : #3957 MOD End> */ /* < KMH 20220613 : #3957 MOD End > */ /*< KJG 20211229 - #3846 MOD End >*/ + strValue += _T(" B_DEFECT"); /* < KJG 20240620 - #4942 ADD >*/ strLine += strValue; strLine += "\n"; /* < KMH 20220614 : #3957 MOD Start > */ /* <LJC 20220425 : #3957 MOD Start> */ @@ -892,13 +903,22 @@ , pGlassData->m_tmInspectionStart.GetSecond()); SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue); // 23 14 E_TIME // Stage�뿉�꽌 寃��궗/怨꾩륫 醫낅즺�맂 �떆媛� + /* < KEJ 20240408 - #4808 MOD Start > */ +// strValue.Format("%04d%02d%02d%02d%02d%02d" // E_TIME +// , pGlassData->m_tmReviewEnd.GetYear() +// , pGlassData->m_tmReviewEnd.GetMonth() +// , pGlassData->m_tmReviewEnd.GetDay() +// , pGlassData->m_tmReviewEnd.GetHour() +// , pGlassData->m_tmReviewEnd.GetMinute() +// , pGlassData->m_tmReviewEnd.GetSecond()); strValue.Format("%04d%02d%02d%02d%02d%02d" // E_TIME - , pGlassData->m_tmReviewEnd.GetYear() - , pGlassData->m_tmReviewEnd.GetMonth() - , pGlassData->m_tmReviewEnd.GetDay() - , pGlassData->m_tmReviewEnd.GetHour() - , pGlassData->m_tmReviewEnd.GetMinute() - , pGlassData->m_tmReviewEnd.GetSecond()); + , pGlassData->m_tmInspectionEND.GetYear() + , pGlassData->m_tmInspectionEND.GetMonth() + , pGlassData->m_tmInspectionEND.GetDay() + , pGlassData->m_tmInspectionEND.GetHour() + , pGlassData->m_tmInspectionEND.GetMinute() + , pGlassData->m_tmInspectionEND.GetSecond()); + /* < KEJ 20240408 - #4808 MOD End > */ SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue); // 24 6 T_DEFECT // Common Item 1 - Total Defect Count SPRINTRAW(12, "%d", pGlassData->m_nDefectNum - pGlassData->m_nCutOffDefectNum); //210203 CJH - Cutoff 寃고븿�� �쟾泥닿컻�닔�뿉�꽌 �젣�쇅�빐以��떎. @@ -1050,6 +1070,10 @@ } } /* <LJC 20220425 : #3957 ADD End> */ + + // B_DEFECT(Before T_DEFECT) �븘�꽣留� �쟾 寃고븿 �닔�웾 + SPRINTRAW(12, "%d", pGlassData->m_nDefectNum); /* < KJG 20240620 - #4942 ADD >*/ + SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] } diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp index e86109c..f1faed3 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp @@ -152,6 +152,30 @@ return TRUE; } +/* < KJG 20240620 - #4942 ADD Start >*/ +void CDitGlassRawClient::ResetClientResultStep() +{ + if (isConnect() == FALSE) return; + + if (m_pGlassRawInfo) + { + m_pGlassRawInfo->m_ClientResultStep = APS_RES_None; + } +} + +emClientResult CDitGlassRawClient::GetClientResultStep() +{ + if (isConnect() == FALSE) return APS_RES_None; + + if (m_pGlassRawInfo) + { + return m_pGlassRawInfo->m_ClientResultStep; + } + + return APS_RES_None; +} +/* < KJG 20240620 - #4942 ADD End >*/ + emAOIProcStep CDitGlassRawClient::GetProcessStep() { if(isConnect() == FALSE) return APS_None; diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.h b/DitGlassRawMessenger/Extern/DitGlassRawClient.h index dfdfb4b..c66f391 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.h +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.h @@ -12,6 +12,8 @@ BOOL ConnectServer(); BOOL isConnect(){return m_hMapBasicInfo == NULL || m_hMapGlassData == NULL ? FALSE : TRUE;}; + emClientResult GetClientResultStep(); /* < KJG 20240620 - #4942 ADD >*/ + void ResetClientResultStep(); /* < KJG 20240620 - #4942 ADD >*/ emAOIProcStep GetProcessStep(); BOOL SetGlassLoading(); diff --git a/DitGlassRawMessenger/Extern/DitGlassRawStruct.h b/DitGlassRawMessenger/Extern/DitGlassRawStruct.h index a1c4a04..bb93482 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawStruct.h +++ b/DitGlassRawMessenger/Extern/DitGlassRawStruct.h @@ -27,6 +27,16 @@ RPT_AOICustom = 1000, }; }; + +/* < KJG 20240620 - #4942 ADD Start >*/ +enum emClientResult +{ + APS_RES_None = 0, + APS_RES_BinarySuccess, + APS_RES_BinaryFail +}; +/* < KJG 20240620 - #4942 ADD End >*/ + enum emAOIProcStep { APS_None = 0, @@ -638,6 +648,8 @@ size_t m_nGlassLoadingCount; emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 + // m_ClientResultStep : Binary File 생성 감지하기 위한 신호로 사용 + emClientResult m_ClientResultStep; /* < KJG 20240620 - #4942 ADD Start >*/ }; class CgrmGlassRawData diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h index 38f2a0c..55a2399 100644 --- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h +++ b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h @@ -27,6 +27,7 @@ #define REVIEW_OFFSET_CONFIGFILE_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\") //210805 #define REVIEW_OFFSET_CONFIGFILE_NAME _T("ReviewOffSet.cfg") #define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg") +#define MOTOR_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\MotorOffSet.cfg") /*< LYW 20220525 - #4158 ADD Start >*/ #define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig") /*< LYW 20220525 - #4158 ADD End >*/ diff --git a/ReviewSystem/ReviewSystem/DisplayMessage.cpp b/ReviewSystem/ReviewSystem/DisplayMessage.cpp index a223f03..8d59dea 100644 --- a/ReviewSystem/ReviewSystem/DisplayMessage.cpp +++ b/ReviewSystem/ReviewSystem/DisplayMessage.cpp @@ -34,7 +34,7 @@ { m_strLogPath = strPath; CString m_GlobalLogPath; - m_strLogFile.Format(_T("D:\\DIT_LogData\\%04d%02d%02d"), m_strLogPath, m_TimeLogFile.GetYear(), m_TimeLogFile.GetMonth(), m_TimeLogFile.GetDay()); + m_strLogFile.Format(_T("D:\\DIT_LogData\\%04d%02d%02d"), m_TimeLogFile.GetYear(), m_TimeLogFile.GetMonth(), m_TimeLogFile.GetDay()); CreateDirectory(m_strLogFile, NULL); CreateDirectory(m_strLogPath, NULL); diff --git a/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp b/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp index 2c98d09..f1faed3 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp +++ b/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp @@ -2,20 +2,15 @@ #include "DitGlassRawClient.h" CDitGlassRawClient::CDitGlassRawClient(void) - : m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER) +: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER) { m_hMapBasicInfo = NULL; m_hMapGlassData = NULL; - m_pDitGlassClient =NULL; + m_pGlassRawInfo = NULL; m_pGlassRawData = NULL; m_nLastCommandIdx = -1; - - m_pGlassData = NULL; - m_pBlockData = NULL; - m_pCellData = NULL; - m_pDefectData = NULL; } CDitGlassRawClient::~CDitGlassRawClient(void) @@ -77,7 +72,7 @@ } BOOL CDitGlassRawClient::ConnectGlassRawData() -{ +{ SIZE_T nGlassRawSharedSize = m_pGlassRawInfo->m_nGlassRawDataSize; if(m_hMapGlassData == NULL) @@ -105,7 +100,9 @@ m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + /*< KJG 20211024 - #3487 ADD Start >*/ m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; + /*< KJG 20211024 - #3487 ADD End >*/ return TRUE; } @@ -138,14 +135,14 @@ int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT; - if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId) + if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//둘이 같다는것은 서큘러 버퍼가 한바퀴 돌았다는것!! [김태현 2018/11/12] { - m_pGlassRawInfo->m_nCommandIdxRead++; + m_pGlassRawInfo->m_nCommandIdxRead++;//가장 오래된 명령 하나를 삭제한다. [김태현 2018/11/12] } m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd; m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam; - m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; + m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1수행전, 0실패, 1성공 [김태현 2018/11/13] m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId; @@ -154,6 +151,30 @@ return TRUE; } + +/* < KJG 20240620 - #4942 ADD Start >*/ +void CDitGlassRawClient::ResetClientResultStep() +{ + if (isConnect() == FALSE) return; + + if (m_pGlassRawInfo) + { + m_pGlassRawInfo->m_ClientResultStep = APS_RES_None; + } +} + +emClientResult CDitGlassRawClient::GetClientResultStep() +{ + if (isConnect() == FALSE) return APS_RES_None; + + if (m_pGlassRawInfo) + { + return m_pGlassRawInfo->m_ClientResultStep; + } + + return APS_RES_None; +} +/* < KJG 20240620 - #4942 ADD End >*/ emAOIProcStep CDitGlassRawClient::GetProcessStep() { @@ -172,7 +193,9 @@ if(isConnect() == FALSE) return FALSE; m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading; m_pGlassData->m_bStackRead = FALSE; + /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassData->m_bRawMergeRead = FALSE; + /*< KJG 20211024 - #3487 ADD End >*/ return SetCommand(grcSequenceGlassLoading); } @@ -192,7 +215,7 @@ BOOL CDitGlassRawClient::SetReviewEnd() { - if(isConnect() == FALSE) return FALSE; + if(isConnect() == FALSE) return FALSE; m_pGlassRawInfo->m_ClientProcStep = APS_ReviewEnd; return SetCommand(grcSequenceReviewEnd); } @@ -204,20 +227,10 @@ return SetCommand(grcSequenceCustomReviewDataRead); } -CDitGlassRawClient* CDitGlassRawClient::GetInstance() -{ - if(m_pDitGlassClient == NULL) - { - m_pDitGlassClient = new CDitGlassRawClient; - } - - return m_pDitGlassClient; -} - void CDitGlassRawClient::RemoveReviewDefects() { int nDefectNum = m_pGlassData->m_nDefectNum; - int nRightDefectNum = 0; + int nRightDefectNum = 0;//기준점 오른쪽에 위치한 결함 갯수 int nDefectDeleteNum = 0; for(int i=nDefectNum-1; i>=0; i--) { @@ -238,5 +251,3 @@ m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum; } - -CDitGlassRawClient* CDitGlassRawClient::m_pDitGlassClient; \ No newline at end of file diff --git a/ReviewSystem/ReviewSystem/DitGlassRawClient.h b/ReviewSystem/ReviewSystem/DitGlassRawClient.h index 3ad927e..c66f391 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawClient.h +++ b/ReviewSystem/ReviewSystem/DitGlassRawClient.h @@ -1,20 +1,19 @@ #pragma once #include "DitGlassRawStruct.h" -#include <afxmt.h> class CDitGlassRawClient { public: CDitGlassRawClient(void); ~CDitGlassRawClient(void); - -public: - static CDitGlassRawClient* GetInstance(); //cmark +public: BOOL ConnectServer(); BOOL isConnect(){return m_hMapBasicInfo == NULL || m_hMapGlassData == NULL ? FALSE : TRUE;}; + emClientResult GetClientResultStep(); /* < KJG 20240620 - #4942 ADD >*/ + void ResetClientResultStep(); /* < KJG 20240620 - #4942 ADD >*/ emAOIProcStep GetProcessStep(); BOOL SetGlassLoading(); @@ -25,22 +24,25 @@ BOOL SetReviewComtomize(); - void RemoveReviewDefects();//AOI占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싹곤옙, 占쏙옙占썰에占쏙옙 占쏙옙占쏙옙占쏙옙 User 혹占쏙옙 Reflow 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싼댐옙. + void RemoveReviewDefects();//AOI에서 생성한 디펙 정보를 제외하고, 리뷰에서 생성한 User 혹은 Reflow 결함을 제외한다. _grmDitMemInfo* GetGlassMeminfo(){return (_grmDitMemInfo*)m_pGlassRawInfo;}; _grmGlassData* GetGlassData(){return m_pGlassData;}; - _grmBlockData* GetBlockData(){return m_pBlockData;}; + _grmBlockData* GetBlockData(){return m_pBlockData;}; _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex];}; + /*< KJG 20211024 - #3487 ADD Start >*/ + _grmDefectData* GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; }; + /*< KJG 20211024 - #3487 ADD End >*/ - //占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占� [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과 파일 강제 쓰기 명령 [김태현 2018/11/12] BOOL WriteAOIRawFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占쏙옙占승뤄옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과파일 강제 바이너리 형태로 쓰기 [김태현 2018/11/12] BOOL WriteAOIRawBinFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占싻깍옙 + //결과파일 강제 바이너리 읽기 BOOL ReadAOIRawBinFile(); BOOL WriteReviewRawBinFile(); @@ -49,15 +51,16 @@ BOOL ConnectGlassRawInfo(); BOOL ConnectGlassRawData(); BOOL SetCommand(emGlassRawCommand nCmd); - static CDitGlassRawClient* m_pDitGlassClient; //cmark + protected: _grmGlassData* m_pGlassData; - _grmBlockData* m_pBlockData; + _grmBlockData* m_pBlockData; _grmCellData* m_pCellData; _grmDefectData* m_pDefectData; _grmDefectData* m_pStackData; + /*< KJG 20211024 - #3487 ADD Start >*/ _grmDefectData* m_pRawMergeData; - + /*< KJG 20211024 - #3487 ADD End >*/ protected: HANDLE m_hMapBasicInfo; HANDLE m_hMapGlassData; diff --git a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h index 41f203d..bb93482 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h +++ b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h @@ -27,6 +27,16 @@ RPT_AOICustom = 1000, }; }; + +/* < KJG 20240620 - #4942 ADD Start >*/ +enum emClientResult +{ + APS_RES_None = 0, + APS_RES_BinarySuccess, + APS_RES_BinaryFail +}; +/* < KJG 20240620 - #4942 ADD End >*/ + enum emAOIProcStep { APS_None = 0, @@ -129,7 +139,7 @@ int m_nDefectNumJudgeRV; int m_nDefectNumJudgeTR; int m_nDefectNumJudgePR; - int m_nDefectNumJudgePT; //< KEJ 20231123 - #4669 ADD > + int m_nDefectNumJudgePT; /* < KJG 20231124 - #4627 ADD >*/ /*< LHS 20211029 - #3783 MOD Start >*/ int m_nDefectNumJudgeLine; /*< LHS 20211029 - #3783 MOD End >*/ @@ -339,7 +349,7 @@ int m_nDefectNumJudgeRV; int m_nDefectNumJudgeTR; int m_nDefectNumJudgePR; - int m_nDefectNumJudgePT; //< KEJ 20231123 - #4669 ADD > + int m_nDefectNumJudgePT; /* < KJG 20231124 - #4627 ADD >*/ /*< LHS 20211029 - #3783 MOD Start >*/ int m_nDefectNumJudgeLine; /*< LHS 20211029 - #3783 MOD End >*/ @@ -638,6 +648,8 @@ size_t m_nGlassLoadingCount; emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 + // m_ClientResultStep : Binary File 생성 감지하기 위한 신호로 사용 + emClientResult m_ClientResultStep; /* < KJG 20240620 - #4942 ADD Start >*/ }; class CgrmGlassRawData diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp index 9ffdfdb..ee28e1c 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp @@ -53,6 +53,7 @@ #define AOIRAWBIN_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin" #define AOIRAWBIN_TEST_PATH "d:\\DIT_ResultData\\RawBin" +#define AOIRAWBIN_LOCAL_PATH "D:\\DIT_ResultData\\RawBin" #define AOIRAWBIN_NETWORK_DRIVE_PATH "Y:\\RawBin" enum CPJT_MeasureMode { CPJT_ModeAuto = 0, CPJT_ModeManual }; @@ -1899,6 +1900,24 @@ // if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT)) // m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!")); + /* < KEJ 20240621 - #4942 ADD Start > */ + STransferData* pTransferData = m_pSP2P->ISP2P_GetCurrentTransferData(); + CString strGlassStepIdTemp = pTransferData->strStepID; + CString strGlassIDTemp = pTransferData->strGlassID; + + CString strFileName; + strFileName.Format(_T("%s\\%s_%s.bin"), AOIRAWBIN_LOCAL_PATH, strGlassIDTemp, strGlassStepIdTemp); + + CFile file; + if (file.Open(strFileName, CFile::modeRead)) + { + file.Close(); + DeleteFile(strFileName); + g_pLog->DisplayMessage(_T("[SequenceProcessor] Delete RAW BIN File [%s]"), strFileName); + } + file.Close(); + /* < KEJ 20240621 - #4942 ADD End > */ + 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")); @@ -3083,159 +3102,175 @@ BOOL CSequenceProcessor_CPJT::FindRawBinFile(CString strFileName) { - /* < KJG 20230605 - #4517 ADD Start >*/ - auto FuncStringSplit = [](string Sentence, char Separator, vector<string>& vec) - { - stringstream ss(Sentence); - string tmp; + /* < KEJ 20240621 - #4942 MOD Start > */ +// /* < KJG 20230605 - #4517 ADD Start >*/ +// auto FuncStringSplit = [](string Sentence, char Separator, vector<string>& vec) +// { +// stringstream ss(Sentence); +// string tmp; +// +// while (getline(ss, tmp, Separator)) { +// vec.push_back(tmp); +// } +// }; +// /* < KJG 20230605 - #4517 ADD End >*/ +// +// //210128 +// CString strFilePath = _T(""); +// //pData->GetGlassData()->m_strFileName; +// //strcpy(pData->GetGlassData()->m_strPath, AOIRAWBIN_PATH); +// //strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); +// +// strFilePath = AOIRAWBIN_PATH; +// +// CString strFindFile; +// int nCloseTime = 600 * 100000;//sec +// int nReTryTime = 30; +// { +// CTime tmReviewLoading = CTime::GetCurrentTime(); +// CString strWild; +// //strWild.Format("%s\\%s_*.bin", strFilePath, strFileName); +// CakFileUtil akFileFinder; +// while (nReTryTime--) +// { +// //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER START +// if (nReTryTime%2 == 0) +// { +// strFilePath = AOIRAWBIN_NETWORK_DRIVE_PATH; +// } +// else strFilePath = AOIRAWBIN_PATH; +// +// //strWild.Format("%s\\%s_*.bin", strFilePath, strFileName); /* < KJG 20230605 - #4517 DEL >*/ +// //akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); /* < KJG 20230605 - #4517 DEL >*/ +// +// /* < KJG 20230605 - #4517 ADD Start >*/ +// auto timeStart = chrono::steady_clock::now(); +// g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Start Find Path = %s, File Name = %s, TryCount = %d"), strFilePath, strFileName, 30 - nReTryTime); +// +// std::error_code err; +// vector<std::string> vtFileList; +// fs::path pathBinFile(strFilePath.GetBuffer(0)); +// int constexpr SaperatorCount = 4, DateSize = 8, TimeSize = 6; // GLASSID_STEPID_'YYYYMMDD'_'HHMMSS' �룷留� �솗�씤 +// for (auto iter = fs::directory_iterator(pathBinFile, err); iter != fs::directory_iterator(); iter++) +// { +// fs::path p = iter->path(); +// if (p.filename().stem().string().find(strFileName) != string::npos) +// { +// std::string strSearchFile = p.filename().stem().string(); +// if (p.extension().string() == _T(".bin")) +// { +// vtFileList.push_back(p.filename().stem().string()); +// } +// } +// } +// +// for (auto iter = vtFileList.begin(); iter != vtFileList.end(); ) +// { +// vector<string> vtSplit; +// FuncStringSplit(*iter, _T('_'), vtSplit); +// +// if (vtSplit.size() == SaperatorCount && vtSplit[2].size() == DateSize && vtSplit[3].size() == TimeSize) +// { +// iter++; +// } +// else +// { +// vtFileList.erase(iter); +// } +// } +// +// sort(vtFileList.begin(), vtFileList.end(), greater<>()); // 理쒖떊�닚�쑝濡� �젙�젹 +// +// string strPickFileName = vtFileList.empty() ? _T("NULL") : vtFileList.front(); +// g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] End File Count = %d, Pick File Name = %s, Tact = %d, ErrorCode = %d, ErrorMsg = %s"), vtFileList.size(), strPickFileName.c_str(), chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - timeStart).count(),err.value(), err.message().c_str()); +// +// if (vtFileList.empty() == FALSE) +// { +// vector<string> vtSplit; +// FuncStringSplit(strPickFileName, _T('_'), vtSplit); +// +// CTime tmTemp(stoi(vtSplit[2].substr(0, 4)), stoi(vtSplit[2].substr(4, 2)), stoi(vtSplit[2].substr(6, 2)), stoi(vtSplit[3].substr(0, 2)), stoi(vtSplit[3].substr(2, 2)), stoi(vtSplit[3].substr(4, 2))); +// CTimeSpan tmSpan = tmReviewLoading - tmTemp; +// +// if (tmSpan < nCloseTime) +// { +// strFindFile = strPickFileName.c_str(); +// g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Find File Success")); +// break; +// } +// } +// /* < KJG 20230605 - #4517 ADD End >*/ +// +// /* < KJG 20230605 - #4517 DEL Start >*/ +// //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER END +// //VECFINDDATA* pFindData = akFileFinder.getFindData(); +// //int nFileNamePos = strlen(akFileFinder.getProcessPath()); +// //std::map<LONGLONG, CString> mapSpanFileName; +// //for (int i = 0; i < pFindData->size(); i++) +// //{ +// // char* pFileName = &((*pFindData)[i]).name[nFileNamePos]; +// // { +// // CakParser parser; +// // parser.process(pFileName, "_."); +// // if (parser.getTokNum() < 4) continue; +// // +// // if (parser.getTokNum() >= 6) continue; // 0401 +// // +// // int nDataTime[8] = {}; +// // { +// // int nTokIndex = 0; +// // const char* pGlassId = parser.getTokStr(nTokIndex++); +// // const char* pStepId = parser.getTokStr(nTokIndex++); +// // char* pDate = &pFileName[parser.getTokPos(nTokIndex++)]; +// // char* pTime = &pFileName[parser.getTokPos(nTokIndex++)]; +// // +// // nDataTime[0] = (pDate[0] - '0') * 1000 + (pDate[1] - '0') * 100 + (pDate[2] - '0') * 10 + (pDate[3] - '0') * 1; +// // nDataTime[1] = (pDate[4] - '0') * 10 + (pDate[5] - '0') * 1; +// // nDataTime[2] = (pDate[6] - '0') * 10 + (pDate[7] - '0') * 1; +// // nDataTime[3] = (pTime[0] - '0') * 10 + (pTime[1] - '0') * 1; +// // nDataTime[4] = (pTime[2] - '0') * 10 + (pTime[3] - '0') * 1; +// // nDataTime[5] = (pTime[4] - '0') * 10 + (pTime[5] - '0') * 1; +// // } +// // +// // CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5]); +// // CTimeSpan tmSpan = tmReviewLoading - tmTemp; +// // mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName)); +// // } +// //} +// // +// //if (mapSpanFileName.empty() == FALSE) +// //{ +// // if (mapSpanFileName.begin()->first < nCloseTime) +// // { +// // strFindFile = mapSpanFileName.begin()->second; +// // break; +// // } +// //} +// // +// //akFileFinder.clear(); +// /* < KJG 20230605 - #4517 DEL End >*/ +// +// +// Sleep(100); +// } +// } +// if (strFindFile.IsEmpty()) return FALSE; - while (getline(ss, tmp, Separator)) { - vec.push_back(tmp); - } - }; - /* < KJG 20230605 - #4517 ADD End >*/ - - //210128 - CString strFilePath = _T(""); - //pData->GetGlassData()->m_strFileName; - //strcpy(pData->GetGlassData()->m_strPath, AOIRAWBIN_PATH); - //strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - - strFilePath = AOIRAWBIN_PATH; - + CString strFilePath = _T(""); + + strFilePath = AOIRAWBIN_LOCAL_PATH; CString strFindFile; - int nCloseTime = 600 * 100000;//sec - int nReTryTime = 30; + strFindFile.Format(_T("%s\\%s.bin"), strFilePath, strFileName); + + CFile file; + if (!file.Open(strFindFile, CFile::modeRead)) { - CTime tmReviewLoading = CTime::GetCurrentTime(); - CString strWild; - //strWild.Format("%s\\%s_*.bin", strFilePath, strFileName); - CakFileUtil akFileFinder; - while (nReTryTime--) - { - //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER START - if (nReTryTime%2 == 0) - { - strFilePath = AOIRAWBIN_NETWORK_DRIVE_PATH; - } - else strFilePath = AOIRAWBIN_PATH; - - //strWild.Format("%s\\%s_*.bin", strFilePath, strFileName); /* < KJG 20230605 - #4517 DEL >*/ - //akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); /* < KJG 20230605 - #4517 DEL >*/ - - /* < KJG 20230605 - #4517 ADD Start >*/ - auto timeStart = chrono::steady_clock::now(); - g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Start Find Path = %s, File Name = %s, TryCount = %d"), strFilePath, strFileName, 30 - nReTryTime); - - std::error_code err; - vector<std::string> vtFileList; - fs::path pathBinFile(strFilePath.GetBuffer(0)); - int constexpr SaperatorCount = 4, DateSize = 8, TimeSize = 6; // GLASSID_STEPID_'YYYYMMDD'_'HHMMSS' �룷留� �솗�씤 - for (auto iter = fs::directory_iterator(pathBinFile, err); iter != fs::directory_iterator(); iter++) - { - fs::path p = iter->path(); - if (p.filename().stem().string().find(strFileName) != string::npos) - { - std::string strSearchFile = p.filename().stem().string(); - if (p.extension().string() == _T(".bin")) - { - vtFileList.push_back(p.filename().stem().string()); - } - } - } - - for (auto iter = vtFileList.begin(); iter != vtFileList.end(); ) - { - vector<string> vtSplit; - FuncStringSplit(*iter, _T('_'), vtSplit); - - if (vtSplit.size() == SaperatorCount && vtSplit[2].size() == DateSize && vtSplit[3].size() == TimeSize) - { - iter++; - } - else - { - vtFileList.erase(iter); - } - } - - sort(vtFileList.begin(), vtFileList.end(), greater<>()); // 理쒖떊�닚�쑝濡� �젙�젹 - - string strPickFileName = vtFileList.empty() ? _T("NULL") : vtFileList.front(); - g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] End File Count = %d, Pick File Name = %s, Tact = %d, ErrorCode = %d, ErrorMsg = %s"), vtFileList.size(), strPickFileName.c_str(), chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - timeStart).count(),err.value(), err.message().c_str()); - - if (vtFileList.empty() == FALSE) - { - vector<string> vtSplit; - FuncStringSplit(strPickFileName, _T('_'), vtSplit); - - CTime tmTemp(stoi(vtSplit[2].substr(0, 4)), stoi(vtSplit[2].substr(4, 2)), stoi(vtSplit[2].substr(6, 2)), stoi(vtSplit[3].substr(0, 2)), stoi(vtSplit[3].substr(2, 2)), stoi(vtSplit[3].substr(4, 2))); - CTimeSpan tmSpan = tmReviewLoading - tmTemp; - - if (tmSpan < nCloseTime) - { - strFindFile = strPickFileName.c_str(); - g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Find File Success")); - break; - } - } - /* < KJG 20230605 - #4517 ADD End >*/ - - /* < KJG 20230605 - #4517 DEL Start >*/ - //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER END - //VECFINDDATA* pFindData = akFileFinder.getFindData(); - //int nFileNamePos = strlen(akFileFinder.getProcessPath()); - //std::map<LONGLONG, CString> mapSpanFileName; - //for (int i = 0; i < pFindData->size(); i++) - //{ - // char* pFileName = &((*pFindData)[i]).name[nFileNamePos]; - // { - // CakParser parser; - // parser.process(pFileName, "_."); - // if (parser.getTokNum() < 4) continue; - // - // if (parser.getTokNum() >= 6) continue; // 0401 - // - // int nDataTime[8] = {}; - // { - // int nTokIndex = 0; - // const char* pGlassId = parser.getTokStr(nTokIndex++); - // const char* pStepId = parser.getTokStr(nTokIndex++); - // char* pDate = &pFileName[parser.getTokPos(nTokIndex++)]; - // char* pTime = &pFileName[parser.getTokPos(nTokIndex++)]; - // - // nDataTime[0] = (pDate[0] - '0') * 1000 + (pDate[1] - '0') * 100 + (pDate[2] - '0') * 10 + (pDate[3] - '0') * 1; - // nDataTime[1] = (pDate[4] - '0') * 10 + (pDate[5] - '0') * 1; - // nDataTime[2] = (pDate[6] - '0') * 10 + (pDate[7] - '0') * 1; - // nDataTime[3] = (pTime[0] - '0') * 10 + (pTime[1] - '0') * 1; - // nDataTime[4] = (pTime[2] - '0') * 10 + (pTime[3] - '0') * 1; - // nDataTime[5] = (pTime[4] - '0') * 10 + (pTime[5] - '0') * 1; - // } - // - // CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5]); - // CTimeSpan tmSpan = tmReviewLoading - tmTemp; - // mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName)); - // } - //} - // - //if (mapSpanFileName.empty() == FALSE) - //{ - // if (mapSpanFileName.begin()->first < nCloseTime) - // { - // strFindFile = mapSpanFileName.begin()->second; - // break; - // } - //} - // - //akFileFinder.clear(); - /* < KJG 20230605 - #4517 DEL End >*/ - - - Sleep(100); - } + g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Bin File Is Not Collect [%s]"), strFindFile); + return FALSE; } + file.Close(); - if (strFindFile.IsEmpty()) return FALSE; + /* < KEJ 20240621 - #4942 MOD End > */ return TRUE; } -- Gitblit v1.9.3