»õ ÆÄÀÏ |
| | |
| | | #include "StdAfx.h" |
| | | #include "MacroResultFile.h" |
| | | #include "akCore/akFileDB.h" |
| | | //0404nwh |
| | | #include "akGridData.h" |
| | | #include <process.h> |
| | | #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<nSize; i++) |
| | | { |
| | | m_mapFind.insert(std::make_pair(m_vecMacroDefect[i].COORD_X1, &m_vecMacroDefect[i])); |
| | | } |
| | | } |
| | | m_bReadSuccess = TRUE; |
| | | return TRUE; |
| | | } |
| | | |
| | | char* CMacroResultFile::getParsingData( char* pBuf, int nLen, CString* pOutData ) |
| | | { |
| | | for(int i=nLen-1; 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 /*= "C:\\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<nSize; i++) |
| | | { |
| | | if(m_vecMacroDefect[i].CELLID == iCell) |
| | | { |
| | | nDefectNum++; |
| | | } |
| | | } |
| | | |
| | | return nDefectNum; |
| | | } |
| | | |
| | | int CMacroResultFile::GetSubPanelNum(int iCell) //0404nwh |
| | | { |
| | | int nSize = (int)m_vecMacroSubPanel.size(); |
| | | int nSubPanelNum = 0; |
| | | for (int i = 0; i < nSize; i++) |
| | | { |
| | | if (m_vecMacroSubPanel[i].PRO_IMAGE == iCell) |
| | | { |
| | | nSubPanelNum++; |
| | | } |
| | | } |
| | | return nSubPanelNum; |
| | | } |
| | | |
| | | //KMS - 190125 MuraDefect 찾기 |
| | | _MacroDefect* CMacroResultFile::FindDefect( int nX, int nY ,int nFindRange) |
| | | { |
| | | _MacroDefect *pMDefect = NULL; |
| | | |
| | | std::multimap<int,_MacroDefect*>::iterator itLowerBound; |
| | | std::multimap<int,_MacroDefect*>::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; |
| | | } |