From ea996431950e6ecff451bd40d1228f51d077475c Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 목, 28 4월 2022 09:22:18 +0900 Subject: [PATCH] Ongoing100 #4086 CF AOI Review FDC SW Version 추가 요청 --- ReviewSystem/ReviewSystem/SequenceProcessor.cpp | 17 ReviewHistory/ReveiwHistory/DitGlassRawStruct.h | 594 +++++++++++++++++++++++-------------------------- ReviewSystem/ReviewSystem/ReviewInterface.h | 6 ReviewSystem/ReviewSystem/ReviewInterface.cpp | 54 ++++ ReviewHistory/bin/ReviewHistroy.exe | 0 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp | 14 + Internal_Library/CHWsiControls/WsiControl_Dit.cpp | 1 7 files changed, 358 insertions(+), 328 deletions(-) diff --git a/Internal_Library/CHWsiControls/WsiControl_Dit.cpp b/Internal_Library/CHWsiControls/WsiControl_Dit.cpp index 1313964..4efd028 100644 --- a/Internal_Library/CHWsiControls/WsiControl_Dit.cpp +++ b/Internal_Library/CHWsiControls/WsiControl_Dit.cpp @@ -652,6 +652,7 @@ if (nIdx>=int(vecUMOriginX.size()) || nIdx>=int(vecUMOriginY.size())) continue; pPacket->SetInt(nIdx); + pPacket->SetInt(0); pPacket->SetInt(vecUMOriginX.at(nIdx)); pPacket->SetInt(vecUMOriginY.at(nIdx)); } diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h index a269abd..5a336e2 100644 --- a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h +++ b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h @@ -48,78 +48,38 @@ memset(this, 0, sizeof(_grmGlassData)); } - //int - 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; - int m_nVcrResultCode; - //결함 갯수 관리 변수 - 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_nDefectNumJudgeLine; - int m_nDefectNumStackTD; - int m_nDefectNumStackSD; - int m_nDefectNumStackPD; - int m_nDefectNumStackSP; - int m_nSlot_No; - int m_nReviewNum; - int m_nStackNum; - int m_nCutOffDefectNum; - int m_nRawMergeNum; - //KYH ND 판정 추가 - int m_nDefectNumJudgeND; - //DUMY DATA - int Dumy_int[9]; - - //double - 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; - //DUMY DATA - double Dumy_double[10]; - - //char //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; + /* <KYH 211129 : #3796 ADD Start> */ + int m_nDefectNumJudgeND; + /* <KYH 211129 : #3796 ADD End> */ + //DUMY DATA + int Dumy_int[9]; + //설비정보 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]; @@ -130,16 +90,76 @@ 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; + /*< LHS 20211029 - #3783 MOD Start >*/ + int m_nDefectNumJudgeLine; + /*< LHS 20211029 - #3783 MOD End >*/ + 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 @@ -149,6 +169,7 @@ 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]; @@ -161,53 +182,42 @@ char m_strFlowHistory[2]; char m_strCount1[2]; char m_strCount2[2]; + char m_StrMergeList[10][12]; //Mura Data 0412 nwh char m_strMaxAvgGray[12]; char m_strMaxPortion[12]; - char m_strShrinked[6]; + + + //1226NWH char m_strReadingFlag[2]; - char m_StrMergeList[10][12]; - //DUMY DATA - char m_strRawMergeStepID[32]; - char Dumy_char[104]; - - //unsigned char - 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]; - //DUMY DATA - unsigned char Dumy_unsigned_char[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM]; - - //CTime - CTime m_tmGlassLoading; //3. START_TIME - CTime m_tmInspectionStart; //3. START_TIME - CTime m_tmInspectionEND; //4. END_TIME - CTime m_tmReviewLoading; - CTime m_tmReviewEnd; - //DUMY DATA - CTime Dumy_CTime[10]; - - //short - short m_nCameraNum; - short m_nScanNum; - //DUMY DATA - short Dumy_short[10]; - - //BYTE BYTE m_nUniqueID[4]; - BYTE m_nGlassDataBitSignal[4]; - //DUMY DATA - BYTE Dumy_BYTE[10]; + int m_nSlot_No; - //BOOL - BOOL m_bJob_end; + BYTE m_nGlassDataBitSignal[4]; + bool m_bJob_end; + + //201217 CJH - 찍은 Defect Review 개수 + int m_nReviewNum; + //201221 CJH - 파싱한 Stack 결과 + int m_nStackNum; BOOL m_bStackRead; + + /*< KJG 20211024 - #3487 ADD Start >*/ + int m_nRawMergeNum; BOOL m_bRawMergeRead; + /*< KJG 20211024 - #3487 ADD End >*/ + //210203 CJH - CutOff 대상 결함 수 + int m_nCutOffDefectNum; + //210323 CJH - Server/Frame Shrink 정보 추가 + char m_strShrinked[6]; + //210326 CJH - RAW 입력 Defect 수량 상한 사용여부 BOOL m_bRawCutoff; + //210907 KJG - EdgeCrack 검사 사용 유무 BOOL m_bEdgeCrackUse; BOOL m_bRawMergeUse; - //DUMY DATA - BOOL Dumy_BOOL[9]; + /* < KJG 20220225 - #3850 ADD Start >*/ + char m_strRawMergeStepID[32]; + /* < KJG 20220225 - #3850 ADD End >*/ }; struct _grmBlockData { @@ -215,12 +225,10 @@ { memset(this, 0, sizeof(_grmBlockData)); } - //char 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 int m_nGlassIdDCR; //22. GLASS_ID_DCR }; struct _grmCellData @@ -230,27 +238,32 @@ 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; // 몇 번째 모델인가? - //int - int m_nCellID; //1. PANEL_ID - int m_rectCellLeft; - int m_rectCellTop; - int m_rectCellRight; - int m_rectCellBottom; - /*Judgement*/ - int m_nJudgement; - int m_nJudgeFlag; - int m_nJudgeGlade; + 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; @@ -258,38 +271,12 @@ 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_nDefectNumJudgeLine; - 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; - //KYH ND 판정 추가 + /* <KYH 211129 : #3796 ADD Start> */ int m_nDefectNumJudgeND; + /* <KYH 211129 : #3796 ADD End> */ //DUMY DATA int Dumy_int[9]; - //double - //DUMY DATA - double Dumy_double[10]; - - //char - char m_strCellName[32]; //Mura Data nwh 0404 char m_strProImage[32]; char m_strAvgGray_0[12]; @@ -301,6 +288,7 @@ 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 @@ -310,6 +298,7 @@ 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 @@ -319,6 +308,7 @@ 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 @@ -328,28 +318,33 @@ char m_strFFTVah_3[12]; char m_strFFTVaq_3[12]; char m_strFFTPK_3[12]; - //DUMY DATA - char Dumy_char[256]; - //unsigned char + int m_nDefectNumJudgeOKWhite; + int m_nDefectNumJudgeOKBlack; + int m_nDefectNumJudgeNG; + int m_nDefectNumJudgeRW; + int m_nDefectNumJudgeRP; + int m_nDefectNumJudgeRV; + int m_nDefectNumJudgeTR; + int m_nDefectNumJudgePR; + /*< LHS 20211029 - #3783 MOD Start >*/ + int m_nDefectNumJudgeLine; + /*< LHS 20211029 - #3783 MOD End >*/ + int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - //CTime + // Filtering된 Stack별 수 + int m_nDefectTDCount; + int m_nDefectSDCount; + int m_nDefectPDCount; + int m_nDefectSPCount; - //short - short m_nModelIdx; // 몇 번째 모델인가? - //DUMY DATA - short Dumy_short[10]; + // Gate/Data 총 갯수 + int m_nGateNum; + int m_nDataNum; - //BYTE - //DUMY DATA - BYTE Dumy_BYTE[10]; - - //BOOL - //DUMY DATA - BOOL Dumy_BOOL[10]; - - - + // 210129 CJH - Cell Origin 방향 + int m_nCellXDir; + int m_nCellYDir; }; struct _grmDefectReviewData @@ -359,64 +354,46 @@ memset(this, 0, sizeof(_grmDefectReviewData)); } + ////////////////////////////////////////////////////////////////////////// + //여기서 부터 리뷰 영역 [김태현 2019/1/19] ditRaw::ReviewPlanType m_nPlanType ; - //int int m_nResultCode; //0:None, 1:Success int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] int m_nModuleIndex; int m_nMagnificIndex; - int m_nMeasure_Index; - int m_nMeasure_ResultCode; //0:None, 1:Success - int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 함몰 / 돌기 - int m_nWsiReflowPositionIndex; // WsiReflowPositionIndex - int m_nWsi_pReflowResultData[8]; - 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 - int m_nReflow_Side; - int m_nReflow_InspectionMode; - //DUMY DATA - int Dumy_int[10]; - - //double - double m_dWsi_DamDistance; - double m_dWsiMmMotorX; // WSI 모터 좌표 20180223 HJH - double m_dWsiMmMotorY; - //DUMY DATA - double Dumy_double[10]; - - //char - char m_strRevImageName[256]; - char m_strRevImagePath[256]; - char m_strWsi_2DImageFilename[256]; - char m_strWsi_3DImageFilename[256]; - //DUMY DATA - char Dumy_char[256]; - - //unsigned char - - //CTime - - //short - - //BYTE - //DUMY DATA - BYTE Dumy_BYTE[10]; - - //BOOL - //DUMY DATA - BOOL Dumy_BOOL[10]; - - //float float m_fManification; float m_fManificResoultion; - float m_fMesure_ResultData[8]; // 0:Type, 1:ShiftX, 2:ShiftY - float m_fWsi_ResultData[8]; // 0:Type, 1:Height(um), 2:Width - float m_fWsiManification; // WSI 배율 - float m_fReflow_LinePosData[8]; - //DUMY DATA - float Dumy_float[10]; + 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 @@ -426,81 +403,20 @@ memset(this, 0, sizeof(_grmDefectData)); } - _grmDefectReviewData m_ReviewDefect; - - //int - int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - int m_nPixelConv; // pixel 단위 좌표 - int m_nPixelScan; // pixel 단위 좌표 - int m_nDefectRScale; // 픽셀단위 결함 높이 -------------------------RS - int m_nPixelGlassStart; // Glass 시작 픽셀 - 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단위 크기. - int m_nPadRegionIdx; // PAD 영역 인덱스 - int m_nUMCellX; // 셀 원점 기준 x 좌표 - int m_nUMCellY; // 셀 원점 기준 y 좌표 - int m_nUMShotX; // 샷 기준 X좌표 - int m_nUMShotY; // 샷 기준 Y좌표 - int m_StackInfo; // Stack Flag - 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 핵 높이 - int m_nDefectMerge; // 현재 디펙의 머지 여부 - int m_nPixelSizeOrigin; - int m_nScratchRatio; - int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] - int m_nAngle; // 각도 - int m_nMajor; // 장축 길이(Long) - int m_nMinor; // 단축 길이(Short) - int m_nCompact; // Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율 - int m_nThickness; // Blob 넓이와 장축의 비율 (Area / Major) - int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - int m_nAlignRectLeft; - int m_nAlignRectTop; - int m_nAlignRectBottom; - int m_nAlignRectRight; - //DUMY DATA - int Dumy_int[10]; - - //double - double m_dScanResolution; - double m_dConvResolution; - //DUMY DATA - double Dumy_double[10]; - - //char - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 최대 사이즈 60bytes - char m_strUnitID[16]; // 유닛아이디 - char m_strDefectCode[32]; // Defect Code - char m_strAoiImageName[256]; // Defect Image Name(CCD Image) - char m_strDefectName[16]; - char m_strDefectType[16]; - char m_strAoiImagePath[255]; - char m_strReviewImagePath[255]; - char m_strLNDefectCode[12]; - //DUMY DATA - char Dumy_char[256]; - - //unsigned char - - //CTime - - //short 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 @@ -512,62 +428,117 @@ 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라인(얼라인 보정 후) - short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16등분 구분 + + 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를 선택하는 인덱스. - short/*ReKind*/ m_DefectKind; // 결함 종류 - short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? - short/*LineDefectType*/ m_LineDefectType; - //DUMY DATA - short Dumy_short[100]; - - //BYTE - //DUMY DATA - BYTE Dumy_BYTE[10]; - - //BOOL - BOOL m_bDefectCutoff; // 컷 오프 디펙(TRUE= Cutoff, FALSE) - BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. - BOOL m_bMergeState; // Merge Status - BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 - //DUMY DATA - BOOL Dumy_BOOL[10]; - - //float - - //CRect - CRect m_RectUM; // 디펙 센터 기준 사각형. //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; + /*< LHS 20211029 - #3783 MOD Start >*/ + char m_strLNDefectCode[12]; + short/*LineDefectType*/ m_LineDefectType; + /*< LHS 20211029 - #3783 MOD End >*/ + + _grmDefectReviewData m_ReviewDefect; }; @@ -613,29 +584,33 @@ { //공유 메모리 생성할 공간 결정 [김태현 2018/11/12] size_t m_nGlassRawDataSize; - - //int int m_nGlassMaxDataNum; int m_nBlockMaxDataNum; int m_nCellMaxDataNum; int m_nDefectMaxDataNum; int m_nStackMaxDataNum; + /*< KJG 20211024 - #3487 ADD Start >*/ int m_nRawMergeMaxDataNum; + /*< KJG 20211024 - #3487 ADD End >*/ + //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] int m_nGlassDataPoint; int m_nBlockDataPoint; int m_nCellDataPoint; int m_nDefectDataPoint; int m_nStackDataPoint; + /*< KJG 20211024 - #3487 ADD Start >*/ int m_nRawMergeDataPoint; + /*< KJG 20211024 - #3487 ADD End >*/ + int m_nSizeOfGlassData; int m_nSizeOfBlockData; int m_nSizeOfCellData; int m_nSizeOfDefectData; int m_nSizeOfStackData; + /*< KJG 20211024 - #3487 ADD Start >*/ int m_nSizeOfRawMergeData; - //DUMY DATA - int Dumy_int[10]; + /*< KJG 20211024 - #3487 ADD End >*/ }; struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand { @@ -782,37 +757,24 @@ size_t m_nGlassRawDataSize; - //int 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; - //DUMY DATA - int Dumy_int[10]; - //DUMY DATA - double Dumy_double[10]; - //DUMY DATA - char Dumy_char[256]; - //DUMY DATA - short Dumy_short[10]; - //DUMY DATA - BYTE Dumy_BYTE[10]; - //DUMY DATA - BOOL Dumy_BOOL[10]; - private: - //bool bool m_bRefAlloc; }; \ No newline at end of file diff --git a/ReviewHistory/bin/ReviewHistroy.exe b/ReviewHistory/bin/ReviewHistroy.exe index 16d97ba..7968292 100644 --- a/ReviewHistory/bin/ReviewHistroy.exe +++ b/ReviewHistory/bin/ReviewHistroy.exe Binary files differ diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp index a2d3e7d..73bc99f 100644 --- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp +++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp @@ -162,6 +162,8 @@ { if (m_pDoc==NULL) return FALSE; + Start3rdPartyProgram(); + CreateDirectory(_REVIEW_SERVER_BASE_PATH_, NULL); CreateDirectory(_REVIEW_SERVER_LOG_PATH_, NULL); CreateDirectory(_REVIEW_SERVER_CONFIG_PATH_, NULL); @@ -388,6 +390,8 @@ DisconnectReviewCamera(); DeinitReviewCamera(); m_ProcessTimer.End(); + + Terminate3rdPartyProgram(); if (m_pView) { @@ -491,8 +495,6 @@ DeinitSharedImage(); g_pLog->DisplayMessage(_T("Deinit Shared Image")); - - DeinitTotalPitchMeasure(); g_pLog->DisplayMessage(_T("Deinit TotalPitch Measure")); @@ -720,6 +722,54 @@ //Review S/W Version End } +/*< LYW 20220426 - #4086 ADD Start >*/ +void CReviewInterface::Start3rdPartyProgram() +{ +// if(StartWindowIDProgram(_T("FTPUploader"), _T("D:\\DIT_3rdParty\\FTPUpload\\FTPUploader.exe"))) +// g_pLog->DisplayMessage(_T("FDCFTPUploader Start Success")); +// else g_pLog->DisplayMessage(_T("FDCFTPUploader Start Fail")); + + if (StartWindowIDProgram(_T("Dit Glass Raw Messenger"), _T("D:\\DIT_3rdParty\\GlassRawMessenger\\DitGlassRawMessenger_x64.exe"))) + g_pLog->DisplayMessage(_T("DitGlassRawMessenger Start Success")); + else g_pLog->DisplayMessage(_T("DitGlassRawMessenger Start Fail")); +} + +int CReviewInterface::StartWindowIDProgram(CString WindowID, CString ProgramPath) +{ + HWND hWnd = ::FindWindow(NULL, WindowID); + if (hWnd == NULL) + { + if(ShellExecute(hWnd, NULL, ProgramPath, NULL, NULL, SW_SHOWMINIMIZED)) + return TRUE; + else return FALSE; + } + return TRUE; +} + +void CReviewInterface::Terminate3rdPartyProgram() +{ + /*TerminateWindowIDProgram(_T("FTPUploader"));*/ + TerminateWindowIDProgram(_T("Dit Glass Raw Messenger")); + TerminateWindowIDProgram(_T("gnuplot")); + KillProcess("wgnuplot.exe"); +} + +void CReviewInterface::TerminateWindowIDProgram(CString WindowID) +{ + HWND hWnd = ::FindWindow(NULL, WindowID); + if (hWnd != NULL) + { + DWORD ProcessId; + GetWindowThreadProcessId(hWnd, &ProcessId); + HANDLE hProcess = OpenProcess(MAXIMUM_ALLOWED, FALSE, ProcessId); + if (hProcess != NULL) + { + TerminateProcess(hProcess, 0); + } + + } +} +/*< LYW 20220426 - #4086 ADD End >*/ /*< LYW 20220415 - #4086 ADD End >*/ void CReviewInterface::CreateSystemDirectory() diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.h b/ReviewSystem/ReviewSystem/ReviewInterface.h index 9bda12b..e0423fc 100644 --- a/ReviewSystem/ReviewSystem/ReviewInterface.h +++ b/ReviewSystem/ReviewSystem/ReviewInterface.h @@ -679,6 +679,12 @@ /*< LYW 20220415 - #4086 ADD Start >*/ static void threadSet3rdPartyProgramVersion(void* pArg); void SetReviewProgramVersion(); + /*< LYW 20220426 - #4086 ADD Start >*/ + void Start3rdPartyProgram(); + int StartWindowIDProgram(CString WindowID, CString ProgramPath); + void Terminate3rdPartyProgram(); + void TerminateWindowIDProgram(CString WindowID); + /*< LYW 20220426 - #4086 ADD End >*/ /*< LYW 20220415 - #4086 ADD End >*/ void ApplySystemSettingValue(); diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor.cpp index 4f11b45..d0f3204 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor.cpp +++ b/ReviewSystem/ReviewSystem/SequenceProcessor.cpp @@ -1965,7 +1965,7 @@ //{ - // WSI result count + // WSI result count //TEST for (int nModuleIdx=0; nModuleIdx<Module_GetModuleStatusCount(); nModuleIdx++) { CWsiControl* pWsiControl = m_pSP2P->ISP2P_GetWSIControl(nModuleIdx); @@ -2061,14 +2061,15 @@ int nTotalWsiCount = 0; - for(int nWsiControlIdx = 0; nWsiControlIdx < nWsiControlCount; nWsiControlIdx++) - { - CWsiControl* pWsiControl = m_pSP2P->ISP2P_GetWSIControl(nWsiControlIdx); - if(pWsiControl == NULL) continue ; +// for(int nWsiControlIdx = 0; nWsiControlIdx < nWsiControlCount; nWsiControlIdx++) +// { - // WSI result count + // WSI result count //TEST for (int nModuleIdx=0; nModuleIdx<Module_GetModuleStatusCount(); nModuleIdx++) { + CWsiControl* pWsiControl = m_pSP2P->ISP2P_GetWSIControl(nModuleIdx); + if (pWsiControl == NULL) continue; + CReviewResult* pWsiUserResult = pGlassResult->GetWsiUserResult(nModuleIdx); if(pWsiUserResult == NULL) continue ; const SCoordInfo* pCoordInfo = Module_GetCoordInfo(nModuleIdx); @@ -2121,10 +2122,10 @@ // [2016:11:18]-[WEZASW] : �쟾�떖 �빆紐� �닔�젙 => nModuleIndex, nDefectCount, nDefectIndex ( n+0), nUMOriginX ( n+1), nUMOriginY ( n+2) bWSIStart = pWsiControl->SetWsiStart(nDefectCount, vectorPosX, vectorPosY, 1); - + nTotalWsiCount+=nDefectCount; } - } + //} return bWSIStart; } diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp index b5f9c71..e18344f 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp @@ -9286,7 +9286,7 @@ AFM_SetAFMTracking(FALSE); SetWsiType(0); - WSIAllReadySignal(0); + WSIAllReadySignal(1); // send wsi start if(!WSIUserAllStartSignal()) @@ -9517,7 +9517,8 @@ VectorDouble vectorCollisionPosX; vectorCollisionPosX.clear(); - + //WSI + pMotorControl->GantrySetTwoGantrySyncModeSend(1); // WSI result count for (int nModuleIdx=0; nModuleIdx<Module_GetModuleStatusCount(); nModuleIdx++) @@ -9606,6 +9607,15 @@ } } + if (vectorPosX.empty() == TRUE) + { + //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error START + g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point,TwoGantrySyncMode OFF!"), vectorPosX.size()); + g_pLog->DisplayMessage(_T("[GantryAutoGo] (%d)Gantry Path Send Fail"), pModuleStatus->GetGantryIndex()); //taek 210128 + pMotorControl->GantrySetTwoGantrySyncModeSend(0); + //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error END + } + if (m_pSP2P->ISP2P_GetReviewProcessor()->CheckMotionComplete() == FALSE) { g_pLog->DisplayMessage(_T("[GantryAutoGo] Motor IS Not Ready ")); -- Gitblit v1.9.3