#include "StdAfx.h" #include "MacroResultFile.h" #include "akCore/akFileDB.h" //0404nwh #include "akGridData.h" #include #include "DitGlassRawClient.h" #include "GlassRawBase.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif CMacroResultFile::CMacroResultFile(void) { m_bReadSuccess = FALSE; readOptionFile(); } CMacroResultFile::~CMacroResultFile(void) { m_vecMacroDefect.clear(); } BOOL CMacroResultFile::openFile( char* pFileName ) { m_bReadSuccess = FALSE; FILE* pf = fopen(pFileName, "r"); if(pf == NULL) return FALSE; std::vector<_MacroDefect> vecMacroDefect; _MacroDefect MacroDefect; char buffer[1024]; char* pReadPoint = NULL; char *pStr; while(!feof(pf)) { pStr = fgets(buffer, 1024, pf); if(!strncmp(buffer, "ITEM,", 5)) continue; if(strlen(buffer) <= 0 || pStr == NULL) break; if(!strncmp(buffer, "DATA,CELLDATA", 13))//ÆÄ½Ì ÅÂÇö[2017/3/29] { //¹«¶ó ¼¿ÆÇÁ¤µµ ¹Ý¿µ ÇØ¾ß Çϳª? } else if(!strncmp(buffer, "DATA,DEFECTDATA", 15))//ÆÄ½Ì ÅÂÇö[2017/3/29] { pReadPoint = buffer; pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.ITEM ); pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.DEFECTNO ); pReadPoint = getParsingData(pReadPoint, 20, &MacroDefect.CELLID ); pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.COORD_X1 ); pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.COORD_Y1 ); pReadPoint = getParsingData(pReadPoint, 9, &MacroDefect.COORD_PX1 ); pReadPoint = getParsingData(pReadPoint, 9, &MacroDefect.COORD_PY1 ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.NOMURA ); pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.JUDGE ); pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.SIZE_W ); pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.SIZE_L ); pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.SIZE_S ); pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.MAIN_TYPE ); pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.SUB_TYPE ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.PEAK ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.G_MIN ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.G_MAX ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.G_AVG ); pReadPoint = getParsingData(pReadPoint, 3, &MacroDefect.CAM ); pReadPoint = getParsingData(pReadPoint, 4, &MacroDefect.SCAN ); pReadPoint = getParsingData(pReadPoint, 10, &MacroDefect.PIXEL_PEAK ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.REGION ); pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.MASK_T ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.SIZE_T ); pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.PEAK_T ); pReadPoint = getParsingData(pReadPoint, 69, &MacroDefect.IMG_FILE_NAME); MacroDefect.IMG_FILE_NAME = MacroDefect.IMG_FILE_NAME.Left(70); MacroDefect.IMG_FILE_NAME.Remove(' '); vecMacroDefect.push_back(MacroDefect); } } fclose(pf); m_vecMacroDefect = vecMacroDefect; //ºü¸¥ ã±â¿ë map »ý¼º { m_mapFind.clear(); int nSize = m_vecMacroDefect.size(); for(int i=0; i=0; i--) { if(pBuf[i] != ' ') { pBuf[i+1] = 0; break; } } *pOutData = pBuf; return &pBuf[nLen+1]; //±¸ºÐÀÚ °Ç³Ê ¶Ù¾î¼­ ´ÙÀ½ ÀÐÀ» Æ÷ÀÎÆ® ³Ñ°ÜÁØ´Ù ÅÂÇö[2017/3/29] } char* CMacroResultFile::getParsingData( char* pBuf, int nLen, int* pOutData ) { pBuf[nLen] = 0; *pOutData = atoi(pBuf); return &pBuf[nLen+1]; //±¸ºÐÀÚ °Ç³Ê ¶Ù¾î¼­ ´ÙÀ½ ÀÐÀ» Æ÷ÀÎÆ® ³Ñ°ÜÁØ´Ù ÅÂÇö[2017/3/29] } BOOL CMacroResultFile::readOptionFile( char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) { CakFileDB fileDB; fileDB.openfile(pFileName); char strTemp[256]={}; fileDB.getItem("MACROPATH_ENABLE", &m_bMacroResultFile, 0); fileDB.getItem("MACROPATH_RAW", strTemp, ""); m_strMacroResultRawPath= strTemp; fileDB.getItem("MACROPATH_IMAGE", strTemp, ""); m_strMacroResultImagePath= strTemp; fileDB.getItem("SERVERPATH_RAW", strTemp, ""); m_strServerResultRawPath= strTemp; fileDB.getItem("SERVERPATH_IMAGE", strTemp, "");m_strServerResultImagePath = strTemp; fileDB.getItem("MACRO_READ_TIME", (int*)&m_dwMacroReadTime, 3000); return TRUE; } int CMacroResultFile::GetDefectNum( int iCell ) { int nSize = (int)m_vecMacroDefect.size(); int nDefectNum = 0; for(int i=0; i::iterator itLowerBound; std::multimap::iterator itUpperBound; itLowerBound = m_mapFind.lower_bound(nX - nFindRange); itUpperBound = m_mapFind.upper_bound(nX + nFindRange); _MacroDefect *pMDefectMin = NULL; int nMinDistance = nFindRange*nFindRange; int nDistance; for (itLowerBound; itLowerBound != itUpperBound; itLowerBound++) { pMDefect = static_cast<_MacroDefect*>(itLowerBound->second); if(!pMDefect) continue; if(abs(nY - pMDefect->COORD_Y1) < nFindRange) { nDistance = ((nX - pMDefect->COORD_X1) * (nX - pMDefect->COORD_X1)) + ((nY - pMDefect->COORD_Y1) * (nY - pMDefect->COORD_Y1)); if(nDistance < nMinDistance) { nMinDistance = nDistance; pMDefectMin = pMDefect; } } } return pMDefectMin; } BOOL CMacroResultFile::openFile_Mura(char* pFileName)//0404nwh { m_bReadSuccess = FALSE; FILE* pf = fopen(pFileName, "r"); if (pf == NULL) return FALSE; CDitGlassRawClient GlassRawClient; GlassRawClient.ConnectServer(); CDitGlassRawClient* pShared = &GlassRawClient; _grmCellData* pGrmMura; std::vector<_MacroSubPanel> vecMacroSubPanel; _MacroSubPanel MacroSubPanel; char buffer[1024]; char* pReadPoint = NULL; char *pStr; CString stranelData = "DATA PANEL"; CString strSubPanelData = "DATA SUBPANEL"; CString strMaxAvgGray, strMaxPortion; while (!feof(pf)) { pStr = fgets(buffer, 1024, pf); if (strlen(buffer) <= 0 || pStr == NULL) break; if (!strncmp(buffer, stranelData, strlen(stranelData)))// ¶ç¾î¾²±â ÆÄ½Ì { CakParser paser; if (strlen(buffer) <= 0) continue; paser.process(buffer, " "); int nTokNum = paser.getTokNum(); if (nTokNum < 42) continue; strMaxAvgGray = paser.getTokStr(41); strMaxPortion = paser.getTokStr(42); } if (!strncmp(buffer, strSubPanelData, strlen(strSubPanelData)))// ¶ç¾î¾²±â ÆÄ½Ì { CakParser paser; if (strlen(buffer) <= 0) continue; paser.process(buffer, " "); int nTokNum = paser.getTokNum(); if (nTokNum < 52) continue; //kyh 31->52 MacroSubPanel.PRO_IMAGE = paser.getTokStr(20); MacroSubPanel.AVG_GRAY_0 = paser.getTokStr(21); MacroSubPanel.PORTION_0 = paser.getTokStr(22); //kyh Ãß°¡ MacroSubPanel.CORNER_GRAY_0 = paser.getTokStr(23); MacroSubPanel.AVG_AMP_0 = paser.getTokStr(24); MacroSubPanel.FFT_VAR_0 = paser.getTokStr(25); MacroSubPanel.FFT_VAH_0 = paser.getTokStr(26); MacroSubPanel.FFT_VAQ_0 = paser.getTokStr(27); MacroSubPanel.FFT_PK_0 = paser.getTokStr(28); MacroSubPanel.AVG_GRAY_1 = paser.getTokStr(29); MacroSubPanel.PORTION_1 = paser.getTokStr(30); //kyh Ãß°¡ MacroSubPanel.CORNER_GRAY_1 = paser.getTokStr(31); MacroSubPanel.AVG_AMP_1 = paser.getTokStr(32); MacroSubPanel.FFT_VAR_1 = paser.getTokStr(33); MacroSubPanel.FFT_VAH_1 = paser.getTokStr(34); MacroSubPanel.FFT_VAQ_1 = paser.getTokStr(35); MacroSubPanel.FFT_PK_1 = paser.getTokStr(36); MacroSubPanel.AVG_GRAY_2 = paser.getTokStr(37); MacroSubPanel.PORTION_2 = paser.getTokStr(38); //kyh Ãß°¡ MacroSubPanel.CORNER_GRAY_2 = paser.getTokStr(39); MacroSubPanel.AVG_AMP_2 = paser.getTokStr(40); MacroSubPanel.FFT_VAR_2 = paser.getTokStr(41); MacroSubPanel.FFT_VAH_2 = paser.getTokStr(42); MacroSubPanel.FFT_VAQ_2 = paser.getTokStr(43); MacroSubPanel.FFT_PK_2 = paser.getTokStr(44); MacroSubPanel.AVG_GRAY_3 = paser.getTokStr(45); MacroSubPanel.PORTION_3 = paser.getTokStr(46); //kyh Ãß°¡ MacroSubPanel.CORNER_GRAY_3 = paser.getTokStr(47); MacroSubPanel.AVG_AMP_3 = paser.getTokStr(48); MacroSubPanel.FFT_VAR_3 = paser.getTokStr(49); MacroSubPanel.FFT_VAH_3 = paser.getTokStr(50); MacroSubPanel.FFT_VAQ_3 = paser.getTokStr(51); MacroSubPanel.FFT_PK_3 = paser.getTokStr(52); vecMacroSubPanel.push_back(MacroSubPanel); } } fclose(pf); m_vecMacroSubPanel = vecMacroSubPanel; for (int i = 0; i < m_vecMacroSubPanel.size(); i++) { pGrmMura= pShared->GetCellData(i); strcpy(pGrmMura->m_strProImage, m_vecMacroSubPanel[i].PRO_IMAGE.GetBuffer(0)); strcpy(pGrmMura->m_strAvgGray_0, m_vecMacroSubPanel[i].AVG_GRAY_0.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_0, m_vecMacroSubPanel[i].PORTION_0.GetBuffer(0)); //kyh 0622 strcpy(pGrmMura->m_strCorner_Gray_0, m_vecMacroSubPanel[i].CORNER_GRAY_0.GetBuffer(0)); strcpy(pGrmMura->m_strAvgAmp_0, m_vecMacroSubPanel[i].AVG_AMP_0.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVar_0, m_vecMacroSubPanel[i].FFT_VAR_0.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVah_0, m_vecMacroSubPanel[i].FFT_VAH_0.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVaq_0, m_vecMacroSubPanel[i].FFT_VAQ_0.GetBuffer(0)); strcpy(pGrmMura->m_strFFTPK_0, m_vecMacroSubPanel[i].FFT_PK_0.GetBuffer(0)); strcpy(pGrmMura->m_strAvgGray_1, m_vecMacroSubPanel[i].AVG_GRAY_1.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_1, m_vecMacroSubPanel[i].PORTION_1.GetBuffer(0)); //kyh 0622 strcpy(pGrmMura->m_strCorner_Gray_1, m_vecMacroSubPanel[i].CORNER_GRAY_1.GetBuffer(0)); strcpy(pGrmMura->m_strAvgAmp_1, m_vecMacroSubPanel[i].AVG_AMP_1.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVar_1, m_vecMacroSubPanel[i].FFT_VAR_1.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVah_1, m_vecMacroSubPanel[i].FFT_VAH_1.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVaq_1, m_vecMacroSubPanel[i].FFT_VAQ_1.GetBuffer(0)); strcpy(pGrmMura->m_strFFTPK_1, m_vecMacroSubPanel[i].FFT_PK_1.GetBuffer(0)); strcpy(pGrmMura->m_strAvgGray_2, m_vecMacroSubPanel[i].AVG_GRAY_2.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_2, m_vecMacroSubPanel[i].PORTION_2.GetBuffer(0)); //kyh 0622 strcpy(pGrmMura->m_strCorner_Gray_2, m_vecMacroSubPanel[i].CORNER_GRAY_2.GetBuffer(0)); strcpy(pGrmMura->m_strAvgAmp_2, m_vecMacroSubPanel[i].AVG_AMP_2.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVar_2, m_vecMacroSubPanel[i].FFT_VAR_2.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVah_2, m_vecMacroSubPanel[i].FFT_VAH_2.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVaq_2, m_vecMacroSubPanel[i].FFT_VAQ_2.GetBuffer(0)); strcpy(pGrmMura->m_strFFTPK_2, m_vecMacroSubPanel[i].FFT_PK_2.GetBuffer(0)); strcpy(pGrmMura->m_strAvgGray_3, m_vecMacroSubPanel[i].AVG_GRAY_3.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_3, m_vecMacroSubPanel[i].PORTION_3.GetBuffer(0)); //kyh 0622 strcpy(pGrmMura->m_strCorner_Gray_3, m_vecMacroSubPanel[i].CORNER_GRAY_3.GetBuffer(0)); strcpy(pGrmMura->m_strAvgAmp_3, m_vecMacroSubPanel[i].AVG_AMP_3.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVar_3, m_vecMacroSubPanel[i].FFT_VAR_3.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVah_3, m_vecMacroSubPanel[i].FFT_VAH_3.GetBuffer(0)); strcpy(pGrmMura->m_strFFTVaq_3, m_vecMacroSubPanel[i].FFT_VAQ_3.GetBuffer(0)); strcpy(pGrmMura->m_strFFTPK_3, m_vecMacroSubPanel[i].FFT_PK_3.GetBuffer(0)); } strcpy(pShared->GetGlassData()->m_strMaxAvgGray, strMaxAvgGray.GetBuffer(0)); strcpy(pShared->GetGlassData()->m_strMaxPortion, strMaxPortion.GetBuffer(0)); m_bReadSuccess = TRUE; return TRUE; }