| | |
| | | #include <process.h> |
| | | #include "DitGlassRawClient.h" |
| | | #include "GlassRawBase.h" |
| | | #include <sstream> |
| | | |
| | | #ifdef _DEBUG |
| | | #undef THIS_FILE |
| | |
| | | BOOL CRawResultReader::openFile(char* pGlassID) |
| | | { |
| | | CString strFileName; |
| | | CDitGlassRawClient GlassRawClient; |
| | | GlassRawClient.ConnectServer(); |
| | | CDitGlassRawClient* pShared = &GlassRawClient; |
| | | |
| | | /*< KJG 20211208 : #3696 DEL Start >*/ |
| | | //CDitGlassRawClient GlassRawClient; |
| | | //GlassRawClient.ConnectServer(); |
| | | //CDitGlassRawClient* pShared = &GlassRawClient; |
| | | |
| | | _grmDefectData* pGrmStack; |
| | | //_grmDefectData* pGrmStack; |
| | | /*< KJG 20211208 : #3696 DEL End >*/ |
| | | |
| | | strFileName.Format("%s\\%s", m_strLocalPath, pGlassID); |
| | | |
| | |
| | | |
| | | if (pf == NULL) |
| | | return FALSE; |
| | | |
| | | /*< KJG 20211208 : #3696 ADD Start >*/ |
| | | CDitGlassRawClient GlassRawClient; |
| | | GlassRawClient.ConnectServer(); |
| | | CDitGlassRawClient* pShared = &GlassRawClient; |
| | | |
| | | _grmDefectData* pGrmStack; |
| | | /*< KJG 20211208 : #3696 ADD End >*/ |
| | | |
| | | std::vector<_grmDefectData> vecStackDefect; |
| | | _grmDefectData StackDefect; |
| | |
| | | if (strlen(buffer) <= 0 || pStr == NULL) |
| | | break; |
| | | |
| | | /* < KJG 20220225 - #3850 ADD Start >*/ |
| | | if (strncmp(buffer, "DATA PANEL", 10) == 0) |
| | | { |
| | | pReadPoint = buffer; |
| | | CString strtemp; |
| | | pReadPoint = getParsingData(pReadPoint, 4, &strtemp); |
| | | pReadPoint = getParsingData(pReadPoint, 5, &strtemp); |
| | | pReadPoint = getParsingData(pReadPoint, 5, &strtemp); |
| | | pReadPoint = getParsingData(pReadPoint, 27, &strtemp); |
| | | pReadPoint = getParsingData(pReadPoint, 20, &strtemp); |
| | | pReadPoint = getParsingData(pReadPoint, 20, &strtemp); |
| | | pReadPoint = getParsingData(pReadPoint, 10, &strtemp); |
| | | strncpy(pShared->GetGlassData()->m_strRawMergeStepID, strtemp.GetBuffer(0), 10 + 1); // Null 문자 떄문에 +1 |
| | | } |
| | | /* < KJG 20220225 - #3850 ADD End >*/ |
| | | if (strncmp(buffer, "DATA DEFECT", 10)) continue; |
| | | |
| | | //Defect Stack Start |
| | |
| | | StackDefect.m_DefectJudgement = Judge_TR; |
| | | else if (strtemp == "PR") |
| | | StackDefect.m_DefectJudgement = Judge_PR; |
| | | /* < KJG 20220225 - #Index ADD Start >*/ |
| | | else if (strtemp == "NG") |
| | | StackDefect.m_DefectJudgement = Judge_NG; |
| | | else if (strtemp == "ND") |
| | | StackDefect.m_DefectJudgement = Judge_ND; |
| | | /* < KJG 20220225 - #Index ADD End >*/ |
| | | else |
| | | StackDefect.m_StackInfo = Stack_Unknown; |
| | | |
| | |
| | | pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용 |
| | | pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용 |
| | | pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneNum m_sZonePixelCount[i] |
| | | |
| | | stringstream ConvertZone(strtemp.GetBuffer(0)); |
| | | unsigned int nZoneHexValue; |
| | | short sZonePixelCount[16] = { 0 }; |
| | | ConvertZone >> std::hex >> nZoneHexValue; |
| | | for (int i = 0; i < 16; i++) |
| | | { |
| | | if (nZoneHexValue & 1) |
| | | { |
| | | sZonePixelCount[i] = 1; |
| | | } |
| | | nZoneHexValue = nZoneHexValue >> 1; |
| | | } |
| | | memcpy_s(StackDefect.m_sZonePixelCount, sizeof(StackDefect.m_sZonePixelCount), sZonePixelCount, sizeof(sZonePixelCount)); |
| | | |
| | | pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSizeType |
| | | if (strtemp == "S") |
| | | StackDefect.m_DefectSizeType = SizeType_Small; |
| | |
| | | else |
| | | StackDefect.m_DefectType = DefectType_Unknown; |
| | | |
| | | |
| | | pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // Shrink |
| | | pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneClassNum m_sZoneClassPixelCount[i] |
| | | stringstream ConvertClass(strtemp.GetBuffer(0)); |
| | | unsigned int nClassHexValue; |
| | | short sZoneClassPixelCount[16] = { 0 }; |
| | | ConvertClass >> std::hex >> nClassHexValue; |
| | | for (int i = 0; i < 16; i++) |
| | | { |
| | | if (nClassHexValue & 1) |
| | | { |
| | | sZoneClassPixelCount[i] = 1; |
| | | } |
| | | nClassHexValue = nClassHexValue >> 1; |
| | | } |
| | | memcpy_s(StackDefect.m_sZoneClassPixelCount, sizeof(StackDefect.m_sZoneClassPixelCount), sZoneClassPixelCount, sizeof(sZoneClassPixelCount)); |
| | | |
| | | |
| | | vecStackDefect.push_back(StackDefect); |
| | | } |
| | | } |
| | |
| | | pShared->GetGlassData()->m_nRawMergeNum = m_vecStackDefect.size(); // RawMerge |
| | | pShared->GetGlassData()->m_bRawMergeRead = TRUE; |
| | | |
| | | AKLOG("Import Vector Size : %d", m_vecStackDefect.size()); |
| | | /* < KJG 20220225 - #3850 MOD Start >*/ |
| | | //AKLOG("Import Vector Size : %d", m_vecStackDefect.size()); |
| | | AKLOG("Import Vector Size : [%s]%d", pShared->GetGlassData()->m_strRawMergeStepID, m_vecStackDefect.size()); |
| | | /* < KJG 20220225 - #3850 MOD End >*/ |
| | | return TRUE; |
| | | } |
| | | |
| | |
| | | return &pBuf[nLen + 1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 |
| | | } |
| | | |
| | | BOOL CRawResultReader::readOptionFile(char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/) |
| | | BOOL CRawResultReader::readOptionFile(char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/) |
| | | { |
| | | if (pFileName == NULL) pFileName = m_strConfigFile; |
| | | |
| | |
| | | |
| | | pThis->m_nThreadStackFileReadFlag = 0; |
| | | } |
| | | /* <LJC 20211122 : #3820 ADD Start> */ |
| | | void CRawResultReader::ProcessResultFileRead(void * pArg) |
| | | { |
| | | CRawResultReader* pThis = (CRawResultReader*)pArg; |
| | | |
| | | pThis->m_nThreadStackFileReadFlag = 1; |
| | | int nReadFailCount = 0; |
| | | int nThreadCount = 0; |
| | | CString strGlassID; |
| | | |
| | | while (pThis->m_nThreadStackFileReadFlag == 1) |
| | | { |
| | | if (pThis->m_nProcessState == RPS_CmdFileRead) //스택파일 읽기 수행 [김태현 2019/1/12] |
| | | { |
| | | strGlassID = pThis->m_strGlassID; |
| | | |
| | | pThis->m_nProcessState = RPS_StateFileRead; |
| | | nThreadCount = 0; |
| | | nReadFailCount = 0; |
| | | |
| | | AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID); |
| | | Sleep(3000); |
| | | while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1) |
| | | { |
| | | if (pThis->openFile(strGlassID.GetBuffer(0)) == TRUE) |
| | | { |
| | | pThis->m_nProcessState = RPS_ResultReadOK; |
| | | AKLOG("RawMerge File Read Complete "); |
| | | break; |
| | | } |
| | | nReadFailCount++; |
| | | AKLOG("RawMerge File Read Try : %d", nReadFailCount); |
| | | if (nReadFailCount > 10) |
| | | { |
| | | pThis->m_nProcessState = RPS_ResultReadFail; |
| | | break; |
| | | } |
| | | Sleep(50); |
| | | } |
| | | if (pThis->m_nProcessState != RPS_ResultReadOK) |
| | | { |
| | | pThis->m_nProcessState = RPS_ResultReadFail; |
| | | } |
| | | } |
| | | if (nReadFailCount) |
| | | Sleep(500); |
| | | } |
| | | pThis->m_nThreadStackFileReadFlag = 0; |
| | | } |
| | | /* <LJC 20211122 : #3820 ADD End> */ |
| | | BOOL CRawResultReader::RawMergeFileReadStart(char* pGlassID) |
| | | { |
| | | if (m_nThreadStackFileReadFlag == 0) |
| | |
| | | |
| | | return TRUE; |
| | | } |
| | | /* <LJC 20211122 : #3820 ADD Start> */ |
| | | BOOL CRawResultReader::ProcessRawMergeFileReadStart(char * pGlassID) |
| | | { |
| | | |
| | | if (m_nThreadStackFileReadFlag == 0) |
| | | { |
| | | ProcessResultFileRead(this); |
| | | } |
| | | if (m_nProcessState == RPS_StateFileRead) |
| | | { |
| | | m_nProcessState = RPS_CmdFileStop; |
| | | while (m_nProcessState == RPS_CmdFileStop) Sleep(0); |
| | | } |
| | | |
| | | m_strGlassID = pGlassID; |
| | | m_nProcessState = RPS_CmdFileRead; |
| | | |
| | | return TRUE; |
| | | } |
| | | /* <LJC 20211122 : #3820 ADD End> */ |
| | | BOOL CRawResultReader::RawMergeFileReadStop(BOOL bWait/*=TRUE*/) |
| | | { |
| | | /* |