From 0c66940a8e2cf64c9890519901f433b3668216b6 Mon Sep 17 00:00:00 2001 From: KEJ <kimeungju@diteam.co.kr> Date: 수, 26 6월 2024 15:13:18 +0900 Subject: [PATCH] Ongoing80 #4942 CF AOI Review Bin File Loading 실패 개선 1. GlassRawMessenger 동기화 2. BIN파일 FindFile 제거(RawMessenger, Review 공통) 3. Unloading 시 BIN파일 제거 --- DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp | 239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 222 insertions(+), 17 deletions(-) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp index ea5f9c5..40a0209 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,18 +48,33 @@ 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); + FILE* pf = fopen(strFileName.GetBuffer(0), "r"); if (pf == NULL) return FALSE; + + /* <KMH 20220407 : #4053 ADD Start> */ + AKLOG("Function : Read File Path: %s" , strFileName); + /* <KMH 20220407 : #4053 ADD End> */ + /*< 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 +93,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 +156,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; @@ -145,12 +182,31 @@ StackDefect.m_StackInfo = Stack_Unknown; pReadPoint = getParsingData(pReadPoint, 2, &StackDefect.m_nStackStepCount); - pReadPoint = getParsingData(pReadPoint, 60, &strtemp); // Stack Step m_strStackFirst - strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 60); + /* < KMH 20220712 : #4230 MOD Start > */ + //pReadPoint = getParsingData(pReadPoint, 60, &strtemp); // Stack Step m_strStackFirst + //strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 60); + pReadPoint = getParsingData(pReadPoint, 400, &strtemp); // Stack Step m_strStackFirst + strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 400); + /* < KMH 20220712 : #4230 MOD End > */ pReadPoint = getParsingData(pReadPoint, 16, &strtemp); // ReviewImageName m_strRevImageName 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 +286,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 +324,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 +366,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; @@ -299,7 +376,9 @@ akFileDB.getItem("RawMerge_Use", &m_bStackUse, 0); akFileDB.getItem("RawMerge_LocalPath", m_strLocalPath, "D:\\DIT_ResultData\\RawMerge"); - if (m_bStackUse && m_nThreadStackFileReadFlag == 0) + //< SWK 20220413 - #4053 MOD > +// if (/*m_bStackUse && */m_nThreadStackFileReadFlag == 0) + if (m_nThreadStackFileReadFlag == 0) { _beginthread(threadResultFileRead, NULL, this); } @@ -326,7 +405,8 @@ nReadFailCount = 0; AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID); - Sleep(3000); + //< SWK 20220413 - #4053 DEL > +// Sleep(3000); while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1) { if ((nThreadCount++ % 20) != 0) //명령 수행을 빠르게 감지 위한 조치 @@ -342,30 +422,120 @@ } nReadFailCount++; - AKLOG("RawMerge File Read Try : %d", nReadFailCount); + //< SWK 20220413 - #4053 DEL > +// AKLOG("RawMerge File Read Try : %d", nReadFailCount); if (nReadFailCount > 10) { pThis->m_nProcessState = RPS_ResultReadFail; break; } + //< SWK 20220413 - #4053 ADD > + AKLOG("RawMerge File Read Try : %d", nReadFailCount); - Sleep(50); + //< SWK 20220413 - #4053 DEL > +// Sleep(50); } if (pThis->m_nProcessState != RPS_ResultReadOK) { pThis->m_nProcessState = RPS_ResultReadFail; } } - if (nReadFailCount) - Sleep(500); + /* < KMH 20220825 : #4278 MOD Start > */ + // CPU 사용증가 해결 + //if (nReadFailCount) + // Sleep(500); + Sleep(500); + /* < KMH 20220825 : #4278 MOD End > */ } pThis->m_nThreadStackFileReadFlag = 0; } - +/* <LJC 20211122 : #3820 ADD Start> */ +/*< SWK 20220413 - #4053 MOD Start >*/ +//void CRawResultReader::ProcessResultFileRead(void * pArg) +void CRawResultReader::ProcessResultFileRead() +/*< SWK 20220413 - #4053 MOD End >*/ +{ + /*< SWK 20220413 - #4053 MOD Start >*/ +// 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; + m_nProcessState = RPS_StateFileRead; + int nReadFailCount = 0; + int nThreadCount = 0; + AKLOG("RawMerge File Read Start : %s\\%s", m_strLocalPath, m_strGlassID); + while (m_nProcessState == RPS_StateFileRead && m_nThreadStackFileReadFlag == 1) + { + if (openFile(m_strGlassID.GetBuffer(0)) == TRUE) + { + m_nProcessState = RPS_ResultReadOK; + AKLOG("RawMerge File Read Complete "); + break; + } + nReadFailCount++; + if (nReadFailCount > 10) + { + m_nProcessState = RPS_ResultReadFail; + break; + } + AKLOG("RawMerge File Read Try : %d", nReadFailCount); + } + if (m_nProcessState != RPS_ResultReadOK) + { + m_nProcessState = RPS_ResultReadFail; + } + /*< SWK 20220413 - #4053 MOD End >*/ +} +/* <LJC 20211122 : #3820 ADD End> */ BOOL CRawResultReader::RawMergeFileReadStart(char* pGlassID) { + /*< SWK 20220413 - #4053 ADD Start >*/ + m_strGlassID = pGlassID; + m_nProcessState = RPS_CmdFileRead; + /*< SWK 20220413 - #4053 ADD End >*/ + if (m_nThreadStackFileReadFlag == 0) { _beginthread(threadResultFileRead, NULL, this); @@ -377,12 +547,47 @@ while (m_nProcessState == RPS_CmdFileStop) Sleep(0); } - m_strGlassID = pGlassID; - m_nProcessState = RPS_CmdFileRead; + /*< SWK 20220413 - #4053 DEL Start > +// m_strGlassID = pGlassID; +// m_nProcessState = RPS_CmdFileRead; + < SWK 20220413 - #4053 DEL End >*/ return TRUE; } +/* <LJC 20211122 : #3820 ADD Start> */ +BOOL CRawResultReader::ProcessRawMergeFileReadStart(char * pGlassID) +{ + if (m_nThreadStackFileReadFlag == 0) + { + //< SWK 20220413 - #4053 MOD > +// ProcessResultFileRead(this); + ProcessResultFileRead(); + } + /*< SWK 20220413 - #4053 MOD Start >*/ +// if (m_nProcessState == RPS_StateFileRead) +// { +// m_nProcessState = RPS_CmdFileStop; +// while (m_nProcessState == RPS_CmdFileStop) Sleep(0); +// } +// +// m_strGlassID = pGlassID; +// m_nProcessState = RPS_CmdFileRead; + else + { + if (m_nProcessState == RPS_StateFileRead) + { + m_nProcessState = RPS_CmdFileStop; + while (!(m_nProcessState == RPS_ResultReadOK || m_nProcessState == RPS_ResultReadFail)) Sleep(0); + } + m_strGlassID = pGlassID; + m_nProcessState = RPS_CmdFileRead; + } + /*< SWK 20220413 - #4053 MOD End >*/ + + return TRUE; +} +/* <LJC 20211122 : #3820 ADD End> */ BOOL CRawResultReader::RawMergeFileReadStop(BOOL bWait/*=TRUE*/) { /* -- Gitblit v1.9.3