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파일 제거 --- DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp | 468 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 345 insertions(+), 123 deletions(-) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp index fc064a2..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\\" @@ -35,7 +37,9 @@ /* <LJC 20211122 : #3820 ADD Start> */ #define NETWORK_AOIRAWMERGELOCAL_PATH "D:\\DIT_ResultData\\RawMerge" /* <LJC 20211122 : #3820 ADD End> */ - +/* <KMH 20220407 : #4053 ADD Start> */ +#define LOCAL_LOGDATA_PATH "D:\\DIT_LogData" +/* <KMH 20220407 : #4053 ADD End> */ char* g_pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; void _TimeDelay(int delay) @@ -56,6 +60,30 @@ Sleep(10); } } +/* < KJG 20221110 - #4373 ADD Start >*/ +auto CellIDSortFunc = [](const _grmCellData* lhs, const _grmCellData* rhs) { + // '0A' = 0, '0B' = 1, ..., '0Z' = 25, '00' = 26, ..., '09' = 35, '1A' = 36, ... + const int nAlphaSet = 'Z' - 'A' + 1; + const int nNumSet = '9' - '0' + 1; + const int nAlphaNumSet = nAlphaSet + nNumSet; + + CString str = lhs->m_strCellName; + char lhs_1st = str.Mid(str.GetLength() - 2, 1).GetAt(0); + char lhs_2st = str.Mid(str.GetLength() - 1, 1).GetAt(0); + + str = rhs->m_strCellName; + char rhs_1st = str.Mid(str.GetLength() - 2, 1).GetAt(0); + char rhs_2st = str.Mid(str.GetLength() - 1, 1).GetAt(0); + + auto GetCellValueFrom2stCellID = [&](char c) -> int { + if (c >= 'A' && c < 'Z') // 'A' �뒗 0遺��꽣 + return c - 'A'; + else if (c >= '0' && c <= '9') // '0' �� 26 遺��꽣 + return (c - '0') + nAlphaSet; + }; + return (lhs_1st - '0') * nAlphaNumSet + GetCellValueFrom2stCellID(lhs_2st) < (rhs_1st - '0') * nAlphaNumSet + GetCellValueFrom2stCellID(rhs_2st); +}; +/* < KJG 20221110 - #4373 ADD End >*/ CGlassRawCPJT::CGlassRawCPJT(void) { @@ -63,6 +91,21 @@ 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; + SYSTEMTIME st; + GetLocalTime(&st); + char strLogFolderPath [256]; + sprintf(strLogFolderPath, "%s\\%02d%02d%02d", LOCAL_LOGDATA_PATH,st.wYear, st.wMonth, st.wDay); + + BOOL bFind = FileFinder.FindFile(strLogFolderPath); + if (!bFind) + { + CreateDirectory(strLogFolderPath, NULL); + } + /* <KMH 20220407 : #4053 ADD End> */ m_MuraResultFile.readOptionFile("C:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg"); m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile); @@ -76,6 +119,8 @@ BOOL CGlassRawCPJT::SequenceGlassLoading( CgrmGlassRawData* pData ) { + + AKLOG("Sequence : Glass Loading Signal Start ");/* <KMH 20220407 : #4053 ADD > */ SetEnableFtpAck(FALSE); m_nRawMergeIdx = 0; if(m_StackResult.getStackUse()) @@ -83,21 +128,31 @@ CString strStackFileLocalPath; strStackFileLocalPath.Format("%s\\%s", NETWORK_AOISTACKLOCAL_PATH, pData->GetGlassData()->m_strGlassID); - + CFileFind File; - + if (File.FindFile(strStackFileLocalPath)) { File.FindNextFile(); strStackFileLocalPath = File.GetFilePath(); - DeleteFile(strStackFileLocalPath); - Sleep(10); + /* <KMH 20220407 : #4053 MOD Start> */ + if (DeleteFile(strStackFileLocalPath)) + /*< SWK 20220413 - #4053 MOD Start >*/ +// { +// AKLOG(" Fucntion : Delete Stack File Sucess[%s] ", strStackFileLocalPath); +// } +// /* <KMH 20220407 : #4053 MOD End> */ +// Sleep(10); +// } +// else +// { +// AKLOG(" Function : Delete Stack File Fail [%s]", strStackFileLocalPath);/* <KMH 20220407 : #4053 MOD > */ +// } + AKLOG(" Function : Delete Stack File Sucess[%s] ", strStackFileLocalPath); + else + AKLOG(" Function : Delete Stack File Fail [%s]", strStackFileLocalPath); } - else - { - AKLOG("Delete Stack File Fail [%s]", strStackFileLocalPath); - } - + /*< SWK 20220413 - #4053 MOD End >*/ //201218 CJH - Stack Download �떆�룄 SendMessageFTPDownloadStack(pData->GetGlassData()); @@ -113,45 +168,66 @@ { File.FindNextFile(); strRawFileLocalPath = File.GetFilePath(); - DeleteFile(strRawFileLocalPath); - Sleep(10); + /* <KMH 20220407 : #4053 MOD Start> */ + if (DeleteFile(strRawFileLocalPath)) + /*< SWK 20220413 - #4053 MOD Start >*/ +// { +// AKLOG(" Fucntion : Delete RawMerge File Sucess[%s] ", strRawFileLocalPath); +// } +// /* <KMH 20220407 : #4053 MOD End> */ +// Sleep(10); +// } +// else +// { +// AKLOG(" Function : Delete RawMerge File Fail [%s]", strRawFileLocalPath); /* <KMH 20220407 : #4053 ADD > */ +// } + AKLOG(" Function : Delete RawMerge File Sucess[%s] ", strRawFileLocalPath); + else + AKLOG(" Function : Delete RawMerge File Fail [%s]", strRawFileLocalPath); } + /*< SWK 20220413 - #4053 MOD End >*/ SetEnableFtpAck(TRUE); DownLoadMergeFile(pData); } /* <LJC 20211122 : #3820 ADD End> */ /*< KJG 20211024 - #3487 ADD End >*/ + AKLOG("Sequence : Glass Loading Signal End "); return TRUE; } BOOL CGlassRawCPJT::SequenceInspectEnd( CgrmGlassRawData* pData ) { + AKLOG(" Sequence : InspectionEnd Signal Start"); /* <KMH 20220407 : #4053 ADD > */ + m_bReviewEndCheck = FALSE; //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 �뜲�씠�꽣 �쟻�젣 �젣嫄� �슂泥� @@ -191,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) { @@ -216,9 +290,15 @@ fclose(pf); } } + else + { + SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);/* <KMH 20220407 : #4053 ADD > */ + } + /* <KYH 211129 : #3806 ADD End> */ - SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);//0405nwh + + AKLOG(" Sequence : InspectionEnd Signal End"); /* <KMH 20220407 : #4053 ADD > */ return TRUE; } @@ -229,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)); @@ -347,6 +430,7 @@ BOOL CGlassRawCPJT::SequenceFtpUpload(char* pRawFilePathName) { + AKLOG(" Sequence : FTP Upload Signal Start "); // Manual Upload 湲곕뒫 [21-02-05 KJG] CTime tmFileCreate; _grmGlassData GlassData; @@ -419,7 +503,7 @@ fclose(pf); - + AKLOG(" Sequence : FTP Upload Signal End "); return TRUE; } @@ -430,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"); @@ -492,20 +579,32 @@ ////////////////////////////////////////////////////////////////////////// //CELL & DEFECT DATA + /* < KJG 20221110 - #4373 ADD Start >*/ + vector<_grmCellData*> vtSortCellData; + for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) + vtSortCellData.push_back(pData->GetCellData(iCell)); + + sort(vtSortCellData.begin(), vtSortCellData.end(), CellIDSortFunc); + /* < KJG 20221110 - #4373 ADD End >*/ { - //make { for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) { - _grmCellData* pCell = pData->GetCellData(iCell); + /* < KJG 20221110 - #4373 MOD Start >*/ + //_grmCellData* pCell = pData->GetCellData(iCell); + _grmCellData* pCell = vtSortCellData[iCell]; + /* < KJG 20221110 - #4373 MOD End >*/ makeDataCell(strLine, pData, pCell); fprintf(pf, "%s\n", strLine); for (int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) { _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if (pDefect->m_nCellIdx != iCell) continue; + /* < KJG 20221110 - #4373 MOD Start >*/ + //if (pDefect->m_nCellIdx != iCell) continue; + if (pDefect->m_nCellIdx != pCell->m_nCellID) continue; + /* < KJG 20221110 - #4373 MOD End >*/ //210203 CJH - CutOff ���긽 寃곌낵�뙆�씪 �옉�꽦 �젣�쇅 if (pDefect->m_bDefectCutoff == TRUE) continue; @@ -534,10 +633,33 @@ CString strValue; /*< KJG 20211229 - #3846 MOD Start >*/ //strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT"; +/* < KMH 20220613 : #3957 MOD Start > */ + /* <LJC 20220425 : #3957 MOD Start> */ + // strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //56ea strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT"; //56ea + for (int i = 0; i < RAW_CODE_MAX; i++) + { + CString strDefectCode = pGlassData->m_strRawDefectCode[i]; + if (strDefectCode == "") { strDefectCode = "*"; } + strValue += " " + strDefectCode; + } + /* <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"; - strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT"; //31ea /* <KYH 211129 : #3796 MOD Start> */ +/* < KMH 20220614 : #3957 MOD Start > */ + /* <LJC 20220425 : #3957 MOD Start> */ + //strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //31ea /* <KYH 211129 : #3796 MOD Start> */ + strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT"; //56ea + for (int i = 0; i < RAW_CODE_MAX; i++) + { + CString strDefectCode = pGlassData->m_strRawDefectCode[i]; + if (strDefectCode == "") { strDefectCode = "*"; } + strValue += " " + strDefectCode; + } + /* <LJC 20220425 : #3957 MOD End> */ +/* < KMH 20220614 : #3957 MOD End > */ strLine += strValue; strLine += "\n"; strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE LINE_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea strLine += strValue; @@ -781,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 寃고븿�� �쟾泥닿컻�닔�뿉�꽌 �젣�쇅�빐以��떎. @@ -926,6 +1057,22 @@ { SPRINTRAW(12, "UNUSE"); } + /* <LJC 20220425 : #3957 ADD Start> */ + for (int i = 0; i < RAW_CODE_MAX; i++) + { + if (pGlassData->m_nDefectCode[i] >= 0) + { + SPRINTRAW(12, "%d", pGlassData->m_nDefectCode[i]); + } + else + { + SPRINTRAW(12, "*"); + } + } + /* <LJC 20220425 : #3957 ADD End> */ + + // B_DEFECT(Before T_DEFECT) �븘�꽣留� �쟾 寃고븿 �닔�웾 + SPRINTRAW(12, "%d", pGlassData->m_nDefectNum); /* < KJG 20240620 - #4942 ADD >*/ SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] } @@ -967,7 +1114,10 @@ SPRINTRAW(8, "SUBPANEL"); // 03 12 SUBPANELID // Subpanel ID //SPRINTRAW(12, "%d", pCellData->m_nCellID); - SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36]); + /* < KMH 20220609 : #4183 MOD Start > */ + //SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36]); + SPRINTRAW(12, "%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName); + /* < KMH 20220609 : #4183 MOD End > */ // 湲��씪�뒪 �썝�젏 湲곗� Y醫뚰몴 諛섎� // 肄붾꼫而� 湲곗��쑝濡� 寃곌낵�뙆�씪 醫뚰몴媛� �깮�꽦�릺�뒗�뜲 怨좉컼�궗�뿉 紐낇솗�븳 �솗�씤 �븘�슂 @@ -1052,7 +1202,19 @@ // 31 6 NO_DEFECT 異붽� SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeND); //KYH ND �뜲�씠�꽣 異붽� /* <KYH 211129 : #3796 MOD End> */ - + /* <LJC 20220425 : #3957 ADD Start> */ + for (int i = 0; i < RAW_CODE_MAX; i++) + { + if (pCellData->m_nDefectCode[i] >= 0) + { + SPRINTRAW(12, "%d", pCellData->m_nDefectCode[i]); + } + else + { + SPRINTRAW(12, "*"); + } + } + /* <LJC 20220425 : #3957 ADD End> */ SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] } @@ -1110,7 +1272,10 @@ // 02 6 DEFECT // DEFECT SPRINTRAW(6, "DEFECT"); // 03 12 ID // Subpanel ID - SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefectData->m_nCellIdx / 36, g_pCellCode[pDefectData->m_nCellIdx % 36]); + /* < KMH 20220609 : #4183 MOD Start > */ + //SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefectData->m_nCellIdx / 36, g_pCellCode[pDefectData->m_nCellIdx % 36]); + SPRINTRAW(12, "%s%s", pData->GetGlassData()->m_strGlassID, pDefectData->m_strCellName); + /* < KMH 20220609 : #4183 MOD End > */ // 04 5 DEF_NO // Defect Number of Panel // RAW �뙆�씪�슜 Defect Index //SPRINTRAW(5, "%d", pDefectData->m_nDefectIdx); @@ -1202,10 +1367,13 @@ } // 16 2 STACK_COUNT // Count of Defect detected step SPRINTRAW(2, "%2d", pDefectData->m_nStackStepCount); - // 17 60 STACK_STEP // Flow(Step) of defect detection + // 17 60 -> 400 STACK_STEP // Flow(Step) of defect detection if (strlen(pDefectData->m_strStackFirst)) { - SPRINTRAW(60, "%s", pDefectData->m_strStackFirst); + /* < KMH 20220712 : #4230 MOD Start > */ + //SPRINTRAW(60, "%s", pDefectData->m_strStackFirst); + SPRINTRAW(400, "%s", pDefectData->m_strStackFirst); + /* < KMH 20220712 : #4230 MOD End > */ } else { @@ -1580,10 +1748,10 @@ cds.lpData = &upParam; DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 30000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - + if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE) + AKLOG(" FunCtion FTP : RAW File Upload Signal Fail[%d]", FTPCMD_RAW);/* <KMH 20220407 : #4053 ADD > */ + else + AKLOG(" FunCtion FTP : RAW File Upload Signal Sucess[%d]", FTPCMD_RAW);/* <KMH 20220407 : #4053 ADD > */ } void CGlassRawCPJT::SendMessageFTPDownloadStack( _grmGlassData* pGlassData ) @@ -1622,9 +1790,19 @@ cds.lpData = &upParam; DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } + if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE) + /*< SWK 20220413 - #4053 MOD Start >*/ +// { +// AKLOG(" Fucntion FTP : Stack File Download Signal Fail[%d]", FTPCMD_STACK);/* <KMH 20220407 : #4053 ADD > */ +// } +// else +// { +// AKLOG(" Fucntion FTP : Stack File Download Signal Sucess[%d]", FTPCMD_STACK);/* <KMH 20220407 : #4053 ADD > */ +// } + AKLOG(" Function FTP : Stack File Download Signal Fail[%d]", FTPCMD_STACK); + else + AKLOG(" Function FTP : Stack File Download Signal Success[%d]", FTPCMD_STACK); + /*< SWK 20220413 - #4053 MOD End >*/ } void CGlassRawCPJT::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData ) @@ -1662,9 +1840,19 @@ cds.lpData = &upParam; DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } + if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE) + /*< SWK 20220413 - #4053 MOD Start >*/ +// { +// AKLOG(" Fucntion FTP : RawMerge File Download Signal Sucess[%d]", FTPCMD_RAWMERGE);/* <KMH 20220407 : #4053 ADD > */ +// } +// else +// { +// AKLOG(" Fucntion FTP : RawMerge File Download Signal Fail[%d]", FTPCMD_RAWMERGE);/* <KMH 20220407 : #4053 ADD > */ +// } + AKLOG(" Function FTP : RawMerge File Download Signal Fail[%d]", FTPCMD_RAWMERGE); + else + AKLOG(" Function FTP : RawMerge File Download Signal Success[%d]", FTPCMD_RAWMERGE); + /*< SWK 20220413 - #4053 MOD End >*/ /*< KJG 20211024 - #3487 ADD End >*/ } @@ -1704,9 +1892,19 @@ cds.lpData = &upParam; DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } + if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE) + /*< SWK 20220413 - #4053 MOD Start >*/ +// { +// AKLOG(" Fucntion FTP : Image Upload Signla Sucess[%d]", sort);/* <KMH 20220407 : #4053 ADD > */ +// } +// else +// { +// AKLOG(" Fucntion FTP : Image Upload Signla Fail[%d]", sort);/* <KMH 20220407 : #4053 ADD > */ +// } + AKLOG(" Function FTP : Image Upload Signal Fail[%d]", sort); + else + AKLOG(" Function FTP : Image Upload Signal Success[%d]", sort); + /*< SWK 20220413 - #4053 MOD End >*/ } @@ -1760,9 +1958,20 @@ cds.lpData = &upParam; DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } + if (SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 5000, (PDWORD_PTR)(dwReturn)) == FALSE) + /*< SWK 20220413 - #4053 MOD Start >*/ +// { +// AKLOG(" Fucntion FTP : Index File Upload Signla Sucess[%d]", FTPCMD_INDEX);/* <KMH 20220407 : #4053 ADD > */ +// } +// else +// { +// AKLOG(" Fucntion FTP : Index File Upload Signla Fail[%d]", FTPCMD_INDEX);/* <KMH 20220407 : #4053 ADD > */ +// } + AKLOG(" Function FTP : Index File Upload Signal Fail[%d]", FTPCMD_INDEX); + else + AKLOG(" Function FTP : Index File Upload Signal Success[%d]", FTPCMD_INDEX); + /*< SWK 20220413 - #4053 MOD End >*/ + return TRUE; } @@ -1898,12 +2107,13 @@ sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); + CString strTime; CString strServerSubRawFilePath= NULL; CString strServerSubRawFileName = NULL; { strServerSubRawFilePath += NETWORK_AOIRAWFILE_SUB_PATH; - CString strTime; + CTime CurrTime = m_tmFileCreateTime; strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); @@ -1939,6 +2149,16 @@ fprintf(pf, "SUMPATH= \n"); fclose(pf); } + /* < KJG 20230220 - #4403 ADD Start >*/ + // BLUE �꽕鍮� D_COLL 誘몃낫怨� �썝�씤 遺꾩꽍�쓣 �쐞�븳 Result_info.ini �뙆�씪 諛깆뾽 �깮�꽦 + CString strPathBackUpDir, strPathBackUpFile; + strPathBackUpDir.Format(_T("%s%s"), LOCAL_RAWPATH_INFO_INI_PATH, _T("ResultInfoBackUpFile")); + strPathBackUpFile.Format(_T("%s_%s.ini"), strGlassID, strTime); + + CreateDirectory(strPathBackUpDir, NULL); + strPathBackUpFile.Format("%s\\%s", strPathBackUpDir, strPathBackUpFile); + CopyFile(strRawFilePathName, strPathBackUpFile, FALSE); + /* < KJG 20230220 - #4403 ADD End >*/ } break; case FTPCMD_STACK: @@ -2079,6 +2299,8 @@ /* < KMH 20220311 : #3954 ADD End > */ case Judge_Unknown: sStr.Format("OK");//sStr.Format("Unknown"); //Unknown�룄 �씪�떒 OK break; + case Judge_SR: sStr.Format("SR"); /* < KJG 20221107 - #4360 ADD >*/ + break; default: sStr.Format("OK");//sStr.Format("Ets"); break; } -- Gitblit v1.9.3