| | |
| | | #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\\" |
| | |
| | | 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; |
| | |
| | | //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 데이터 적제 제거 요청 |
| | | |
| | |
| | | // 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) |
| | | { |
| | |
| | | |
| | | //여기에서 라인별로 파일명, 혹은 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)); |
| | |
| | | |
| | | 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"); |
| | |
| | | /* <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> */ |
| | |
| | | , 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 결함은 전체개수에서 제외해준다. |
| | |
| | | } |
| | | } |
| | | /* <LJC 20220425 : #3957 ADD End> */ |
| | | |
| | | // B_DEFECT(Before T_DEFECT) 필터링 전 결함 수량 |
| | | SPRINTRAW(12, "%d", pGlassData->m_nDefectNum); /* < KJG 20240620 - #4942 ADD >*/ |
| | | |
| | | SPRINTRAWEND; //중요!!! 젤 마지막에 꼭 있어야함!!!(삭제금지) [김태현2020/9/23] |
| | | } |
| | | |