#include "StdAfx.h" #include "GlassRawRTMS.h" #include "akLoggerExt.h" #include "GlassRawCSOT.h" #include "MacroResultFile.h" #define RTMSTEMPPATH _T("D:\\DitRtms\\Data\\TempFile\\") #define RTMSRAWPATH _T("D:\\DitRtms\\Data\\RawFile\\") #define DEFECTPATH _T("D:\\Image\\Defect") #define RTMSIMAGEPATH _T("D:\\DitRtms\\Data\\ReviewImage\\") char* g_pCellCode2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; //enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size Ãß°¡ //enum DefectLocation { DefectLoc_Pattern = 0, DefectLoc_Crack, DefectLoc_BM, DefectLoc_ASG, DefectLoc_PAD, DefectLoc_C2C, DefectLoc_EdgeLine, DefectLoc_Proj, DefectLoc_Chip, DefectLoc_Corner }; //enum SERVER_DefectType { DefectType_TBlack = 0, DefectType_TWhite, DefectType_RBlack, DefectType_RWhite, DefectType_BBlack, DefectType_BWhite, DefectType_Unknown }; //enum SERVER_DefectSubType { DefectSubType_Normal = 0, DefectSubType_MC, DefectSubType_Mask, DefectSubType_Common, DefectSubType_NoDefect }; CGlassRawRTMS::CGlassRawRTMS(void) { } CGlassRawRTMS::~CGlassRawRTMS(void) { } BOOL CGlassRawRTMS::SequenceGlassLoading( CgrmGlassRawData* pData ) { return TRUE; } BOOL CGlassRawRTMS::SequenceInspectEnd( CgrmGlassRawData* pData ) { WriteAOIFile(pData); return TRUE; } BOOL CGlassRawRTMS::SequenceReviewStart( CgrmGlassRawData* pData ) { return TRUE; } BOOL CGlassRawRTMS::SequenceReviewEnd( CgrmGlassRawData* pData ) { WriteAOIFile(pData); return TRUE; } BOOL CGlassRawRTMS::WriteAOIFile( CgrmGlassRawData* pData ) { BOOL bResult = TRUE; bResult &= MakeAOIPreProcessing(pData); bResult &= MakeAOIFile(pData); bResult &= CopyRTMSFiles(pData); if(bResult)AKLOG("Write RTMS File Complete"); else AKLOG("Write RTMS File Fail"); return TRUE; } BOOL CGlassRawRTMS::MakeAOIFile( CgrmGlassRawData* pData ) { _grmGlassData* pGlass = pData->GetGlassData(); CString strFilePathName = m_strRTMSRAWFile; FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); if(pf == NULL) return FALSE; CString strLine; //Glass { CString strItems = "ITEM,GLASSITEM,LOTITEM,LOT_ID,LOT_TYPE,STEP_ID,EQUIPMENT_ID,EQUIPMENT_UNIT,GLS_ID,SLOT_ID,GLS_JUDGE,GLS_GRADE,PRODUCT_ID,CASSETTE_ID,OPERATOR_ID,RECIPE_NAME,AUTO_MODE,PNL_ORIGIN,PROCESSING_TIME,START_TIME,END_TIME,CAMERA_CNT,SCAN_CNT,INSP_TACT, REVIEW_TACT, CIM_ONOFF,PROCESS_ID,PROD_TYPE,BATCHID,H_PANELID,E_PANELID,P_PANELID,COMP_COUNT,PPID"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); makeDataGlass(strLine, pGlass); fprintf(pf, "%s\n", strLine); } //Cell { CString strItems = "ITEM,CELLITEM,PANEL_ID,PANEL_GRADE,COORD_X,COORD_Y,CELL_SIZE_X,CELL_SIZE_Y,GATE_LINE,DATA_LINE,LAMP_GRAY_01,LAMP_GRAY_02,LAMP_GRAY_03,LAMP_GRAY_04"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); for(int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) { _grmCellData* pCell = pData->GetCellData(iCell); makeDataCell(strLine, pGlass, pCell); fprintf(pf, "%s\n", strLine); } } //Defect { // DEFECT_TYPE_3 ºüÁü // RTMS Defect Á¤º¸ Ãß°¡ [ 21-03-08 KJG ] CString strItems = "ITEM,DEFITEM,POINT_NO,PANEL_ID,PR_X,PR_Y,PR_DATA,PR_GATE,SE_X,SE_Y,SE_DATA,SE_GATE,DEFECT_LAYER,DETECTED_AREA,DEFECT_SIZE_TYPE,DEFECT_SIZE_X,DEFECT_SIZE_Y,DEFECT_LENGTH,DEFECT_AREA,DEFECT_TYPE_1,DEFECT_TYPE_2,REPEAT_DEFECT,MASK_DEFECT,IMAGE_FILE1,IMAGE_FILE2,SCAN_NO,CAMERA_NO,RSCALE,SIZE_AREA,PEAK,REV_RESOLUTION,REV_CAMNUM,REV_MAG,DEFECT_CODE,DEFECT_GRADE,STACK_FLAG,STACK_COUNT,STACK_STEP,ZONE_NO,GRAY_MIN,GRAY_MAX,GRAY_AVG,R_GRAY_MIN,R_GRAY_MAX,R_GRAY_AVG"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) { _grmDefectData* pDefect = pData->GetDefectData(iDefect); //210203 CJH - CutOff ´ë»ó °á°úÆÄÀÏ ÀÛ¼º Á¦¿Ü if (pDefect->m_bDefectCutoff == TRUE) continue; makeDataDefect(strLine, pData->GetGlassData(), pData->GetCellData(pDefect->m_nCellIdx), pDefect); fprintf(pf, "%s\n", strLine); } } //Camera { CString strItems = "ITEM,CAMERAITEM,SCAN_NO,CAMERA_NO,LAMP,MAX,AVG,MIN"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); for(int iScan=0; iScan < pGlass->m_nScanNum; iScan++) { for(int iCam=0; iCam < pGlass->m_nCameraNum; iCam++) { makeDataCamera(strLine, pGlass, iCam, iScan); fprintf(pf, "%s\n", strLine); } } } //WSI { CString strItems = "ITEM,WSIITEM,WSI_NO,TYPE,NAME,JUDGE,CELLID,COORD_X,COORD_Y,COORD_X2,COORD_Y2,IMG_FILE_2D,IMAGE_FILE_3D,WSI_RESOLUTION"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); for(int iDefect = 0; iDefect < pGlass->m_nDefectNum; iDefect++) { _grmDefectData* pDefect = pData->GetDefectData(iDefect); if(pDefect->m_ReviewDefect.m_nWsi_Type == 2) { makeDataWSI(strLine, &pDefect->m_ReviewDefect); fprintf(pf, "%s\n", strLine); } } } //Mura if(m_pMuraResultFile && m_pMuraResultFile->IsRead()) { CString strItems = "ITEM,MURAITEM,DATE,TIME,DEFECTNO,RECIPE,GLASSID,CELLID,COORD_X1,COORD_Y1,COORD_PX1,COORD_PY1,NOMURA,SIZE_W,SIZE_L,SIZE_S,MAIN_TYPE,SUB_TYPE,PEAK,G_MIN,G_MAX,G_AVG,CAM,SCAN,PIXEL_PEAK,REGION,SIZE_T,PEAK_T,IMG_FILE_NAME"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); _MacroDefect* pMuraDefect; int nSize = (int)m_pMuraResultFile->GetDefectNum(); for(int iMuraDefect=0; iMuraDefect < nSize; iMuraDefect++) { pMuraDefect = m_pMuraResultFile->GetDefect(iMuraDefect); makeMuraDefect(strLine, pMuraDefect); fprintf(pf, "%s\n", strLine); } } // Measure if(0) { CString strItems = "ITEM,LOCITEM,MEASURE_NO,MEASURE_TYPE,MEASURE_NAME,CELL_ID,X_COORDINATE_1,Y_COORDINATE_1,X_COORDINATE_2,Y_COORDINATE_2,X_SHIFT,Y_SHIFT,IMAGENAME,SHIFTDIST,ACTIVETOSEALANT,SEALSIZE"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); // »ç¿ë ¾ÈÇÔ } // User Review { CString strItems = "ITEM,USERREVITEM,USER_NO,PR_X,PR_Y,IMAGE_FILE_NAME,REV_RESOLUTION"; fprintf(pf, "%s\n", strItems.GetBuffer(0)); for(int iDefect = 0; iDefect < pGlass->m_nDefectNum; iDefect++) { _grmDefectData* pDefect = pData->GetDefectData(iDefect); if(pDefect->m_ReviewDefect.m_nPlanType == ditRaw::RPT_User) { makeUserReview(strLine, &pDefect->m_ReviewDefect); fprintf(pf, "%s\n", strLine); } } } fclose(pf); return TRUE; } void CGlassRawRTMS::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) { strLine.Empty(); CString strValue; CString strDiv = ","; strValue.Format("DATA"); // ITEM strLine += strValue+strDiv; strValue.Format("GLASSDATA"); // GLASSITEM strLine += strValue+strDiv; strValue.Format("LOTDATA"); // LOTITEM strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strLotID); // LOT_ID strLine += strValue+strDiv; strValue.Format("LOTTYPE"); // LOT_TYPE strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strStepID); // STEP_ID strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strOperID); // EQUIPMENT_ID //210127 CJH - Equip ID <-> Oper ID strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strEquipID); // EQUIPMENT_UNIT strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strGlassID); // GLS_ID strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strSLotID); // SLOT_ID strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strGlassJudge); // GLAS_JUDGE strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strGlassCode); // GLS_GRADE or Glass Code //**GRADE°¡ ÄÚµå? strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strProductID); // PRODUCDT_ID strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strCSTID); // CASSETTE_ID strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strEPPID); // OPERATOR_ID strLine += strValue+strDiv; strValue.Format("%s", pGlassData->m_strRecipeName); // RECIPE_NAME strLine += strValue+strDiv; strValue.Format("%s", "AUTO_MODE"); // AUTOMODE strLine += strValue+strDiv; if(pGlassData->m_nOriginDirection == 0) strValue.Format("Left Top"); // PNL_ORIGIN else if(pGlassData->m_nOriginDirection == 1) strValue.Format("Right Top"); else if(pGlassData->m_nOriginDirection == 10) strValue.Format("Left Bottom"); else strValue.Format("Right Bottom"); strLine += strValue+strDiv; strValue.Format("%s", "PROCESSING_TIME"); // PROCESSING_TIME strLine += strValue+strDiv; strValue.Format("%04d%02d%02d_%02d%02d%02d" // START_TIME ,pGlassData->m_tmGlassLoading.GetYear() ,pGlassData->m_tmGlassLoading.GetMonth() ,pGlassData->m_tmGlassLoading.GetDay() ,pGlassData->m_tmGlassLoading.GetHour() ,pGlassData->m_tmGlassLoading.GetMinute() ,pGlassData->m_tmGlassLoading.GetSecond() ); strLine += strValue+strDiv; strValue.Format("%04d%02d%02d_%02d%02d%02d" // END_TIME ,pGlassData->m_tmInspectionEND.GetYear() ,pGlassData->m_tmInspectionEND.GetMonth() ,pGlassData->m_tmInspectionEND.GetDay() ,pGlassData->m_tmInspectionEND.GetHour() ,pGlassData->m_tmInspectionEND.GetMinute() ,pGlassData->m_tmInspectionEND.GetSecond() ); strLine += strValue+strDiv; strValue.Format("%d", pGlassData->m_nCameraNum); // CAMERA_CNT strLine += strValue+strDiv; strValue.Format("%d", pGlassData->m_nScanNum); // SCAN_CNT strLine += strValue+strDiv; strValue.Format("%d", pGlassData->m_tmInspectionEND-pGlassData->m_tmGlassLoading); // INSP_TACT strLine += strValue+strDiv; strValue.Format("%d", pGlassData->m_tmReviewEnd - pGlassData->m_tmReviewLoading); // REVIEW_TACT strLine += strValue + strDiv; strValue.Format("%s", "CIM_ONOFF"); strLine += strValue + strDiv; // CIM_ONOFF -SM //210128 CJH - RTMS SDC ¹°·ùµ¥ÀÌÅÍ Ãß°¡ strValue.Format("%s", pGlassData->m_strProcessID); strLine += strValue + strDiv; strValue.Format("%s", pGlassData->m_strProdType); strLine += strValue + strDiv; CString strTemp; strTemp = pGlassData->m_strGlassID; strValue.Format("%s", strTemp.Left(6)); strLine += strValue + strDiv; strValue.Format("%s", pGlassData->m_strGlassID); strLine += strValue + strDiv; strValue.Format("%s", pGlassData->m_strEPPID); strLine += strValue + strDiv; strValue.Format("%s", pGlassData->m_strPairHPanelID); strLine += strValue + strDiv; strValue.Format("%d", pGlassData->m_nCellNum); strLine += strValue + strDiv; strValue.Format("%s", pGlassData->m_strPPID); strLine += strValue; } void CGlassRawRTMS::makeDataCell( CString& strLine, _grmGlassData* pGlassData, _grmCellData* pCellData ) { strLine.Empty(); CString strValue; CString strDiv = ","; strValue.Format("DATA"); // ITEM strLine += strValue+strDiv; strValue.Format("CELLDATA"); // CELLITEM strLine += strValue+strDiv; strValue.Format("%s",pCellData->m_strCellName); // PANEL_ID strLine += strValue+strDiv; { if(pCellData->m_nJudgement == Judge_OK) strValue = "Judge_OK"; // PANEL_GRADE // PNL_GRADE else if(pCellData->m_nJudgement == Judge_NG) strValue = "Judge_NG"; else if(pCellData->m_nJudgement == Judge_Rework) strValue = "Judge_Rework"; else if(pCellData->m_nJudgement == Judge_RP) strValue = "Judge_RP"; else if(pCellData->m_nJudgement == Judge_Review) strValue = "Judge_Review"; else if(pCellData->m_nJudgement == Judge_RC) strValue = "Judge_RC"; // ¹Ìó¸® else if(pCellData->m_nJudgement == Judge_Size) strValue = "Judge_Size"; //skip else if (pCellData->m_nJudgement == Judge_TR) strValue = "Judge_TR"; else if (pCellData->m_nJudgement == Judge_PR) strValue = "Judge_PR"; else strValue = "Judge_OK"; } strLine += strValue+strDiv; strValue.Format("%d", pCellData->m_rectCellLeft); // COORD_X strLine += strValue+strDiv; strValue.Format("%d", pCellData->m_rectCellTop); // COORD_Y strLine += strValue+strDiv; strValue.Format("%d", pCellData->m_rectCellRight - pCellData->m_rectCellLeft); // CELL_SIZE_X strLine += strValue+strDiv; strValue.Format("%d", pCellData->m_rectCellBottom - pCellData->m_rectCellTop); // CELL_SIZE_Y strLine += strValue+strDiv; strValue.Format("%d", pCellData->m_nGateNum); // LN_GATE : Gate line °¹¼ö strLine += strValue+strDiv; strValue.Format("%d", pCellData->m_nDataNum); // LN_DATA : Data line °¹¼ö strLine += strValue+strDiv; strValue.Format("LAMP_GRAY_01"); // LAMP_GRAY_01 strLine += strValue+strDiv; strValue.Format("LAMP_GRAY_02"); // LAMP_GRAY_02 strLine += strValue+strDiv; strValue.Format("LAMP_GRAY_03"); // LAMP_GRAY_03 strLine += strValue+strDiv; strValue.Format("LAMP_GRAY_04"); // LAMP_GRAY_04 strLine += strValue+strDiv; } void CGlassRawRTMS::makeDataDefect( CString& strLine, _grmGlassData* pGlassData, _grmCellData* pCellData, _grmDefectData* pDefectData ) { strLine.Empty(); CString strValue; CString strDiv = ","; strValue.Format("DATA"); // ITEM strLine += strValue+strDiv; strValue.Format("DEFDATA"); // DEFITEM strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nDefectID); // POINT_NO strLine += strValue+strDiv; strValue.Format("%c%c", '0' + pDefectData->m_nCellIdx / 36, g_pCellCode2[pDefectData->m_nCellIdx % 36]); // PANEL_ID strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nUMOriginX); // PR_X strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nUMOriginY); // PR_Y strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nCellData); // PR_DATA strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nCellGate); // PR_GATE strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nUMCenterAlignX); // SE_X strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nUMCenterAlignY); // SE_Y strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nCellData); // SE_DATA strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nCellGate); // SE_GATE strLine += strValue+strDiv; strValue.Format("%s", "DEFECT_LAYER"); // DEFECT_LAYER strLine += strValue+strDiv; { int m_nDefectedArea = pDefectData->m_sDefectLoc; // DEFECTED_AREA // DETECTED_AREA if(m_nDefectedArea == DefectLoc_Pattern) strValue = "PATTERN"; else if(m_nDefectedArea == DefectLoc_Crack) strValue = "CRACK"; else if(m_nDefectedArea == DefectLoc_BM) strValue = "BM"; else if(m_nDefectedArea == DefectLoc_ASG) strValue = "ASG"; else if(m_nDefectedArea == DefectLoc_PAD) strValue = "PAD"; else if(m_nDefectedArea == DefectLoc_C2C) strValue = "C2C"; else if(m_nDefectedArea == DefectLoc_EdgeLine) strValue = "EdgeLine"; else if(m_nDefectedArea == DefectLoc_Proj) strValue = "Proj"; else if(m_nDefectedArea == DefectLoc_Chip) strValue = "Chip"; else if(m_nDefectedArea == DefectLoc_Corner) strValue = "Corner"; else strValue = ""; } strLine += strValue+strDiv; { int m_nDefectSizeType = pDefectData->m_DefectSizeType; // DEFECT_SIZE_TYPE // DEFECT_SIZE_TYPE if(m_nDefectSizeType == 0) strValue = "S"; else if(m_nDefectSizeType == 1) strValue = "M"; else if(m_nDefectSizeType == 2) strValue = "L"; else if(m_nDefectSizeType == 3) strValue = "H"; else if(m_nDefectSizeType == 4) strValue = "U"; else strValue = "S"; } strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nUMSizeX); // DEFECT_SZE_X strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nUMSizeY); // DEFECT_SIZE_Y strLine += strValue+strDiv; //strValue.Format("%s", "DEFECT_LENGTH"); // DEFECT_LENGTH double dUmRscale = pDefectData->m_nDefectRScale * pDefectData->m_dScanResolution; strValue.Format("%.2lf", dUmRscale); // DEFECT_LENGTH strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nPixelSize); // DEFECT_AREA strLine += strValue+strDiv; { int m_nDefectType1 = pDefectData->m_DefectBDType; // DEFECT_TYPE_1 (B, W, Unknown) if(m_nDefectType1==DefectType_TBlack || m_nDefectType1==DefectType_RBlack) strValue = "B"; else if(m_nDefectType1==DefectType_TWhite || m_nDefectType1==DefectType_RWhite) strValue = "W"; else strValue = "Unknown"; } strLine += strValue+strDiv; { // DEFECT_TYPE_2 (Normal / MC / Mask / Common / NoDefect) int m_nDefectType2 = pDefectData->m_DefectSubType; if(m_nDefectType2 == DefectSubType_Normal) strValue = "Normal"; else if(m_nDefectType2 == DefectSubType_MC) strValue = "MC"; else if(m_nDefectType2 == DefectSubType_Mask) strValue = "Mask"; else if(m_nDefectType2 == DefectSubType_Common) strValue = "Common"; else if(m_nDefectType2 == DefectSubType_NoDefect) strValue = "NoDefect"; else strValue = "UN"; } strLine += strValue+strDiv; { if(pDefectData->m_DefectSubType == DefectSubType_Common) strValue = "Y"; // REPEAT_DEFECT else strValue = "N"; } strLine += strValue+strDiv; { if(pDefectData->m_DefectSubType == DefectSubType_Mask) strValue = "Y"; // MASK_DEFECT else strValue = "N"; } strLine += strValue+strDiv; strValue.Format("%s", pDefectData->m_strAoiImageName); // IMAGE_FILE1 strLine += strValue+strDiv; strValue.Format("%s", pDefectData->m_ReviewDefect.m_strRevImageName); // IMAGE_FILE2 strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nScanIdx); // SCAN_NO strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nCameraID); // CAMERA_NO strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nDefectRScale); // RSCALE strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_nUMSize); // SIZE_AREA strLine += strValue+strDiv; strValue.Format("%d", pDefectData->m_sDefectPeak); // PEAK strLine += strValue+strDiv; float fReviewResol = 0.1725; //20¹è ´Ü¹èÀ² // 3.45/20 strValue.Format("%.4lf", fReviewResol); // REV_RESOLUTION strLine += strValue+strDiv; //210128 CJH - RTMS Review Á¤º¸ Ãß°¡ if (strlen(pDefectData->m_ReviewDefect.m_strRevImageName)) { strValue.Format("%d", pDefectData->m_ReviewDefect.m_nModuleIndex); // REV_Cam Number strLine += strValue + strDiv; } else { strValue.Format("-1"); strLine += strValue + strDiv; } strValue.Format("%d", 20); // REV_Magnification strLine += strValue + strDiv; strValue.Format("%s", pDefectData->m_strDefectCode); // DEFECT_CODE, DEFECT_GRADE, STACK_FLAG, STACK_COUNT, STACK_STEP, ZONE_NO, GRAY_MIN, ...,R_SRC_AVG Ãß°¡ [ 21-03-08 KJG ] strLine += strValue + strDiv; // DEFECT_CODE strValue.Format("%s", GetDefectInfoToString(DMT_DefectJudge, pDefectData->m_DefectJudgement)); strLine += strValue + strDiv; // DEFECT_GRADE int nStackFlag = pDefectData->m_StackInfo; // STACK_FLAG if (nStackFlag == Stack_Unknown) strValue = "UK"; else if (nStackFlag == Stack_TD) strValue = "TD"; else if (nStackFlag == Stack_SD) strValue = "SD"; else if (nStackFlag == Stack_PD) strValue = "PD"; else if (nStackFlag == Stack_SP) strValue = "SP"; else strValue = "UK"; strLine += strValue + strDiv; strValue.Format("%2d", pDefectData->m_nStackStepCount); // STACK_COUNT strLine += strValue + strDiv; if (strlen(pDefectData->m_strStackFirst)) // STACK_STEP { strValue.Format("%s", pDefectData->m_strStackFirst); strValue.Replace(',', '_'); // ¿­ ±¸ºÐÀÚ°¡ ',' À̹ǷΠ'_'·Î º¯°æ [ 21-03-15 KJG ] strLine += strValue + strDiv; } else { strValue.Format(" "); strLine += strValue + strDiv; } int nValue = 0; // ZONE_NO for (int i = 15; i >= 0; i--) { if (pDefectData->m_sZonePixelCount[i] > 0) nValue += 1; if (i > 0) nValue = nValue << 1; } strValue.Format("%04X", nValue); strLine += strValue + strDiv; strValue.Format("%d", pDefectData->m_nLevelSrcMin); // GRAY_MIN strLine += strValue + strDiv; strValue.Format("%d", pDefectData->m_nLevelSrcMax); // GRAY_MAX strLine += strValue + strDiv; strValue.Format("%d", pDefectData->m_nLevelSrcAvg); // GRAY_AVG strLine += strValue + strDiv; strValue.Format("%d", pDefectData->m_nLevelRefMin); // R_SRC_MIN strLine += strValue + strDiv; strValue.Format("%d", pDefectData->m_nLevelRefMax); // R_SRC_MAX strLine += strValue + strDiv; strValue.Format("%d", pDefectData->m_nLevelRefAvg); // R_SRC_AVG strLine += strValue + strDiv; } void CGlassRawRTMS::makeDataCamera( CString& strLine, _grmGlassData* pGlassData, int nCamIdx, int nScanIdx ) { strLine.Empty(); CString strValue; CString strDiv = ","; strValue.Format("DATA"); strLine += strValue+strDiv; strValue.Format("CAMERADATA"); strLine += strValue+strDiv; strValue.Format("%d", nScanIdx); strLine += strValue+strDiv; strValue.Format("%d", nCamIdx); strLine += strValue+strDiv; strValue.Format("LAMP"); strLine += strValue+strDiv; strValue.Format("%d", pGlassData->m_nGrayLevelMax[pGlassData->m_nCameraNum*nScanIdx + nCamIdx]); strLine += strValue+strDiv; strValue.Format("%d", pGlassData->m_nGrayLevelAvg[pGlassData->m_nCameraNum*nScanIdx + nCamIdx]); strLine += strValue+strDiv; strValue.Format("%d", pGlassData->m_nGrayLevelMin[pGlassData->m_nCameraNum*nScanIdx + nCamIdx]); strLine += strValue+strDiv; } void CGlassRawRTMS::makeDataWSI( CString& strLine, _grmDefectReviewData* pWSIData ) { strLine.Empty(); CString strValue; CString strDiv = ","; strValue.Format("DATA"); // ITEM strLine += strValue+strDiv; strValue.Format("WSIDATA"); // USERREVITEM strLine += strValue+strDiv; strValue.Format("%s","USER_NO"); // USER_NO strLine += strValue+strDiv; // ÁÖ¼® ó¸® ºÎºÐ µ¥ÀÌÅÍ µé¾î¿À¸é ¾µ °Í //CString strWSIType; //if (pWSIData->m_fWsi_ResultData[0] == 1) // strWSIType.Format("%s", "Positive"); // µ¹±â //else if (pWSIData->m_fWsi_ResultData[0] == 0) // strWSIType.Format("%s", "Negative"); // ÇÔ¸ô //else // strWSIType.Format("%s", "Flat"); //strValue.Format("%s",strWSIType); // TYPE strValue.Format("%s","TYPE"); // TYPE strLine += strValue+strDiv; //strValue.Format("%d", pWSIData->m_nWsi_Type); // WSI_NAME strValue.Format("%s", "WSI_NAME"); // WSI_NAME strLine += strValue+strDiv; strValue.Format("%s", "JUDGE"); // JUDGE strLine += strValue+strDiv; //strValue.Format("%d", pWSIData->m_fWsi_ResultData[2]); // COORD_X?? strValue.Format("%s", "COORD_X"); // COORD_X?? strLine += strValue+strDiv; //strValue.Format("%d", pWSIData->m_fWsi_ResultData[1]); // COORD_Y?? strValue.Format("%s", "COORD_Y"); // COORD_Y?? strLine += strValue+strDiv; strValue.Format("%s", "COORD_X2"); // COORD_X2 strLine += strValue+strDiv; strValue.Format("%s", "COORD_Y2"); // COORD_Y2 strLine += strValue+strDiv; //strValue.Format("%s", pWSIData->m_strWsi_2DImageFilename); // IMAGE_FILE_2D strValue.Format("%s", "IMAGE_FILE_2D"); // IMAGE_FILE_2D strLine += strValue+strDiv; //strValue.Format("%s", pWSIData->m_strWsi_3DImageFilename); // IMAGE_FILE_3D strValue.Format("%s", "IMAGE_FILE_3D"); // IMAGE_FILE_3D strLine += strValue+strDiv; strValue.Format("%s", "WSI_RESOLUTION"); // WSI_RESOLUTION strLine += strValue+strDiv; } void CGlassRawRTMS::makeMuraDefect( CString& strLine, _MacroDefect* pMuraData ) { strLine.Empty(); CString strValue; CString strDiv = ","; strValue.Format("DATA"); // ITEM strLine += strValue+strDiv; strValue.Format("MURADATA"); // DEFITEM strLine += strValue+strDiv; CTime time = CTime::GetCurrentTime(); strValue.Format("%04d%02d%02d", time.GetYear(), time.GetMonth(), time.GetDay()); // DATE strLine += strValue+strDiv; strValue.Format("%02d%02d%02d", time.GetHour(), time.GetMinute(), time.GetSecond()); // TIME strLine += strValue+strDiv; strValue.Format("%d", pMuraData->DEFECTNO); // DEFECTNO strLine += strValue+strDiv; strValue.Format("%s", "RECIPE"); // RECIPE strLine += strValue+strDiv; strValue.Format("%s", "GLASSID"); // GLASSID strLine += strValue+strDiv; strValue.Format("%s", pMuraData->CELLID); // CELLID strLine += strValue+strDiv; strValue.Format("%d", pMuraData->COORD_X1); // COORD_X1 strLine += strValue+strDiv; strValue.Format("%d", pMuraData->COORD_Y1); // COORD_Y1 strLine += strValue+strDiv; strValue.Format("%d", pMuraData->COORD_PX1);// COORD_PX1 strLine += strValue+strDiv; strValue.Format("%d", pMuraData->COORD_PY1); // COORD_PY1 strLine += strValue+strDiv; strValue.Format("%d", pMuraData->NOMURA); // NOMURA strLine += strValue+strDiv; strValue.Format("%d", pMuraData->SIZE_W); // SIZE_W strLine += strValue+strDiv; strValue.Format("%d", pMuraData->SIZE_L); // SIZE_L strLine += strValue+strDiv; strValue.Format("%d", pMuraData->SIZE_S); // SIZE_S strLine += strValue+strDiv; strValue.Format("%s", pMuraData->MAIN_TYPE); // MAIN_TYPE strLine += strValue+strDiv; strValue.Format("%s", pMuraData->SUB_TYPE); // SUB_TYPE strLine += strValue+strDiv; strValue.Format("%d", pMuraData->PEAK); // PEAK strLine += strValue+strDiv; strValue.Format("%d", pMuraData->G_MIN); // G_MIN strLine += strValue+strDiv; strValue.Format("%d", pMuraData->G_MAX); // G_MAX strLine += strValue+strDiv; strValue.Format("%d", pMuraData->G_AVG); // G_AVG strLine += strValue+strDiv; strValue.Format("%d", pMuraData->CAM); // CAM strLine += strValue+strDiv; strValue.Format("%d", pMuraData->SCAN); // SCAN strLine += strValue+strDiv; strValue.Format("%d", pMuraData->PIXEL_PEAK); // PIXEL_PEAK strLine += strValue+strDiv; strValue.Format("%s", pMuraData->REGION); //REGION strLine += strValue+strDiv; strValue.Format("%s", pMuraData->SIZE_T); // SIZE_T strLine += strValue+strDiv; strValue.Format("%s", pMuraData->PEAK_T); // PEAK_T strLine += strValue+strDiv; strValue.Format("%s", pMuraData->IMG_FILE_NAME); // IMG_FILE_NAME strLine += strValue+strDiv; } void CGlassRawRTMS::makeUserReview( CString& strLine, _grmDefectReviewData* pUserReview ) { strLine.Empty(); CString strValue; CString strDiv = ","; strValue.Format("DATA"); // ITEM strLine += strValue+strDiv; strValue.Format("USERREVDATA"); // USERREVITEM strLine += strValue+strDiv; strValue.Format("%s", "USER_NO"); // USER_NO strLine += strValue+strDiv; strValue.Format("%s", "PR_X"); // PR_X strLine += strValue+strDiv; strValue.Format("%s", "PR_Y"); // PR_Y strLine += strValue+strDiv; strValue.Format("%s", "IMAGE_FILE_NAME"); // IMAGE_FILE_NAME strLine += strValue+strDiv; strValue.Format("%s", "REV_RESOLUTION"); // REV_RESOLUTION strLine += strValue+strDiv; } BOOL CGlassRawRTMS::MakeAOIPreProcessing(CgrmGlassRawData* pData) { _grmGlassData* pGlass = pData->GetGlassData(); // File Path CTime CurrTime = CTime::GetCurrentTime(); CString strTime=_T(""), strRTMSRAWFile=_T("");; strTime.Format(_T("%04d%02d%02d%02d%02d%02d"), CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); char strTempPath2[100] = {0, }, strTempPath3[100] = {0, }; CString strLotID = pGlass->m_strGlassID; CString strRtmsOperID = pGlass->m_strOperID; CString strRtmsEqID = pGlass->m_strEquipID; CString strHGlassid = pGlass->m_strGlassID; CString strStepID = pGlass->m_strStepID; strHGlassid.MakeUpper(); strTime.MakeUpper(); strRTMSRAWFile.Format(_T("%s_%s.csv"), strHGlassid, strTime); //ÆÄÀÏ »ý¼ºµÉ °÷ Æú´õ »ý¼º [±èÅÂÇö 2018/12/5] //210126 CJH - RTMS °æ·Î º¯°æ (126.100.100.5\\RawFile/ReviewImage).RawFileÀº ·çÆ®¿¡ °á°úÆÄÀÏÀ» ¿Ã¸®°í ReviewImage¿¡´Â StepID\\GlassID ¾È¿¡ µ¥ÀÌÅÍ ¾÷·Îµå { //210126 CJH - °æ·Î Æú´õ»ý¼º À§Ä¡ º¯°æ CreateDirectory("D:\\DitRtms", NULL); CreateDirectory("D:\\DitRtms\\Data", NULL); BOOL bCreateOK = TRUE; sprintf(strTempPath2, "\\\\126.100.100.5\\RawFile"); bCreateOK &= CreateDirectory(strTempPath2, NULL); sprintf(strTempPath2, "\\\\126.100.100.5\\RawFile\\%s", strRTMSRAWFile); sprintf(strTempPath3, "\\\\126.100.100.5\\ReviewImage"); bCreateOK &= CreateDirectory(strTempPath3, NULL); sprintf(strTempPath3, "\\\\126.100.100.5\\ReviewImage\\%s", strStepID); bCreateOK &= CreateDirectory(strTempPath3, NULL); sprintf(strTempPath3, "\\\\126.100.100.5\\ReviewImage\\%s\\%s", strStepID,strHGlassid); bCreateOK &= CreateDirectory(strTempPath3, NULL); AKLOG("RTMS Folder Raw File Path Make : %s", strTempPath2); AKLOG("RTMS Folder Img Path Make : %s", strTempPath3); //if(bCreateOK) AKLOG("RTMS Folder Create Success"); //else AKLOG("RTMS Folder Create Fail"); } DeleteFile((LPCTSTR)strTempPath2); m_strRTMSRAWFile = strTempPath2; m_strRTMSImageFile = strTempPath3; return TRUE; } BOOL CGlassRawRTMS::CopyRTMSFiles( CgrmGlassRawData* pData ) { return TRUE; } CString CGlassRawRTMS::GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam) { CString sStr; switch (nDefectInfoType) { case DMT_DefectJudge:// Judge { switch (nParam) { case Judge_OK: sStr.Format("OK"); break; case Judge_RP: sStr.Format("RP"); break; case Judge_NG: sStr.Format("NG"); break; case Judge_TR: sStr.Format("TR"); break; case Judge_PR: sStr.Format("PR"); break; case Judge_PT: sStr.Format("PT"); break; case Judge_Review: sStr.Format("RV"); break; case Judge_RC: sStr.Format("RC"); break; case Judge_Size: sStr.Format("SZ"); break; case Judge_VI: sStr.Format("VI"); break; case Judge_Rework: sStr.Format("RW"); break; case Judge_Unknown: sStr.Format("OK");//sStr.Format("Unknown"); //Unknownµµ ÀÏ´Ü OK break; default: sStr.Format("OK");//sStr.Format("Ets"); break; } } break; case DMT_DefectSizeType: { sStr = "S"; switch (nParam) { //case SizeType_Unknown: sStr.Format("U"); break; case 1/*SizeType_Small*/: sStr.Format("S"); break; case 2/*SizeType_Mid*/: sStr.Format("M"); break; case 3/*SizeType_Large*/: sStr.Format("L"); break; case 4/*SizeType_Huge*/: sStr.Format("O"); break; //case SizeType_Ultra: sStr.Format("Ultra"); break; //default: sStr.Format("Ets"); break; } } break; } return sStr; }