DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -21,6 +21,10 @@ #define LOCAL_AOIRAWDFS_PATH "D:\\DIT_ResultData\\Raw" #define LOCAL_AOIRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" //TEST // #define NETWORK_AOIRAWDFS_PATH "D:\\DIT_ResultData\\Raw" // #define NETWORK_AOIRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" #define NETWORK_AOIRAWDFS_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw" #define NETWORK_AOIRAWBIN_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin" DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp
@@ -16,6 +16,7 @@ #define LOCAL_AOIRAWDFS_PATH "D:\\DIT_ResultData\\Raw" #define LOCAL_AOIRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" #define NETWORK_AOIRAWDFS_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw" #define NETWORK_AOIRAWBIN_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin" Internal_Library/CHWsiControls/WsiControl_Dit.cpp
@@ -159,6 +159,12 @@ { m_pWC2P->IWC2P_DisplayMessage(m_nIndex, _T("[WsiControl] [%02d] MODULE_INDEX Connection Fail!"), m_nIndex); } /*< LYW 20220421 - #4086 ADD Start >*/ int nWSIVersion = pPacket->GetInt(0); m_pWC2P->IWC2P_SetWSIVersion(m_nIndex, nWSIVersion); m_pWC2P->IWC2P_DisplayMessage(m_nIndex, _T("[WsiControl] [%02d] WSI S/W Version Set = %d"), m_nIndex, nWSIVersion); /*< LYW 20220421 - #4086 ADD End >*/ return; @@ -646,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)); } Internal_Library/Include/CHWsiControls/WsiControlInfo.h
@@ -171,6 +171,7 @@ virtual BOOL IWC2P_SetMeasureInfo(int nIndex, int nPointIndex, const CString& strImagFilename, int nWsiType) = 0; virtual BOOL IWC2P_GetMeasureInfo(int nIndex, int nPointIndex, short& nLoc, short& nOptic, short& nGray, CString& strCellID) = 0; virtual int IWC2P_GetCurrentStatus(int nIndex, CString& strGlassID, CString& strRecipeID, int& nType) = 0; virtual void IWC2P_SetWSIVersion(int nModuleIndex, int nVersion) = 0; virtual void IWC2P_SetConnectedStatus(int nIndex, int nConnectStatus) = 0; virtual void IWC2P_RecvMeasureMessage(int nIndex, int nMessageType, int nMessageResult) = 0; virtual void IWC2P_SetMeasureResult(int nIndex, const SWsiResult& measureResut) = 0; 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/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -4228,6 +4228,16 @@ bReturn = macroFile.Write(strFilePath); /*< LYW 20220525 - #4158 ADD Start >*/ CString strRTMSBackUpFilePath; strRTMSBackUpFilePath.Format(_T("%s\\%s"), _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT, REVIEW_OFFSET_CONFIGFILE_NAME); if (bReturn) { CopyFile(REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME, strRTMSBackUpFilePath, FALSE); } /*< LYW 20220525 - #4158 ADD End >*/ if (bReturn) { /*< LYW 20211028 - #3684 ADD Start >*/ ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
@@ -27,6 +27,9 @@ #define REVIEW_OFFSET_CONFIGFILE_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\") //210805 #define REVIEW_OFFSET_CONFIGFILE_NAME _T("ReviewOffSet.cfg") #define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg") /*< LYW 20220525 - #4158 ADD Start >*/ #define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig") /*< LYW 20220525 - #4158 ADD End >*/ #define REVIEW_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup") #define REVIEW_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\") ReviewHistory/bin/ReviewHistroy.exeBinary files differ
ReviewSystem/ReviewRecipeEditor/DlgCommon.cpp
@@ -18,7 +18,7 @@ , m_nPlanCount(0) , m_nUserDefectCount(0) , m_nReflowPixelScale(0) , m_EditControl_GantryPathUse(0) , m_nradioGantryMode(0) { m_nSelectPlanIdx = -1; m_nLightCount = 0; @@ -68,6 +68,9 @@ DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_26, m_ctrlStaticGlassSlot_26); DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_27, m_ctrlStaticGlassSlot_27); DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_28, m_ctrlStaticGlassSlot_28); /*< LYW 20220525 - #4157 ADD Start >*/ DDX_Radio(pDX, IDC_RADIO_GANTRY_MODE_1, (int&)m_nradioGantryMode); /*< LYW 20220525 - #4157 ADD End >*/ DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_ALL_SELECT, m_ctrlStaticGlassSlot_ALL_Select); DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_ALL_DESELECT, m_ctrlStaticGlassSlot_ALL_Deselect); @@ -77,7 +80,6 @@ DDX_Control(pDX, IDC_CHECK_AUTO_LIGHT, m_ctrlAutoLight); DDX_Control(pDX, IDC_COMBO_RCP_GLASSORIGIN, m_ctrlComboGlassOrigin); DDX_Text(pDX, IDC_EDIT_RCP_REFLOW_PIXEL_SCALE, m_nReflowPixelScale); DDX_Text(pDX, IDC_EDIT_USE_SINGLE_GANTRY_PATH, m_EditControl_GantryPathUse); } @@ -85,14 +87,17 @@ ON_BN_CLICKED(IDC_BUTTON_RCP_REVIEW_RESET, &CDlgCommon::OnBnClickedButtonRcpReviewReset) ON_BN_CLICKED(IDC_BUTTON_RCP_REVIEW_APPLY, &CDlgCommon::OnBnClickedButtonRcpReviewApply) ON_CONTROL_RANGE(BN_CLICKED, IDC_STATIC_GLASS_SLOT_01, IDC_STATIC_GLASS_SLOT_28, OnGlassSlotClick) ON_CONTROL_RANGE(BN_CLICKED, IDC_RADIO_GANTRY_MODE_1, IDC_RADIO_GANTRY_MODE_3, OnClickRadioGantryMode) ON_EN_CHANGE(IDC_EDIT_RCP_REVIEW_PLAN_COUNT, &CDlgCommon::OnEnChangeEditRcpReviewPlanCount) ON_EN_CHANGE(IDC_EDIT_RCP_REVIEW_USER_DEFECT_COUNT, &CDlgCommon::OnEnChangeEditRcpReviewUserDefectCount) ON_NOTIFY(NM_CLICK, IDC_GRID_RCP_REVIEW_PLAN_INFO, &CDlgCommon::OnPlanInfoGridClick) ON_NOTIFY(NM_CLICK, IDC_GRID_RCP_REVIEW_PLAN_INFO, &CDlgCommon::OnPlanInfoGridClick) ON_NOTIFY(GVN_COMBOSELCHANGE, IDC_GRID_RCP_REVIEW_USER_DEFECT_INFO, &CDlgCommon::OnSelChange) ON_BN_CLICKED(IDC_BUTTON_LOAD_MASTER, &CDlgCommon::OnBnClickedButtonLoadMaster) ON_NOTIFY(NM_CLICK, IDC_GRID_RCP_REFLOW_PARAMETER, &CDlgCommon::OnClickImageInfo) ON_BN_CLICKED(IDC_BUTTON_USER_PITCH_INPUT, &CDlgCommon::OnBnClickedButtonUserPitchInput) ON_BN_CLICKED(IDC_BUTTON4, &CDlgCommon::OnBnClickedButton4) /*< LYW 20220525 - #4157 ADD Start >*/ /*< LYW 20220525 - #4157 ADD End >*/ END_MESSAGE_MAP() // CDlgCommon 메시지 처리기입니다. @@ -507,7 +512,9 @@ strItemText = m_ctrlGridScheduleInfo.GetItemText(nRowIdx, nColIdx++); pScheduleInfo->SetMaxWsiPointCount(_ttoi(strItemText)); pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse); //pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse); pScheduleInfo->SetSingleGantryPath(m_nradioGantryMode); pCellCheck = (CGridCellCheck*)m_ctrlGridScheduleInfo.GetCell(nRowIdx, nColIdx++); if(pCellCheck) @@ -529,7 +536,8 @@ strItemText = m_ctrlGridScheduleRangeCntInfo.GetItemText(nRowIdx, nColIdx++); pScheduleInfo->SetRangePointCount(Range_Right, _ttoi(strItemText)); pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse); //pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse); pScheduleInfo->SetSingleGantryPath(m_nradioGantryMode); //사용자 결함 nRowIdx = 1; @@ -1256,8 +1264,8 @@ strItemText.Format(_T("%d"), pScheduleInfo->GetMaxPointCount()); m_ctrlGridScheduleInfo.SetItemText(nRowIdx, nColIdx++, strItemText); m_EditControl_GantryPathUse = pRsRcpReviewInfo->GetRcpSchedulingInfo()->GetSingleGantryPath(); //m_EditControl_GantryPathUse = pRsRcpReviewInfo->GetRcpSchedulingInfo()->GetSingleGantryPath(); m_nradioGantryMode = pRsRcpReviewInfo->GetRcpSchedulingInfo()->GetSingleGantryPath(); m_ctrlGridScheduleInfo.Invalidate(FALSE); } @@ -2066,6 +2074,11 @@ } void CDlgCommon::OnClickRadioGantryMode(UINT ID) { return; } void CDlgCommon::OnSetMaster(BOOL bSetMaster, int dir, CPoint* reflowPoints) { CString strTemp; ReviewSystem/ReviewRecipeEditor/DlgCommon.h
@@ -66,6 +66,9 @@ int m_nSelectPlanIdx; int m_nLightCount; int m_nAFMCount; /*< LYW 20220525 - #4157 ADD Start >*/ UINT m_nradioGantryMode; /*< LYW 20220525 - #4157 ADD End >*/ BOOL m_bSelectGlassSlot[TOTAL_GLASS_SLOT_COUNT]; CFontStatic* m_ctrlStaticGlassSlot[TOTAL_GLASS_SLOT_COUNT]; @@ -82,7 +85,9 @@ afx_msg void OnBnClickedButtonLoadMaster(); /*< LYW 20220525 - #4157 ADD Start >*/ afx_msg void OnClickRadioGantryMode(UINT ID); /*< LYW 20220525 - #4157 ADD End >*/ afx_msg void OnBnClickedButtonRcpReviewReset(); afx_msg void OnBnClickedButtonRcpReviewApply(); @@ -146,5 +151,4 @@ CComboBox m_ctrlComboGlassOrigin; afx_msg void OnBnClickedButton4(); int m_nReflowPixelScale; int m_EditControl_GantryPathUse; }; ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditor.rc
@@ -160,8 +160,10 @@ PUSHBUTTON "ChangeRCP",IDC_BUTTON4,322,41,50,14 EDITTEXT IDC_EDIT_RCP_REFLOW_PIXEL_SCALE,221,145,32,12,ES_CENTER | ES_AUTOHSCROLL LTEXT "Pixel Scale",IDC_STATIC,184,147,34,8 EDITTEXT IDC_EDIT_USE_SINGLE_GANTRY_PATH,268,295,48,14,ES_AUTOHSCROLL LTEXT "Single Gantry",IDC_STATIC,269,284,44,8 GROUPBOX "GantryMode",IDC_STATIC,264,291,54,46 CONTROL "All Gantry",IDC_RADIO_GANTRY_MODE_1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,266,301,52,9 CONTROL "Left Gantry",IDC_RADIO_GANTRY_MODE_2,"Button",BS_AUTORADIOBUTTON,266,312,52,9 CONTROL "Right Gantry",IDC_RADIO_GANTRY_MODE_3,"Button",BS_AUTORADIOBUTTON,266,323,52,9 END IDD_DIALOG_REVIEW_RCP_EDITOR_MEASURE DIALOGEX 0, 0, 379, 526 ReviewSystem/ReviewRecipeEditor/resource.h
@@ -296,8 +296,11 @@ #define IDC_EDIT3 1121 #define IDC_EDIT_USE_SINGLE_GANTRY_PATH 1121 #define IDC_GRID_RCP_JUDGE_CELL_JUDGEMENT 1122 #define IDC_RADIO_GANTRY_MODE_1 1122 #define IDC_GRID_RCP_JUDGE_GLASS_JUDGEMENT_DEFECT 1123 #define IDC_RADIO_GANTRY_MODE_2 1123 #define IDC_GRID_RCP_JUDGE_GLASS_JUDGEMENT_CELL 1124 #define IDC_RADIO_GANTRY_MODE_3 1124 #define IDC_GRID_RCP_JUDGE_ZONE_DATA 1129 #define IDC_GRID_RCP_JUDGE_ZONE_JUDGE_SETTING 1130 #define IDC_GRID_RCP_JUDGE_ZONE_JUDGE_SETTING_PR 1131 @@ -309,7 +312,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 155 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1122 #define _APS_NEXT_CONTROL_VALUE 1123 #define _APS_NEXT_SYMED_VALUE 106 #endif #endif ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp
@@ -1091,6 +1091,15 @@ bReturn = macroFile.Write(strFilePath); /*< LYW 20220525 - #4161 ADD Start >*/ CString strRTMSBackUpFilePath; strRTMSBackUpFilePath.Format(_T("%s\\%s"), _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT, REVIEW_OFFSET_CONFIGFILE_NAME); if (bReturn) { CopyFile(REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME, strRTMSBackUpFilePath, FALSE); } /*< LYW 20220525 - #4161 ADD End >*/ // #3563 LYW_ CF AOI Review Offset 파라미터 저장시 완료 팝업 추가 ADD START CString strMessage; ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h
@@ -24,6 +24,9 @@ #define REVIEW_OFFSET_CONFIGFILE_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\") //210805 #define REVIEW_OFFSET_CONFIGFILE_NAME _T("ReviewOffSet.cfg") #define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg") /*< LYW 20220525 - #4161 ADD Start >*/ #define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig") /*< LYW 20220525 - #4161 ADD End >*/ #define REVIEW_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup") #define REVIEW_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\") ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -67,6 +67,8 @@ #include "akAOISharedSystem.h" #include "DlgModuleInfo.h" #include <Psapi.h> using namespace CHReviewResult; using namespace CHImageControls; @@ -111,6 +113,14 @@ // single variable m_strProgramVersion = _T(""); // program version /*< LYW 20220415 - #4086 ADD Start >*/ m_nFDCGRMSWVersion = 20220101; m_nFDCFTPUploaderSWVersion = 20220101; m_nFDCSyncSWVersion = 20220101; m_nFDCReviewSWVersion = 20220101; m_nFDCWSISWVersion00 = 20220101; m_nFDCWSISWVersion01 = 20220101; /*< LYW 20220415 - #4086 ADD End >*/ m_ProcessTimer.End(); // process timer // multi variable @@ -152,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); @@ -162,7 +174,7 @@ //ISP2P_CopyFolder(_REVIEW_SERVER_CONFIG_PATH_, _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT); //ISP2P_CopyFolder(_REVIEW_RECIPE_PATH_, _REVIEW_RECIPE_BACKUP_PATH_CPJT); //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END SetProgramVersion(); SetReviewProgramVersion(); // init review data if (m_pDoc->InitReviewData()==FALSE) @@ -187,6 +199,10 @@ { m_pView->CreateDialogs(pSystemInfo->m_nLineType, pSystemInfo->m_nMachineType, pSystemInfo->m_bUseVisionAlign); } /*< LYW 20220415 - #4086 ADD Start >*/ _beginthread(threadSet3rdPartyProgramVersion, NULL, this); /*< LYW 20220415 - #4086 ADD End >*/ // system type log : SW Version 추가 g_pLog->DisplayMessage(_T("Starting ReviewSystem Program! (%s)"), m_strProgramVersion); @@ -370,22 +386,24 @@ { TRACE(_T("[A2E]DeinitReviewInterface 시작\n")); m_ProcessTimer.Start(); DisconnectReviewCamera(); DeinitReviewCamera(); m_ProcessTimer.End(); Terminate3rdPartyProgram(); if (m_pView) { m_pView->DeleteDialogs(); } g_pLog->DisplayMessage(_T("ReviewCamera Deinit Time : %f ms"), m_ProcessTimer.GetDurationMilliSecond()); g_pLog->DisplayMessage(_T("Program exit by User!")); ClearAllObserverVector(); g_pLog->DisplayMessage(_T("Clear all Observer Vectors")); ::Sleep(400); m_ProcessTimer.Start(); DisconnectReviewCamera(); DeinitReviewCamera(); m_ProcessTimer.End(); g_pLog->DisplayMessage(_T("ReviewCamera Deinit Time : %f ms"), m_ProcessTimer.GetDurationMilliSecond()); m_ProcessTimer.Start(); DeinitAlignCamera(); @@ -478,8 +496,6 @@ DeinitSharedImage(); g_pLog->DisplayMessage(_T("Deinit Shared Image")); DeinitTotalPitchMeasure(); g_pLog->DisplayMessage(_T("Deinit TotalPitch Measure")); @@ -565,32 +581,196 @@ AFM_SetAFMZoomLevel(0, 0); } void CReviewInterface::SetProgramVersion() /*< LYW 20220415 - #4086 ADD Start >*/ void CReviewInterface::threadSet3rdPartyProgramVersion(void* pArg) { BOOL bReturn; CReviewInterface* pThis = (CReviewInterface*)pArg; //LYW0412 BOOL bReturn, bRetFTPUploader = FALSE, bRetGRM = FALSE, bRetSync = FALSE; CFileFind finder; CTime timeLastWrite; TCHAR currentPath[MAX_PATH]; DWORD dwPid; HWND hWnd; HANDLE hHandle; CString strTemp; ::GetModuleFileName( AfxGetInstanceHandle(), currentPath, MAX_PATH); bReturn = finder.FindFile(currentPath); while(bReturn) while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE) { bReturn = finder.FindNextFile(); bReturn = FALSE; if(finder.IsDots()) continue; if(finder.IsDirectory()) continue; //FTPUploader S/W Version Start if (bRetFTPUploader == FALSE) { dwPid = 0; hWnd = ::FindWindow(NULL, _T("FTPUploader")); GetWindowThreadProcessId(hWnd, &dwPid); hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid); ZeroMemory(currentPath, MAX_PATH); GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH); finder.GetLastWriteTime(timeLastWrite); m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay(), timeLastWrite.GetHour(), timeLastWrite.GetMinute()); bReturn = finder.FindFile(currentPath); } while (bReturn) { bReturn = finder.FindNextFile(); if (finder.IsDots()) continue; if (finder.IsDirectory()) continue; finder.GetLastWriteTime(timeLastWrite); strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay()); pThis->m_nFDCFTPUploaderSWVersion = atoi(strTemp); g_pLog->DisplayMessage(_T("FDCFTPUploaderSWVersion = %d "), pThis->m_nFDCFTPUploaderSWVersion); bRetFTPUploader = TRUE; } //FTPUploader S/W Version End bReturn = FALSE; //Dit Glass Raw Messenger S/W Version Start if (bRetGRM == FALSE) { dwPid = 0; hWnd = ::FindWindow(NULL, _T("Dit Glass Raw Messenger")); GetWindowThreadProcessId(hWnd, &dwPid); hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid); ZeroMemory(currentPath, MAX_PATH); GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH); bReturn = finder.FindFile(currentPath); } while (bReturn) { bReturn = finder.FindNextFile(); if (finder.IsDots()) continue; if (finder.IsDirectory()) continue; finder.GetLastWriteTime(timeLastWrite); strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay()); pThis->m_nFDCGRMSWVersion = atoi(strTemp); g_pLog->DisplayMessage(_T("FDCGRMSWVersion = %d "), pThis->m_nFDCGRMSWVersion); bRetGRM = TRUE; } //Dit Glass Raw Messenger S/W Version End bReturn = FALSE; //Dit Shared Memory Sync Client S/W Version Start if (bRetSync == FALSE) { dwPid = 0; hWnd = ::FindWindow(NULL, _T("Dit Shared Memory Sync Client")); GetWindowThreadProcessId(hWnd, &dwPid); hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid); ZeroMemory(currentPath, MAX_PATH); GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH); bReturn = finder.FindFile(currentPath); } while (bReturn) { bReturn = finder.FindNextFile(); if (finder.IsDots()) continue; if (finder.IsDirectory()) continue; finder.GetLastWriteTime(timeLastWrite); strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay()); pThis->m_nFDCSyncSWVersion = atoi(strTemp); g_pLog->DisplayMessage(_T("FDCSyncSWVersion = %d "), pThis->m_nFDCSyncSWVersion); bRetSync = TRUE; } //Dit Shared Memory Sync Client S/W Version End } finder.Close(); } void CReviewInterface::SetReviewProgramVersion() { //LYW0412 BOOL bReturn; CFileFind finder; CTime timeLastWrite; TCHAR currentPath[MAX_PATH]; CString strTemp; //Review S/W Version Start ::GetModuleFileName(AfxGetInstanceHandle(), currentPath, MAX_PATH); bReturn = finder.FindFile(currentPath); while (bReturn) { bReturn = finder.FindNextFile(); if (finder.IsDots()) continue; if (finder.IsDirectory()) continue; finder.GetLastWriteTime(timeLastWrite); m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay(), timeLastWrite.GetHour(), timeLastWrite.GetMinute()); strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay()); m_nFDCReviewSWVersion = atoi(strTemp); g_pLog->DisplayMessage(_T("FDCReviewSWVersion = %d "), m_nFDCReviewSWVersion); } //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() { @@ -2762,6 +2942,21 @@ } return -1; } void CReviewInterface::IWC2P_SetWSIVersion(int nModuleIndex, int nVersion) { switch (nModuleIndex) { case 0: m_nFDCWSISWVersion00 = nVersion; break; case 1: m_nFDCWSISWVersion01 = nVersion; break; default: break; } } void CReviewInterface::IWC2P_SetConnectedStatus(int nModuleIndex, int nConnectStatus) @@ -8296,6 +8491,42 @@ m_nReview01ImageContrast = n_Value; } int CReviewInterface::ISP2P_GetReviewSWVersion() { return m_nFDCReviewSWVersion; } int CReviewInterface::ISP2P_GetSyncSWVersion() { return m_nFDCSyncSWVersion; } int CReviewInterface::ISP2P_GetGRMSWVersion() { return m_nFDCGRMSWVersion; } int CReviewInterface::ISP2P_GetFTPUploaderSWVersion() { return m_nFDCFTPUploaderSWVersion; } int CReviewInterface::ISP2P_GetWSISWVersion(int nModuleIndex) { switch (nModuleIndex) { case 0: return m_nFDCWSISWVersion00; break; case 1: return m_nFDCWSISWVersion01; break; default: return m_nFDCWSISWVersion00; break; } } SDefectFilter* CReviewInterface::ISP2P_GetDefectFilter() { if (m_pDoc==NULL) return NULL; ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -149,6 +149,9 @@ virtual void IWC2P_SetWSIAliveCheck(); virtual BOOL IWC2P_GetMeasureInfo(int nModuleIndex, int nPointIndex, short& nLoc, short& nOptic, short& nGray, CString& strCellID); virtual int IWC2P_GetCurrentStatus(int nModuleIndex, CString& strGlassID, CString& strRecipeID, int& nType); /*< LYW 20220421 - #4086 ADD Start >*/ virtual void IWC2P_SetWSIVersion(int nModuleIndex, int nVersion); /*< LYW 20220421 - #4086 ADD End >*/ virtual void IWC2P_SetConnectedStatus(int nModuleIndex, int nConnectStatus); virtual void IWC2P_RecvMeasureMessage(int nModuleIndex, int nMessageType, int nMessageResult); virtual void IWC2P_SetMeasureResult(int nModuleIndex, const SWsiResult& measureResut); @@ -387,6 +390,13 @@ virtual void ISP2P_SetReview00ImageContrast(int n_Value); virtual void ISP2P_SetReview01ImageContrast(int n_Value); /*< LYW 20211109 - #3662 ADD End >*/ /*< LYW 20220415 - #4086 ADD Start >*/ virtual int ISP2P_GetReviewSWVersion(); virtual int ISP2P_GetSyncSWVersion(); virtual int ISP2P_GetGRMSWVersion(); virtual int ISP2P_GetFTPUploaderSWVersion(); virtual int ISP2P_GetWSISWVersion(int nModuleIndex); /*< LYW 20220415 - #4086 ADD End >*/ // History result virtual CGlassResult* ISP2P_GetNewHistoryResult(int& nHistoryResultCount); // new glass result @@ -666,7 +676,16 @@ // setter internal double GetFreeSpaceOfDrive() const; void SetProgramVersion(); /*< 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(); void SetDefaultValue(); @@ -853,6 +872,15 @@ CString m_strProgramVersion; // program version CProcessTimer m_ProcessTimer; // process timer SThetaMotorInfo m_sThetaMotorInfo; // theta motor info /*< LYW 20220415 - #4086 ADD Start >*/ long m_nFDCGRMSWVersion; long m_nFDCFTPUploaderSWVersion; long m_nFDCSyncSWVersion; long m_nFDCReviewSWVersion; long m_nFDCWSISWVersion00; long m_nFDCWSISWVersion01; /*< LYW 20220415 - #4086 ADD End >*/ // multi variable VectorModuleStatus m_vecModuleStatus; // Review Module Status Vector ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
@@ -161,7 +161,7 @@ <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ResourceCompile> <Link> <AdditionalDependencies>CHVirtualGlassMap_x64_vc15.lib;chartdir51.lib;CHCameraControls_x64_vc15.lib;LineChecker_x64_vc15.lib;CHImageControls_x64_vc15.lib;CHCommonClasses_x64_vc15.lib;CHCommonControls_x64_vc15.lib;CHResultFileManager_x64_vc15.lib;CHReviewRecipe_x64_vc15.lib;CHReviewSetting_x64_vc15.lib;CHReviewResult_x64_vc15.lib;CHEdgeTriangle_x64_vc15.lib;CHPathScheduler_x64_vc15.lib;CHMotorCalibrator_x64_vc15.lib;CHAutoLightControls_x64_vc15.lib;CHAlignFinder_x64_vc15.lib;CHThreadPools_x64_vc15.lib;CHReviewResultParser_x64_vc15.lib;CHReviewDefectFinder_x64_vc15.lib;CHReviewPrioritySorter_x64_vc15.lib;CHDefectPicker_x64_vc15.lib;IOCPNetwork_x64_vc15.lib;CHMotorControls_x64_vc15.lib;CHLensChangeControls_x64_vc15.lib;CHLightControls_x64_vc15.lib;CHAfmControls_x64_vc15.lib;CHSignalControls_x64_vc15.lib;CHVcrControls_x64_vc15.lib;CHWsiControls_x64_vc15.lib;CHTotalPitchMeasure_x64_vc15.lib;M_AutoDiagnosisManager_x64_vc17.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>CHVirtualGlassMap_x64_vc15.lib;chartdir51.lib;CHCameraControls_x64_vc15.lib;LineChecker_x64_vc15.lib;CHImageControls_x64_vc15.lib;CHCommonClasses_x64_vc15.lib;CHCommonControls_x64_vc15.lib;CHResultFileManager_x64_vc15.lib;CHReviewRecipe_x64_vc15.lib;CHReviewSetting_x64_vc15.lib;CHReviewResult_x64_vc15.lib;CHEdgeTriangle_x64_vc15.lib;CHPathScheduler_x64_vc15.lib;CHMotorCalibrator_x64_vc15.lib;CHAutoLightControls_x64_vc15.lib;CHAlignFinder_x64_vc15.lib;CHThreadPools_x64_vc15.lib;CHReviewResultParser_x64_vc15.lib;CHReviewDefectFinder_x64_vc15.lib;CHReviewPrioritySorter_x64_vc15.lib;CHDefectPicker_x64_vc15.lib;IOCPNetwork_x64_vc15.lib;CHMotorControls_x64_vc15.lib;CHLensChangeControls_x64_vc15.lib;CHLightControls_x64_vc15.lib;CHAfmControls_x64_vc15.lib;CHSignalControls_x64_vc15.lib;CHVcrControls_x64_vc15.lib;CHWsiControls_x64_vc15.lib;CHTotalPitchMeasure_x64_vc15.lib;M_AutoDiagnosisManager_x64_vc17.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>../lib;../../Internal_Library/lib;../../External_Library/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <GenerateDebugInformation>true</GenerateDebugInformation> <SubSystem>Windows</SubSystem> 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.h
@@ -438,6 +438,14 @@ virtual void ISP2P_SetReview01ImageContrast(int n_Value) = 0; /*< LYW 20211109 - #3662 ADD End >*/ /*< LYW 20220415 - #4086 ADD Start >*/ virtual BOOL ISP2P_GetReviewSWVersion() = 0; virtual BOOL ISP2P_GetSyncSWVersion() = 0; virtual BOOL ISP2P_GetGRMSWVersion() = 0; virtual BOOL ISP2P_GetFTPUploaderSWVersion() = 0; virtual BOOL ISP2P_GetWSISWVersion(int nModuleIndex) = 0; /*< LYW 20220415 - #4086 ADD End >*/ virtual CGlassResult* ISP2P_GetNewHistoryResult(int& nHistoryResultCount) = 0; // new glass result virtual CGlassResult* ISP2P_GetHistoryResult(int nIndex) = 0; // get glass result ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -665,8 +665,12 @@ // m_pSP2P->ISP2P_GetWSIControl(1)->SendWsiAfmSafePosMove(); //} //Sleep(5000); SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS); SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT); if (GetProcessStatus() != ProcessReviewEnd_CPJT && GetProcessStatus() != ProcessReviewUnloding_CPJT) { SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS); SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT); } m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!")); //LONGREUN //RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 4); @@ -7772,6 +7776,9 @@ pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version); pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version); /*< LYW 20220415 - #4086 ADD Start >*/ //추가 필요 /*< LYW 20220415 - #4086 ADD End >*/ //CCHImageData pImageData; //CCHImageData pImageData2; @@ -8047,6 +8054,14 @@ int nWSI01Version = 20210422; int nReviewAliveCamera00 = 1000; int nReviewAliveCamera01 = 1000; /*< LYW 20220415 - #4086 ADD Start >*/ int nFDCGRMSWVersion = 20200101; int nFDCFTPUploaderSWVersion = 20200101; int nFDCSyncSWVersion = 20200101; int nFDCReviewSWVersion = 20200101; int nFDCWSISWVersion00 = 20200101; int nFDCWSISWVersion01 = 20200101; /*< LYW 20220415 - #4086 ADD End >*/ //foucs /*< LYW 20211109 - #3662 MOD Start >*/ @@ -8054,6 +8069,15 @@ { nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetReview00ImageContrast() * 1000; nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetReview01ImageContrast() * 1000; /*< LYW 20220415 - #4086 ADD Start >*/ nFDCGRMSWVersion = m_pSP2P->ISP2P_GetGRMSWVersion(); nFDCFTPUploaderSWVersion = m_pSP2P->ISP2P_GetFTPUploaderSWVersion(); nFDCSyncSWVersion = m_pSP2P->ISP2P_GetSyncSWVersion(); nFDCReviewSWVersion = m_pSP2P->ISP2P_GetReviewSWVersion(); nFDCWSISWVersion00 = m_pSP2P->ISP2P_GetWSISWVersion(0); nFDCWSISWVersion01 = m_pSP2P->ISP2P_GetWSISWVersion(1); /*< LYW 20220415 - #4086 ADD End >*/ } /*< LYW 20211109 - #3662 MOD End >*/ /*< Origin Code >*/ @@ -8197,13 +8221,22 @@ pSignalControl->WritePacketData(_T("16116"), sizeof(nRev_Cam1_Image_Contrast), (short*)&nRev_Cam1_Image_Contrast); pSignalControl->WritePacketData(_T("16120"), sizeof(nRev_Cam2_Image_Contrast), (short*)&nRev_Cam2_Image_Contrast); pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK); pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK); pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK); /*< LYW 20220415 - #4086 ADD Start >*/ pSignalControl->WritePacketData(_T("16124"), sizeof(nFDCSyncSWVersion), (short*)&nFDCSyncSWVersion); pSignalControl->WritePacketData(_T("16128"), sizeof(nFDCReviewSWVersion), (short*)&nFDCReviewSWVersion); pSignalControl->WritePacketData(_T("16132"), sizeof(nFDCFTPUploaderSWVersion), (short*)&nFDCFTPUploaderSWVersion); pSignalControl->WritePacketData(_T("16136"), sizeof(nFDCGRMSWVersion), (short*)&nFDCGRMSWVersion); pSignalControl->WritePacketData(_T("16140"), sizeof(nFDCWSISWVersion00), (short*)&nFDCWSISWVersion00); pSignalControl->WritePacketData(_T("16144"), sizeof(nFDCWSISWVersion01), (short*)&nFDCWSISWVersion01); /*< LYW 20220415 - #4086 ADD End >*/ pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion); pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version); pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version); // pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK); // pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK); // pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK); // // pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion); // pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version); // pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version); return; @@ -9257,7 +9290,7 @@ AFM_SetAFMTracking(FALSE); SetWsiType(0); WSIAllReadySignal(0); WSIAllReadySignal(1); // send wsi start if(!WSIUserAllStartSignal()) @@ -9488,7 +9521,8 @@ VectorDouble vectorCollisionPosX; vectorCollisionPosX.clear(); //WSI pMotorControl->GantrySetTwoGantrySyncModeSend(1); // WSI result count for (int nModuleIdx=0; nModuleIdx<Module_GetModuleStatusCount(); nModuleIdx++) @@ -9577,6 +9611,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 "));