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) DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.h
@@ -9,7 +9,7 @@ virtual ~CAnaResultFile(void); public: BOOL MakeAnaFile(CgrmGlassRawData* pData); BOOL MakeAnaFile(CgrmGlassRawData* pData, CString strPath); 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> */ /* <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 >*/ 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 >*/ }; 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; } 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 >*/ }; 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] } 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; 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(); 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 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 >*/ 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); 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; 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; 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 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; }