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/GlassRawDemo.cpp | 4 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h | 15 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawRTMS.cpp | 7 DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.h | 2 DitGlassRawMessenger/Extern/DitGlassRawClient.cpp | 23 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h | 14 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCSOT.cpp | 2 DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.cpp | 24 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp | 11 DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp | 37 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp | 61 + DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp | 4 DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h | 2 DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp | 149 ++++ DitGlassRawMessenger/Extern/DitGlassRawClient.h | 9 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc | 2 DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp | 2 DitGlassRawMessenger/DitGlassRawMessenger/StackResultCSOT.cpp | 2 DitGlassRawMessenger/DitGlassRawMessenger/CustomizeReview.cpp | 2 /dev/null | 750 ------------------------- DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h | 9 DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h | 7 DitGlassRawMessenger/DitGlassRawMessenger/akLoggerExt.cpp | 2 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h | 5 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp | 607 +++++++------------ 25 files changed, 563 insertions(+), 1,189 deletions(-) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp index 10087f0..a448821 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp @@ -19,9 +19,15 @@ BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData) { //return TRUE; - + /* < KJG 20220225 - #4000 MOD Start >*/ + //CString strFilePathName; + //strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); + char* pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; CString strFilePathName; - strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); + CString strFileName = pData->GetGlassData()->m_strFileName; + strFileName.Replace(".bin", ".csv"); + strFilePathName.Format("%s\\%s", pData->GetGlassData()->m_strPath, strFileName); + /* < KJG 20220225 - #4000 MOD End >*/ FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); if (pf == NULL) @@ -29,9 +35,12 @@ AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); return FALSE; } + /* < KJG 20220225 - #4000 MOD Start >*/ + //fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID); + //fprintf(pf, "GlassID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg"); + fprintf(pf, "GlassID, SubPanelID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg"); + /* < KJG 20220225 - #4000 MOD End >*/ - fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID); - fprintf(pf, "GlassID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg"); for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",Zone%02d", i); //210123 CJH - Zone별 min, max, avg 값 표기 for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffMin%02d", i); @@ -46,13 +55,21 @@ for (int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) { _grmDefectData* pDefect = pData->GetDefectData(iDefect); + /* < KJG 20220225 - #4000 ADD Start >*/ + CString strDefectCellID; + strDefectCellID.Format("%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefect->m_nCellIdx / 36, pCellCode[pDefect->m_nCellIdx % 36]); + /* < KJG 20220225 - #4000 ADD End >*/ if (pData->GetGlassData()->m_nScanCoordinateY == 1) //분판설비의 경우 XY반전 { - fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0, + /* < KJG 20220225 - #4000 MOD Start >*/ + //fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", + // pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0, + fprintf(pf, "%s, %s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", + pData->GetGlassData()->m_strGlassID, strDefectCellID.GetBuffer(0), pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0, pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); + /* < KJG 20220225 - #4000 MOD End >*/ for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); @@ -91,11 +108,15 @@ } else { - fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0, + /* < KJG 20220225 - #4000 MOD Start >*/ + //fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", + // pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0, + fprintf(pf, "%s, %s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", + pData->GetGlassData()->m_strGlassID, strDefectCellID.GetBuffer(0), pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0, pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); + /* < KJG 20220225 - #4000 MOD End >*/ for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/CustomizeReview.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/CustomizeReview.cpp index 8eb3b22..4981ac7 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/CustomizeReview.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/CustomizeReview.cpp @@ -9,7 +9,7 @@ #define new DEBUG_NEW #endif -#define CUSTOMIZE_RECIPE_PATH "C:\\DIT_Review\\Recipe" +#define CUSTOMIZE_RECIPE_PATH "D:\\DIT_Review\\Recipe" CCustomizeReview::CCustomizeReview(void) { diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc index f723721..a8d4cf8 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc @@ -146,7 +146,7 @@ PUSHBUTTON "Manual\nFTP Upload",IDC_BTN_FTP_MANUALUPLOAD,418,20,39,31,BS_MULTILINE | WS_DISABLED LTEXT "Stack File",IDC_STATIC,16,100,30,8 LTEXT "RawMerge File",IDC_STATIC,15,115,46,8 - CONTROL "",IDC_CHECK_RAWMERGEFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,115,16,10 + CONTROL "",IDC_CHECK_RAWMERGEFILEREAD,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,72,115,16,10 EDITTEXT IDC_EDIT_RAWMERGE_LOCALSAVEPATH,94,112,121,14,ES_AUTOHSCROLL END diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp index e2290d6..056f20b 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp @@ -166,6 +166,9 @@ ON_BN_CLICKED(IDC_BTN_STACKAPPLY, &CDitGlassRawMessengerDlg::OnBnClickedBtnStackapply) ON_BN_CLICKED(IDC_TEST_CMD, &CDitGlassRawMessengerDlg::OnBnClickedTestCmd) ON_BN_CLICKED(IDC_BTN_FTP_MANUALUPLOAD, &CDitGlassRawMessengerDlg::OnBnClickedBtnFtpManualupload) + /* <LJC 20211122 : #3820 ADD Start> */ + ON_WM_COPYDATA() + /* <LJC 20211122 : #3820 ADD End> */ END_MESSAGE_MAP() void GetCompileTime(tm& timestruct) @@ -251,11 +254,13 @@ akFileDB.getItem("DataMaxNumCell", &m_ConfigOption.m_nMaxDataNumCell, 200); akFileDB.getItem("DataMaxNumDefect", &m_ConfigOption.m_nMaxDataNumDefect, 50000); akFileDB.getItem("SelectRawType", &m_ConfigOption.m_nSelectRawType, 0); - akFileDB.getItem("LogFilePath", m_ConfigOption.m_strLogFilePath, "c:\\AOIServer\\LogRawMessenger\\LogRawMessenger"); + akFileDB.getItem("LogFilePath", m_ConfigOption.m_strLogFilePath, "D:\\AOIServer\\LogRawMessenger\\LogRawMessenger"); akFileDB.getItem("Stack_Use", &m_ConfigOption.m_bUseStack, 0); akFileDB.getItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath, "D:\\DIT_ResultData\\Stack"); + /*< KJG 20211024 - #3487 ADD Start >*/ akFileDB.getItem("RawMerge_Use", &m_ConfigOption.m_bUseRawMerge, 0); akFileDB.getItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath, "D:\\DIT_ResultData\\RawMerge"); + /*< KJG 20211024 - #3487 ADD End >*/ akFileDB.getItem("Stack_EquipID",m_ConfigOption.m_strStackEquipID, "AAAAA"); akFileDB.getItem("Stack_Param1",m_ConfigOption.m_strStackParam1, ""); akFileDB.getItem("Stack_Param2",m_ConfigOption.m_strStackParam2, ""); @@ -280,7 +285,7 @@ CreateDirectory(strPath, NULL); //CakLoggerExt::getInstance()->setWriteFileMode(m_ConfigOption.m_strLogFilePath); - CakLoggerExt::getInstance()->setWriteFileMode2("C:\\DIT_LogData\\", "logGlassRawMessenger"); + CakLoggerExt::getInstance()->setWriteFileMode2("D:\\DIT_LogData\\", "logGlassRawMessenger"); CakLoggerExt::getInstance()->m_hParent = GetSafeHwnd(); m_ctrlLoggerList; @@ -1349,8 +1354,10 @@ akFileDB.setItem("Stack_Use", m_ConfigOption.m_bUseStack); akFileDB.setItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath); + /*< KJG 20211024 - #3487 ADD Start >*/ akFileDB.setItem("RawMerge_Use", m_ConfigOption.m_bUseRawMerge); akFileDB.setItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath); + /*< KJG 20211024 - #3487 ADD End >*/ akFileDB.setItem("Stack_EquipID", m_ConfigOption.m_strStackEquipID); akFileDB.setItem("Stack_Param1",m_ConfigOption.m_strStackParam1); akFileDB.setItem("Stack_Param2",m_ConfigOption.m_strStackParam2); @@ -1530,8 +1537,10 @@ { m_ConfigOption.m_bUseStack = ((CButton*)GetDlgItem(IDC_CHECK_STACKFILEREAD))->GetCheck(); GetDlgItemText(IDC_EDIT_STACK_LOCALSAVEPATH,m_ConfigOption.m_strStackLocalPath, 256); + /*< KJG 20211024 - #3487 ADD Start >*/ m_ConfigOption.m_bUseRawMerge = ((CButton*)GetDlgItem(IDC_CHECK_RAWMERGEFILEREAD))->GetCheck(); GetDlgItemText(IDC_EDIT_RAWMERGE_LOCALSAVEPATH, m_ConfigOption.m_strRawMergeLocalPath, 256); + /*< KJG 20211024 - #3487 ADD End >*/ GetDlgItemText(IDC_EDIT_STACK_EQUIPID,m_ConfigOption.m_strStackEquipID, 32); GetDlgItemText(IDC_EDIT_STACK_PARAM1,m_ConfigOption.m_strStackParam1, 32); GetDlgItemText(IDC_EDIT_STACK_PARAM2,m_ConfigOption.m_strStackParam2, 32); @@ -1613,3 +1622,51 @@ } + +/* <LJC 20211122 : #3820 ADD Start> */ +BOOL CDitGlassRawMessengerDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) +{ + // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. + CDitGlassRawServer* pServer = (CDitGlassRawServer*)&m_Server; + CgrmGlassRawData* pRawDataBuffer = &m_GlassRawDataBuffer; + pRawDataBuffer->ImportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData(), true); + CFTPCopyDataParam* FTPCopyDataParam = ((CFTPCopyDataParam*)pCopyDataStruct->lpData); + switch (pCopyDataStruct->dwData) + { + case COPYDATA_RAW_DOWNLOAD_ACK: + { + if (FTPCopyDataParam->m_nProcessType == CFTPCopyDataParam::FTPProcessType_DownFile && pServer->GetGlassRawInfo()->m_ServerProcStep == APS_GlassLoading && m_pGlassRawMaker->GetEnableFtpAck() == TRUE) + { + if (FTPCopyDataParam->m_nSendResultCode == TRUE) + { + m_pGlassRawMaker->SetEnableFtpAck(FALSE); + m_pGlassRawMaker->SearchFIle(pRawDataBuffer); + break; + } + else + { + m_nMaxMergeList++; + m_pGlassRawMaker->DownLoadMergeFile(pRawDataBuffer); + if (m_nMaxMergeList > 10) + { + m_nMaxMergeList = 0; + break; + } + + } + } + else + { + break; + } + + } + break; + + default: + break; + } + + return CDialog::OnCopyData(pWnd, pCopyDataStruct); +} +/* <LJC 20211122 : #3820 ADD End> */ \ No newline at end of file diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h index 6d2ff03..7465412 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h @@ -21,6 +21,10 @@ #define UM_GLASSRAW_CLIENTMESSAGE WM_USER+0x1231 #define UM_TRAYICON_MSG WM_USER + 0x1230 + /* <LJC 20211122 : #3820 ADD Start> */ +#define COPYDATA_RAW_DOWNLOAD_ACK 11 + /* <LJC 20211122 : #3820 ADD End> */ + // CDitGlassRawMessengerDlg 대화 상자 class CDitGlassRawMessengerDlg : public CDialog { @@ -55,8 +59,10 @@ char m_strStackParam1[32]; char m_strStackParam2[32]; + /*< KJG 20211024 - #3487 ADD Start >*/ int m_bUseRawMerge; char m_strRawMergeLocalPath[256]; + /*< KJG 20211024 - #3487 ADD End >*/ }m_ConfigOption; void WriteConfigFile(); @@ -72,6 +78,10 @@ public: static void threadMain(void* arg); int m_nThreadMainFlag; + + /* <LJC 20211122 : #3820 ADD Start> */ + int m_nMaxMergeList=0; + /* <LJC 20211122 : #3820 ADD End> */ public: CString m_strGlassID; @@ -135,4 +145,8 @@ afx_msg void OnBnClickedBtnStackapply(); afx_msg void OnBnClickedTestCmd(); afx_msg void OnBnClickedBtnFtpManualupload(); + + /* <LJC 20211122 : #3820 ADD Start> */ + afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct); + /* <LJC 20211122 : #3820 ADD End> */ }; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp index e88e79b..333f58c 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp @@ -42,7 +42,9 @@ || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData + /*< KJG 20211024 - #3487 ADD Start >*/ || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData) + /*< KJG 20211024 - #3487 ADD End >*/ { return FALSE; } @@ -52,7 +54,9 @@ m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum; m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum; m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum; + /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum; + /*< KJG 20211024 - #3487 ADD End >*/ m_pGlassRawInfo->m_nGlassRawDataSize; { @@ -73,8 +77,10 @@ m_pGlassRawInfo->m_nStackDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum; + /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum; + /*< KJG 20211024 - #3487 ADD End >*/ m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum; } @@ -130,7 +136,9 @@ m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData); m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData); m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData); + /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData); + /*< KJG 20211024 - #3487 ADD End >*/ int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4; } @@ -184,7 +192,8 @@ m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + /*< KJG 20211024 - #3487 ADD Start >*/ m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; - + /*< KJG 20211024 - #3487 ADD End >*/ return TRUE; } diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h index a3dc3f5..491c465 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h @@ -18,8 +18,9 @@ _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; }; + /*< KJG 20211024 - #3487 ADD Start >*/ _grmDefectData* GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; }; - + /*< KJG 20211024 - #3487 ADD End >*/ _grmDitGlassRawInfo* GetGlassRawInfo(){return m_pGlassRawInfo;}; protected: @@ -32,7 +33,9 @@ _grmCellData* m_pCellData; _grmDefectData* m_pDefectData; _grmDefectData* m_pStackData; + /*< KJG 20211024 - #3487 ADD Start >*/ _grmDefectData* m_pRawMergeData; + /*< KJG 20211024 - #3487 ADD End >*/ protected: HANDLE m_hMapBasicInfo; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp index b8c7ebe..cd1ae2b 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp @@ -4,7 +4,9 @@ #include "akLoggerExt.h" CGlassRawBase::CGlassRawBase(void) -{ +{ /* <LJC 20211122 : #3820 ADD Start> */ + b_EnableFtpAck = FALSE; + /* <LJC 20211122 : #3820 ADD End> */ } CGlassRawBase::~CGlassRawBase(void) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h index ea973a0..9228f32 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h @@ -34,7 +34,7 @@ enum ReKind { Re_Other, Re_TFE_CIRCLE, Re_PI_CONVEX, Re_PI_CONCAVE, Re_PI_1, Re_PI_2, Re_PI_3 }; //choigudal jude fix 2012.03.07 -enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 추가 +enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_ND, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_LN/*KMH 220318 : #3954 ADD */, Judge_Unknown };/* <KYH 211129 : #3796 ADD Start> */ enum MAP16_DefectClass { CLASS_C1 = 1, CLASS_C2, CLASS_C3, CLASS_C4, CLASS_C5, CLASS_C6, CLASS_C7, CLASS_C8, CLASS_C9, CLASS_C10, CLASS_C11, CLASS_C12, CLASS_C13, CLASS_C14, CLASS_C15, CLASS_C16 }; enum MAP16_SizeType { SIZE_SS = 0, SIZE_SM, SIZE_SL, SIZE_SOH, SIZE_IDX_MAX }; enum MAP16_PeakType { PEEK_PS = 0, PEEK_PL, PEEK_PH, PEEK_POH, PEAK_IDX_MAX }; @@ -69,7 +69,14 @@ virtual BOOL SequenceFtpUpload(char* pRawFileName){return TRUE;}; virtual void NotifyUpdateOptionInfo(){}; + /* <LJC 20211122 : #3820 ADD Start> */ + virtual void DownLoadMergeFile(CgrmGlassRawData* pData) { return; }; + virtual void SearchFIle(CgrmGlassRawData* pData) { return; }; + BOOL GetEnableFtpAck() { return b_EnableFtpAck; }; + void SetEnableFtpAck(BOOL b_value) { b_EnableFtpAck = b_value; }; + BOOL b_EnableFtpAck; + /* <LJC 20211122 : #3820 ADD End> */ }; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp index 5033f78..fc064a2 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp @@ -30,6 +30,12 @@ #define NETWORK_MURARAW_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\RAW" //0405nwh #define NETWORK_MURA_IMAGE_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\IMG" //0405nwh +//KYH Stack Local 寃쎈줈 異붽� +#define NETWORK_AOISTACKLOCAL_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Stack" + /* <LJC 20211122 : #3820 ADD Start> */ +#define NETWORK_AOIRAWMERGELOCAL_PATH "D:\\DIT_ResultData\\RawMerge" + /* <LJC 20211122 : #3820 ADD End> */ + char* g_pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; void _TimeDelay(int delay) @@ -37,9 +43,9 @@ MSG msg; BOOL fRst = FALSE; - clock_t lBlockTime = delay + clock(); + ULONGLONG lBlockTime = delay + GetTickCount64(); - while (lBlockTime > clock()) + while (lBlockTime > GetTickCount64()) { fRst = (BOOL)PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); if (fRst) @@ -70,19 +76,51 @@ BOOL CGlassRawCPJT::SequenceGlassLoading( CgrmGlassRawData* pData ) { - //�뒪�깮湲곕뒫 + SetEnableFtpAck(FALSE); + m_nRawMergeIdx = 0; if(m_StackResult.getStackUse()) { + + CString strStackFileLocalPath; + strStackFileLocalPath.Format("%s\\%s", NETWORK_AOISTACKLOCAL_PATH, pData->GetGlassData()->m_strGlassID); + + CFileFind File; + + if (File.FindFile(strStackFileLocalPath)) + { + File.FindNextFile(); + strStackFileLocalPath = File.GetFilePath(); + DeleteFile(strStackFileLocalPath); + Sleep(10); + } + else + { + AKLOG("Delete Stack File Fail [%s]", strStackFileLocalPath); + } + + //201218 CJH - Stack Download �떆�룄 SendMessageFTPDownloadStack(pData->GetGlassData()); - m_StackResult.StackFileReadStart(pData->GetGlassData()->m_strGlassID); } - if (m_RawMergeResult.getRawMergeUse()) + /* <LJC 20211122 : #3820 ADD Start> */ + if (pData->GetGlassData()->m_bRawMergeUse) { - SendMessageFTPDownloadDataFile(pData->GetGlassData()); - m_RawMergeResult.RawMergeFileReadStart(pData->GetGlassData()->m_strGlassID); + CString strRawFileLocalPath; + strRawFileLocalPath.Format("%s\\%s", NETWORK_AOIRAWMERGELOCAL_PATH, pData->GetGlassData()->m_strGlassID); + CFileFind File; + if (File.FindFile(strRawFileLocalPath)) + { + File.FindNextFile(); + strRawFileLocalPath = File.GetFilePath(); + DeleteFile(strRawFileLocalPath); + Sleep(10); + } + SetEnableFtpAck(TRUE); + DownLoadMergeFile(pData); } + /* <LJC 20211122 : #3820 ADD End> */ + /*< KJG 20211024 - #3487 ADD End >*/ return TRUE; } @@ -115,7 +153,7 @@ return FALSE; - if (1) ReadMuraFile(pData); + //if(1) ReadMuraFile(pData); 211012 KJG - QD Macro 媛쒕퀎 �뾽濡쒕뱶 �븯誘�濡� Macro �뜲�씠�꽣 �쟻�젣 �젣嫄� �슂泥� if (WriteAOIFile(pData) == FALSE) @@ -126,12 +164,59 @@ //210218 CJH - 寃��궗 醫낅즺�떆 寃곌낵�뙆�씪 諛� CCD Image �뾽濡쒕뱶 SendMessageFTPUploadRaw(pData->GetGlassData()); + /* <KYH 211129 : #3806 ADD Start> */ + char pServerPath[256] = {}; + char pServerFile[256] = {}; + + CString strGlassID = pData->GetGlassData()->m_strGlassID; + CString strGlassIDLevel6th = strGlassID.Left(6); + CString strStepID = pData->GetGlassData()->m_strStepID; + CString strProcessID = pData->GetGlassData()->m_strProcessID; + CString strFileName; + + strcpy(pServerFile, "*.*"); + + strFileName.Format("%s", strGlassID); + strFileName.MakeLower(); + + sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); + + strStepID.MakeLower(); + strGlassID.MakeLower(); + strGlassIDLevel6th.MakeLower(); + strProcessID.MakeLower(); + +// if (strGlassID.GetLength() > 6) +// sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID); +// else + sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); + /* <KYH 211129 : #3806 ADD End> */ + + BOOL bIsBDI = strcmp((pData->GetGlassData()->m_strLine), _T("BDI")) == 0 ? TRUE : FALSE; if (bIsBDI) { SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE); + + /* <KYH 211129 : #3806 ADD Start> */ + CString strRawFilePathName = NULL; + CString strLine = NULL; + strRawFilePathName += LOCAL_RAWPATH_INFO_INI_PATH; + strRawFilePathName += RAWINFO_FILE_NAME; + FILE* pf = fopen(strRawFilePathName.GetBuffer(0), "w"); + if (pf != NULL) + { + strLine = pServerPath + strFileName; + fprintf(pf, "[RESULT_PATH]\n"); + fprintf(pf, "RAWPATH= X:\%s\n", strLine.GetBuffer(0)); + SetRawFilePath(strLine.GetBuffer(0)); + fprintf(pf, "SUMPATH= \n"); + fprintf(pf, "IMGPATH= Z:\%s\n", strLine.GetBuffer(0)); + fprintf(pf, "DISK=FILESERVER\n"); + fclose(pf); + } } - + /* <KYH 211129 : #3806 ADD End> */ SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);//0405nwh return TRUE; @@ -234,7 +319,7 @@ pData->GetGlassData()->m_strFileName; strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWDFS_PATH); - if(1) ReadMuraFile(pData); + //if(1) ReadMuraFile(pData); 211012 KJG - QD Macro 媛쒕퀎 �뾽濡쒕뱶 �븯誘�濡� Macro �뜲�씠�꽣 �쟻�젣 �젣嫄� �슂泥� if(WriteAOIFile(pData) == FALSE) return FALSE; @@ -370,7 +455,7 @@ } strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName); - //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); + //strFilePathName.Format("D:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); // 湲��씪�뒪 ID留� 議댁옱�븯�뿬 �옱寃��궗 �떆 �뙆�씪 �깮�꽦 �떎�뙣. �궘�젣�븳�떎 DeleteFile(strFilePathName); @@ -398,7 +483,10 @@ ////////////////////////////////////////////////////////////////////////// //GLASSDATA { - makeDataGlass(strLine, pGlass); + /*< KJG 20211229 - #3846 MOD Start >*/ + //makeDataGlass(strLine, pGlass); + makeDataGlass(strLine, pData, pGlass); + /*< KJG 20211229 - #3846 MOD End >*/ fprintf(pf, "%s\n", strLine.GetBuffer(0)); } @@ -444,21 +532,24 @@ { strLine.Empty(); CString strValue; - - strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR TB TW RB RW T_STACK MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT BR_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT"; //53ea + /*< KJG 20211229 - #3846 MOD Start >*/ + //strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT"; + strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT"; //56ea + /*< KJG 20211229 - #3846 MOD End >*/ strLine += strValue; strLine += "\n"; - strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY_0 PORTION_0 CORNER_GRAY_0 AVG_AMP_0 FFT_VAR_0 FFT_VAH_0 FFT_VAQ_0 FFT_PK_0 AVG_GRAY_1 PORTION_1 CORNER_GRAY_1 AVG_AMP_1 FFT_VAR_1 FFT_VAH_1 FFT_VAQ_1 FFT_PK_1 AVG_GRAY_2 PORTION_2 CORNER_GRAY_2 AVG_AMP_2 FFT_VAR_2 FFT_VAH_2 FFT_VAQ_2 FFT_PK_2 AVG_GRAY_3 PORTION_3 CORNER_GRAY_3 AVG_AMP_3 FFT_VAR_3 FFT_VAH_3 FFT_VAQ_3 FFT_PK_3"; //54ea 21-06-21 Mura Data 異붽� + strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT"; //31ea /* <KYH 211129 : #3796 MOD Start> */ strLine += strValue; strLine += "\n"; - //210405 - //ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG SCAN_AI REVIEW_AI INS_MODE INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK - strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea + strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE LINE_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea strLine += strValue; } #define SPRINTRAWSTART char strItemValue[1024];int nItemValueLen, nItemValuePos = 0;memset(strItemValue, ' ', sizeof(char)*1024) #define SPRINTRAW(ITEMSIZE, fmt, ...) nItemValueLen = sprintf(strItemValue+nItemValuePos, fmt,##__VA_ARGS__); strItemValue[nItemValuePos+ nItemValueLen] = ' ';nItemValuePos+=ITEMSIZE+1 #define SPRINTRAWEND strItemValue[nItemValuePos - 1] = 0; strLine = strItemValue -void CGlassRawCPJT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) +/*< KJG 20211229 - #3846 MOD Start >*/ +//void CGlassRawCPJT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) +void CGlassRawCPJT::makeDataGlass( CString& strLine, CgrmGlassRawData* pData, _grmGlassData* pGlassData ) +/*< KJG 20211229 - #3846 MOD End >*/ { SPRINTRAWSTART; @@ -513,7 +604,7 @@ 46 12 PAD_DATA // PAD Data 遺덈웾 �닔 47 12 M_DEFECT // MASK 遺덈웾 �닔 48 12 C_DEFECT // COMMON 遺덈웾 - 49 12 BR_DEFECT // SCRATCH 遺덈웾 �닔 + 49 12 BR_DEFECT // SCRATCH 遺덈웾 �닔 => LN_DEFECT // �씪�씤�꽦 遺덈웾 �닔 50 12 CRACK // Crack 遺덈웾 �닔 - Image 珥ъ긽 媛��닔 51 12 P_SHIFT // Pattern Shift 遺덈웾 �닔 - �젅�떆�뵾 �씠由� */ @@ -704,26 +795,39 @@ SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeTR); // 26 6 PR // Panel �젙蹂� 03 SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgePR); - // 27 6 TB // Panel �젙蹂� 04 + // 27 6 NG // Panel �젙蹂� 04 + SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeNG); /* <KYH 211129 : #3796 ADD Start> */ + // 28 6 TB // Panel �젙蹂� 04 SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTB); - // 28 6 TW // Panel �젙蹂� 05 + // 29 6 TW // Panel �젙蹂� 05 SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTW); - // 29 6 RB // Panel �젙蹂� 06 + // 30 6 RB // Panel �젙蹂� 06 SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRB); - // 30 6 RW // Panel �젙蹂� 07 + // 31 6 RW // Panel �젙蹂� 07 SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRW); - // 31 6 T_STACK // Panel �젙蹂� 08 SD+SP �닔 �엯�젰 + // 32 6 T_STACK // Panel �젙蹂� 08 SD+SP �닔 �엯�젰 SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackSD + pGlassData->m_nDefectNumStackSP); - //32 6 BMDF // Panel �젙蹂� 09 -> 蹂�寃� MAX_AVG_GRAY 04/12 nwh - if (strlen(pGlassData->m_strMaxAvgGray) == 0) + // 33 6 NO_DEFECT // Panel �젙蹂� 09 + SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeND); /* <KYH 211129 : #3796 ADD Start> */ + //34 6 BMDF // Panel �젙蹂� 10 -> 蹂�寃� MAX_AVG_GRAY 04/12 nwh + /*< KJG 20211229 - #3846 MOD Start >*/ + //if (strlen(pGlassData->m_strMaxAvgGray) == 0) + //{ + // SPRINTRAW(12, "*"); + //} + //else + //{ + // SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray); + //} + int nMaxCellNG = 0; + for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) { - SPRINTRAW(12, "*"); + _grmCellData* pCell = pData->GetCellData(iCell); + nMaxCellNG = max(nMaxCellNG, pCell->m_nDefectNumJudgeNG); } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray); - } - // 33 6 CJ // Panel �젙蹂� 10 -> 蹂�寃� MAX_PORTION 04/12 nwh + SPRINTRAW(12, "%d", nMaxCellNG); + /*< KJG 20211229 - #3846 MOD End >*/ + // 35 6 CJ // Panel �젙蹂� 11 -> 蹂�寃� MAX_PORTION 04/12 nwh if (strlen(pGlassData->m_strMaxPortion) == 0) { SPRINTRAW(12, "*"); @@ -732,15 +836,15 @@ { SPRINTRAW(12, "%s", pGlassData->m_strMaxPortion); } - // 34 6 OK_CELL // OK Cell Count + // 36 6 OK_CELL // OK Cell Count SPRINTRAW(12, "*"); - // 35 6 RJ_CELL // RJ Cell Count + // 37 6 RJ_CELL // RJ Cell Count SPRINTRAW(12, "*"); - // 36 6 RW_CELL // RW Cell Count + // 38 6 RW_CELL // RW Cell Count SPRINTRAW(12, "*"); - // 37 6 NR_CELL // NR Cell Count + // 39 6 NR_CELL // NR Cell Count SPRINTRAW(12, "*"); - // 38 6 MASK_CELL // MASK Cell Count //201215 CJH - CSTID濡� 蹂�寃� + // 40 6 MASK_CELL // MASK Cell Count //201215 CJH - CSTID濡� 蹂�寃� if (strlen(pGlassData->m_strCSTID) == 0) { SPRINTRAW(12, "*"); @@ -770,8 +874,12 @@ SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeMD); // 48 6 C_DEFECT // COMMON 遺덈웾 SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeCD); + /*< LHS 20211029 - #3783 MOD Start >*/ // 49 6 S_DEFECT // SCRATCH 遺덈웾 �닔 - SPRINTRAW(12, "*"); + //SPRINTRAW(12, "*"); + // 49 6 LN_DEFECT // Line 遺덈웾 �닔 + SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeLine); + /*< LHS 20211029 - #3783 MOD End >*/ // 50 6 CRACK // Crack 遺덈웾 �닔 //201217 CJH - Image 珥ъ긽 媛쒖닔濡� 蹂�寃� //SPRINTRAW(12, "%d", pGlassData->m_nDefectNumLocCrack); SPRINTRAW(12, "%d", pGlassData->m_nReviewNum); @@ -810,6 +918,15 @@ SPRINTRAW(12, "UNUSE"); } + if (pGlassData->m_bEdgeCrackUse) + { + SPRINTRAW(12, "%d", pGlassData->m_nDefectNumLocCrack); + } + else + { + SPRINTRAW(12, "UNUSE"); + } + SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] } @@ -839,7 +956,7 @@ 19 12 PAD_DATA // PAD Data Defect Count 20 12 M_DEFECT // MASK Defect Count 21 12 C_DEFECT // COMMON Defect Count - 22 12 S_DEFECT // SCRATCH Defect Count + 22 12 S_DEFECT // SCRATCH Defect Count ==> LN_DEFECT 23 12 CRACK // CRACK Defect Count 24 12 P_SHIFT // Pattern Shift Defect Count */ @@ -912,336 +1029,29 @@ // 21 6 C_DEFECT // COMMON Defect Count SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeCD); - // 22 6 S_DEFECT -> 22 6 PRO_IMAGE 蹂�寃� nwh0404 - if (strlen(pCellData->m_strProImage)) - { - SPRINTRAW(12, "%s", pCellData->m_strProImage); - } - else - { - SPRINTRAW(12,"*"); - } + /* <KYH 211129 : #3796 MOD Start> */ - // 23 12 AVG_GRAY_0 - if (strlen(pCellData->m_strAvgGray_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 24 12 PORTION_0 - if (strlen(pCellData->m_strPortion_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_0); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 25 12 CORNER_GRAY_0 - if (strlen(pCellData->m_strCorner_Gray_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 26 12 AVG_AMP_0 - if (strlen(pCellData->m_strAvgAmp_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 27 12 FFT_VAR_0 - if (strlen(pCellData->m_strFFTVar_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 28 12 FFT_VAH_0 - if (strlen(pCellData->m_strFFTVah_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 29 12 FFT_VAQ_0 - if (strlen(pCellData->m_strFFTVaq_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 30 12 FFT_PK_0 - if (strlen(pCellData->m_strFFTPK_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 31 12 AVG_GRAY_1 - if (strlen(pCellData->m_strAvgGray_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_1); - } - else - { - SPRINTRAW(12, "*"); - } - // 32 12 PORTION_1 - if (strlen(pCellData->m_strPortion_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_1); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 33 12 CORNER_GRAY_1 - if (strlen(pCellData->m_strCorner_Gray_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 34 12 AVG_AMP_1 - if (strlen(pCellData->m_strAvgAmp_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 35 12 FFT_VAR_1 - if (strlen(pCellData->m_strFFTVar_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 36 12 FFT_VAH_1 - if (strlen(pCellData->m_strFFTVah_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 37 12 FFT_VAQ_1 - if (strlen(pCellData->m_strFFTVaq_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 38 12 FFT_PK_1 - if (strlen(pCellData->m_strFFTPK_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 39 12 AVG_GRAY_2 - if (strlen(pCellData->m_strAvgGray_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_2); - } - else - { - SPRINTRAW(12, "*"); - } - // 40 12 PORTION_2 - if (strlen(pCellData->m_strPortion_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_2); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 41 12 CORNER_GRAY_2 - if (strlen(pCellData->m_strCorner_Gray_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 42 12 AVG_AMP_2 - if (strlen(pCellData->m_strAvgAmp_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 43 12 FFT_VAR_2 - if (strlen(pCellData->m_strFFTVar_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 44 12 FFT_VAH_2 - if (strlen(pCellData->m_strFFTVah_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 45 12 FFT_VAQ_2 - if (strlen(pCellData->m_strFFTVaq_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 46 12 FFT_PK_2 - if (strlen(pCellData->m_strFFTPK_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 47 12 AVG_GRAY_3 - if (strlen(pCellData->m_strAvgGray_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_3); - } - else - { - SPRINTRAW(12, "*"); - } - // 48 12 PORTION_3 - if (strlen(pCellData->m_strPortion_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_3); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 49 12 CORNER_GRAY_3 - if (strlen(pCellData->m_strCorner_Gray_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 50 12 AVG_AMP_3 - if (strlen(pCellData->m_strAvgAmp_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 51 12 FFT_VAR_3 - if (strlen(pCellData->m_strFFTVar_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 52 12 FFT_VAH_3 - if (strlen(pCellData->m_strFFTVah_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 53 12 FFT_VAQ_3 - if (strlen(pCellData->m_strFFTVaq_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 54 12 FFT_PK_3 - if (strlen(pCellData->m_strFFTPK_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_3); - } - else - { - SPRINTRAW(12, "*"); - } + // 22 6 PRO_IMAGE -> LN_DEFECT 蹂�寃� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeLine); + // 23 6 AVG_GRAY -> TR 蹂�寃� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeTR); + // 24 6 PORTION -> PR 蹂�寃� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgePR); + // 25 6 CORNER_GRAY -> NG 蹂�寃� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeNG); + // 26 6 AVG_AMP -> RB 蹂�寃� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeRB); + // 27 6 FFT_VAR -> RW 蹂�寃� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeRW); + // 28 6 TB 異붽� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeTB); //KYH TB �뜲�씠�꽣 異붽� + // 29 6 TW 異붽� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeTW); //KYH TW �뜲�씠�꽣 異붽� + // 30 6 FFT_VEH -> T_STACK 蹂�寃� + SPRINTRAW(12, "%d", pCellData->m_nDefectSDCount + pCellData->m_nDefectSPCount); + // 31 6 NO_DEFECT 異붽� + SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeND); //KYH ND �뜲�씠�꽣 異붽� + /* <KYH 211129 : #3796 MOD End> */ SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] } @@ -1269,7 +1079,7 @@ // 16 2 STACK_COUNT // Count of Defect detected step // 17 60 STACK_STEP // Flow(Step) of defect detection // 18 16 IMAGE_FILE // Image file Name - // 19 12 DSC Code + // 19 12 DSC Code ==> LINE_CODE // 20 12 Image 遺꾨쪟 Code // 21 12 遺덈웾�씠 �쐞移섑븳 Zone No �엯�젰 // 22 12 遺덈웾 �겕湲� (L,H,M,S) @@ -1411,8 +1221,18 @@ { SPRINTRAW(16, "*"); } - // 19 12 DSC_CODE // Common 01 DSC Code + /*< LHS 20211029 - #3783 MOD Start >*/ + // 19 12 DSC_CODE // Common 01 DSC Code ==> LINE_CODE + if (strlen(pDefectData->m_strLNDefectCode)) + { + SPRINTRAW(12, "%s", pDefectData->m_strLNDefectCode); + } + else + { SPRINTRAW(12, "*"); + } + //SPRINTRAW(12, "*"); + /*< LHS 20211029 - #3783 MOD End >*/ // 20 12 VC_CODE // Common 02 Image 遺꾨쪟 Code SPRINTRAW(12, "*"); // 21 12 ZONE_NO // Common 03 遺덈웾�씠 �쐞移섑븳 Zone No �엯�젰 @@ -1530,13 +1350,13 @@ SPRINTRAW(12, "*"); } // 32 NO USE -> CCD Image �쑀臾� - if (strlen(pDefectData->m_strAoiImageName)) + if (strrchr(pDefectData->m_strAoiImageName, '*') != NULL || strlen(pDefectData->m_strAoiImageName) < 4) // KYH 210826 CCD �씠誘몄� 臾몄옄�뿴�뿉�꽌 *�씠 �엳�쓣寃쎌슦 X 癒몄��븷寃� { - SPRINTRAW(12, "O"); + SPRINTRAW(12, "X"); } else { - SPRINTRAW(12, "X"); + SPRINTRAW(12, "O"); } // 33 12 CAM_POSITION // Common 15 Scan 踰덊샇 SPRINTRAW(12, "%d", pDefectData->m_nScanIdx); @@ -1820,7 +1640,7 @@ char strRTMSFile[32] = {}; char strServerRawFileSubPath[256] = {}; char strServer_SubFileName[256] = {}; - + /*< KJG 20211024 - #3487 ADD Start >*/ GetFormatDescription(FTPCMD_RAWMERGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName, pGlassData); CFTPCopyDataParam upParam; @@ -1845,6 +1665,7 @@ if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) { } + /*< KJG 20211024 - #3487 ADD End >*/ } void CGlassRawCPJT::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort) @@ -2134,15 +1955,25 @@ sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); } break; + /*< KJG 20211024 - #3487 ADD Start >*/ case FTPCMD_RAWMERGE: { - sprintf(pServerPath, "\\%s\\%s\\%s", strProcessID, strStepID,strGlassIDLevel6th.GetBuffer(0)); // �꽌踰� 寃쎈줈 �솗�씤�썑 �닔�젙 kjg + /* <LJC 20211122 : #3820 ADD Start> */ + char cMergeList[10][12]; + CString strMergeList[10] = {}; + for (int i = 0; i < 10; i++) + { + strcpy(cMergeList[i], pGlassData->m_StrMergeList[i]); + strMergeList[i] = cMergeList[i]; + } + sprintf(pServerPath, "\\%s\\%s\\%s", strProcessID, strMergeList[m_nRawMergeIdx],strGlassIDLevel6th.GetBuffer(0)); // �꽌踰� 寃쎈줈 �솗�씤�썑 �닔�젙 kjg sprintf(pServerFile, "%s",strGlassID); - + /* <LJC 20211122 : #3820 ADD End> */ sprintf(pLocalPath, "%s", m_RawMergeResult.getRawMergeLocalPath()); sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); } break; + /*< KJG 20211024 - #3487 ADD End >*/ case FTPCMD_MURA_IMAGE: //0404nwh { // /*CTime time = m_tmFileCreateTime; @@ -2226,6 +2057,10 @@ break; case Judge_PR: sStr.Format("PR"); break; + /* <KYH 220117 : #3796 ADD Start>*/ + case Judge_ND: sStr.Format("ND"); + break; + /* <KYH 220117 : #3796 ADD End>*/ case Judge_PT: sStr.Format("PT"); break; case Judge_Review: sStr.Format("RV"); @@ -2238,6 +2073,10 @@ break; case Judge_Rework: sStr.Format("RW"); break; + /* < KMH 20220311 : #3954 ADD Start > */ + case Judge_LN: sStr.Format("LN"); + break; + /* < KMH 20220311 : #3954 ADD End > */ case Judge_Unknown: sStr.Format("OK");//sStr.Format("Unknown"); //Unknown�룄 �씪�떒 OK break; default: sStr.Format("OK");//sStr.Format("Ets"); @@ -2270,6 +2109,20 @@ } return sStr; } +/* <LJC 20211122 : #3820 ADD Start> */ +void CGlassRawCPJT::DownLoadMergeFile(CgrmGlassRawData * pData) +{ + SendMessageFTPDownloadDataFile(pData->GetGlassData()); + m_nRawMergeIdx++; + return; +} + +void CGlassRawCPJT::SearchFIle(CgrmGlassRawData * pData) +{ + m_RawMergeResult.ProcessRawMergeFileReadStart(pData->GetGlassData()->m_strGlassID); +} +/* <LJC 20211122 : #3820 ADD End> */ + CString CGlassRawCPJT::GetWsiDefectType(int nType) { diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h index a43c626..766afaf 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h @@ -36,7 +36,11 @@ virtual BOOL SequenceFtpUpload(char* pRawFileName); virtual void NotifyUpdateOptionInfo(){/*m_StackResult.readOptionFile();*/}; - + /* <LJC 20211122 : #3820 ADD Start> */ + virtual void DownLoadMergeFile(CgrmGlassRawData* pData); + virtual void SearchFIle(CgrmGlassRawData* pData); + /* <LJC 20211122 : #3820 ADD End> */ +\ protected: @@ -55,7 +59,10 @@ CString GetRawFilePath() { return m_strRawFilePath; } void makeDataHeader(CString& strLine, _grmGlassData* pGlassData); - void makeDataGlass(CString& strLine, _grmGlassData* pGlassData); + /*< KJG 20211229 - #3846 MOD Start >*/ + //void makeDataGlass(CString& strLine, _grmGlassData* pGlassData); + void makeDataGlass(CString& strLine, CgrmGlassRawData* pData, _grmGlassData* pGlassData); + /*< KJG 20211229 - #3846 MOD End >*/ void makeDataCell(CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData); BOOL makeDataDefect(CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData); @@ -80,8 +87,10 @@ BOOL m_bReviewEndCheck; // InspectEnd 시에 Raw_im 폴더에 SubFile 생성 안하기 위해 사용 [ 21-03-18 KJG ] CTime m_tmReviewStart; CTime m_tmReviewEnd; - + /* <LJC 20211122 : #3820 ADD Start> */ + int m_nRawMergeIdx=0; int m_nWriteRawDefectIdx; + /* <LJC 20211122 : #3820 ADD End> */ }; struct stCellData diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCSOT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCSOT.cpp index c10d4fe..7045daf 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCSOT.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCSOT.cpp @@ -320,7 +320,7 @@ } strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName); - //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); + //strFilePathName.Format("D:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp index d7e5708..46308eb 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp @@ -25,7 +25,7 @@ { CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL); CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL); - m_MuraResultFile.readOptionFile("C:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg"); + m_MuraResultFile.readOptionFile("D:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg"); m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile); } @@ -292,7 +292,7 @@ } strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName); - //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); + //strFilePathName.Format("D:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawRTMS.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawRTMS.cpp index f286af8..634e037 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawRTMS.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawRTMS.cpp @@ -320,6 +320,9 @@ else if(pCellData->m_nJudgement == Judge_Size) strValue = "Judge_Size"; //skip else if (pCellData->m_nJudgement == Judge_TR) strValue = "Judge_TR"; else if (pCellData->m_nJudgement == Judge_PR) strValue = "Judge_PR"; + /* <KYH 211129 : #3796 ADD Start> */ + else if (pCellData->m_nJudgement == Judge_ND) strValue = "Judge_ND"; + /* <KYH 211129 : #3796 ADD End> */ else strValue = "Judge_OK"; } strLine += strValue+strDiv; @@ -803,6 +806,10 @@ break; case Judge_PR: sStr.Format("PR"); break; + /* <KYH 211129 : #3796 ADD Start> */ + case Judge_ND: sStr.Format("ND"); + break; + /* <KYH 211129 : #3796 ADD Start> */ case Judge_PT: sStr.Format("PT"); break; case Judge_Review: sStr.Format("RV"); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp index a7caac2..4c493ae 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp @@ -130,7 +130,7 @@ return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] } -BOOL CMacroResultFile::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) +BOOL CMacroResultFile::readOptionFile( char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) { CakFileDB fileDB; fileDB.openfile(pFileName); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h index f746014..bd162a4 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h @@ -179,7 +179,7 @@ int GetSubPanelNum(int iCell); _MacroSubPanel* GetSubPanel(int i) { return &m_vecMacroSubPanel[i]; } /////////////////////////////////////0404nwh - BOOL readOptionFile(char* pFileName = "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"); + BOOL readOptionFile(char* pFileName = "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"); _MacroDefect* FindDefect(int nX, int nY, int nFindRange = 2000/*um*/); public: 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*/) { /* diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h index d72e199..ccffbe9 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h @@ -29,6 +29,9 @@ } BOOL RawMergeFileReadStart(char* pGlassID); + /* <LJC 20211122 : #3820 ADD Start> */ + BOOL ProcessRawMergeFileReadStart(char* pGlassID); + /* <LJC 20211122 : #3820 ADD End> */ BOOL RawMergeFileReadStop(BOOL bWait = TRUE); BOOL IsRead() { return m_nProcessState == RPS_ResultReadOK ? TRUE : FALSE; } @@ -42,7 +45,9 @@ protected: BOOL openFile(char* pGlassID); static void threadResultFileRead(void* pArg); - + /* <LJC 20211122 : #3820 ADD Start> */ + static void ProcessResultFileRead(void* pArg); + /* <LJC 20211122 : #3820 ADD End> */ int m_nThreadStackFileReadFlag; protected: diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.cpp index cc904f5..662f92f 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.cpp @@ -45,11 +45,13 @@ { CString strFileName; - CDitGlassRawClient GlassRawClient; - GlassRawClient.ConnectServer(); - CDitGlassRawClient* pShared = &GlassRawClient; - - _grmDefectData* pGrmStack; + /*< KJG 20211208 : #3696 DEL Start >*/ + //CDitGlassRawClient GlassRawClient; + //GlassRawClient.ConnectServer(); + //CDitGlassRawClient* pShared = &GlassRawClient; + // + //_grmDefectData* pGrmStack; + /*< KJG 20211208 : #3696 DEL End >*/ strFileName.Format("%s\\%s", m_strLocalPath, pGlassID); @@ -57,6 +59,13 @@ 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<_StackDefectCPJT> vecStackDefect; _StackDefectCPJT StackDefect; @@ -152,6 +161,9 @@ else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "NG")) pGrmStack->m_DefectJudgement = Judge_NG; else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "TR")) pGrmStack->m_DefectJudgement = Judge_TR; else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "PR")) pGrmStack->m_DefectJudgement = Judge_PR; + /* <KYH 211129 : #3796 ADD Start> */ + else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "ND")) pGrmStack->m_DefectJudgement = Judge_ND; + /* <KYH 211129 : #3796 ADD End> */ else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "PT")) pGrmStack->m_DefectJudgement = Judge_PT; else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RV")) pGrmStack->m_DefectJudgement = Judge_Review; else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RC")) pGrmStack->m_DefectJudgement = Judge_RC; @@ -209,7 +221,7 @@ return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] } -BOOL CStackResultCPJT::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) +BOOL CStackResultCPJT::readOptionFile( char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) { if(pFileName == NULL) pFileName = m_strConfigFile; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.h b/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.h index 80da903..b36265e 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.h @@ -4,7 +4,7 @@ #include "akCore/akFileUtil.h" -//enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 추가 +//enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_LN, Judge_Unknown };//2016.07.13 LHS Judge_Size 추가 struct _StackDefectCPJT { diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCSOT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCSOT.cpp index 0a26a55..21ff96f 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCSOT.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/StackResultCSOT.cpp @@ -110,7 +110,7 @@ return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] } -BOOL CStackResultCSOT::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) +BOOL CStackResultCSOT::readOptionFile( char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) { if(pFileName == NULL) pFileName = m_strConfigFile; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/akLoggerExt.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/akLoggerExt.cpp index 0bdce69..140eaf1 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/akLoggerExt.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/akLoggerExt.cpp @@ -37,7 +37,7 @@ // st.wDay); sprintf(strFileName, "%s\\%02d%02d%02d\\%s_%02d%02d%02d.log", - "C:\\DIT_LogData\\", st.wYear, st.wMonth, st.wDay, + "D:\\DIT_LogData\\", st.wYear, st.wMonth, st.wDay, "logGlassRawMessenger", st.wYear, st.wMonth, st.wDay); ShellExecute(NULL, "Open", "NotePad.exe", strFileName, "", SW_SHOW); diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp index e6a5eb9..e86109c 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp @@ -6,16 +6,11 @@ { m_hMapBasicInfo = NULL; m_hMapGlassData = NULL; - m_pDitGlassClient =NULL; + m_pGlassRawInfo = NULL; m_pGlassRawData = NULL; m_nLastCommandIdx = -1; - - m_pGlassData = NULL; - m_pBlockData = NULL; - m_pCellData = NULL; - m_pDefectData = NULL; } CDitGlassRawClient::~CDitGlassRawClient(void) @@ -105,7 +100,9 @@ m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + /*< KJG 20211024 - #3487 ADD Start >*/ m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; + /*< KJG 20211024 - #3487 ADD End >*/ return TRUE; } @@ -172,7 +169,9 @@ if(isConnect() == FALSE) return FALSE; m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading; m_pGlassData->m_bStackRead = FALSE; + /*< KJG 20211024 - #3487 ADD Start >*/ m_pGlassData->m_bRawMergeRead = FALSE; + /*< KJG 20211024 - #3487 ADD End >*/ return SetCommand(grcSequenceGlassLoading); } @@ -204,16 +203,6 @@ return SetCommand(grcSequenceCustomReviewDataRead); } -CDitGlassRawClient* CDitGlassRawClient::GetInstance() -{ - if(m_pDitGlassClient == NULL) - { - m_pDitGlassClient = new CDitGlassRawClient; - } - - return m_pDitGlassClient; -} - void CDitGlassRawClient::RemoveReviewDefects() { int nDefectNum = m_pGlassData->m_nDefectNum; @@ -238,5 +227,3 @@ m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum; } - -CDitGlassRawClient* CDitGlassRawClient::m_pDitGlassClient; \ No newline at end of file diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.h b/DitGlassRawMessenger/Extern/DitGlassRawClient.h index df54a2e..dfdfb4b 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.h +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.h @@ -1,7 +1,6 @@ #pragma once #include "DitGlassRawStruct.h" -#include <afxmt.h> class CDitGlassRawClient { @@ -10,8 +9,6 @@ ~CDitGlassRawClient(void); public: - static CDitGlassRawClient* GetInstance(); //cmark - BOOL ConnectServer(); BOOL isConnect(){return m_hMapBasicInfo == NULL || m_hMapGlassData == NULL ? FALSE : TRUE;}; @@ -33,7 +30,9 @@ _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex];}; + /*< KJG 20211024 - #3487 ADD Start >*/ _grmDefectData* GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; }; + /*< KJG 20211024 - #3487 ADD End >*/ //결과 파일 강제 쓰기 명령 [김태현 2018/11/12] BOOL WriteAOIRawFile(); @@ -50,14 +49,16 @@ BOOL ConnectGlassRawInfo(); BOOL ConnectGlassRawData(); BOOL SetCommand(emGlassRawCommand nCmd); - static CDitGlassRawClient* m_pDitGlassClient; //cmark + protected: _grmGlassData* m_pGlassData; _grmBlockData* m_pBlockData; _grmCellData* m_pCellData; _grmDefectData* m_pDefectData; _grmDefectData* m_pStackData; + /*< KJG 20211024 - #3487 ADD Start >*/ _grmDefectData* m_pRawMergeData; + /*< KJG 20211024 - #3487 ADD End >*/ protected: HANDLE m_hMapBasicInfo; HANDLE m_hMapGlassData; diff --git a/DitGlassRawMessenger/Extern/DitGlassRawStruct_0331.h b/DitGlassRawMessenger/Extern/DitGlassRawStruct_0331.h deleted file mode 100644 index e5f7a55..0000000 --- a/DitGlassRawMessenger/Extern/DitGlassRawStruct_0331.h +++ /dev/null @@ -1,750 +0,0 @@ -#pragma once - -#define SHAREDMEMNAME_BASICINFO _T("DIT.GLASSRAWSYSTEM.SHAREDMEM.BASICINFO") -#define SHAREDMEMNAME_GLASSDATA _T("DIT.GLASRAWSYSTEM.SHAREDMEM.GLASSDATA") -#define MUTEX_RAWMESSENGER _T("MUTEX_RAWMESSENGER_IPC") - -#define COMMAND_MAXCOUNT 8 - -#define RAWMESSENGER_MAXCAMNUM 30 -#define RAWMESSENGER_MAXSCANNUM 20 -#define RAWMESSENGER_MAXHLINUM 8 - -#define MAX_ZONE_NUM 16 - -namespace ditRaw -{ - enum ReviewPlanType - { - RPT_Review = 0, - RPT_User, - RTP_WSI, - RTP_PlanMeasure, - RTP_Reflow, - RTP_WsiReflow, - RTP_UserWsi, - RPT_AOICustom = 1000, - }; -}; -enum emAOIProcStep -{ - APS_None = 0, - - //AOI - APS_GlassLoading, - APS_InspectEnd, - //Review - APS_CustomReviewRead, - APS_ReviewStart, - APS_ReviewEnd, - - RPS_StepNum -}; - -struct _grmGlassData -{ - void clear() - { - memset(this, 0, sizeof(_grmGlassData)); - } - - //Glass 정보 - char m_strFileName[64]; - char m_strPath[256]; - - int m_nCellNum; - int m_nDefectNum; - - int m_nOriginDirection; //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; - int m_nConerCutDirection; - int m_nScanCoordinateY; //여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은) - - int m_nGlassSizeWidth; - int m_nGlassSizeHeight; - - //설비정보 - char m_strLine[32]; - char m_strEquipType[32]; - char m_strEquipID[32]; - char m_strStepID[32]; - char m_strOperID[32]; - - CTime m_tmGlassLoading; //3. START_TIME - CTime m_tmInspectionStart; //3. START_TIME - CTime m_tmInspectionEND; //4. END_TIME - CTime m_tmReviewLoading; - CTime m_tmReviewEnd; - - //기본 물류정보 - char m_strGlassID[32]; //Glass ID - char m_strPPID[32]; - char m_strEPPID[32]; - char m_strLotID[32]; //LOT_ID - char m_strSLotID[32]; //SLOT_ID - char m_strRecipeName[32]; //RECIPE_NAME - char m_strGlassJudge[32]; //GLASS_JUDGE - char m_strGlassCode[32]; //Grade or Code - char m_strProductID[16]; //4. PRODUCT_ID - - //VCR - int m_nVcrResultCode; - char m_strVCRResult[32]; - char m_strVCRGlassID[32]; - - - //결함 갯수 관리 변수 - int m_nDefectNumSizeSmall; - int m_nDefectNumSizeMid; - int m_nDefectNumSizeLarge; - int m_nDefectNumSizeHuge; - int m_nDefectNumSizeUltra; - - int m_nDefectNumLocActive; - int m_nDefectNumLocPad; - int m_nDefectNumLocCrack; - int m_nDefectNumLocBM; - - int m_nDefectNumTypeTB; - int m_nDefectNumTypeTW; - int m_nDefectNumTypeRB; - int m_nDefectNumTypeRW; - int m_nDefectNumTypeMD; - int m_nDefectNumTypeCD; - int m_nDefectNumTypeMC; - - int m_nDefectNumJudgeOKWhite; - int m_nDefectNumJudgeOKBlack; - int m_nDefectNumJudgeNG; - int m_nDefectNumJudgeRW; - int m_nDefectNumJudgeRP; - int m_nDefectNumJudgeRV; - int m_nDefectNumJudgeTR; - int m_nDefectNumJudgePR; - - int m_nDefectNumStackTD; - int m_nDefectNumStackSD; - int m_nDefectNumStackPD; - int m_nDefectNumStackSP; - - - //카메라/스캔 정보 [김태현 2018/12/5] - short m_nCameraNum; - short m_nScanNum; - unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM]; - unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM]; - unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM]; - - //얼라인 정보 um[김태현 2018/12/10] - double m_nAlignCcdTheta; - double m_nAlignCcdShitftX; - double m_nAlignCcdShitftY; - double m_nAlignPreTheta; - double m_nAlignPreShitftX; - double m_nAlignPreShitftY; - double m_nAlignBasicTheta; - double m_nAlignBasicShitftX; - double m_nAlignBasicShitftY; - char m_strAlignFirst[64]; - char m_strAlignSecond[64]; -// char m_strAlignPath[256]; - - //CSOT용 물류 정보 [김태현 2018/12/5] - char m_strCassetteSequenceNo[16]; - char m_strOwnerCode[16]; //2. OWNER_CODE - char m_strOwnerType[16]; //3. OWNER_TYPE - - char m_strProcessID[21]; //5. PROCESS_ID - char m_strProductGroup[16]; //6. PRODUCT_GROUP - char m_strCSTID[16]; //8. CST_ID - char m_strPreProcessID[16]; //10.PRE_PROCESS_ID - char m_strPreEQPID[16]; //11.PRE_EQP_ID - char m_strPreChamerID[16]; //12.PRE_CHAMBER_ID - char m_strPreRecipeID[32]; //13.PRE_RECIPE_ID - char m_strGroupID[16]; //14.GROUP_ID - char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG - - // CPRJ용 물류 정보 - char m_strProdType[3]; - char m_strBatchID[13]; - char m_strPairHPanelID[13]; - char m_strGlassThickNess[2]; - char m_strCompCount[2]; - char m_strGlassState[2]; - char m_strInsFlag[2]; - char m_strPanelPosition[2]; - char m_strFlowHistory[2]; - char m_strCount1[2]; - char m_strCount2[2]; - - //Mura Data 0412 nwh - char m_strMaxAvgGray[12]; - char m_strMaxPortion[12]; - - - //1226NWH - char m_strReadingFlag[2]; - BYTE m_nUniqueID[4]; - int m_nSlot_No; - - BYTE m_nGlassDataBitSignal[4]; - bool m_bJob_end; - - //201217 CJH - 찍은 Defect Review 개수 - int m_nReviewNum; - //201221 CJH - 파싱한 Stack 결과 - int m_nStackNum; - BOOL m_bStackRead; - - int m_nRawMergeNum; - BOOL m_bRawMergeRead; - //210203 CJH - CutOff 대상 결함 수 - int m_nCutOffDefectNum; - //210323 CJH - Server/Frame Shrink 정보 추가 - char m_strShrinked[6]; - //210326 CJH - RAW 입력 Defect 수량 상한 사용여부 - BOOL m_bRawCutoff; - -}; -struct _grmBlockData -{ - void clear() - { - memset(this, 0, sizeof(_grmBlockData)); - } - char m_strBlockID[16]; //1. BLOCK_ID - char m_cBlockJudgeAOI; //2. BLOCK_JUDGE_AOI - char m_cBlockJudgeATS; //4. BLOCK_JUDGE_ATS - char m_cBlockJudgeTEG; //5. BLOCK_JUDGE_TEG - int m_nGlassIdDCR; //22. GLASS_ID_DCR -}; -struct _grmCellData -{ - void clear() - { - memset(this, 0, sizeof(_grmCellData)); - } - int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; - int m_nCellID; //1. PANEL_ID - short m_nModelIdx; // 몇 번째 모델인가? - - char m_strCellName[32]; - int m_rectCellLeft; - int m_rectCellTop; - int m_rectCellRight; - int m_rectCellBottom; - - int/*Judgement*/ m_nJudgement; - int m_nJudgeFlag; - int m_nJudgeGlade; - - - //결함 갯수 관리 변수 - int m_nDefectNumSizeSmall; - int m_nDefectNumSizeMid; - int m_nDefectNumSizeLarge; - int m_nDefectNumSizeHuge; - int m_nDefectNumSizeUltra; - - int m_nDefectNumLocActive; - int m_nDefectNumLocPad; - int m_nDefectNumLocCrack; - int m_nDefectNumLocBM; - - int m_nDefectNumTypeTB; - int m_nDefectNumTypeTW; - int m_nDefectNumTypeRB; - int m_nDefectNumTypeRW; - int m_nDefectNumTypeMD; - int m_nDefectNumTypeCD; - int m_nDefectNumTypeMC; - - //Mura Data nwh 0404 - char m_strProImage[32]; - char m_strAvgGray_0[12]; - char m_strPortion_0[12]; - //kyh Mura Data 추가 0622 - char m_strCorner_Gray_0[12]; - char m_strAvgAmp_0[12]; - char m_strFFTVar_0[12]; - char m_strFFTVah_0[12]; - char m_strFFTVaq_0[12]; - char m_strFFTPK_0[12]; - - char m_strAvgGray_1[12]; - char m_strPortion_1[12]; - //kyh Mura Data 추가 0622 - char m_strCorner_Gray_1[12]; - char m_strAvgAmp_1[12]; - char m_strFFTVar_1[12]; - char m_strFFTVah_1[12]; - char m_strFFTVaq_1[12]; - char m_strFFTPK_1[12]; - - char m_strAvgGray_2[12]; - char m_strPortion_2[12]; - //kyh Mura Data 추가 0622 - char m_strCorner_Gray_2[12]; - char m_strAvgAmp_2[12]; - char m_strFFTVar_2[12]; - char m_strFFTVah_2[12]; - char m_strFFTVaq_2[12]; - char m_strFFTPK_2[12]; - - char m_strAvgGray_3[12]; - char m_strPortion_3[12]; - //kyh Mura Data 추가 0622 - char m_strCorner_Gray_3[12]; - char m_strAvgAmp_3[12]; - char m_strFFTVar_3[12]; - char m_strFFTVah_3[12]; - char m_strFFTVaq_3[12]; - char m_strFFTPK_3[12]; - - int m_nDefectNumJudgeOKWhite; - int m_nDefectNumJudgeOKBlack; - int m_nDefectNumJudgeNG; - int m_nDefectNumJudgeRW; - int m_nDefectNumJudgeRP; - int m_nDefectNumJudgeRV; - int m_nDefectNumJudgeTR; - int m_nDefectNumJudgePR; - - int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - - // Filtering된 Stack별 수 - int m_nDefectTDCount; - int m_nDefectSDCount; - int m_nDefectPDCount; - int m_nDefectSPCount; - - // Gate/Data 총 갯수 - int m_nGateNum; - int m_nDataNum; - - // 210129 CJH - Cell Origin 방향 - int m_nCellXDir; - int m_nCellYDir; -}; - -struct _grmDefectReviewData -{ - void clear() - { - memset(this, 0, sizeof(_grmDefectReviewData)); - } - - ////////////////////////////////////////////////////////////////////////// - //여기서 부터 리뷰 영역 [김태현 2019/1/19] - ditRaw::ReviewPlanType m_nPlanType ; - int m_nResultCode; //0:None, 1:Success - int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] - int m_nModuleIndex; - int m_nMagnificIndex; - float m_fManification; - float m_fManificResoultion; - char m_strRevImageName[256]; - char m_strRevImagePath[256]; - - ////////////////////////////////////////////////////////////////////////// - // Measure 영역 - int m_nMeasure_Index; - int m_nMeasure_ResultCode; //0:None, 1:Success - float m_fMesure_ResultData[8]; // 0:Type, 1:ShiftX, 2:ShiftY - - ////////////////////////////////////////////////////////////////////////// - // WSI영역 - int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 함몰 / 돌기 - float m_fWsi_ResultData[8]; // 0:Type, 1:Height(um), 2:Width - char m_strWsi_2DImageFilename[256]; - char m_strWsi_3DImageFilename[256]; - int m_nWsiReflowPositionIndex; // WsiReflowPositionIndex - int m_nWsi_pReflowResultData[8]; - double m_dWsi_DamDistance; - - double m_dWsiMmMotorX; // WSI 모터 좌표 20180223 HJH - double m_dWsiMmMotorY; - float m_fWsiManification; // WSI 배율 - - ////////////////////////////////////////////////////////////////////////// - // Reflow 영역 - int m_nReflow_Index; - int m_nReflow_ResultCode; //0:None, // 검출한 Line의 개수. 3 미만 : DAM2 Reflow 판정, 4~5 : DAM1 Reflow 판정, 6 : no Reflow 판정 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side - float m_fReflow_LinePosData[8]; - int m_nReflow_Side; - int m_nReflow_InspectionMode; -}; - -struct _grmDefectData -{ - void clear() - { - memset(this, 0, sizeof(_grmDefectData)); - } - - short m_nDefectID; - short m_nCameraID; - short m_nScanIdx; - //short m_nDefectIdx; // 카메라에서의 결함 인덱스 - int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - - int m_nPixelConv; // pixel 단위 좌표 - int m_nPixelScan; // pixel 단위 좌표 - - short m_nPixelSize; // 결함크기 ---------------------------------PS - short/*SERVER_DefectType*/ m_DefectType; // 결함 타입 ---------------------------------DT - short/*SERVER_DefectSubType*/ m_DefectSubType; // 결함의 판정상태. - short/*SERVER_DefectBDType*/ m_DefectBDType; // 결함 타입 - Bright, Dark, Both - - short m_sPixelWidth; // 픽셀단위 결함 너비 - short m_sPixelHeight; // 픽셀단위 결함 높이 - short m_nLevelSrcMin; // 결함 밝기 Min -----------------------------SN - short m_nLevelSrcMax; // 결함 밝기 Max -----------------------------SX - short m_nLevelSrcAvg; // 결함 밝기 Avg -----------------------------SA - short m_nLevelRefMin; // 비교대상 밝기 Min -------------------------RN - short m_nLevelRefMax; // 비교대상 밝기 Max -------------------------RX - short m_nLevelRefAvg; // 비교대상 밝기 Avg -------------------------RA - short m_nLevelDiffMin; // 비교차 Min ---------------------------------DN - short m_nLevelDiffMax; // 비교차 Max ---------------------------------DX - short m_nLevelDiffAvg; // 비교차 Avg ---------------------------------DA - - int m_nDefectRScale; // 픽셀단위 결함 높이 -------------------------RS - short m_sThreshold; // 결함을 검출할 때의 Threshold - short m_sThresholdAvg; // 결함을 검출할 때의 Threshold AVG - short m_sDefectPeak; // 결함의 Peak. - short m_sDefectLevel; // (DiffAvg - Th) BOE 8G 요청사항 - - int m_nPixelGlassStart; // Glass 시작 픽셀 - short m_sDefectLoc; - - short m_sZoneClassPixelCount[16]; - short m_sZonePixelCount[16]; // Zone별 결함 Pixel 수 - short m_sZoneValueMin[16]; // Zone별 결함 Min - short m_sZoneValueMax[16]; // Zone별 결함 Max - short m_sZoneValueAvg[16]; // Zone별 결함 Avg - short m_sZonePixelPercent[16]; // --------------------------------------Z0~ZF - - //210127 CJH - Zone별 Source Gray 입력 - short m_sZoneValueSrcMin[16]; // Zone별 Source Min - short m_sZoneValueSrcMax[16]; // Zone별 Source Max - short m_sZoneValueSrcAvg[16]; // Zone별 Source Avg - - int m_nUMOriginX; // um단위 x좌표 (원점기준) - int m_nUMOriginY; // um단위 y조표 (원점기준) - int m_nUMCenterAlignX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 후) - int m_nUMCenterAlignY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 후) - int m_nUMCenterX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 전) - int m_nUMCenterY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 전) - int m_nUMSizeX; // um단위 X 크기 -----------------------------UX - int m_nUMSizeY; // um단위 Y 크기 -----------------------------UY - int m_nUMSize; // um단위 크기. - CRect m_RectUM; // 디펙 센터 기준 사각형. - - short/*SERVER_DefectSizeType*/ m_DefectSizeType; // 결함 크기 종류enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; - short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak의 종류. - short/*Judgement*/ m_DefectJudgement; // 결함 판정. - BOOL m_bDefectCutoff; // 컷 오프 디펙(TRUE= Cutoff, FALSE) - short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16등분 구분 - int m_nPadRegionIdx; // PAD 영역 인덱스 - - int m_nUMCellX; // 셀 원점 기준 x 좌표 - int m_nUMCellY; // 셀 원점 기준 y 좌표 - short m_nModelIdx; // 몇 번째 모델인가? - short m_nCellIdx; // 몇번째 셀인가? - short m_nCellGate; // 셀별 Gate라인(얼라인 보정 전) - short m_nCellData; // 셀별 Data라인(얼라인 보정 전) - short m_nCellGateAlign; // 셀별 Gate라인(얼라인 보정 후) - short m_nCellDataAlign; // 셀별 Data라인(얼라인 보정 후) - - int m_nUMShotX; // 샷 기준 X좌표 - int m_nUMShotY; // 샷 기준 Y좌표 - short m_nMaskDefectIdx; // 한 Glass에서 발견된 마스크결함 묶음의 인덱스. - short m_nShotIdx; // 노광샷 번호 - short m_nMatchShotCount; // 동일한 마스크 결함의 수. - short m_nMatchMaxSize; // 동일한 마스크 중 가장 큰 결함의 크기. - - short m_nRepeatCount; // 연속결함발견위한 동일좌표 반복수 - short m_nMaskRepeatCount; - int m_StackInfo; // Stack Flag - BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. - short m_nStackStepCount; // Stack 수 - short m_nStackColorIdx; // Color를 선택하는 인덱스. - //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 최대 사이즈 60bytes - char m_strUnitID[16]; // 유닛아이디 - - int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 추가 분류 알고리즘 적용 결과. - int m_nAtomWidth; // TFE 핵 너비 - int m_nAtomHeight; // TFE 핵 높이 - short/*ReKind*/ m_DefectKind; // 결함 종류 - - char m_strDefectCode[32]; // Defect Code - BOOL m_bMergeState; // Merge Status - char m_strAoiImageName[256]; // Defect Image Name(CCD Image) - int m_nDefectMerge; // 현재 디펙의 머지 여부 - - - int m_nPixelSizeOrigin; - int m_nScratchRatio; - int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] - - char m_strDefectName[16]; - char m_strDefectType[16]; - - double m_dScanResolution; - double m_dConvResolution; - - int m_nAngle; // 각도 - int m_nMajor; // 장축 길이(Long) - int m_nMinor; // 단축 길이(Short) - int m_nCompact; // Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율 - int m_nThickness; // Blob 넓이와 장축의 비율 (Area / Major) - - short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? - int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - - BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 - - char m_strAoiImagePath[255]; - char m_strReviewImagePath[255]; - - int m_nAlignRectLeft; - int m_nAlignRectTop; - int m_nAlignRectBottom; - int m_nAlignRectRight; - - - _grmDefectReviewData m_ReviewDefect; -}; - - -enum emGlassRawCommand -{ - grcNone = 0, - - //AOI Sequence - grcSequenceGlassLoading = 1, - grcSequenceInspectEnd = 2, - //Review Sequence - grcSequenceReviewStart = 3, - grcSequenceReviewEnd = 4, - - grcSequenceCustomReviewDataRead = 10, - - grcWriteRaw = 101, - grcReadRaw = 102, - - grcWriteBin = 201, - grcReadBin = 202, - - grcReviewWriteBIn = 301, - - grcGlassRawCommand -}; - - -struct _grmDitCommand -{ - struct _grmCommand - { - int nCommand; - char strParam[256]; - short nResult; - }; - short m_nCommandIdxWrite; - short m_nCommandIdxRead; - _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT]; -}; - -struct _grmDitMemInfo -{ - //공유 메모리 생성할 공간 결정 [김태현 2018/11/12] - size_t m_nGlassRawDataSize; - int m_nGlassMaxDataNum; - int m_nBlockMaxDataNum; - int m_nCellMaxDataNum; - int m_nDefectMaxDataNum; - int m_nStackMaxDataNum; - int m_nRawMergeMaxDataNum; - - //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] - int m_nGlassDataPoint; - int m_nBlockDataPoint; - int m_nCellDataPoint; - int m_nDefectDataPoint; - int m_nStackDataPoint; - int m_nRawMergeDataPoint; - - int m_nSizeOfGlassData; - int m_nSizeOfBlockData; - int m_nSizeOfCellData; - int m_nSizeOfDefectData; - int m_nSizeOfStackData; - int m_nSizeOfRawMergeData; -}; -struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand -{ - size_t m_nGlassLoadingCount; - emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 - emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 -}; - -class CgrmGlassRawData -{ -public: - CgrmGlassRawData() - { - m_pGlassRawData = NULL; - m_bRefAlloc = FALSE; - }; - - ~CgrmGlassRawData() - { - clear(); - }; - - void clear() - { - if(m_bRefAlloc) { m_pGlassRawData = NULL; return;} - - if(m_pGlassRawData) - { - delete [] m_pGlassRawData; - m_pGlassRawData = NULL; - } - }; - BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false) - { - if(pInfo == NULL) return FALSE; - - if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear(); - - if(m_pGlassRawData == NULL) m_pGlassRawData = new char[ pInfo->m_nGlassRawDataSize ]; - - m_MemInfo = *pInfo; - - m_nGlassRawDataSize = pInfo->m_nGlassRawDataSize; - - m_nGlassMaxDataNum = pInfo->m_nGlassMaxDataNum ; - m_nBlockMaxDataNum = pInfo->m_nBlockMaxDataNum ; - m_nCellMaxDataNum = pInfo->m_nCellMaxDataNum ; - m_nDefectMaxDataNum = pInfo->m_nDefectMaxDataNum; - m_nStackMaxDataNum = pInfo->m_nStackMaxDataNum ; - - m_nGlassDataPoint = pInfo->m_nGlassDataPoint ; - m_nBlockDataPoint = pInfo->m_nBlockDataPoint ; - m_nCellDataPoint = pInfo->m_nCellDataPoint ; - m_nDefectDataPoint = pInfo->m_nDefectDataPoint ; - m_nStackDataPoint = pInfo->m_nStackDataPoint ; - - m_nSizeOfGlassData = pInfo->m_nSizeOfGlassData ; - m_nSizeOfBlockData = pInfo->m_nBlockDataPoint ; - m_nSizeOfCellData = pInfo->m_nSizeOfCellData ; - m_nSizeOfDefectData = pInfo->m_nSizeOfDefectData; - m_nSizeOfStackData = pInfo->m_nSizeOfStackData ; - - if(bRefAlloc) - { - m_pGlassRawData = pData; - } - else - { - if(pData) - { - memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize); - } - else - { - memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize ); - } - } - - - m_pGlassData = (_grmGlassData*)&m_pGlassRawData[pInfo->m_nGlassDataPoint]; - m_pBlockData = (_grmBlockData*)&m_pGlassRawData[pInfo->m_nBlockDataPoint]; - m_pCellData = (_grmCellData*)&m_pGlassRawData[pInfo->m_nCellDataPoint]; - m_pDefectData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nDefectDataPoint]; - m_pStackData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nStackDataPoint]; - - m_bRefAlloc = bRefAlloc; - return TRUE; - }; - BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData) - { - if(pInfo == NULL || pData == NULL) return FALSE; - - if(1) //new type //메모리 총 공간 크기에 상관없이 - { - //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; - - if(pInfo->m_nSizeOfGlassData != m_MemInfo.m_nSizeOfGlassData) return FALSE; - if(pInfo->m_nSizeOfBlockData != m_MemInfo.m_nSizeOfBlockData) return FALSE; - if(pInfo->m_nSizeOfCellData != m_MemInfo.m_nSizeOfCellData) return FALSE; - if(pInfo->m_nSizeOfDefectData != m_MemInfo.m_nSizeOfDefectData) return FALSE; - if(pInfo->m_nSizeOfStackData != m_MemInfo.m_nSizeOfStackData) return FALSE; - - if(pInfo->m_nCellMaxDataNum < m_pGlassData->m_nCellNum) return FALSE; - if(pInfo->m_nDefectMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE; - if(pInfo->m_nStackMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE; - - memcpy(&pData[pInfo->m_nGlassDataPoint], m_pGlassData, pInfo->m_nSizeOfGlassData* 1); - memcpy(&pData[pInfo->m_nBlockDataPoint], m_pBlockData, pInfo->m_nSizeOfBlockData* 1); - memcpy(&pData[pInfo->m_nCellDataPoint], m_pCellData, pInfo->m_nSizeOfCellData*m_pGlassData->m_nCellNum); - memcpy(&pData[pInfo->m_nDefectDataPoint], m_pDefectData, pInfo->m_nSizeOfDefectData*m_pGlassData->m_nDefectNum); - memcpy(&pData[pInfo->m_nStackDataPoint], m_pStackData, pInfo->m_nSizeOfStackData*m_pGlassData->m_nDefectNum); - } - else //if() //type old - { - if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; - - if(pInfo->m_nSizeOfGlassData != m_MemInfo.m_nSizeOfGlassData) return FALSE; - if(pInfo->m_nSizeOfBlockData != m_MemInfo.m_nSizeOfBlockData) return FALSE; - if(pInfo->m_nSizeOfCellData != m_MemInfo.m_nSizeOfCellData) return FALSE; - if(pInfo->m_nSizeOfDefectData != m_MemInfo.m_nSizeOfDefectData) return FALSE; - - memcpy(pData, m_pGlassRawData, sizeof(char)*pInfo->m_nGlassRawDataSize); - } - - - return TRUE; - }; - - _grmGlassData* GetGlassData(){return m_pGlassData;}; - _grmBlockData* GetBlockData(int nIndex){return &m_pBlockData[nIndex];}; - _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; - _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; - _grmDitMemInfo* GetMemInfo(){return &m_MemInfo;}; - _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; }; -protected: - _grmDitMemInfo m_MemInfo; - char* m_pGlassRawData; - - _grmGlassData* m_pGlassData; - _grmBlockData* m_pBlockData; - _grmCellData* m_pCellData; - _grmDefectData* m_pDefectData; - _grmDefectData* m_pStackData; - - size_t m_nGlassRawDataSize; - - int m_nGlassMaxDataNum; - int m_nBlockMaxDataNum; - int m_nCellMaxDataNum; - int m_nDefectMaxDataNum; - int m_nStackMaxDataNum; - - int m_nGlassDataPoint; - int m_nBlockDataPoint; - int m_nCellDataPoint; - int m_nDefectDataPoint; - int m_nStackDataPoint; - - int m_nSizeOfGlassData; - int m_nSizeOfBlockData; - int m_nSizeOfCellData; - int m_nSizeOfDefectData; - int m_nSizeOfStackData; - -private: - bool m_bRefAlloc; -}; \ No newline at end of file -- Gitblit v1.9.3