From c08b701c90c8998b241c82638d5c488e03238214 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 목, 23 9월 2021 17:39:47 +0900 Subject: [PATCH] Ongoing100 #3517 CF AOI Review 자가진단 기능 개선 --- ReviewSystem/ReviewSystem/DitGlassRawStruct.h | 186 ++++++++++++++++++++++++++++++---------------- 1 files changed, 120 insertions(+), 66 deletions(-) diff --git a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h index 9bb53b8..e5f7a55 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h +++ b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h @@ -8,6 +8,7 @@ #define RAWMESSENGER_MAXCAMNUM 30 #define RAWMESSENGER_MAXSCANNUM 20 +#define RAWMESSENGER_MAXHLINUM 8 #define MAX_ZONE_NUM 16 @@ -30,7 +31,7 @@ APS_None = 0, //AOI - APS_GlassLoading, + APS_GlassLoading, APS_InspectEnd, //Review APS_CustomReviewRead, @@ -63,10 +64,10 @@ //설비정보 char m_strLine[32]; - char m_strEquipType[32]; - char m_strEquipID[32]; - char m_strStepID[32]; - char m_strOperID[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 @@ -76,8 +77,8 @@ //기본 물류정보 char m_strGlassID[32]; //Glass ID - char m_strPPID[32]; - char m_strEPPID[32]; + 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 @@ -129,9 +130,9 @@ //카메라/스캔 정보 [김태현 2018/12/5] short m_nCameraNum; short m_nScanNum; - unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; + 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; @@ -143,6 +144,9 @@ 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]; @@ -173,8 +177,8 @@ char m_strCount2[2]; //Mura Data 0412 nwh - float m_fMaxAvgGray; - float m_fMaxPortion; + char m_strMaxAvgGray[12]; + char m_strMaxPortion[12]; //1226NWH @@ -191,6 +195,8 @@ int m_nStackNum; BOOL m_bStackRead; + int m_nRawMergeNum; + BOOL m_bRawMergeRead; //210203 CJH - CutOff 대상 결함 수 int m_nCutOffDefectNum; //210323 CJH - Server/Frame Shrink 정보 추가 @@ -217,7 +223,7 @@ { memset(this, 0, sizeof(_grmCellData)); } - int getTotalDefectNum() { return m_nDefectNumTypeTB + m_nDefectNumTypeTW + m_nDefectNumTypeRB + m_nDefectNumTypeRW; }; + int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; int m_nCellID; //1. PANEL_ID short m_nModelIdx; // 몇 번째 모델인가? @@ -254,11 +260,45 @@ //Mura Data nwh 0404 char m_strProImage[32]; - float m_fAvgGray; - float m_fPortion; + 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; @@ -295,7 +335,7 @@ ////////////////////////////////////////////////////////////////////////// //여기서 부터 리뷰 영역 [김태현 2019/1/19] - ditRaw::ReviewPlanType m_nPlanType; + ditRaw::ReviewPlanType m_nPlanType ; int m_nResultCode; //0:None, 1:Success int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] int m_nModuleIndex; @@ -303,6 +343,7 @@ float m_fManification; float m_fManificResoultion; char m_strRevImageName[256]; + char m_strRevImagePath[256]; ////////////////////////////////////////////////////////////////////////// // Measure 영역 @@ -316,7 +357,7 @@ 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]; + char m_strWsi_3DImageFilename[256]; int m_nWsiReflowPositionIndex; // WsiReflowPositionIndex int m_nWsi_pReflowResultData[8]; double m_dWsi_DamDistance; @@ -329,7 +370,7 @@ // 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]; + float m_fReflow_LinePosData[8]; int m_nReflow_Side; int m_nReflow_InspectionMode; }; @@ -376,13 +417,14 @@ 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 입력 + //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 @@ -457,14 +499,21 @@ 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]; - //리뷰 디펙 정보 [김태현 2019/1/19] + int m_nAlignRectLeft; + int m_nAlignRectTop; + int m_nAlignRectBottom; + int m_nAlignRectRight; + + _grmDefectReviewData m_ReviewDefect; }; @@ -488,6 +537,8 @@ grcWriteBin = 201, grcReadBin = 202, + grcReviewWriteBIn = 301, + grcGlassRawCommand }; @@ -498,11 +549,11 @@ { int nCommand; char strParam[256]; - short nResult; + short nResult; }; short m_nCommandIdxWrite; short m_nCommandIdxRead; - _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT]; + _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT]; }; struct _grmDitMemInfo @@ -514,6 +565,7 @@ int m_nCellMaxDataNum; int m_nDefectMaxDataNum; int m_nStackMaxDataNum; + int m_nRawMergeMaxDataNum; //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] int m_nGlassDataPoint; @@ -521,12 +573,14 @@ 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 { @@ -551,64 +605,64 @@ void clear() { - if (m_bRefAlloc) { m_pGlassRawData = NULL; return; } + if(m_bRefAlloc) { m_pGlassRawData = NULL; return;} - if (m_pGlassRawData) + if(m_pGlassRawData) { - delete[] m_pGlassRawData; + delete [] m_pGlassRawData; m_pGlassRawData = NULL; } }; BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false) { - if (pInfo == NULL) return FALSE; + if(pInfo == NULL) return FALSE; - if (m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear(); + if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear(); - if (m_pGlassRawData == NULL) m_pGlassRawData = new char[pInfo->m_nGlassRawDataSize]; + 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_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_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_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) + if(bRefAlloc) { m_pGlassRawData = pData; } else { - if (pData) + if(pData) { memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize); } else { - memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize); + 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_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]; @@ -617,36 +671,36 @@ }; BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData) { - if (pInfo == NULL || pData == NULL) return FALSE; + if(pInfo == NULL || pData == NULL) return FALSE; - if (1) //new type //메모리 총 공간 크기에 상관없이 + 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_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_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_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_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_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); } @@ -655,11 +709,11 @@ 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; }; + _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; -- Gitblit v1.9.3