From 3ce48f6dbeb537e252edb0d62c88a28796e36674 Mon Sep 17 00:00:00 2001 From: SWK <sungwk82@diteam.co.kr> Date: 월, 26 12월 2022 15:04:42 +0900 Subject: [PATCH] ongoing60 #4403 CF AOI Review TACT 지연 개선 1. 신호 출력 방식 재개선 - 유지 시간이 없는 신호는 바로 출력 진행하도록 변경 2. 불필요 Delay 제거 및 시퀀스 변경 - 얼라인 측정 종료 처리 간 제어 신호 먼저 출력 후 카메라 Stop으로 변경 - 물류 정보 읽기 처리 후 1000ms Delay 삭제 - 얼라인 측정 시작(카메라 Live Start) 후 Delay 300ms -> 100ms(이미지 들어오는 시간 확보 필요) - ReadRawFile 처리 시작 전 500ms Delay 삭제 - Path Scheduling 완료 후 Review Ready 신호 출력 전 1000ms Delay 삭제 3. 버그 수정 - 이미지 저장 경로 생성 간 예외 처리 부분 버그 수정 4. 로그 시간 출력 불합리 개선 - 로그 시간이 파일 출력 시점으로 작성되어 로그 스래드 지연 시 시간이 맞지 않는 불합리 있음 - 로그 시간은 로그 발생 시점에 시간 저장, 해당 시간 이용하여 파일에 기록하도록 변경 --- ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp | 276 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 253 insertions(+), 23 deletions(-) diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp index 0f820c7..f9dc30c 100644 --- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp +++ b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp @@ -60,6 +60,7 @@ , m_dEditOffsetX(0) , m_dEditOffsetY(0) , m_strGantryIdx(_T("")) + , m_TextLastSaveOffsetTime(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); @@ -83,6 +84,12 @@ m_dCurDefectIdx = 0; m_dCurDefectID = 0; /*< LYW 20211018 - #3684 ADD End >*/ + /*< LYW 20211029 - #3684 ADD Start >*/ + DWORD dwThreadId = 0; + HANDLE hThread = CreateThread(NULL, 0, RunThreadReviewHistory, this, 0, &dwThreadId); + m_ThreadId = dwThreadId; + /*< LYW 20211029 - #3684 ADD End >*/ + m_CheckInsViewCenterLine.SetCheck(FALSE); for (int i = 0; i < 105; i++) { @@ -93,6 +100,13 @@ m_nImageSize[i] = 0; } } + +/*< LYW 20211029 - #3684 ADD Start >*/ +CReveiwHistoryDlg::~CReveiwHistoryDlg(void) +{ + PostThreadMessage(m_ThreadId, WM_QUIT, 0, 0); +} +/*< LYW 20211029 - #3684 ADD End >*/ void CReveiwHistoryDlg::DoDataExchange(CDataExchange* pDX) { @@ -112,6 +126,8 @@ DDX_Text(pDX, IDC_EDIT_OFFSET_X, m_dEditOffsetX); DDX_Text(pDX, IDC_EDIT_OFFSET_Y, m_dEditOffsetY); DDX_Text(pDX, IDC_EDIT_DFFSET_GANTRY_IDX, m_strGantryIdx); + DDX_Text(pDX, IDC_STATIC_LAST_SAVE_OFFSET_TIME, m_TextLastSaveOffsetTime); + DDX_Control(pDX, IDC_CHECK_INS_VIEW_CENTER_LINE, m_CheckInsViewCenterLine); } BEGIN_MESSAGE_MAP(CReveiwHistoryDlg, CDialogEx) @@ -124,6 +140,7 @@ ON_BN_CLICKED(IDC_BUTTON_MAPVIEW_FIT, &CReveiwHistoryDlg::OnBnClickedButtonMapviewFit) ON_MESSAGE(UM_FORMMAP_DEFECTSELECT, OnMapDefectSelected) ON_MESSAGE(UM_FORMMAP_DEFECTMOUSEOVER, OnMapDefectMouseOver) + ON_MESSAGE(UM_WARNING_OFFSET, OnDisplayWarning) ON_MESSAGE(UM_FORMMAP_IMAGEMOUSECLICK, OnImageClick) ON_COMMAND(ID_OPTION_PATHSETTING, &CReveiwHistoryDlg::OnOptionPathsetting) ON_COMMAND(ID_VIEW_ALLDEFECT, &CReveiwHistoryDlg::OnViewAlldefect) @@ -140,6 +157,7 @@ ON_WM_KEYDOWN() ON_BN_CLICKED(IDC_BUTTON_OFFSET_APPLY, &CReveiwHistoryDlg::OnBnClickedButtonOffsetApply) ON_BN_CLICKED(IDC_BUTTON_OFFSET_SAVE, &CReveiwHistoryDlg::OnBnClickedButtonOffsetSave) + ON_BN_CLICKED(IDC_CHECK_INS_VIEW_CENTER_LINE, &CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine) END_MESSAGE_MAP() // CReveiwHistoryDlg 硫붿떆吏� 泥섎━湲� @@ -213,13 +231,6 @@ InitGridDefectLIst(&m_gridDefectInfo, IDC_STATIC_GRID_DEFECT); InitGridGlassLIst(&m_gridGlassInfo, IDC_STATIC_GRID_GLASS_INFO); - /*< LYW 20211025 - #3684 ADD Start >*/ - CString strPath = _T(""); - InitDataInfo(); - strPath.Format(_T("%s%s"), REVIEW_OFFSET_CONFIGFILE_PATH, REVIEW_OFFSET_CONFIGFILE_NAME); - LoadOffset(strPath); - /*< LYW 20211025 - #3684 ADD End >*/ - OnViewReviewdefect(); m_chkReviewDefect.SetCheck(TRUE); @@ -245,6 +256,11 @@ m_ctlProgress.SetRange(0, 100); m_ctlProgress.ShowWindow(FALSE); + + /*< LYW 20211025 - #3684 ADD Start >*/ + InitDataInfo(); + PostThreadMessage(m_ThreadId, UM_THREAD_LOADING_OFFSET, 0, 0); + /*< LYW 20211025 - #3684 ADD End >*/ return TRUE; // �룷而ㅼ뒪瑜� 而⑦듃濡ㅼ뿉 �꽕�젙�븯吏� �븡�쑝硫� TRUE瑜� 諛섑솚�빀�땲�떎. } @@ -329,6 +345,10 @@ { dc.SetStretchBltMode(COLORONCOLOR); m_AlignSecend.Draw(dc, m_Align_rect2); + } + if (m_CheckInsViewCenterLine.GetCheck() == TRUE) + { + DrawInsViewCenterLine(&dc); } CDialogEx::OnPaint(); } @@ -908,7 +928,11 @@ //ImageShow(pDefectInfo->m_nDefectID); if (!m_bDefectAll) { - ImageShow(pDispInfo->item.row - 1); + /*< LYW 20211221 - #5000 ADD Start >*/ + ImageShow(pDefectInfo->m_nDefectID); + /*< LYW 20211221 - #5000 ADD End >*/ + //origin + //ImageShow(pDispInfo->item.row - 1); } else { @@ -918,12 +942,15 @@ //�젙�젹 �닚�꽌瑜� �궗�슜�옄媛� �썝�븯�뒗 �닚�쑝濡� �븯�옄 if (!m_bDefectAll) { - m_sldImg.SetPos(pDispInfo->item.row - 1); - - int nPos = m_sldImg.GetPos(); - CString strPos; - strPos.Format(_T("%d"), nPos); - m_ctrCount.SetWindowText(strPos); + /*< LYW 20211221 - #5000 Delete Start >*/ + +// m_sldImg.SetPos(pDispInfo->item.row - 1); +// +// int nPos = m_sldImg.GetPos(); +// CString strPos; +// strPos.Format(_T("%d"), nPos); +// m_ctrCount.SetWindowText(strPos); + /*< LYW 20211221 - #5000 Delete End >*/ } } } @@ -1212,7 +1239,11 @@ { if (m_Formation.m_vecImage[i].m_nDefectID == nSelectDefect) { - ImageShow(i); + /*< LYW 20211221 - #5000 ADD Start >*/ + ImageShow(nSelectDefect); + /*< LYW 20211221 - #5000 ADD End >*/ + //origin + //ImageShow(i); break; } } @@ -1233,6 +1264,12 @@ m_pDlgAlign->setFormShow(nSelectDefect, 1); } + return 0; +} + +LRESULT CReveiwHistoryDlg::OnDisplayWarning(WPARAM wParam, LPARAM lParam) +{ + AfxMessageBox(_T("�꽑�깮�븯�떊 由щ럭 �뜲�씠�꽣�뒗 吏�湲� �쟻�슜�맂 OFFSET �뜲�씠�꽣 �씠�쟾�쓽 �뜲�씠�꽣 �엯�땲�떎. �솗�떎�븳 寃쎌슦媛� �븘�땲�씪硫� OFFSET �뀑�똿�쓣 湲덊빐二쇱떗�떆�삤."), MB_OK | MB_ICONWARNING); return 0; } @@ -1440,6 +1477,8 @@ nSecond = write_local_time.wSecond; CString strTime; strTime.Format("%04d-%02d-%02d-%02d-%02d-%02d", nYear, nMonth, nDay, nHour, nMinute, nSecond); + + CloseHandle(h_File); m_vecStrGridTimeList.push_back(strTime); } @@ -1557,6 +1596,12 @@ Imagenoload(); return; } + + /*< LYW 20211028 - #3684 ADD Start >*/ + CString strBinFileName; + strBinFileName.Format("%s\\%s", strBinPath, strFileName); + m_CurrentResultFileTime = GetCurrentResultFileTime(strBinFileName); + /*< LYW 20211028 - #3684 ADD End >*/ if (bNewFile && m_chkSingle.GetCheck()) { @@ -1783,6 +1828,12 @@ { SetScrollSetting(); } + /*< LYW 20211028 - #3684 ADD Start >*/ + if (m_LastSaveOffsetTime >= m_CurrentResultFileTime) + { + PostThreadMessage(m_ThreadId, UM_THREAD_WARNING_OFFSET, 0, 0); + } + /*< LYW 20211028 - #3684 ADD End >*/ } void CReveiwHistoryDlg::OnCbnSelchangeComboRawtype() @@ -1797,6 +1848,25 @@ m_ConfigOption.m_nSelectRawType = 3; +} + +void CReveiwHistoryDlg::DrawInsViewCenterLine(CPaintDC * pDC) +{ + if (m_picture_rect2.Width() == 0 || m_picture_rect2.Height() == 0) return; + + CRect rtDraw = m_picture_rect2; + + CPen pen, *pPen = NULL; + pen.CreatePen(PS_DOT, 1, RGB(255, 0, 0)); + pDC->SelectObject(&pen); + + //pDC->SelectStockObject(WHITE_PEN); + + // center line + pDC->MoveTo((rtDraw.Width() / 2) + rtDraw.left, 0 + rtDraw.top); + pDC->LineTo((rtDraw.Width() / 2) + rtDraw.left, rtDraw.Height() + rtDraw.top); + pDC->MoveTo(0 + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top); + pDC->LineTo(rtDraw.Width() + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top); } void CReveiwHistoryDlg::OnBnClickedBtnFindBin() @@ -2091,8 +2161,16 @@ if (!m_bDefectAll) { - nIndex = nDefectID; - break; + /*< LYW 20211221 - #5000 ADD Start >*/ + if (pImage->m_nDefectID == nDefectID) + { + nIndex = i; + break; + } + /*< LYW 20211221 - #5000 ADD End >*/ + //Origin +// nIndex = nDefectID; +// break; } else { @@ -2338,8 +2416,11 @@ _akReviewList* pImageInfo = &m_Formation.m_vecImage[nPos]; m_FormationMap.setSelectDefect(pImageInfo->m_nDefectID); - //ImageShow(pImageInfo->m_nDefectID/*nPos*/); - ImageShow(nPos); + /*< LYW 20211221 - #5000 ADD Start >*/ + ImageShow(pImageInfo->m_nDefectID/*nPos*/); + /*< LYW 20211221 - #5000 ADD End >*/ + //Origin + //ImageShow(nPos); setDefectShow(pImageInfo->m_nDefectID, 1); } } @@ -2650,8 +2731,10 @@ int center_y = (SrcImage.GetHeight() / 2); // �쉶�쟾 以묒떖�젏 double seta = 3.14 / (180.0 / degree); // �씪�뵒�븞 - double CosSeta = cos(seta); - double SinSeta = sin(seta); + double CosSeta = -1; + double SinSeta = 0; +// double CosSeta = cos(seta); +// double SinSeta = sin(seta); for (int y = 0; y < Height; y++) { @@ -2693,6 +2776,63 @@ m_ctlFileCount.GetWindowText(strCount); m_nFileCount = _ttoi(strCount); } + +/*< LYW 20211028 - #3684 ADD Start >*/ +void CReveiwHistoryDlg::UpdateLastSaveOffsetTime(CString FileName) +{ + + HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + FILETIME create_time, access_time, write_time; + GetFileTime(h_file, &create_time, &access_time, &write_time); + + SYSTEMTIME access_system_time; + FileTimeToSystemTime(&access_time, &access_system_time); + + SYSTEMTIME access_system_Local_time; + SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time); + + CTime FIleTime(access_system_Local_time); + m_LastSaveOffsetTime = FIleTime; + + CloseHandle(h_file); + + m_TextLastSaveOffsetTime.Format(_T("%04d/%02d/%02d/%02d:%02d:%02d"), m_LastSaveOffsetTime.GetYear(), m_LastSaveOffsetTime.GetMonth(), + m_LastSaveOffsetTime.GetDay(), m_LastSaveOffsetTime.GetHour(), m_LastSaveOffsetTime.GetMinute(), m_LastSaveOffsetTime.GetSecond()); + + UpdateData(FALSE); +} +CTime CReveiwHistoryDlg::GetCurrentResultFileTime(CString FileName) +{ + HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (h_file != INVALID_HANDLE_VALUE) + { + FILETIME create_time, access_time, write_time; + GetFileTime(h_file, &create_time, &access_time, &write_time); + + SYSTEMTIME access_system_time; + FileTimeToSystemTime(&access_time, &access_system_time); + + SYSTEMTIME access_system_Local_time; + SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time); + + CloseHandle(h_file); + + CTime FIleTime(access_system_Local_time); + m_CurrentResultFileTime = FIleTime; + + return m_CurrentResultFileTime; + } + + else + { + return CTime::GetCurrentTime(); + } + + +} +/*< LYW 20211028 - #3684 ADD End >*/ BOOL CReveiwHistoryDlg::GetCheckFileLoad(int nCount) { @@ -3939,6 +4079,7 @@ { // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. SaveOffset(); + SendMsg2ReviewSystem(); } BOOL CReveiwHistoryDlg::LoadOffset(CString strFilePath) @@ -3949,9 +4090,15 @@ if (!macroFile.Read(strFilePath)) return FALSE; + UpdateLastSaveOffsetTime(strFilePath); + macroFile.GetItem(_T("CAMERA_COUNT"), m_nCameraCount, 0); macroFile.GetItem(_T("SCAN_COUNT"), m_nScanCount, 0); macroFile.GetItem(_T("XPOS_COUNT"), m_XposCount, 0); + /*< LYW 20211111 - #3766 ADD Start >*/ + macroFile.GetItem(_T("WARN_STANDARD"), m_dWarnStandard, 0); + macroFile.GetItem(_T("HARD_STANDARD"), m_dHardStandard, 0); + /*< LYW 20211111 - #3766 ADD End >*/ CString strItem = _T(""); double dXoffset = 0; double dYoffset = 0; @@ -4004,6 +4151,9 @@ CString strForderPath; CString strFileName; CTime time = CTime::GetCurrentTime(); + /*< LYW 20211028 - #3684 ADD Start >*/ + m_LastSaveOffsetTime = time; + /*< LYW 20211028 - #3684 ADD End >*/ strFileName.Format(_T("ReviewOffSet_%04d%02d%02d%02d%02d%02d.cfg"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); strForderPath.Format(_T("%s%s"), REVIEW_OFFSET_BACKUP_FORDER_PATH, strFileName); @@ -4028,6 +4178,14 @@ strItem.Format(_T("XPOS_COUNT")); macroFile.SetItem(strItem, m_XposCount); + + /*< LYW 20211111 - #3766 ADD Start >*/ + strItem.Format(_T("WARN_STANDARD")); + macroFile.SetItem(strItem, m_dWarnStandard); + + strItem.Format(_T("HARD_STANDARD")); + macroFile.SetItem(strItem, m_dHardStandard); + /*< LYW 20211111 - #3766 ADD End >*/ CString strData; @@ -4070,10 +4228,45 @@ bReturn = macroFile.Write(strFilePath); - if (bReturn) AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK); - else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONASTERISK); + /*< 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 >*/ + UpdateLastSaveOffsetTime(strFilePath); + AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK); + /*< LYW 20211028 - #3684 ADD End >*/ + } + else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONHAND); return bReturn; +} + +BOOL CReveiwHistoryDlg::SendMsg2ReviewSystem() +{ + HWND hWnd = ::FindWindow(NULL, _T("ReviewSystem")); + + if (hWnd) + { + COPYDATASTRUCT cds; + cds.dwData = COPYDATA_REVIEWHISTORYOR2REVIEWSYSTEM; + cds.cbData = 0; + cds.lpData = 0; + + ::SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)(LPVOID)&cds); + + return TRUE; + } + + return FALSE; } BOOL CReveiwHistoryDlg::ApplyOffset(int nModuleidx, int nCamIndex, int ScanIndex, double dXOffsetValue, double dYOffsetValue) @@ -4259,3 +4452,40 @@ } } /*< LYW 20211025 - #3684 ADD End >*/ + +/*< LYW 20211029 - #3684 ADD Start >*/ +DWORD RunThreadReviewHistory(LPVOID param) +{ + MSG msg; + CString strPath = _T(""); + CReveiwHistoryDlg* pDlg = (CReveiwHistoryDlg*)param; + while (GetMessage(&msg, NULL, 0, 0)) + { + //CString* pstrLog = reinterpret_cast<CString*>(msg.wParam); + switch (msg.message) + { + case UM_THREAD_WARNING_OFFSET: + + Sleep(100); + pDlg->PostMessage(UM_WARNING_OFFSET); + break; + + case UM_THREAD_LOADING_OFFSET: + strPath.Format(_T("%s%s"), REVIEW_OFFSET_CONFIGFILE_PATH, REVIEW_OFFSET_CONFIGFILE_NAME); + pDlg->LoadOffset(strPath); + break; + + default: + break; + } + } + return 0; +} +/*< LYW 20211029 - #3684 ADD End >*/ + +void CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine() +{ + // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. + Invalidate(TRUE); + +} -- Gitblit v1.9.3