| | |
| | | #include "akAOISharedSystem.h" |
| | | #include "DlgModuleInfo.h" |
| | | |
| | | #include <Psapi.h> |
| | | |
| | | using namespace CHReviewResult; |
| | | using namespace CHImageControls; |
| | | |
| | |
| | | |
| | | // 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 |
| | |
| | | { |
| | | 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); |
| | |
| | | //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) |
| | |
| | | { |
| | | 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); |
| | |
| | | { |
| | | TRACE(_T("[A2E]DeinitReviewInterface 시작\n")); |
| | | |
| | | if (m_pView) |
| | | { |
| | | m_pView->DeleteDialogs(); |
| | | } |
| | | |
| | | ClearAllObserverVector(); |
| | | g_pLog->DisplayMessage(_T("Clear all Observer Vectors")); |
| | | ::Sleep(400); |
| | | |
| | | 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(); |
| | | DeinitAlignCamera(); |
| | |
| | | DeinitSharedImage(); |
| | | g_pLog->DisplayMessage(_T("Deinit Shared Image")); |
| | | |
| | | |
| | | |
| | | DeinitTotalPitchMeasure(); |
| | | g_pLog->DisplayMessage(_T("Deinit TotalPitch Measure")); |
| | | |
| | |
| | | AFM_SetAFMZoomLevel(0, 0); |
| | | } |
| | | |
| | | |
| | | void CReviewInterface::SetProgramVersion() |
| | | /*< LYW 20220415 - #4086 ADD Start >*/ |
| | | void CReviewInterface::threadSet3rdPartyProgramVersion(void* pArg) |
| | | { |
| | | CReviewInterface* pThis = (CReviewInterface*)pArg; |
| | | /*< SWK 20221222 - #4403 MOD Start >*/ |
| | | // //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; |
| | | // |
| | | // while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE) |
| | | // { |
| | | // bReturn = FALSE; |
| | | // |
| | | // //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); |
| | | // |
| | | // 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(); |
| | | |
| | | auto GetModuleFileLastTime = [](LPCTSTR strWindowTitle)->long { |
| | | long nLastTime = 0; |
| | | DWORD dwPid = 0; |
| | | |
| | | HWND hWnd = ::FindWindow(NULL, strWindowTitle); |
| | | if (hWnd == INVALID_HANDLE_VALUE) |
| | | return nLastTime; |
| | | |
| | | GetWindowThreadProcessId(hWnd, &dwPid); |
| | | HANDLE hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid); |
| | | TCHAR currentPath[MAX_PATH]; |
| | | ZeroMemory(currentPath, MAX_PATH); |
| | | GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH); |
| | | |
| | | CFileFind finder; |
| | | if (finder.FindFile(currentPath)) |
| | | { |
| | | finder.FindNextFile(); |
| | | |
| | | if (finder.IsDirectory() || finder.IsDots()) |
| | | return nLastTime; |
| | | |
| | | CTime timeLastWrite; |
| | | finder.GetLastWriteTime(timeLastWrite); |
| | | nLastTime = atoi(timeLastWrite.Format(_T("%Y%m%d"))); |
| | | } |
| | | return nLastTime; |
| | | }; |
| | | |
| | | BOOL bRetFTPUploader = FALSE, bRetGRM = FALSE, bRetSync = FALSE; |
| | | while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE) |
| | | { |
| | | //FTPUploader S/W Version |
| | | if (bRetFTPUploader == FALSE) |
| | | { |
| | | if (pThis->m_nFDCFTPUploaderSWVersion = GetModuleFileLastTime(_T("FTPUploader"))) |
| | | { |
| | | g_pLog->DisplayMessage(_T("FDCFTPUploaderSWVersion = %d "), pThis->m_nFDCFTPUploaderSWVersion); |
| | | bRetFTPUploader = TRUE; |
| | | } |
| | | } |
| | | Sleep(1); |
| | | //Dit Glass Raw Messenger S/W Version |
| | | if (bRetGRM == FALSE) |
| | | { |
| | | if (pThis->m_nFDCGRMSWVersion = GetModuleFileLastTime(_T("Dit Glass Raw Messenger"))) |
| | | { |
| | | g_pLog->DisplayMessage(_T("FDCGRMSWVersion = %d "), pThis->m_nFDCGRMSWVersion); |
| | | bRetGRM = TRUE; |
| | | } |
| | | } |
| | | Sleep(1); |
| | | //Dit Shared Memory Sync Client S/W Version Start |
| | | if (bRetSync == FALSE) |
| | | { |
| | | if (pThis->m_nFDCSyncSWVersion = GetModuleFileLastTime(_T("Dit Shared Memory Sync Client"))) |
| | | { |
| | | g_pLog->DisplayMessage(_T("FDCSyncSWVersion = %d "), pThis->m_nFDCSyncSWVersion); |
| | | bRetSync = TRUE; |
| | | } |
| | | } |
| | | Sleep(1); |
| | | } |
| | | /*< SWK 20221222 - #4403 MOD End >*/ |
| | | } |
| | | |
| | | void CReviewInterface::SetReviewProgramVersion() |
| | | { |
| | | //LYW0412 |
| | | BOOL bReturn; |
| | | CFileFind finder; |
| | | CTime timeLastWrite; |
| | | TCHAR currentPath[MAX_PATH]; |
| | | CString strTemp; |
| | | |
| | | ::GetModuleFileName( AfxGetInstanceHandle(), currentPath, MAX_PATH); |
| | | //Review S/W Version Start |
| | | ::GetModuleFileName(AfxGetInstanceHandle(), currentPath, MAX_PATH); |
| | | |
| | | bReturn = finder.FindFile(currentPath); |
| | | |
| | | while(bReturn) |
| | | while (bReturn) |
| | | { |
| | | bReturn = finder.FindNextFile(); |
| | | |
| | | if(finder.IsDots()) continue; |
| | | if(finder.IsDirectory()) continue; |
| | | if (finder.IsDots()) continue; |
| | | if (finder.IsDirectory()) continue; |
| | | |
| | | finder.GetLastWriteTime(timeLastWrite); |
| | | m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"), |
| | | 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); |
| | | } |
| | | |
| | | finder.Close(); |
| | | //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() |
| | | { |
| | |
| | | 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) |
| | | { |
| | | CString strMessage = _T(""); |
| | |
| | | pReviewOffSetTool->GetOffSetInfo(nModule, nCam, nScan, dGlassXPos,dXpos, dYpos); |
| | | return TRUE; |
| | | } |
| | | /* < KEJ 20230621 - #4528 ADD Start > */ |
| | | BOOL CReviewInterface::IDMO2P_GetMotorPos(int nModule, double &dXpos, double &dYpos) |
| | | { |
| | | dXpos = m_vecModuleStatus[nModule].GetMotorPosition()->dMotorPosX; |
| | | dYpos = m_vecModuleStatus[nModule].GetMotorPosition()->dMotorPosY; |
| | | return TRUE; |
| | | |
| | | } |
| | | |
| | | BOOL CReviewInterface::CalcMotorOffSetValue(int nModule, double &dXpos, double &dYpos) |
| | | { |
| | | CDlgMotorOffSetTool* pMotorOffSetTool = m_pView->GetMotorOffSetToolHandle(); |
| | | |
| | | pMotorOffSetTool->CalOffsetInfo(nModule, dXpos, dYpos); |
| | | return TRUE; |
| | | } |
| | | /* < KEJ 20230621 - #4528 ADD End > */ |
| | | |
| | | BOOL CReviewInterface::IDRO2P_SetGlassMode(BOOL bMode, int nCamidx, int nScanidx, double nXpos, double nYpos) |
| | | { |
| | |
| | | |
| | | if (IsManualProcessMode()==FALSE) { return; } |
| | | |
| | | |
| | | CGlassResult *pGlassResult = m_pDoc->GlassResult_GetCurrentGlassResult(); |
| | | if(pGlassResult == NULL) return; |
| | | if (pGlassResult == NULL) return; |
| | | |
| | | const SDefectFilter *pDefectFilter = m_pDoc->Etc_GetDefectFilter(); |
| | | if(pDefectFilter == NULL) return; |
| | | if (pDefectFilter == NULL) return; |
| | | |
| | | int nMarginX = nDefectMarginX; //5000; // um |
| | | int nMarginY = nDefectMarginY; //5000; // um |
| | |
| | | |
| | | MapDefectResult *pMapReviewResult = pGlassResult->GetMapDefectResult(); |
| | | |
| | | BOOL bFind = FALSE; |
| | | |
| | | //Defect |
| | | if (pMapReviewResult) |
| | | { |
| | | CDefectResult* pDefectResult = NULL; |
| | |
| | | { |
| | | pDefectResult = static_cast<CDefectResult*>(it->second); |
| | | |
| | | if(pDefectResult == NULL) continue; |
| | | if (pDefectResult == NULL) continue; |
| | | |
| | | if (CDefectMap::FilterDefect(pDefectFilter, pDefectResult)==-1) continue; |
| | | //if (CDefectMap::FilterDefect(pDefectFilter, pDefectResult) == -1) continue; |
| | | |
| | | if (pDefectResult->nUMOriginX >= nDefectPosX - nMarginX && |
| | | pDefectResult->nUMOriginX <= nDefectPosX + nMarginX && |
| | | pDefectResult->nUMOriginY >= nDefectPosY - nMarginY && |
| | | if (pDefectResult->nUMOriginX >= nDefectPosX - nMarginX && |
| | | pDefectResult->nUMOriginX <= nDefectPosX + nMarginX && |
| | | pDefectResult->nUMOriginY >= nDefectPosY - nMarginY && |
| | | pDefectResult->nUMOriginY <= nDefectPosY + nMarginY) |
| | | { |
| | | bFind = TRUE; |
| | | |
| | | m_pView->UpdateSelectDefectList(pDefectResult->nDefectIdx); |
| | | m_pView->UpdateSelectDefectMap(pDefectResult); |
| | | |
| | | m_pView->UpdateSelectDefectInfoMap(pDefectResult); //taek 201214 선택한 디펙의 정보를 넘긴다 |
| | | m_pView->UpdateSelectDefectInfo(pDefectResult->nDefectIdx); //taek 201214 선택한 디펙의 사진 정보를 넘긴다. |
| | | |
| | | nSelectedModuleIndex = Module_GetSelectedModuleIndex(); |
| | | |
| | | // 이동할 모듈 인덱스 알아내기 (모듈별 limit 데이터 사용) |
| | | int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | //int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | int nGoModuleIndex = nSelectedModuleIndex; |
| | | |
| | | // 선택 모듈을 제외한 나머지 홈동작 작동 |
| | | if(nGoModuleIndex >= 0) |
| | | if (nGoModuleIndex >= 0) |
| | | { |
| | | Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE); |
| | | } |
| | |
| | | break; |
| | | } |
| | | |
| | | if(IsManualProcessMode() != FALSE){ |
| | | if (IsManualProcessMode() != FALSE) { |
| | | |
| | | Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera,pDefectResult ); |
| | | Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, pDefectResult); |
| | | return; |
| | | } |
| | | // Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | // Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | |
| | | // [2017:1:19]-[WEZASW] : WSI Manual Measurement 기능 추가 |
| | | // [2017:1:19]-[WEZASW] : WSI Manual Measurement 기능 추가 |
| | | if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE) |
| | | { |
| | | WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE); |
| | | WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, (int)pDefectResult->dUMCenterOriginX, (int)pDefectResult->dUMCenterOriginY, TRUE); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | //User |
| | | if (bFind == FALSE) |
| | | { |
| | | CDefectResult* pDefectResult = NULL; |
| | | |
| | | VectorReviewResult *pVecReviewResult = pGlassResult->GetVectorUserResult(); |
| | | if (pVecReviewResult == NULL) return; |
| | | |
| | | for (VectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++) |
| | | { |
| | | CReviewResult *pReviewResult = static_cast<CReviewResult*>(&(*it)); |
| | | |
| | | for (VectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++) |
| | | { |
| | | |
| | | if (its->nUMOriginX >= nDefectPosX - nMarginX && |
| | | its->nUMOriginX <= nDefectPosX + nMarginX && |
| | | its->nUMOriginY >= nDefectPosY - nMarginY && |
| | | its->nUMOriginY <= nDefectPosY + nMarginY) |
| | | { |
| | | bFind = TRUE; |
| | | |
| | | pDefectResult = &(*its); |
| | | |
| | | m_pView->UpdateSelectDefectMap(pDefectResult); |
| | | |
| | | nSelectedModuleIndex = Module_GetSelectedModuleIndex(); |
| | | |
| | | // 이동할 모듈 인덱스 알아내기 (모듈별 limit 데이터 사용) |
| | | //int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | int nGoModuleIndex = nSelectedModuleIndex; |
| | | |
| | | // 선택 모듈을 제외한 나머지 홈동작 작동 |
| | | if (nGoModuleIndex >= 0) |
| | | { |
| | | Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE); |
| | | } |
| | | else |
| | | { |
| | | g_pLog->DisplayMessage(_T("[Error] Can't Move Motor to Home")); |
| | | break; |
| | | } |
| | | |
| | | if (IsManualProcessMode() != FALSE) { |
| | | |
| | | Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, NULL, 0, 0); |
| | | return; |
| | | } |
| | | // Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | |
| | | // [2017:1:19]-[WEZASW] : WSI Manual Measurement 기능 추가 |
| | | if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE) |
| | | { |
| | | WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //UserWSI |
| | | if (bFind == FALSE) |
| | | { |
| | | CDefectResult* pDefectResult = NULL; |
| | | |
| | | VectorReviewResult *pVecReviewResult = pGlassResult->GetVectorUserWsiResult(); |
| | | if (pVecReviewResult == NULL) return; |
| | | |
| | | for (VectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++) |
| | | { |
| | | CReviewResult *pReviewResult = static_cast<CReviewResult*>(&(*it)); |
| | | |
| | | for (VectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++) |
| | | { |
| | | |
| | | if (its->nUMOriginX >= nDefectPosX - nMarginX && |
| | | its->nUMOriginX <= nDefectPosX + nMarginX && |
| | | its->nUMOriginY >= nDefectPosY - nMarginY && |
| | | its->nUMOriginY <= nDefectPosY + nMarginY) |
| | | { |
| | | bFind = TRUE; |
| | | |
| | | pDefectResult = &(*its); |
| | | |
| | | m_pView->UpdateSelectDefectMap(pDefectResult); |
| | | |
| | | nSelectedModuleIndex = Module_GetSelectedModuleIndex(); |
| | | |
| | | // 이동할 모듈 인덱스 알아내기 (모듈별 limit 데이터 사용) |
| | | //int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | int nGoModuleIndex = nSelectedModuleIndex; |
| | | |
| | | // 선택 모듈을 제외한 나머지 홈동작 작동 |
| | | if (nGoModuleIndex >= 0) |
| | | { |
| | | Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE); |
| | | } |
| | | else |
| | | { |
| | | g_pLog->DisplayMessage(_T("[Error] Can't Move Motor to Home")); |
| | | break; |
| | | } |
| | | |
| | | if (IsManualProcessMode() != FALSE) { |
| | | |
| | | Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, NULL, 0, 0); |
| | | return; |
| | | } |
| | | // Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera); |
| | | |
| | | // [2017:1:19]-[WEZASW] : WSI Manual Measurement 기능 추가 |
| | | if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE) |
| | | { |
| | | WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | |
| | | if (dDefectPosX > dXposPlusLimitPos|| dDefectPosX<dXposMinusLimitPos|| dDefectPosY > dYposPlusLimitPos|| dDefectPosY < dYposMinusLimitPos) |
| | | { |
| | | IDNO == AfxMessageBox(_T("Limit을 초과 하여 갈수 없습니다."), MB_YESNO | MB_ICONQUESTION); |
| | | g_pLog->DisplayMessage(_T("Limit 초과")); |
| | | return FALSE; |
| | | } |
| | | // if (dDefectPosX > dXposPlusLimitPos|| dDefectPosX<dXposMinusLimitPos|| dDefectPosY > dYposPlusLimitPos|| dDefectPosY < dYposMinusLimitPos) |
| | | // { |
| | | // IDNO == AfxMessageBox(_T("Limit을 초과 하여 갈수 없습니다."), MB_YESNO | MB_ICONQUESTION); |
| | | // g_pLog->DisplayMessage(_T("Limit 초과")); |
| | | // return FALSE; |
| | | // } |
| | | |
| | | double n1stGantryXpos, n1stGantryYpos, n2ndGantryXpos, n2ndGantryYpos; |
| | | double dDistance,dCameraDistance; |
| | |
| | | |
| | | dPosX += MagOffsetX * 1000;//GlassOffsetX*1000+MagOffsetX*1000; |
| | | dPosY+= MagOffsetY * 1000;//GlassOffsetY*1000+MagOffsetY*1000; |
| | | double xpostemp = 0; |
| | | double ypostemp = 0; |
| | | |
| | | |
| | | GetOffSetValue(nModuleIndex, pDefectResult->nAOICameraIdx, pDefectResult->nAOIScanIdx, nDefectPosX/1000, xpostemp, ypostemp); |
| | | xpostemp = floor(xpostemp * 1000); |
| | | ypostemp = floor(ypostemp * 1000); |
| | | //210127 |
| | | if (m_pDoc->System_GetMotorInfo()->GetOriginDirection() == 2) |
| | | if (pDefectResult != NULL) |
| | | { |
| | | if (nModuleIndex == 0) |
| | | double xpostemp = 0; |
| | | double ypostemp = 0; |
| | | |
| | | GetOffSetValue(nModuleIndex, pDefectResult->nAOICameraIdx, pDefectResult->nAOIScanIdx, nDefectPosX / 1000, xpostemp, ypostemp); |
| | | xpostemp = floor(xpostemp * 1000); |
| | | ypostemp = floor(ypostemp * 1000); |
| | | //210127 |
| | | if (m_pDoc->System_GetMotorInfo()->GetOriginDirection() == 2) |
| | | { |
| | | dPosX += xpostemp; |
| | | dPosY += ypostemp; |
| | | if (nModuleIndex == 0) |
| | | { |
| | | dPosX += xpostemp; |
| | | dPosY += ypostemp; |
| | | } |
| | | else |
| | | { |
| | | dPosX += xpostemp * -1; |
| | | dPosY += ypostemp; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | dPosX += xpostemp * -1; |
| | | dPosY += ypostemp; |
| | | if (nModuleIndex == 0) |
| | | { |
| | | dPosX += xpostemp; |
| | | dPosY += ypostemp * -1; |
| | | } |
| | | else |
| | | { |
| | | dPosX += xpostemp * -1; |
| | | dPosY += ypostemp * -1; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (nModuleIndex == 0) |
| | | { |
| | | dPosX += xpostemp; |
| | | dPosY += ypostemp * -1; |
| | | } |
| | | else |
| | | { |
| | | dPosX += xpostemp * -1; |
| | | dPosY += ypostemp * -1; |
| | | } |
| | | } |
| | | |
| | | g_pLog->DisplayMessage(_T("[OFFSetOn]MotorOffset: %.3lf, %.3lf MagOffset: %.3lf, %.3lf Glass Pos : %.3lf, %.3lf"), xpostemp, ypostemp, MagOffsetX,MagOffsetY,dPosX/1000.0,dPosY/1000.0); |
| | | //dPosX= ApplyMagAndGlassOffset(nModuleIndex,0,dPosX, dPosY); |
| | | //dPosY= ApplyMagAndGlassOffset(nModuleIndex,1,dPosX, dPosY); |
| | | g_pLog->DisplayMessage(_T("[OFFSetOn]MotorOffset: %.3lf, %.3lf MagOffset: %.3lf, %.3lf Glass Pos : %.3lf, %.3lf"), xpostemp, ypostemp, MagOffsetX, MagOffsetY, dPosX / 1000.0, dPosY / 1000.0); |
| | | //dPosX= ApplyMagAndGlassOffset(nModuleIndex,0,dPosX, dPosY); |
| | | //dPosY= ApplyMagAndGlassOffset(nModuleIndex,1,dPosX, dPosY); |
| | | } |
| | | |
| | | } |
| | | |
| | | return Motor_CameraGo(nModuleIndex, dPosX/1000.0, dPosY/1000.0, bAutoSelectCamera, bGoEnd); |
| | |
| | | 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; |
| | |
| | | { |
| | | m_pView->ShowHWSettingMode(); |
| | | } |
| | | |
| | | /* < KEJ 20230621 - #4528 ADD Start > */ |
| | | void CReviewInterface::IDL2P_OpenMotorOffSetTool() |
| | | { |
| | | m_pView->ShowMotorOffSetTool(); |
| | | } |
| | | /* < KEJ 20230621 - #4528 ADD End > */ |
| | | BOOL CReviewInterface::IDL2P_IsManualProcessMode() |
| | | { |
| | | return IsManualProcessMode(); |
| | |
| | | g_pLog->DisplayMessage(_T("[WSI_%d] Send Motion End to WSI SUCCESS! [%02d][%02d]"), nWsiIndex, nModuleIndex, nWsiIndex); |
| | | } |
| | | |
| | | void CReviewInterface::IMC2P_SendMotorAliveErrorAlram() |
| | | { |
| | | IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(PCControlSendSignalIndex_State, PCControlSend_Review_Motor_Communication_Fail, 1000); |
| | | |
| | | return; |
| | | } |
| | | |
| | | void CReviewInterface::IWC2P_SetScanEnd( int nIndex, int nPointIndex, int nPositionX, int nPositionY ) |
| | | { |
| | | int nModuleIndex=-1, nWsiIndex=-1; |