From 9c13bc5af33d28bb217995597f88fe863db42442 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 금, 01 4월 2022 10:59:55 +0900 Subject: [PATCH] AOI RawMessnger 동기화 --- DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp | 149 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 143 insertions(+), 6 deletions(-) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp index ea5f9c5..d5d79d1 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp @@ -5,6 +5,7 @@ #include <process.h> #include "DitGlassRawClient.h" #include "GlassRawBase.h" +#include <sstream> #ifdef _DEBUG #undef THIS_FILE @@ -47,11 +48,14 @@ 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); @@ -59,6 +63,14 @@ 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; @@ -77,6 +89,21 @@ 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 @@ -125,6 +152,12 @@ 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; @@ -151,6 +184,21 @@ 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; @@ -230,6 +278,24 @@ 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); } } @@ -250,7 +316,10 @@ 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; } @@ -289,7 +358,7 @@ 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; @@ -363,7 +432,56 @@ 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) @@ -382,7 +500,26 @@ 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*/) { /* -- Gitblit v1.9.3