#include "stdafx.h" #include "CHTotalPitchMeasure/TotalPitchMeasure.h" //#include "TotalPitchMeasure.h" CTotalPitchMeasure::CTotalPitchMeasure() { m_pTP2P = NULL; Reset(); } CTotalPitchMeasure::~CTotalPitchMeasure() { m_pTP2P = NULL; Reset(); } void CTotalPitchMeasure::Reset() { for(int nCnt=0; nCnt<4; nCnt++) { m_dAlignMarkPositionX[nCnt] = 0.0; m_dAlignMarkPositionY[nCnt] = 0.0; m_dAlignMarkCenterPosX[nCnt] = 0.0; m_dAlignMarkCenterPosY[nCnt] = 0.0; } m_dGlassSizeWidth = 0.0; m_dGlassSizeHeight = 0.0; m_dStandardAlignMarkGlassPositionX = 0.0; m_dStandardAlignMarkGlassPositionY = 0.0; m_dAlignMarkCenterPositionX = 0.0; m_dAlignMarkCenterPositionY = 0.0; m_pAlignTempImage = NULL; m_dTotlaPitchAB = 0.0; m_dTotlaPitchCD = 0.0; m_dTotlaPitchAC = 0.0; m_dTotlaPitchBD = 0.0; m_dAlignMarkShortDistance = 0.0; m_dAlignMarkLongDistance = 0.0; } BOOL CTotalPitchMeasure::StartTotalPitchMeasure() { if(m_pTP2P == NULL) return NULL; m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Start Total Pitch Measure!!!")); // 1. AlignMark CenterPosition Á¤º¸ ȹµæ if(!GetAlignMarkCenterPosition()) return FALSE; // 2. ³×±ºµ¥ÀÇ Align Mark PositionÀ» °è»êÇÑ´Ù if(!CalculateAlignMarkPosition()) return FALSE; // 3. ÃÖ¼Ò¹èÀ²·Î º¯°æ if(!m_pTP2P->ITP2P_SetMinMagChange(0)) return FALSE; // 4. À̵¿Çϸç Mark ¼öÁý ÁøÇà (Çϳª¶óµµ ½ÇÆÐÇÏ¸é ¹Ù·Î Fail ó¸®) for(int nMarkIdx=0; nMarkIdx < 4; nMarkIdx++) // Mark 4°³ ÃøÁ¤ { // 4-1. Motion À̵¿ m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Start Move AlignMark : %d"), nMarkIdx); if(!MoveAlignMarkPosition(nMarkIdx)) { m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Error Move AlignMark : %d"), nMarkIdx); return FALSE; } m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] End Move AlignMark : %d"), nMarkIdx); Sleep(1000); // 4-2. Current Review Image ȹµæ ¹× ¸ÅĪ m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Start Get AlignMark Image : %d"), nMarkIdx); if(!GetAlignMarkImageMatching(nMarkIdx)) { m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Error Get AlignMark Image : %d"), nMarkIdx); return FALSE; } m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] End Get AlignMark Image : %d"), nMarkIdx); } // 5. TotalPitch ÃøÁ¤ if(!TotalPitchMeasure()) { m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] TotalPitch Measure Fail!!")); return FALSE; } m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] TotalPitch Measure Success!! AB : %.3lf, CD : %.3lf, AC : %.3lf, BD : %.3lf"), GetTotalPitchAB(), GetTotalPitchCD(), GetTotalPitchAC(), GetTotalPitchBD()); return TRUE; } BOOL CTotalPitchMeasure::CalculateAlignMarkPosition() { double dPositionX=0.0, dPositionY=0.0; // Glass Size ȹµæ if(!m_pTP2P->ITP2P_GetGlassSize(dPositionX, dPositionY)) return FALSE; SetGlassSizeWidth(dPositionX); SetGlassSizeHeight(dPositionY); m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] GlassSizeX : %.3lf, GlassSizeY : %.3lf!!"), dPositionX, dPositionY); // ±âÁØ Align Mark Position ȹµæ if(!m_pTP2P->ITP2P_GetAlignMarkPosition(dPositionX, dPositionY)) return FALSE; SetStandardAlignPosX(dPositionX); SetStandardAlignPosY(dPositionY); m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] MarkPositionX : %.3lf, MarkPositionY : %.3lf!!"), dPositionX, dPositionY); // 4°³ÀÇ AlignMark Position °è»ê // 300mm ¾ÈÂÊ¿¡¸¸ AlignMark°¡ ÀÖ´Ù°í Reference¸¦ ¼³Á¤ÇصдÙ. int nReferenceSizeX = 300; int nReferenceSizeY = 300; //m_dAlignMarkPositionX[4] : ±âÁØÀÇ Mark°¡ 0, ±âÁØ MarkÀÇ Y¹Ý´ëÆíÀÌ 1, ±âÁØ MarkÀÇ X¹Ý´ëÆíÀÌ 2 ±âÁØÀº Ç×»ó ÀÛ¾÷ÀÚ±âÁØ ÁÂÇÏ // X¼³°èÄ¡ °è»ê if(GetStandardAlignPosX() > nReferenceSizeX) { m_dAlignMarkPositionX[0] = GetGlassSizeWidth() - GetStandardAlignPosX(); m_dAlignMarkPositionX[1] = GetGlassSizeWidth() - GetStandardAlignPosX(); m_dAlignMarkPositionX[2] = GetStandardAlignPosX(); m_dAlignMarkPositionX[3] = GetStandardAlignPosX(); } else { m_dAlignMarkPositionX[0] = GetStandardAlignPosX(); m_dAlignMarkPositionX[1] = GetStandardAlignPosX(); m_dAlignMarkPositionX[2] = GetGlassSizeWidth() - GetStandardAlignPosX(); m_dAlignMarkPositionX[3] = GetGlassSizeWidth() - GetStandardAlignPosX(); } // Y¼³°èÄ¡ °è»ê if(GetStandardAlignPosY() > nReferenceSizeY) { m_dAlignMarkPositionY[0] = GetGlassSizeHeight() - GetStandardAlignPosY(); m_dAlignMarkPositionY[1] = GetStandardAlignPosY(); m_dAlignMarkPositionY[2] = GetGlassSizeHeight() - GetStandardAlignPosY(); m_dAlignMarkPositionY[3] = GetStandardAlignPosY(); } else { m_dAlignMarkPositionY[0] = GetStandardAlignPosY(); m_dAlignMarkPositionY[1] = GetGlassSizeHeight() - GetStandardAlignPosY(); m_dAlignMarkPositionY[2] = GetStandardAlignPosY(); m_dAlignMarkPositionY[3] = GetGlassSizeHeight() - GetStandardAlignPosY(); } m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 1 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[0], m_dAlignMarkPositionY[0]); m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 2 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[1], m_dAlignMarkPositionY[1]); m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 3 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[2], m_dAlignMarkPositionY[2]); m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 4 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[3], m_dAlignMarkPositionY[3]); SetAlignLongDistance(m_dAlignMarkPositionX[2] - m_dAlignMarkPositionX[0]); SetAlignShortDistance(m_dAlignMarkPositionY[1] - m_dAlignMarkPositionY[0]); m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Align Mark Distance X : %.3lf, Y %.3lf"), GetAlignLongDistance(), GetAlignShortDistance()); return TRUE; } BOOL CTotalPitchMeasure::GetAlignMarkCenterPosition() { double dPositionX=0.0, dPositionY=0.0; // Glass Size ȹµæ if(!m_pTP2P->ITP2P_GetAlignMarkCenterPosition(dPositionX, dPositionY)) return FALSE; SetAlignMarkCenterPosX(dPositionX); SetAlignMarkCenterPosY(dPositionY); m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Align Mark Center Pos : %.3lf, %.3lf!"), dPositionX, dPositionY); return TRUE; } BOOL CTotalPitchMeasure::MoveAlignMarkPosition(const int nMarkIndx) { // ¸ð¼Ç ¸í·ÉÀÌ °¡´É ÇÑ »óÅÂÀÎÁö È®ÀÎÇÑ´Ù (Motion End + Command OK) if(m_pTP2P->ITP2P_GetMotionEnable()) // ³»ºÎ¿¡¼­ ÃÖ´ë 5Ãʵ¿¾È Enable ½ÅÈ£ È®ÀÎÇÔ { if(!m_pTP2P->ITP2P_MoveMotorGlassPosition(0, GetAlignMarkPosX(nMarkIndx), GetAlignMarkPosY(nMarkIndx))) { m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] %d Mark MovePos Fail!! : %.3lf, %.3lf!"), nMarkIndx, GetAlignMarkPosX(nMarkIndx), GetAlignMarkPosY(nMarkIndx)); return FALSE; } m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] %d Mark MovePosCommand!! : %.3lf, %.3lf!"), nMarkIndx, GetAlignMarkPosX(nMarkIndx), GetAlignMarkPosY(nMarkIndx)); return TRUE; } m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] MarkPosition MotionEnable Check Fail!!"), nMarkIndx); return FALSE;; } BOOL CTotalPitchMeasure::GetAlignMarkImageMatching( const int nMarkIndx ) { if(m_pTP2P->ITP2P_GetMotionEnable()) // ³»ºÎ¿¡¼­ ÃÖ´ë 5Ãʵ¿¾È Enable ½ÅÈ£ È®ÀÎÇÔ { m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Enabl Check Success %d"), nMarkIndx); //sjb Test //return TRUE; // ReviewImage¿Í AlignTempleteImage¸¦ ¸ÅĪÇÑ´Ù. double dResultCenterPosX = 0.0, dResultCenterPosY = 0.0; if(!m_pTP2P->ITP2P_StartTemplateMatching(dResultCenterPosX, dResultCenterPosY)) return FALSE; // ¸ÅĪ °á°ú¸¦ °á°ú Data¿¡ ä¿ö ³Ö´Â´Ù. m_dAlignMarkCenterPosX[nMarkIndx] = dResultCenterPosX; m_dAlignMarkCenterPosY[nMarkIndx] = dResultCenterPosY; return TRUE; } m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Matching MotionEnable Check Fail!!"), nMarkIndx); return FALSE; } BOOL CTotalPitchMeasure::TotalPitchMeasure() { double dCameraResolution = 0.0; dCameraResolution = m_pTP2P->ITP2P_GetCurrentResolution() / 1000.0; // ÇöÀç ¼³Á¤µÇ¾î ÀÖ´Â ReviewCameraÀÇ ÇØ»óµµ¸¦ °¡Á®¿È if(dCameraResolution <= 0.0) return FALSE; // Align Mark Center¿¡ ÀÖÀ»½Ã Çȼ¿ Position double dAlignCenterPositionX = GetAlignMarkCenterPosX(); double dAlignCenterPositionY = GetAlignMarkCenterPosY(); // Align MarkÀÇ Àå,´Üº¯ ¼³°èÄ¡ ±æÀÌ double dAlignMarkLongDistance = GetAlignLongDistance(); double dAlignMarkShortDistance = GetAlignShortDistance(); if(dAlignCenterPositionX <= 0.0 || dAlignCenterPositionY <= 0.0 || dAlignMarkLongDistance <= 0.0 || dAlignMarkShortDistance <= 0.0) return FALSE; SetTotalPitchAB(dAlignMarkShortDistance + ((m_dAlignMarkCenterPosY[0] - m_dAlignMarkCenterPosY[1]) * dCameraResolution)); // ÁÂÇÏ -> Á»ó SetTotalPitchCD(dAlignMarkShortDistance + ((m_dAlignMarkCenterPosY[2] - m_dAlignMarkCenterPosY[3]) * dCameraResolution)); // ¿ìÇÏ -> ¿ì»ó SetTotalPitchAC(dAlignMarkLongDistance - ((m_dAlignMarkCenterPosX[0] - m_dAlignMarkCenterPosX[2]) * dCameraResolution)); // ÁÂÇÏ -> ¿ìÇÏ SetTotalPitchBD(dAlignMarkLongDistance - ((m_dAlignMarkCenterPosX[1] - m_dAlignMarkCenterPosX[3]) * dCameraResolution)); // Á»ó -> ¿ì»ó m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Result Data, AB : %.3lf, CD : %.3lf, AC : %.3lf, BD : %.3lf"), GetTotalPitchAB(), GetTotalPitchCD(), GetTotalPitchAC(), GetTotalPitchBD()); return TRUE; } BOOL CTotalPitchMeasure::GetMotorEnable() { if(m_pTP2P == NULL) return NULL; return m_pTP2P->ITP2P_GetMotionEnable(); }