SDC C-Project CF Review 프로그램
LYW
2022-04-28 ea996431950e6ecff451bd40d1228f51d077475c
Ongoing100 #4086 CF AOI Review FDC SW Version 추가 요청

1. 리뷰 시작시 로우메신져 프로그램 시작
2. 리뷰 종료시 로우메신저 종료, wgnuplot.exe 종료 추가
7개 파일 변경됨
686 ■■■■ 파일 변경됨
Internal_Library/CHWsiControls/WsiControl_Dit.cpp 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h 594 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 54 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.cpp 17 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 14 ●●●● 패치 | 보기 | raw | blame | 히스토리
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));
    }
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;
};
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
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()
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();
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;
}
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 "));