From a6552335164ce062567b76aa7d097fd046129474 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 금, 23 7월 2021 10:07:55 +0900 Subject: [PATCH] Ongoing90 #3517 CF AOI Review 자가진단 기능 개선 --- ReviewHistory/ReveiwHistory/DitGlassRawStruct.h | 253 +++--- DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h | 2 ReviewSystem/ReviewSystem/ReviewProcessor.h | 6 DitGlassRawMessenger/Extern/DitGlassRawClient.cpp | 29 DitGlassRawMessenger/Extern/DitGlassRawStruct.h | 253 +++--- DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h | 3 ReviewSystem/ReviewSystem/DitGlassRawStruct.h | 253 +++--- ReviewSystem/ReviewSystem/resource.h | 3 DitGlassRawMessenger/DitGlassRawMessenger/InterfaceFTP.h | 3 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp | 11 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h | 24 ReviewHistory/bin/ReviewHistroy.exe | 0 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp | 137 +-- ReviewSystem/ReviewSystem/DitGlassRawClient.cpp | 4 ReviewSystem/ReviewSystem/DitGlassRawClient.h | 1 ReviewSystem/ReviewSystem/ReviewSystem.rc | 65 - ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp | 11 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp | 122 +- ReviewHistory/ReveiwHistory/DitGlassRawServer.h | 3 ReviewSystem/ReviewSystem/SequenceProcessor.h | 7 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj.filters | 6 ReviewSystem/ReviewSystem/ReviewInterface.cpp | 55 + DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp | 396 +++++++++++ DitGlassRawMessenger/Extern/DitGlassRawClient.h | 16 ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp | 94 +- ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp | 3 ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h | 2 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc | 21 DitGlassRawMessenger/DitGlassRawMessenger/resource.h | 2 ReviewSystem/ReviewSystem/SequenceProcessor.cpp | 6 ReviewSystem/ReviewSystem/ReviewInterface.h | 13 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h | 14 DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h | 65 + ReviewSystem/ReviewSystem/DlgSelfDiagnosis.cpp | 4 ReviewHistory/bin/Config/PathSetting.ini | 2 ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp | 39 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h | 3 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj | 2 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp | 77 + 39 files changed, 1,288 insertions(+), 722 deletions(-) diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc index b942e78..f723721 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc @@ -131,20 +131,23 @@ LTEXT "-",IDC_STATIC_SERVERCMD,451,61,102,8 PUSHBUTTON "Test1",IDC_TEST1,136,45,43,14,NOT WS_VISIBLE PUSHBUTTON "Test2",IDC_TEST2,136,60,43,14,NOT WS_VISIBLE - GROUPBOX "Stack File",IDC_STATIC,7,82,216,75 - CONTROL "Use Stack File Read",IDC_CHECK_STACKFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,97,77,10 - EDITTEXT IDC_EDIT_STACK_LOCALSAVEPATH,57,115,163,14,ES_AUTOHSCROLL - LTEXT "Local Path :",IDC_STATIC,14,117,40,8 + GROUPBOX "DownLoad File",IDC_STATIC,7,82,216,75 + CONTROL "",IDC_CHECK_STACKFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,99,16,10 + EDITTEXT IDC_EDIT_STACK_LOCALSAVEPATH,94,96,121,14,ES_AUTOHSCROLL PUSHBUTTON "Apply",IDC_BTN_STACKAPPLY,180,139,39,14 PUSHBUTTON "Send",IDC_TEST_CMD,110,60,20,14,WS_DISABLED LTEXT "Command : ",IDC_STATIC,17,63,39,8 COMBOBOX IDC_CMB_COMMAND,61,61,48,128,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_EDIT_STACK_EQUIPID,45,133,32,14,ES_AUTOHSCROLL - LTEXT "Equip ID :",IDC_STATIC,11,136,32,8 - EDITTEXT IDC_EDIT_STACK_PARAM1,113,134,24,14,ES_AUTOHSCROLL - LTEXT "Param :",IDC_STATIC,85,137,28,8 - EDITTEXT IDC_EDIT_STACK_PARAM2,139,134,24,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_STACK_EQUIPID,45,133,32,14,ES_AUTOHSCROLL | NOT WS_VISIBLE + LTEXT "Equip ID :",IDC_STATIC,11,136,32,8,NOT WS_VISIBLE + EDITTEXT IDC_EDIT_STACK_PARAM1,113,134,24,14,ES_AUTOHSCROLL | NOT WS_VISIBLE + LTEXT "Param :",IDC_STATIC,85,137,28,8,NOT WS_VISIBLE + EDITTEXT IDC_EDIT_STACK_PARAM2,139,134,24,14,ES_AUTOHSCROLL | NOT WS_VISIBLE PUSHBUTTON "Manual\nFTP Upload",IDC_BTN_FTP_MANUALUPLOAD,418,20,39,31,BS_MULTILINE | WS_DISABLED + LTEXT "Stack File",IDC_STATIC,16,100,30,8 + LTEXT "RawMerge File",IDC_STATIC,15,115,46,8 + CONTROL "",IDC_CHECK_RAWMERGEFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,115,16,10 + EDITTEXT IDC_EDIT_RAWMERGE_LOCALSAVEPATH,94,112,121,14,ES_AUTOHSCROLL END diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj index 5305d18..f54cbca 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj @@ -234,6 +234,7 @@ <ClCompile Include="GlassRawRTMS.cpp" /> <ClCompile Include="InterfaceFTP.cpp" /> <ClCompile Include="MacroResultFile.cpp" /> + <ClCompile Include="RawResultReader.cpp" /> <ClCompile Include="StackResultCPJT.cpp" /> <ClCompile Include="StackResultCSOT.cpp" /> <ClCompile Include="stdafx.cpp"> @@ -261,6 +262,7 @@ <ClInclude Include="GlassRawRTMS.h" /> <ClInclude Include="InterfaceFTP.h" /> <ClInclude Include="MacroResultFile.h" /> + <ClInclude Include="RawResultReader.h" /> <ClInclude Include="Resource.h" /> <ClInclude Include="StackResultCPJT.h" /> <ClInclude Include="StackResultCSOT.h" /> diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj.filters b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj.filters index a18de26..81b1bc2 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj.filters +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj.filters @@ -93,6 +93,9 @@ <ClCompile Include="StackResultCPJT.cpp"> <Filter>RawInterface\Stack</Filter> </ClCompile> + <ClCompile Include="RawResultReader.cpp"> + <Filter>RawInterface\Stack</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="akLoggerExt.h"> @@ -161,6 +164,9 @@ <ClInclude Include="StackResultCPJT.h"> <Filter>RawInterface\Stack</Filter> </ClInclude> + <ClInclude Include="RawResultReader.h"> + <Filter>RawInterface\Stack</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="res\DitGlassRawMessenger.ico"> diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp index 4f22cb1..e2290d6 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp @@ -1,5 +1,5 @@ -// DitGlassRawMessengerDlg.cpp : 占쏙옙占쏙옙 占쏙옙占쏙옙 +// DitGlassRawMessengerDlg.cpp : 구현 파일 // #include "stdafx.h" @@ -23,20 +23,20 @@ #define GRID_TEXT_COLOR RGB(255,255,255) #define GRID_ALARM_TEXT_COLOR RGB(255,0,0) #define GRID_LINE_COLOR GRID_FIX_COLOR -// 占쏙옙占쏙옙 占쏙옙占싸그뤄옙 占쏙옙占쏙옙占쏙옙 占쏙옙占실댐옙 CAboutDlg 占쏙옙화 占쏙옙占쏙옙占쌉니댐옙. +// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다. class CAboutDlg : public CDialog { public: CAboutDlg(); -// 占쏙옙화 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쌉니댐옙. +// 대화 상자 데이터입니다. enum { IDD = IDD_ABOUTBOX }; protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 占쏙옙占쏙옙占쌉니댐옙. + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. -// 占쏙옙占쏙옙占쌉니댐옙. +// 구현입니다. protected: DECLARE_MESSAGE_MAP() }; @@ -54,7 +54,7 @@ END_MESSAGE_MAP() -// CDitGlassRawMessengerDlg 占쏙옙화 占쏙옙占쏙옙 +// CDitGlassRawMessengerDlg 대화 상자 @@ -127,7 +127,7 @@ m_vecStrGridDefectHeader.push_back("CellY(mm)"); m_vecStrGridDefectHeader.push_back("ScrtRatio"); m_vecStrGridDefectHeader.push_back("Density"); - //201207 CJH - Merge 占쏙옙占쏙옙 확占쏙옙 + //201207 CJH - Merge 여부 확인 m_vecStrGridDefectHeader.push_back("MergeState"); } @@ -192,16 +192,16 @@ if (timestruct.tm_mon>11 || timestruct.tm_mon<0 ) ASSERT(FALSE); } -// CDitGlassRawMessengerDlg 占쌨쏙옙占쏙옙 처占쏙옙占쏙옙 +// CDitGlassRawMessengerDlg 메시지 처리기 BOOL CDitGlassRawMessengerDlg::OnInitDialog() { CDialog::OnInitDialog(); DragAcceptFiles(TRUE); - // 占시쏙옙占쏙옙 占쌨댐옙占쏙옙 "占쏙옙占쏙옙..." 占쌨댐옙 占쌓몌옙占쏙옙 占쌩곤옙占쌌니댐옙. + // 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다. - // IDM_ABOUTBOX占쏙옙 占시쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙占쏙옙 占쌍억옙占� 占쌌니댐옙. + // IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); @@ -219,16 +219,16 @@ } } - // 占쏙옙 占쏙옙화 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. 占쏙옙占쏙옙 占쏙옙占싸그뤄옙占쏙옙 占쏙옙 창占쏙옙 占쏙옙화 占쏙옙占쌘곤옙 占싣댐옙 占쏙옙荑∽옙占� - // 占쏙옙占쏙옙占쌈울옙크占쏙옙 占쏙옙 占쌜억옙占쏙옙 占쌘듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. - SetIcon(m_hIcon, TRUE); // 큰 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. - SetIcon(m_hIcon, FALSE); // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. + // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는 + // 프레임워크가 이 작업을 자동으로 수행합니다. + SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다. + SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다. - //트占쏙옙占싱억옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //트레이아이콘 구성 m_TrayIcon = FALSE; ResTrayIcon(); - //占쏙옙占� 占쏙옙占쏙옙 + //빌드 정보 { CString strBuild; tm tmBuild; @@ -237,7 +237,7 @@ SetDlgItemText(IDC_BUILDDATE, strBuild); } - //占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻억옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/20] + //설정파일 정보 읽어 오기 [김태현 2018/11/20] { m_strConfigFile; { @@ -254,6 +254,8 @@ akFileDB.getItem("LogFilePath", m_ConfigOption.m_strLogFilePath, "c:\\AOIServer\\LogRawMessenger\\LogRawMessenger"); akFileDB.getItem("Stack_Use", &m_ConfigOption.m_bUseStack, 0); akFileDB.getItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath, "D:\\DIT_ResultData\\Stack"); + akFileDB.getItem("RawMerge_Use", &m_ConfigOption.m_bUseRawMerge, 0); + akFileDB.getItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath, "D:\\DIT_ResultData\\RawMerge"); akFileDB.getItem("Stack_EquipID",m_ConfigOption.m_strStackEquipID, "AAAAA"); akFileDB.getItem("Stack_Param1",m_ConfigOption.m_strStackParam1, ""); akFileDB.getItem("Stack_Param2",m_ConfigOption.m_strStackParam2, ""); @@ -263,12 +265,14 @@ ((CButton*)GetDlgItem(IDC_CHECK_STACKFILEREAD))->SetCheck(m_ConfigOption.m_bUseStack); SetDlgItemText(IDC_EDIT_STACK_LOCALSAVEPATH, m_ConfigOption.m_strStackLocalPath); + ((CButton*)GetDlgItem(IDC_CHECK_RAWMERGEFILEREAD))->SetCheck(m_ConfigOption.m_bUseRawMerge); + SetDlgItemText(IDC_EDIT_RAWMERGE_LOCALSAVEPATH, m_ConfigOption.m_strRawMergeLocalPath); SetDlgItemText(IDC_EDIT_STACK_EQUIPID, m_ConfigOption.m_strStackEquipID); SetDlgItemText(IDC_EDIT_STACK_PARAM1, m_ConfigOption.m_strStackParam1); SetDlgItemText(IDC_EDIT_STACK_PARAM2, m_ConfigOption.m_strStackParam2); } - //占싸깍옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/20] + //로그 관련 [김태현 2018/11/20] { CakFileUtil fileutil; char strPath[256]; @@ -371,30 +375,30 @@ if(m_Server.CreateServer(m_ConfigOption.m_nMaxDataNumCell, m_ConfigOption.m_nMaxDataNumDefect) == FALSE) { - AfxMessageBox("占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쌌니댐옙."); + AfxMessageBox("서버 생성 실패 종료 합니다."); exit(0); } - //占쏙옙占썹값 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/12] + //현재값 적용 [김태현 2019/1/12] { CDitGlassRawServer* pServer = (CDitGlassRawServer*) &m_Server; CgrmGlassRawData* pRawDataBuffer = &m_GlassRawDataBuffer; pRawDataBuffer->ImportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData()); } - //占쌜억옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + //작업 쓰레드 생성 [김태현 2018/11/13] { _beginthread(threadMain, NULL, this); } PostMessage(UM_GLASSRAW_CLIENTMESSAGE); - return TRUE; // 占쏙옙커占쏙옙占쏙옙 占쏙옙트占싼울옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 TRUE占쏙옙 占쏙옙환占쌌니댐옙. + return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다. } void CDitGlassRawMessengerDlg::OnBnClickedOk() { - // TODO: 占쏙옙占썩에 占쏙옙트占쏙옙 占싯몌옙 처占쏙옙占쏙옙 占쌘드를 占쌩곤옙占쌌니댐옙. + // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. OnOK(); } @@ -403,14 +407,14 @@ { NOTIFYICONDATA nid; nid.cbSize = sizeof(nid); - nid.hWnd = m_hWnd; // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌘듸옙 - nid.uID = IDR_MAINFRAME; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쌀쏙옙 ID - nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 占시뤄옙占쏙옙 占쏙옙占쏙옙 - nid.uCallbackMessage = UM_TRAYICON_MSG; // 占쌥뱄옙聘占쏙옙占� 占쏙옙占쏙옙 - nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 占쏙옙占쏙옙占쏙옙 占싸듸옙 + nid.hWnd = m_hWnd; // 메인 윈도우 핸들 + nid.uID = IDR_MAINFRAME; // 아이콘 리소스 ID + nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 플래그 설정 + nid.uCallbackMessage = UM_TRAYICON_MSG; // 콜백메시지 설정 + nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 아이콘 로드 char strTitle[256]; - GetWindowText(strTitle, sizeof(strTitle)); // 캡占실바울옙 占쏙옙쨉占� 占쏙옙占쌘울옙 占쏙옙占쏙옙 + GetWindowText(strTitle, sizeof(strTitle)); // 캡션바에 출력된 문자열 얻음 lstrcpy(nid.szTip, strTitle); Shell_NotifyIcon(NIM_ADD, &nid); SendMessage(WM_SETICON, (WPARAM)TRUE, (LPARAM)nid.hIcon); @@ -433,7 +437,7 @@ GetCursorPos(&pos); { HMENU hMenu = CreatePopupMenu(); - AppendMenu(hMenu, MF_STRING, 0, "占쏙옙占쏙옙占쏙옙2占쏙옙트占쏙옙품"); + AppendMenu(hMenu, MF_STRING, 0, "연구소2파트작품"); AppendMenu(hMenu, MF_STRING, WM_DESTROY, "Exit"); TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, 0, GetSafeHwnd(), NULL); } @@ -461,19 +465,19 @@ } } -// 占쏙옙화 占쏙옙占쌘울옙 占쌍쇽옙화 占쏙옙占쌩몌옙 占쌩곤옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙占쏙옙占쏙옙 占쌓몌옙占쏙옙占쏙옙 -// 占싣뤄옙 占쌘드가 占십울옙占쌌니댐옙. 占쏙옙占쏙옙/占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙求占� MFC 占쏙옙占쏙옙 占쏙옙占싸그뤄옙占쏙옙 占쏙옙荑∽옙占� -// 占쏙옙占쏙옙占쌈울옙크占쏙옙占쏙옙 占쏙옙 占쌜억옙占쏙옙 占쌘듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. +// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면 +// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는 +// 프레임워크에서 이 작업을 자동으로 수행합니다. void CDitGlassRawMessengerDlg::OnPaint() { if (IsIconic()) { - CPaintDC dc(this); // 占쌓몌옙占썩를 占쏙옙占쏙옙 占쏙옙占쏙옙決占� 占쏙옙占쌔쏙옙트 + CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); - // 클占쏙옙占싱억옙트 占썹각占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏘데占쏙옙 占쏙옙占쏙옙求占�. + // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다. int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; @@ -481,7 +485,7 @@ int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; - // 占쏙옙占쏙옙占쏙옙占쏙옙 占쌓몌옙占싹댐옙. + // 아이콘을 그립니다. dc.DrawIcon(x, y, m_hIcon); } else @@ -490,8 +494,8 @@ } } -// 占쏙옙占쏙옙微占� 占쌍쇽옙화占쏙옙 창占쏙옙 占쏙옙占� 占쏙옙占싫울옙 커占쏙옙占쏙옙 표占시되듸옙占쏙옙 占시쏙옙占쌜울옙占쏙옙 -// 占쏙옙 占쌉쇽옙占쏙옙 호占쏙옙占쌌니댐옙. +// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서 +// 이 함수를 호출합니다. HCURSOR CDitGlassRawMessengerDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); @@ -501,15 +505,15 @@ void CDitGlassRawMessengerDlg::OnDropFiles(HDROP hDropInfo) { int nFiles; - char szPathName[MAX_PATH]; // 占쏙옙占쏙옙 占쏙옙罐占쏙옙占� 占쏙옙載o옙占�. + char szPathName[MAX_PATH]; // 파일 경로면이 들어간다. CString strFileName; - // 占쏙옙撻占� 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 드롭된 파일의 갯수 nFiles = ::DragQueryFile( hDropInfo, 0xFFFFFFFF, szPathName, MAX_PATH ); - for(int i = nFiles-1 ; i >= 0; i--) //占쏙옙撻占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙큼 占쏙옙占쏙옙占쏙옙 占쏙옙占썽서 占쏙옙占쏙옙 占쏙옙罐占� 占쌨쇽옙占쏙옙 占쌘쏙옙占쏙옙 占쏙옙占� + for(int i = nFiles-1 ; i >= 0; i--) //드롭된 파일 갯수만큼 루프를 돌면서 파일 경로를 메세지 박스로 출력 { - // 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙 + // 파일의 경로 얻어옴 ::DragQueryFile(hDropInfo, i, szPathName, MAX_PATH); SetDlgItemText(IDC_EDIT_RAWFILENAME, szPathName); @@ -601,18 +605,18 @@ if(pRawInfo->m_nCommandIdxWrite != pRawInfo->m_nCommandIdxRead) { - int nReadIdx = (pRawInfo->m_nCommandIdxRead+1)%COMMAND_MAXCOUNT; //占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙占쏙옙 占싹놂옙 占쏙옙占쏙옙占쏙옙占싼쇽옙 占싻는댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/13] + int nReadIdx = (pRawInfo->m_nCommandIdxRead+1)%COMMAND_MAXCOUNT; //현재는 읽은 마지막 포인트임으로 하나 증가시켜서 읽는다. [김태현 2018/11/13] _grmDitCommand::_grmCommand* pCommand = &pRawInfo->m_nCommandBuffer[nReadIdx]; AKLOG("Recv Command ID:%d(r%d/w%d)", pCommand->nCommand, nReadIdx, pRawInfo->m_nCommandIdxWrite); pRawInfo->m_nCommandIdxRead = nReadIdx; - if(pCommand->nResult == -1) //占쏙옙占� 占쏙옙占쏙옙 占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + if(pCommand->nResult == -1) //명령 수행 전 [김태현 2018/11/13] { pCommand->nResult = ProcessCommand( (emGlassRawCommand)pCommand->nCommand, pCommand->strParam ); } else { - //占싱뱄옙 처占쏙옙 占싫곤옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + //이미 처리 된거 [김태현 2018/11/13] } AKLOG("Recv Command ID:%d(r%d/w%d) Process End(Result:%d)", pCommand->nCommand, nReadIdx, pRawInfo->m_nCommandIdxWrite, pCommand->nResult); @@ -658,7 +662,7 @@ { nResult = m_pGlassRawMaker->SequenceInspectEnd(pRawDataBuffer); pServer->GetGlassRawInfo()->m_ServerProcStep = APS_InspectEnd; - //Stack 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌨모리울옙 占쌥울옙 占싹깍옙 占쏙옙占쏙옙 Export + //Stack 정보를 공유메모리에 반영 하기 위한 Export //pRawDataBuffer->ExportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData()); break; } @@ -677,7 +681,7 @@ case grcSequenceCustomReviewDataRead: { nResult = m_pGlassRawMaker->SequenceCustomizeReview(pRawDataBuffer); - ////Customize Review占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙트 + ////Customize Review를 위한 업데이트 //{ // memcpy(pServer->GetDefectData(0), pRawDataBuffer->GetDefectData(0), sizeof(_grmDefectData)*pServer->GetGlassRawInfo()->m_nDefectMaxDataNum); // memcpy(pServer->GetCellData(0), pRawDataBuffer->GetCellData(0), sizeof(_grmCellData)*pServer->GetGlassRawInfo()->m_nCellMaxDataNum); @@ -777,14 +781,14 @@ if(m_pGlassRawMaker) delete m_pGlassRawMaker; - if(m_TrayIcon) // 占쏙옙占쏙옙 트占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占실억옙占쏙옙占쏙옙 확占쏙옙 + if(m_TrayIcon) // 현재 트레이 아이콘으로 설정되었는지 확인 { NOTIFYICONDATA nid; nid.cbSize = sizeof(nid); - nid.hWnd = m_hWnd; // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌘듸옙 + nid.hWnd = m_hWnd; // 메인 윈도우 핸들 nid.uID = IDR_MAINFRAME; - // 占쌜억옙 표占쏙옙占쏙옙(TaskBar)占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싼댐옙. + // 작업 표시줄(TaskBar)의 상태 영역에 아이콘을 삭제한다. Shell_NotifyIcon(NIM_DELETE, &nid); } @@ -942,7 +946,7 @@ BOOL CDitGlassRawMessengerDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { - // TODO: 占쏙옙占썩에 특占쏙옙화占쏙옙 占쌘드를 占쌩곤옙 占쏙옙/占실댐옙 占썩본 클占쏙옙占쏙옙占쏙옙 호占쏙옙占쌌니댐옙. + // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. if (m_gridCellInfo.GetSafeHwnd() && wParam == (WPARAM)m_gridCellInfo.GetDlgCtrlID()) { *pResult = 1; @@ -1264,7 +1268,7 @@ CString str; strItem = _T(" "); - // Panel x占쏙옙, y占쏙옙占쏙옙 占쌜라스울옙 占쌥댐옙 [6/9/2017 bhs] + // Panel x축, y축은 글라스와 반대 [6/9/2017 bhs] if(1)//g_pBasic->GetScanCoordination() == SC_XCoord) str.Format("% 5.3f", (double)pDefect->m_nUMCellX / 1000.0); else @@ -1287,7 +1291,7 @@ CString str; strItem = _T(" "); - // Panel x占쏙옙, y占쏙옙占쏙옙 占쌜라스울옙 占쌥댐옙 [6/9/2017 bhs] + // Panel x축, y축은 글라스와 반대 [6/9/2017 bhs] if(1)//g_pBasic->GetScanCoordination() == SC_XCoord) str.Format("% 5.3f", (double)pDefect->m_nUMCellY / 1000.0); else @@ -1345,6 +1349,8 @@ akFileDB.setItem("Stack_Use", m_ConfigOption.m_bUseStack); akFileDB.setItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath); + akFileDB.setItem("RawMerge_Use", m_ConfigOption.m_bUseRawMerge); + akFileDB.setItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath); akFileDB.setItem("Stack_EquipID", m_ConfigOption.m_strStackEquipID); akFileDB.setItem("Stack_Param1",m_ConfigOption.m_strStackParam1); akFileDB.setItem("Stack_Param2",m_ConfigOption.m_strStackParam2); @@ -1439,7 +1445,7 @@ void CDitGlassRawMessengerDlg::OnBnClickedBtnImportRaw() { - AKLOG("占싱깍옙占쏙옙占� 占쏙옙占쏙옙占쏙옙 占십요가 占쌍겠놂옙.. 占쏙옙占쏙옙占쏙옙..."); + AKLOG("이기능은 가급적 필요가 있겠나.. 싶으네..."); PostMessage(UM_GLASSRAW_CLIENTMESSAGE); } @@ -1524,6 +1530,8 @@ { m_ConfigOption.m_bUseStack = ((CButton*)GetDlgItem(IDC_CHECK_STACKFILEREAD))->GetCheck(); GetDlgItemText(IDC_EDIT_STACK_LOCALSAVEPATH,m_ConfigOption.m_strStackLocalPath, 256); + m_ConfigOption.m_bUseRawMerge = ((CButton*)GetDlgItem(IDC_CHECK_RAWMERGEFILEREAD))->GetCheck(); + GetDlgItemText(IDC_EDIT_RAWMERGE_LOCALSAVEPATH, m_ConfigOption.m_strRawMergeLocalPath, 256); GetDlgItemText(IDC_EDIT_STACK_EQUIPID,m_ConfigOption.m_strStackEquipID, 32); GetDlgItemText(IDC_EDIT_STACK_PARAM1,m_ConfigOption.m_strStackParam1, 32); GetDlgItemText(IDC_EDIT_STACK_PARAM2,m_ConfigOption.m_strStackParam2, 32); @@ -1574,13 +1582,13 @@ - CString str = _T("All(*.*)|*.*|"); // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + CString str = _T("All(*.*)|*.*|"); // 선택할 파일 종류 CString File; CString strFileList; CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, str, this); - const int c_cMaxFiles = 400 /*占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙*/ ; // 占쌨몌옙 占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 확占쏙옙 占쏙옙占쏙옙占쌍몌옙 占쏘개 占쏙옙占쏙옙 + const int c_cMaxFiles = 400 /*선택할 파일 숫자*/ ; // 메모리 부족현상으로 확장 안해주면 몇개 못씀 const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1; dlg.GetOFN().lpstrFile = strFileList.GetBuffer(c_cbBuffSize); dlg.GetOFN().nMaxFile = c_cbBuffSize; @@ -1591,7 +1599,7 @@ { for(POSITION pos=dlg.GetStartPosition(); pos != NULL;) { - // 占쏙옙체占쏙옙占쏙옙占쏙옙 ResetContent + // 전체삭제는 ResetContent File = dlg.GetNextPathName(pos); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h index 56b6972..6d2ff03 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h @@ -54,6 +54,9 @@ char m_strStackEquipID[32]; char m_strStackParam1[32]; char m_strStackParam2[32]; + + int m_bUseRawMerge; + char m_strRawMergeLocalPath[256]; }m_ConfigOption; void WriteConfigFile(); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp index 85f4cab..e88e79b 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp @@ -41,7 +41,8 @@ || sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData - || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData) + || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData + || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData) { return FALSE; } @@ -51,7 +52,8 @@ m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum; m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum; m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum; - + m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum; + m_pGlassRawInfo->m_nGlassRawDataSize; { int nDataNum = 0; @@ -71,6 +73,9 @@ m_pGlassRawInfo->m_nStackDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum; + m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum; + nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum; + m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum; } @@ -125,6 +130,7 @@ m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData); m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData); m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData); + m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData); int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4; } @@ -178,6 +184,7 @@ m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; return TRUE; } diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h index cda09f0..a3dc3f5 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h @@ -18,6 +18,7 @@ _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; }; + _grmDefectData* GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; }; _grmDitGlassRawInfo* GetGlassRawInfo(){return m_pGlassRawInfo;}; @@ -31,7 +32,7 @@ _grmCellData* m_pCellData; _grmDefectData* m_pDefectData; _grmDefectData* m_pStackData; - + _grmDefectData* m_pRawMergeData; protected: HANDLE m_hMapBasicInfo; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h index 2f46477..ea973a0 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h @@ -3,13 +3,13 @@ #include "DitGlassRawStruct.h" ////////////////////////////////////////////////////////////////////////// -// Recipe占쏙옙占쏙옙 Server占쏙옙 Inspector占쏙옙 占쏙옙占쏙옙占싹댐옙 占쏙옙占쏙옙占쏙옙占쏙옙. +// Recipe에서 Server와 Inspector가 공유하는 설정정보. enum ThreadCount { Thread_1 = 0, Thread_2, Thread_4, Thread_6, Thread_8, Thread_11, Thread_12, Thread_22, Thread_24 }; enum CameraType { CamType_Unknown = 0, CamType_Transfer, CamType_Reflex }; -enum ScanCoordinate { SC_XCoord = 0, SC_YCoord }; // 占쏙옙캔占쏙옙占쏙옙. 占쏙옙占쏙옙 占쏙옙표 占쏙옙占쏙옙占� 占쌩울옙. -enum ScanDirectionEng { SD_Right2Left = 0, SD_Left2Right }; // 占쌜억옙占쌘곤옙 占쏙옙 占쏙옙캔 占쏙옙占쏙옙. -enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass 占쏙옙占쏙옙 Scan 占쏙옙占쏙옙. -enum ScanType { ST_SingleScan = 0, ST_DualScan }; // SingleScan - 占쌤뱄옙占쏙옙, DualScan - 占쏙옙占쏙옙占� +enum ScanCoordinate { SC_XCoord = 0, SC_YCoord }; // 스캔방향. 결함 좌표 연산시 중요. +enum ScanDirectionEng { SD_Right2Left = 0, SD_Left2Right }; // 작업자가 본 스캔 방향. +enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass 기준 Scan 방향. +enum ScanType { ST_SingleScan = 0, ST_DualScan }; // SingleScan - 단방향, DualScan - 양방향 enum GlassDirection { GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; enum AcqMode { Acq_Unknown = 0, Acq_Grab, Acq_Snap, Acq_Matrox, Acq_Simul }; enum FindBoundary { FB_NotFind = 0, FB_PitchMatching, FB_ManualMatching }; @@ -20,7 +20,7 @@ enum DefectFiltering { Filtering_NO = 0, Filtering_CO, Filtering_Cutoff, Filtering_DXDY, Filtering_TD, Filtering_FALSE }; // Filtering_CO : Cosmic Ray FALSE enum ALIGN_MARK_CLASSIFY { eAMC_First = 0, eAMC_Second }; ////////////////////////////////////////////////////////////////////////// -// Defect占쏙옙 占쏙옙占실댐옙 타占쌉듸옙. +// Defect에 사용되는 타입들. enum SERVER_DefectType { DefectType_TBlack = 0, DefectType_TWhite, DefectType_RBlack, DefectType_RWhite, DefectType_BBlack, DefectType_BWhite, DefectType_Unknown }; enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; enum SERVER_DefectJudgementType { JudgementType_OK = 0, JudgementType_TR, JudgementType_PR, JudgementType_UNKNOWN }; @@ -34,7 +34,7 @@ enum ReKind { Re_Other, Re_TFE_CIRCLE, Re_PI_CONVEX, Re_PI_CONCAVE, Re_PI_1, Re_PI_2, Re_PI_3 }; //choigudal jude fix 2012.03.07 -enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 占쌩곤옙 +enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 추가 enum MAP16_DefectClass { CLASS_C1 = 1, CLASS_C2, CLASS_C3, CLASS_C4, CLASS_C5, CLASS_C6, CLASS_C7, CLASS_C8, CLASS_C9, CLASS_C10, CLASS_C11, CLASS_C12, CLASS_C13, CLASS_C14, CLASS_C15, CLASS_C16 }; enum MAP16_SizeType { SIZE_SS = 0, SIZE_SM, SIZE_SL, SIZE_SOH, SIZE_IDX_MAX }; enum MAP16_PeakType { PEEK_PS = 0, PEEK_PL, PEEK_PH, PEEK_POH, PEAK_IDX_MAX }; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp index 4b6b6bb..5033f78 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp @@ -78,7 +78,11 @@ m_StackResult.StackFileReadStart(pData->GetGlassData()->m_strGlassID); } - + if (m_RawMergeResult.getRawMergeUse()) + { + SendMessageFTPDownloadDataFile(pData->GetGlassData()); + m_RawMergeResult.RawMergeFileReadStart(pData->GetGlassData()->m_strGlassID); + } return TRUE; } @@ -121,7 +125,13 @@ _TimeDelay(5000); // �씠誘몄� 蹂듭궗 �떆媛� ��湲� //210218 CJH - 寃��궗 醫낅즺�떆 寃곌낵�뙆�씪 諛� CCD Image �뾽濡쒕뱶 SendMessageFTPUploadRaw(pData->GetGlassData()); - SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE); + + BOOL bIsBDI = strcmp((pData->GetGlassData()->m_strLine), _T("BDI")) == 0 ? TRUE : FALSE; + if (bIsBDI) + { + SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE); + } + SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);//0405nwh return TRUE; @@ -1800,23 +1810,18 @@ void CGlassRawCPJT::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData ) { if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPDownloader"); + HWND hWnd = ::FindWindow(NULL, "FTPUploader"); if(hWnd == NULL) return; char strServerFolder[256] = {}; char strServerFile[256] = {}; char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; + char pLocalFile[256] = {}; + char strRTMSFile[32] = {}; + char strServerRawFileSubPath[256] = {}; + char strServer_SubFileName[256] = {}; - //GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - { - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo); - sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0)); - sprintf(strLocalFolder, "D:\\DIT_ResultData\\DownloadData"); - sprintf(pLocalFile, "%s.dat", strGlassID.GetBuffer(0)); - } + GetFormatDescription(FTPCMD_RAWMERGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName, pGlassData); CFTPCopyDataParam upParam; strcpy(upParam.m_strServer_FolderName, strServerFolder); @@ -1829,7 +1834,7 @@ upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; // [C-PRJ] Image Upload Define - KHT (2020/11/19) - upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Unknown; + upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Raw; COPYDATASTRUCT cds; cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; @@ -1971,7 +1976,7 @@ else sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); - sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0)); + sprintf(pLocalPath, "%s%s", NETWORK_AOI_IMAGE_PATH, strGlassID.GetBuffer(0)); strcpy(pServerFile, "*.*"); strcpy(pLocalFile, "*.*"); } @@ -2129,23 +2134,31 @@ sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); } break; - - case FTPCMD_MURA_IMAGE: //0404nwh - { // - /*CTime time = m_tmFileCreateTime; - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*");*/ - - if (strGlassID.GetLength() > 6) - sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID); - else - sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); + case FTPCMD_RAWMERGE: + { + sprintf(pServerPath, "\\%s\\%s\\%s", strProcessID, strStepID,strGlassIDLevel6th.GetBuffer(0)); // �꽌踰� 寃쎈줈 �솗�씤�썑 �닔�젙 kjg + sprintf(pServerFile, "%s",strGlassID); + + sprintf(pLocalPath, "%s", m_RawMergeResult.getRawMergeLocalPath()); + sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); + } + break; + case FTPCMD_MURA_IMAGE: //0404nwh + { // + /*CTime time = m_tmFileCreateTime; + sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), + strGlassIDLevel5th.GetBuffer(0), + strGlassIDLevel8th.GetBuffer(0), + strGlassID.GetBuffer(0)); + + sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); + strcpy(pServerFile, "*.*"); + strcpy(pLocalFile, "*.*");*/ + + if (strGlassID.GetLength() > 6) + sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID); + else + sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); strcpy(pServerFile, "*.*"); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h index 88b6901..a43c626 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h @@ -7,6 +7,7 @@ #include "MacroResultFile.h" #include "CustomizeReview.h" #include "InterfaceFTP.h" +#include "RawResultReader.h" class CGlassRawCPJT : public CGlassRawBase, public CInterfaceFTP { @@ -75,6 +76,7 @@ CMacroResultFile m_MuraResultFile; //무라용 결과파일 생성관리 [김태현 2018/12/5] CStackResultCPJT m_StackResult; + CRawResultReader m_RawMergeResult; BOOL m_bReviewEndCheck; // InspectEnd 시에 Raw_im 폴더에 SubFile 생성 안하기 위해 사용 [ 21-03-18 KJG ] CTime m_tmReviewStart; CTime m_tmReviewEnd; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/InterfaceFTP.h b/DitGlassRawMessenger/DitGlassRawMessenger/InterfaceFTP.h index 22d10e1..ed8f29c 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/InterfaceFTP.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/InterfaceFTP.h @@ -15,7 +15,8 @@ FTPCMD_MURA_IMAGE , FTPCMD_STACK , FTPCMD_LINK , - FTPCMD_End + FTPCMD_End , + FTPCMD_RAWMERGE }; public: diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp new file mode 100644 index 0000000..ea5f9c5 --- /dev/null +++ b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp @@ -0,0 +1,396 @@ +#include "StdAfx.h" +#include "RawResultReader.h" +#include "akLoggerExt.h" +#include "akCore/akFileDB.h" +#include <process.h> +#include "DitGlassRawClient.h" +#include "GlassRawBase.h" + +#ifdef _DEBUG +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#define new DEBUG_NEW +#endif + +CRawResultReader::CRawResultReader(void) +{ + m_nThreadStackFileReadFlag = 0; + m_nProcessState = RPS_StateIdle; + + m_strConfigFile; + { + GetModuleFileName(NULL, m_strConfigFile, MAX_PATH); + char* ext = CakFileUtil::getFileExt(m_strConfigFile); + strcpy(ext, "ini"); + } + CreateDirectory("D:\\DIT_ResultData\\RawMerge", NULL); + m_nProcessState = RPS_StateIdle; + readOptionFile(); +} + +CRawResultReader::~CRawResultReader(void) +{ + + if (m_nThreadStackFileReadFlag == 1) + { + m_nThreadStackFileReadFlag = 2; + while (m_nThreadStackFileReadFlag != 0) + { + Sleep(1); + } + } + + m_vecStackDefect.clear(); + +} + +BOOL CRawResultReader::openFile(char* pGlassID) +{ + CString strFileName; + CDitGlassRawClient GlassRawClient; + GlassRawClient.ConnectServer(); + CDitGlassRawClient* pShared = &GlassRawClient; + + _grmDefectData* pGrmStack; + + strFileName.Format("%s\\%s", m_strLocalPath, pGlassID); + + FILE* pf = fopen(strFileName.GetBuffer(0), "r"); + + if (pf == NULL) + return FALSE; + + std::vector<_grmDefectData> vecStackDefect; + _grmDefectData StackDefect; + char buffer[2048]; + + char* pReadPoint = NULL; + char *pStr; + CString tempStr, strRight; + + while (!feof(pf)) //Data 시작 + { + pStr = fgets(buffer, 2048, pf); + + if (strncmp(buffer, "DATA", 4)) continue; + + if (strlen(buffer) <= 0 || pStr == NULL) + break; + + if (strncmp(buffer, "DATA DEFECT", 10)) continue; + + //Defect Stack Start + { + pReadPoint = buffer; + int temp; + CString strtemp; + + pReadPoint = getParsingData(pReadPoint, 4, &temp); + pReadPoint = getParsingData(pReadPoint, 6, &temp); + pReadPoint = getParsingData(pReadPoint, 12, &strtemp); + + + //Cell ID로 idx 찾기 + { + tempStr = strtemp.Right(2); + int nUpper = atoi(tempStr.Left(1)); + nUpper *= 36; + + char ctemp[2]; + strRight = tempStr.Right(1); + strcpy(ctemp, strRight); + int nLower = static_cast<int>(ctemp[0]); + if (48 <= nLower && nLower <= 57) + nLower = 43 /* 65+26+17 */ + nLower; + nLower -= 65; + + StackDefect.m_nCellIdx = nUpper + nLower; + } + + + pReadPoint = getParsingData(pReadPoint, 5, &temp); + pReadPoint = getParsingData(pReadPoint, 8, &StackDefect.m_nUMCenterAlignX); + pReadPoint = getParsingData(pReadPoint, 8, &StackDefect.m_nUMCenterAlignY); + StackDefect.m_nUMCenterAlignY = StackDefect.m_nUMCenterAlignY*-1; + pReadPoint = getParsingData(pReadPoint, 6, &StackDefect.m_nCellGate); + pReadPoint = getParsingData(pReadPoint, 6, &StackDefect.m_nCellData); + pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nPixelSize); + pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nUMSizeX); + pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nUMSizeY); + pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nDefectRScale); + pReadPoint = getParsingData(pReadPoint, 4, &strtemp); //StackDefect.m_DefectJudgement + if (strtemp == "OK") + StackDefect.m_DefectJudgement = Judge_OK; + else if (strtemp == "TR") + StackDefect.m_DefectJudgement = Judge_TR; + else if (strtemp == "PR") + StackDefect.m_DefectJudgement = Judge_PR; + else + StackDefect.m_StackInfo = Stack_Unknown; + + pReadPoint = getParsingData(pReadPoint, 4, &strtemp); + strncpy(StackDefect.m_strDefectCode, strtemp.GetBuffer(0), 4+1); // Null 문자 떄문에 +1 + pReadPoint = getParsingData(pReadPoint, 2, &strtemp); + if (strtemp == "UK") + StackDefect.m_StackInfo = Stack_Unknown; + else if (strtemp == "TD") + StackDefect.m_StackInfo = Stack_TD; + else if (strtemp == "SD") + StackDefect.m_StackInfo = Stack_SD; + else if (strtemp == "PD") + StackDefect.m_StackInfo = Stack_PD; + else if (strtemp == "SP") + StackDefect.m_StackInfo = Stack_SP; + else + StackDefect.m_StackInfo = Stack_Unknown; + + pReadPoint = getParsingData(pReadPoint, 2, &StackDefect.m_nStackStepCount); + pReadPoint = getParsingData(pReadPoint, 60, &strtemp); // Stack Step m_strStackFirst + strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 60); + pReadPoint = getParsingData(pReadPoint, 16, &strtemp); // ReviewImageName m_strRevImageName + pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용 + pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용 + pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneNum m_sZonePixelCount[i] + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSizeType + if (strtemp == "S") + StackDefect.m_DefectSizeType = SizeType_Small; + else if (strtemp == "M") + StackDefect.m_DefectSizeType = SizeType_Mid; + else if (strtemp == "L") + StackDefect.m_DefectSizeType = SizeType_Large; + else if (strtemp == "H") + StackDefect.m_DefectSizeType = SizeType_Huge; + else if (strtemp == "U") + StackDefect.m_DefectSizeType = SizeType_Ultra; + else + StackDefect.m_DefectSizeType = SizeType_Small; + + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSubType + if (strtemp == "MC") + StackDefect.m_DefectSubType = DefectSubType_MC; + else if (strtemp == "MD") + StackDefect.m_DefectSubType = DefectSubType_Mask; + else if (strtemp == "CD") + StackDefect.m_DefectSubType = DefectSubType_Common; + else if (strtemp == "NO") + StackDefect.m_DefectSubType = DefectSubType_NoDefect; + else if (strtemp == "N") + StackDefect.m_DefectSubType = DefectSubType_Normal; + else + StackDefect.m_DefectSubType = DefectSubType_Normal; + + pReadPoint = getParsingData(pReadPoint, 12, &temp);//m_ReviewDefect.m_fWsi_ResultData[1] + pReadPoint = getParsingData(pReadPoint, 12, &temp);//m_ReviewDefect.m_fWsi_ResultData[3] + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//미사용 + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelSrcMin);//m_nLevelSrcMin + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelSrcMax);//m_nLevelSrcMax + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelSrcAvg);//m_nLevelSrcAvg + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_sDefectPeak);//m_sDefectPeak + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_strWsi_3DImageFilename + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_strAoiImageName + strncpy(StackDefect.m_strAoiImageName, strtemp.GetBuffer(0), 12); + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nScanIdx);//m_nScanIdx + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nCameraID);//m_nCameraID + pReadPoint = getParsingData(pReadPoint, 12, &temp);//m_nDefectIdx + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelRefMin);//m_nLevelRefMin + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelRefMax);//m_nLevelRefMax + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelRefAvg);//m_nLevelRefAvg + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[4] + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[5] + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[6] + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_nHliLayers + StackDefect.m_nHliLayers = 0; + { + CString resToken; + int curPos = 0, idx = 0; + resToken = strtemp.Tokenize(_T(","), curPos); + while (resToken != "") + { + int nShiftCnt = atoi(resToken); + StackDefect.m_nHliLayers = StackDefect.m_nHliLayers +( 1 << nShiftCnt ); + resToken = strtemp.Tokenize(_T(","), curPos); + } + } + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nCompact);//m_nCompact + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nThickness);//m_nThickness + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nMajor);//m_nMajor + pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nMinor);//m_nMinor + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[0] + pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectType + if (strtemp == "RB") + StackDefect.m_DefectType = DefectType_RBlack; + else if (strtemp == "RW") + StackDefect.m_DefectType = DefectType_RWhite; + else if (strtemp == "TB") + StackDefect.m_DefectType = DefectType_TBlack; + else if (strtemp == "TW") + StackDefect.m_DefectType = DefectType_TWhite; + else if (strtemp == "UN") + StackDefect.m_DefectType = DefectType_Unknown; + else + StackDefect.m_DefectType = DefectType_Unknown; + + vecStackDefect.push_back(StackDefect); + } + } + + AKLOG("Read RawMerge Size : %d", vecStackDefect.size()); + + fclose(pf); + + m_vecStackDefect = vecStackDefect; + + for (int i = 0; i < m_vecStackDefect.size(); i++) + { + pGrmStack = pShared->GetRawMergeData(i); + pGrmStack->clear(); + memcpy(pGrmStack, &m_vecStackDefect[i], sizeof(_grmDefectData)); + } + + pShared->GetGlassData()->m_nRawMergeNum = m_vecStackDefect.size(); // RawMerge + pShared->GetGlassData()->m_bRawMergeRead = TRUE; + + AKLOG("Import Vector Size : %d", m_vecStackDefect.size()); + return TRUE; +} + +char* CRawResultReader::getParsingData(char* pBuf, int nLen, CString* pOutData) +{ + + for (int i = nLen - 1; i >= 0; i--) + { + if (pBuf[i] != ' ') + { + pBuf[i + 1] = 0; + break; + } + } + *pOutData = pBuf; + + return &pBuf[nLen + 1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 + +} + +char* CRawResultReader::getParsingData(char* pBuf, int nLen, short* pOutData) +{ + + pBuf[nLen] = 0; + *pOutData = atoi(pBuf); + + return &pBuf[nLen + 1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 +} + +char* CRawResultReader::getParsingData(char* pBuf, int nLen, int* pOutData) +{ + + pBuf[nLen] = 0; + *pOutData = atoi(pBuf); + + return &pBuf[nLen + 1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 +} + +BOOL CRawResultReader::readOptionFile(char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/) +{ + if (pFileName == NULL) pFileName = m_strConfigFile; + + CakFileDB akFileDB; + akFileDB.openfile(pFileName); + + akFileDB.getItem("RawMerge_Use", &m_bStackUse, 0); + akFileDB.getItem("RawMerge_LocalPath", m_strLocalPath, "D:\\DIT_ResultData\\RawMerge"); + + if (m_bStackUse && m_nThreadStackFileReadFlag == 0) + { + _beginthread(threadResultFileRead, NULL, this); + } + return TRUE; +} + +void CRawResultReader::threadResultFileRead(void* pArg) +{ + CRawResultReader* pThis = (CRawResultReader*)pArg; + + pThis->m_nThreadStackFileReadFlag = 1; + int nReadFailCount = 0; + int nThreadCount = 0; + CString strGlassID; + + while (pThis->m_nThreadStackFileReadFlag == 1) + { + if (pThis->m_nProcessState == RPS_CmdFileRead) //스택파일 읽기 수행 [김태현 2019/1/12] + { + strGlassID = pThis->m_strGlassID; + + pThis->m_nProcessState = RPS_StateFileRead; + nThreadCount = 0; + nReadFailCount = 0; + + AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID); + Sleep(3000); + while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1) + { + if ((nThreadCount++ % 20) != 0) //명령 수행을 빠르게 감지 위한 조치 + { + Sleep(50); + continue; + } + if (pThis->openFile(strGlassID.GetBuffer(0)) == TRUE) + { + pThis->m_nProcessState = RPS_ResultReadOK; + AKLOG("RawMerge File Read Complete "); + break; + } + + nReadFailCount++; + AKLOG("RawMerge File Read Try : %d", nReadFailCount); + + if (nReadFailCount > 10) + { + pThis->m_nProcessState = RPS_ResultReadFail; + break; + } + + Sleep(50); + } + if (pThis->m_nProcessState != RPS_ResultReadOK) + { + pThis->m_nProcessState = RPS_ResultReadFail; + } + } + if (nReadFailCount) + Sleep(500); + } + + pThis->m_nThreadStackFileReadFlag = 0; +} + +BOOL CRawResultReader::RawMergeFileReadStart(char* pGlassID) +{ + if (m_nThreadStackFileReadFlag == 0) + { + _beginthread(threadResultFileRead, NULL, this); + } + + if (m_nProcessState == RPS_StateFileRead) + { + m_nProcessState = RPS_CmdFileStop; + while (m_nProcessState == RPS_CmdFileStop) Sleep(0); + } + + m_strGlassID = pGlassID; + m_nProcessState = RPS_CmdFileRead; + + return TRUE; +} + +BOOL CRawResultReader::RawMergeFileReadStop(BOOL bWait/*=TRUE*/) +{ + /* + if (bWait == TRUE && m_nProcessState == SPS_StateFileRead) + { + m_nProcessState = SPS_CmdFileStop; + while (m_nProcessState == SPS_CmdFileStop) Sleep(0); + } + */ + return TRUE; +} diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h new file mode 100644 index 0000000..d72e199 --- /dev/null +++ b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h @@ -0,0 +1,65 @@ +#pragma once + +#include "DitGlassRawStruct.h" +#include <vector> +#include "akCore/akFileUtil.h" + +class CRawResultReader +{ +public: + CRawResultReader(void); + virtual ~CRawResultReader(void); +protected: + enum emReadProcessState + { + RPS_StateIdle = 0, + RPS_StateFileRead, //읽기 수행 중 + RPS_ResultReadOK, + RPS_ResultReadFail, + RPS_CmdFileRead, //읽기 명령 수행 + RPS_CmdFileStop, //읽기 명령 수행 중지 + RPS_Num + }; +public: + + + void clear() + { + m_vecStackDefect.clear(); + } + + BOOL RawMergeFileReadStart(char* pGlassID); + BOOL RawMergeFileReadStop(BOOL bWait = TRUE); + BOOL IsRead() { return m_nProcessState == RPS_ResultReadOK ? TRUE : FALSE; } + + int GetDefectNum() { return (int)m_vecStackDefect.size(); } + _grmDefectData* GetDefect(int i) { return &m_vecStackDefect[i]; } + + BOOL readOptionFile(char* pFileName = NULL); + + BOOL getRawMergeUse() { return m_bStackUse; }; + char* getRawMergeLocalPath() { return m_strLocalPath; }; +protected: + BOOL openFile(char* pGlassID); + static void threadResultFileRead(void* pArg); + + int m_nThreadStackFileReadFlag; + +protected: + char m_strConfigFile[MAX_PATH]; + BOOL m_bStackUse; + char m_strLocalPath[MAX_PATH]; + + + emReadProcessState m_nProcessState;//-1:읽기실패,0:Idle, 1:읽기성공, 2:읽기시도(읽기중) + std::vector<_grmDefectData> m_vecStackDefect; + + CString m_strGlassID; +protected: + char* getParsingData(char* pBuf, int nLen, CString* pOutData); + char* getParsingData(char* pBuf, int nLen, int* pOutData); + char* getParsingData(char* pBuf, int nLen, short* pOutData); + + + +}; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/resource.h b/DitGlassRawMessenger/DitGlassRawMessenger/resource.h index e228872..afbcb97 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/resource.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/resource.h @@ -50,6 +50,8 @@ #define IDC_EDIT_STACK_PARAM2 1032 #define IDC_BTN_MANUAL_FTPUPLOAD 1033 #define IDC_BTN_FTP_MANUALUPLOAD 1033 +#define IDC_CHECK_RAWMERGEFILEREAD 1034 +#define IDC_EDIT_RAWMERGE_LOCALSAVEPATH 1035 // Next default values for new objects // diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp index c37e6e5..e6a5eb9 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp @@ -6,11 +6,16 @@ { m_hMapBasicInfo = NULL; m_hMapGlassData = NULL; - + m_pDitGlassClient =NULL; m_pGlassRawInfo = NULL; m_pGlassRawData = NULL; m_nLastCommandIdx = -1; + + m_pGlassData = NULL; + m_pBlockData = NULL; + m_pCellData = NULL; + m_pDefectData = NULL; } CDitGlassRawClient::~CDitGlassRawClient(void) @@ -100,6 +105,7 @@ m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; return TRUE; } @@ -132,14 +138,14 @@ int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT; - if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//占쏙옙占쏙옙 占쏙옙占쌕는곤옙占쏙옙 占쏙옙큘占쏙옙 占쏙옙占쌜곤옙 占싼뱄옙占쏙옙 占쏙옙占쌀다는곤옙!! [占쏙옙占쏙옙占쏙옙 2018/11/12] + if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//둘이 같다는것은 서큘러 버퍼가 한바퀴 돌았다는것!! [김태현 2018/11/12] { - m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12] + m_pGlassRawInfo->m_nCommandIdxRead++;//가장 오래된 명령 하나를 삭제한다. [김태현 2018/11/12] } m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd; m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam; - m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1占쏙옙占쏙옙占쏙옙, 0占쏙옙占쏙옙, 1占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1수행전, 0실패, 1성공 [김태현 2018/11/13] m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId; @@ -166,6 +172,7 @@ if(isConnect() == FALSE) return FALSE; m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading; m_pGlassData->m_bStackRead = FALSE; + m_pGlassData->m_bRawMergeRead = FALSE; return SetCommand(grcSequenceGlassLoading); } @@ -197,10 +204,20 @@ return SetCommand(grcSequenceCustomReviewDataRead); } +CDitGlassRawClient* CDitGlassRawClient::GetInstance() +{ + if(m_pDitGlassClient == NULL) + { + m_pDitGlassClient = new CDitGlassRawClient; + } + + return m_pDitGlassClient; +} + void CDitGlassRawClient::RemoveReviewDefects() { int nDefectNum = m_pGlassData->m_nDefectNum; - int nRightDefectNum = 0;//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占십울옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + int nRightDefectNum = 0;//기준점 오른쪽에 위치한 결함 갯수 int nDefectDeleteNum = 0; for(int i=nDefectNum-1; i>=0; i--) { @@ -221,3 +238,5 @@ m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum; } + +CDitGlassRawClient* CDitGlassRawClient::m_pDitGlassClient; \ No newline at end of file diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.h b/DitGlassRawMessenger/Extern/DitGlassRawClient.h index 82a185a..df54a2e 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.h +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.h @@ -1,6 +1,7 @@ #pragma once #include "DitGlassRawStruct.h" +#include <afxmt.h> class CDitGlassRawClient { @@ -9,6 +10,8 @@ ~CDitGlassRawClient(void); public: + static CDitGlassRawClient* GetInstance(); //cmark + BOOL ConnectServer(); BOOL isConnect(){return m_hMapBasicInfo == NULL || m_hMapGlassData == NULL ? FALSE : TRUE;}; @@ -22,7 +25,7 @@ BOOL SetReviewComtomize(); - void RemoveReviewDefects();//AOI占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싹곤옙, 占쏙옙占썰에占쏙옙 占쏙옙占쏙옙占쏙옙 User 혹占쏙옙 Reflow 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싼댐옙. + void RemoveReviewDefects();//AOI에서 생성한 디펙 정보를 제외하고, 리뷰에서 생성한 User 혹은 Reflow 결함을 제외한다. _grmDitMemInfo* GetGlassMeminfo(){return (_grmDitMemInfo*)m_pGlassRawInfo;}; _grmGlassData* GetGlassData(){return m_pGlassData;}; @@ -30,14 +33,15 @@ _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex];}; + _grmDefectData* GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; }; - //占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占� [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과 파일 강제 쓰기 명령 [김태현 2018/11/12] BOOL WriteAOIRawFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占쏙옙占승뤄옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과파일 강제 바이너리 형태로 쓰기 [김태현 2018/11/12] BOOL WriteAOIRawBinFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占싻깍옙 + //결과파일 강제 바이너리 읽기 BOOL ReadAOIRawBinFile(); BOOL WriteReviewRawBinFile(); @@ -46,14 +50,14 @@ BOOL ConnectGlassRawInfo(); BOOL ConnectGlassRawData(); BOOL SetCommand(emGlassRawCommand nCmd); - + static CDitGlassRawClient* m_pDitGlassClient; //cmark protected: _grmGlassData* m_pGlassData; _grmBlockData* m_pBlockData; _grmCellData* m_pCellData; _grmDefectData* m_pDefectData; _grmDefectData* m_pStackData; - + _grmDefectData* m_pRawMergeData; protected: HANDLE m_hMapBasicInfo; HANDLE m_hMapGlassData; diff --git a/DitGlassRawMessenger/Extern/DitGlassRawStruct.h b/DitGlassRawMessenger/Extern/DitGlassRawStruct.h index e84fb29..e5f7a55 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawStruct.h +++ b/DitGlassRawMessenger/Extern/DitGlassRawStruct.h @@ -8,6 +8,7 @@ #define RAWMESSENGER_MAXCAMNUM 30 #define RAWMESSENGER_MAXSCANNUM 20 +#define RAWMESSENGER_MAXHLINUM 8 #define MAX_ZONE_NUM 16 @@ -47,7 +48,7 @@ memset(this, 0, sizeof(_grmGlassData)); } - //Glass 占쏙옙占쏙옙 + //Glass 정보 char m_strFileName[64]; char m_strPath[256]; @@ -56,12 +57,12 @@ 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_nScanCoordinateY; //여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은) int m_nGlassSizeWidth; int m_nGlassSizeHeight; - //占쏙옙占쏙옙占쏙옙占쏙옙 + //설비정보 char m_strLine[32]; char m_strEquipType[32]; char m_strEquipID[32]; @@ -74,7 +75,7 @@ CTime m_tmReviewLoading; CTime m_tmReviewEnd; - //占썩본 占쏙옙占쏙옙占쏙옙占쏙옙 + //기본 물류정보 char m_strGlassID[32]; //Glass ID char m_strPPID[32]; char m_strEPPID[32]; @@ -91,7 +92,7 @@ char m_strVCRGlassID[32]; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -126,14 +127,14 @@ int m_nDefectNumStackSP; - //카占쌨띰옙/占쏙옙캔 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //카메라/스캔 정보 [김태현 2018/12/5] short m_nCameraNum; short m_nScanNum; - unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; + 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] + //얼라인 정보 um[김태현 2018/12/10] double m_nAlignCcdTheta; double m_nAlignCcdShitftX; double m_nAlignCcdShitftY; @@ -147,7 +148,7 @@ char m_strAlignSecond[64]; // char m_strAlignPath[256]; - //CSOT占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //CSOT용 물류 정보 [김태현 2018/12/5] char m_strCassetteSequenceNo[16]; char m_strOwnerCode[16]; //2. OWNER_CODE char m_strOwnerType[16]; //3. OWNER_TYPE @@ -162,7 +163,7 @@ char m_strGroupID[16]; //14.GROUP_ID char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG - // CPRJ占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // CPRJ용 물류 정보 char m_strProdType[3]; char m_strBatchID[13]; char m_strPairHPanelID[13]; @@ -188,17 +189,19 @@ BYTE m_nGlassDataBitSignal[4]; bool m_bJob_end; - //201217 CJH - 占쏙옙占쏙옙 Defect Review 占쏙옙占쏙옙 + //201217 CJH - 찍은 Defect Review 개수 int m_nReviewNum; - //201221 CJH - 占식쏙옙占쏙옙 Stack 占쏙옙占� + //201221 CJH - 파싱한 Stack 결과 int m_nStackNum; BOOL m_bStackRead; - //210203 CJH - CutOff 占쏙옙占� 占쏙옙占쏙옙 占쏙옙 + int m_nRawMergeNum; + BOOL m_bRawMergeRead; + //210203 CJH - CutOff 대상 결함 수 int m_nCutOffDefectNum; - //210323 CJH - Server/Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + //210323 CJH - Server/Frame Shrink 정보 추가 char m_strShrinked[6]; - //210326 CJH - RAW 占쌉뤄옙 Defect 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙肉⑼옙占� + //210326 CJH - RAW 입력 Defect 수량 상한 사용여부 BOOL m_bRawCutoff; }; @@ -222,7 +225,7 @@ } int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; int m_nCellID; //1. PANEL_ID - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? + short m_nModelIdx; // 몇 번째 모델인가? char m_strCellName[32]; int m_rectCellLeft; @@ -235,7 +238,7 @@ int m_nJudgeGlade; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -259,7 +262,7 @@ char m_strProImage[32]; char m_strAvgGray_0[12]; char m_strPortion_0[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_0[12]; char m_strAvgAmp_0[12]; char m_strFFTVar_0[12]; @@ -269,7 +272,7 @@ char m_strAvgGray_1[12]; char m_strPortion_1[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_1[12]; char m_strAvgAmp_1[12]; char m_strFFTVar_1[12]; @@ -279,7 +282,7 @@ char m_strAvgGray_2[12]; char m_strPortion_2[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_2[12]; char m_strAvgAmp_2[12]; char m_strFFTVar_2[12]; @@ -289,7 +292,7 @@ char m_strAvgGray_3[12]; char m_strPortion_3[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_3[12]; char m_strAvgAmp_3[12]; char m_strFFTVar_3[12]; @@ -308,17 +311,17 @@ int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - // Filtering占쏙옙 Stack占쏙옙 占쏙옙 + // Filtering된 Stack별 수 int m_nDefectTDCount; int m_nDefectSDCount; int m_nDefectPDCount; int m_nDefectSPCount; - // Gate/Data 占쏙옙 占쏙옙占쏙옙 + // Gate/Data 총 갯수 int m_nGateNum; int m_nDataNum; - // 210129 CJH - Cell Origin 占쏙옙占쏙옙 + // 210129 CJH - Cell Origin 방향 int m_nCellXDir; int m_nCellYDir; }; @@ -331,10 +334,10 @@ } ////////////////////////////////////////////////////////////////////////// - //占쏙옙占썩서 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] + //여기서 부터 리뷰 영역 [김태현 2019/1/19] ditRaw::ReviewPlanType m_nPlanType ; int m_nResultCode; //0:None, 1:Success - int m_nShotIndex; //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] int m_nModuleIndex; int m_nMagnificIndex; float m_fManification; @@ -343,15 +346,15 @@ char m_strRevImagePath[256]; ////////////////////////////////////////////////////////////////////////// - // Measure 占쏙옙占쏙옙 + // 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占쏙옙占쏙옙 + // WSI영역 int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 占쌉몌옙 / 占쏙옙占쏙옙 + 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]; @@ -359,14 +362,14 @@ int m_nWsi_pReflowResultData[8]; double m_dWsi_DamDistance; - double m_dWsiMmMotorX; // WSI 占쏙옙占쏙옙 占쏙옙표 20180223 HJH + double m_dWsiMmMotorX; // WSI 모터 좌표 20180223 HJH double m_dWsiMmMotorY; - float m_fWsiManification; // WSI 占쏙옙占쏙옙 + float m_fWsiManification; // WSI 배율 ////////////////////////////////////////////////////////////////////////// - // Reflow 占쏙옙占쏙옙 + // 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 + 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; @@ -382,108 +385,108 @@ short m_nDefectID; short m_nCameraID; short m_nScanIdx; - //short m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 - int m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 201207 CJH - 占쌘몌옙 占쏙옙 占쏙옙침. int占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //short m_nDefectIdx; // 카메라에서의 결함 인덱스 + int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - int m_nPixelConv; // pixel 占쏙옙占쏙옙 占쏙옙표 - int m_nPixelScan; // pixel 占쏙옙占쏙옙 占쏙옙표 + 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_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 - short m_nLevelSrcMax; // 占쏙옙占쏙옙 占쏙옙占� Max -----------------------------SX - short m_nLevelSrcAvg; // 占쏙옙占쏙옙 占쏙옙占� Avg -----------------------------SA - short m_nLevelRefMin; // 占쏟교댐옙占� 占쏙옙占� Min -------------------------RN - short m_nLevelRefMax; // 占쏟교댐옙占� 占쏙옙占� Max -------------------------RX - short m_nLevelRefAvg; // 占쏟교댐옙占� 占쏙옙占� Avg -------------------------RA - short m_nLevelDiffMin; // 占쏙옙占쏙옙 Min ---------------------------------DN - short m_nLevelDiffMax; // 占쏙옙占쏙옙 Max ---------------------------------DX - short m_nLevelDiffAvg; // 占쏙옙占쏙옙 Avg ---------------------------------DA + short m_sPixelWidth; // 픽셀단위 결함 너비 + short m_sPixelHeight; // 픽셀단위 결함 높이 + short m_nLevelSrcMin; // 결함 밝기 Min -----------------------------SN + short m_nLevelSrcMax; // 결함 밝기 Max -----------------------------SX + short m_nLevelSrcAvg; // 결함 밝기 Avg -----------------------------SA + short m_nLevelRefMin; // 비교대상 밝기 Min -------------------------RN + short m_nLevelRefMax; // 비교대상 밝기 Max -------------------------RX + short m_nLevelRefAvg; // 비교대상 밝기 Avg -------------------------RA + 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_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 占쏙옙占쏙옙 占싫쇽옙 + 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_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 + //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; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占썹각占쏙옙. + 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 占쏙옙占쏙옙 占싸듸옙占쏙옙 + 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占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) + 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라인(얼라인 보정 후) - int m_nUMShotX; // 占쏙옙 占쏙옙占쏙옙 X占쏙옙표 - int m_nUMShotY; // 占쏙옙 占쏙옙占쏙옙 Y占쏙옙표 - short m_nMaskDefectIdx; // 占쏙옙 Glass占쏙옙占쏙옙 占쌩견듸옙 占쏙옙占쏙옙크占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙. - short m_nShotIdx; // 占쎈광占쏙옙 占쏙옙호 - short m_nMatchShotCount; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙占쏙옙占쏙옙 占쏙옙. - short m_nMatchMaxSize; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙 占쏙옙占쏙옙 큰 占쏙옙占쏙옙占쏙옙 크占쏙옙. + 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_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占쏙옙 占쏙옙占쏙옙占싹댐옙 占싸듸옙占쏙옙. + BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. + short m_nStackStepCount; // Stack 수 + short m_nStackColorIdx; // Color를 선택하는 인덱스. //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 占쌍댐옙 占쏙옙占쏙옙占쏙옙 60bytes - char m_strUnitID[16]; // 占쏙옙占쌍억옙占싱듸옙 + 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; // 占쏙옙占쏙옙 占쏙옙占쏙옙 + 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_nDefectMerge; // 현재 디펙의 머지 여부 int m_nPixelSizeOrigin; int m_nScratchRatio; - int m_nDensity; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻듸옙 [2017.8.2 bhs] + int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] char m_strDefectName[16]; char m_strDefectType[16]; @@ -491,16 +494,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) + 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처占쏙옙 + short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? + int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - BOOL m_bShrinked; //210323 CJH - Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 char m_strAoiImagePath[255]; char m_strReviewImagePath[255]; @@ -511,7 +514,6 @@ int m_nAlignRectRight; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] _grmDefectReviewData m_ReviewDefect; }; @@ -556,32 +558,35 @@ struct _grmDitMemInfo { - //占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //공유 메모리 생성할 공간 결정 [김태현 2018/11/12] size_t m_nGlassRawDataSize; int m_nGlassMaxDataNum; int m_nBlockMaxDataNum; int m_nCellMaxDataNum; int m_nDefectMaxDataNum; int m_nStackMaxDataNum; + int m_nRawMergeMaxDataNum; - //Char 占쏙옙占쏙옙 占쌘료가 占쌍댐옙 占쏙옙占쏙옙 占쏙옙치 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] int m_nGlassDataPoint; int m_nBlockDataPoint; int m_nCellDataPoint; int m_nDefectDataPoint; int m_nStackDataPoint; + int m_nRawMergeDataPoint; int m_nSizeOfGlassData; int m_nSizeOfBlockData; int m_nSizeOfCellData; int m_nSizeOfDefectData; int m_nSizeOfStackData; + int m_nSizeOfRawMergeData; }; struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand { size_t m_nGlassLoadingCount; - emAOIProcStep m_ClientProcStep; //AOI, Review占쏙옙 占쏙옙占쏙옙 占쏙옙占� - emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)占쏙옙 처占쏙옙 占싹뤄옙 占쏙옙 占쏙옙占� + emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 + emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 }; class CgrmGlassRawData @@ -668,7 +673,7 @@ { if(pInfo == NULL || pData == NULL) return FALSE; - if(1) //new type //占쌨몌옙 占쏙옙 占쏙옙占쏙옙 크占썩에 占쏙옙占쏙옙占쏙옙占� + if(1) //new type //메모리 총 공간 크기에 상관없이 { //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp index 85f4cab..e88e79b 100644 --- a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp +++ b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp @@ -41,7 +41,8 @@ || sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData - || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData) + || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData + || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData) { return FALSE; } @@ -51,7 +52,8 @@ m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum; m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum; m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum; - + m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum; + m_pGlassRawInfo->m_nGlassRawDataSize; { int nDataNum = 0; @@ -71,6 +73,9 @@ m_pGlassRawInfo->m_nStackDataPoint = nDataNum; nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum; + m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum; + nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum; + m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum; } @@ -125,6 +130,7 @@ m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData); m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData); m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData); + m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData); int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4; } @@ -178,6 +184,7 @@ m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; return TRUE; } diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.h b/ReviewHistory/ReveiwHistory/DitGlassRawServer.h index cda09f0..a3dc3f5 100644 --- a/ReviewHistory/ReveiwHistory/DitGlassRawServer.h +++ b/ReviewHistory/ReveiwHistory/DitGlassRawServer.h @@ -18,6 +18,7 @@ _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; }; + _grmDefectData* GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; }; _grmDitGlassRawInfo* GetGlassRawInfo(){return m_pGlassRawInfo;}; @@ -31,7 +32,7 @@ _grmCellData* m_pCellData; _grmDefectData* m_pDefectData; _grmDefectData* m_pStackData; - + _grmDefectData* m_pRawMergeData; protected: HANDLE m_hMapBasicInfo; diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h index e84fb29..e5f7a55 100644 --- a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h +++ b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h @@ -8,6 +8,7 @@ #define RAWMESSENGER_MAXCAMNUM 30 #define RAWMESSENGER_MAXSCANNUM 20 +#define RAWMESSENGER_MAXHLINUM 8 #define MAX_ZONE_NUM 16 @@ -47,7 +48,7 @@ memset(this, 0, sizeof(_grmGlassData)); } - //Glass 占쏙옙占쏙옙 + //Glass 정보 char m_strFileName[64]; char m_strPath[256]; @@ -56,12 +57,12 @@ 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_nScanCoordinateY; //여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은) int m_nGlassSizeWidth; int m_nGlassSizeHeight; - //占쏙옙占쏙옙占쏙옙占쏙옙 + //설비정보 char m_strLine[32]; char m_strEquipType[32]; char m_strEquipID[32]; @@ -74,7 +75,7 @@ CTime m_tmReviewLoading; CTime m_tmReviewEnd; - //占썩본 占쏙옙占쏙옙占쏙옙占쏙옙 + //기본 물류정보 char m_strGlassID[32]; //Glass ID char m_strPPID[32]; char m_strEPPID[32]; @@ -91,7 +92,7 @@ char m_strVCRGlassID[32]; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -126,14 +127,14 @@ int m_nDefectNumStackSP; - //카占쌨띰옙/占쏙옙캔 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //카메라/스캔 정보 [김태현 2018/12/5] short m_nCameraNum; short m_nScanNum; - unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; + 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] + //얼라인 정보 um[김태현 2018/12/10] double m_nAlignCcdTheta; double m_nAlignCcdShitftX; double m_nAlignCcdShitftY; @@ -147,7 +148,7 @@ char m_strAlignSecond[64]; // char m_strAlignPath[256]; - //CSOT占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //CSOT용 물류 정보 [김태현 2018/12/5] char m_strCassetteSequenceNo[16]; char m_strOwnerCode[16]; //2. OWNER_CODE char m_strOwnerType[16]; //3. OWNER_TYPE @@ -162,7 +163,7 @@ char m_strGroupID[16]; //14.GROUP_ID char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG - // CPRJ占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // CPRJ용 물류 정보 char m_strProdType[3]; char m_strBatchID[13]; char m_strPairHPanelID[13]; @@ -188,17 +189,19 @@ BYTE m_nGlassDataBitSignal[4]; bool m_bJob_end; - //201217 CJH - 占쏙옙占쏙옙 Defect Review 占쏙옙占쏙옙 + //201217 CJH - 찍은 Defect Review 개수 int m_nReviewNum; - //201221 CJH - 占식쏙옙占쏙옙 Stack 占쏙옙占� + //201221 CJH - 파싱한 Stack 결과 int m_nStackNum; BOOL m_bStackRead; - //210203 CJH - CutOff 占쏙옙占� 占쏙옙占쏙옙 占쏙옙 + int m_nRawMergeNum; + BOOL m_bRawMergeRead; + //210203 CJH - CutOff 대상 결함 수 int m_nCutOffDefectNum; - //210323 CJH - Server/Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + //210323 CJH - Server/Frame Shrink 정보 추가 char m_strShrinked[6]; - //210326 CJH - RAW 占쌉뤄옙 Defect 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙肉⑼옙占� + //210326 CJH - RAW 입력 Defect 수량 상한 사용여부 BOOL m_bRawCutoff; }; @@ -222,7 +225,7 @@ } int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; int m_nCellID; //1. PANEL_ID - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? + short m_nModelIdx; // 몇 번째 모델인가? char m_strCellName[32]; int m_rectCellLeft; @@ -235,7 +238,7 @@ int m_nJudgeGlade; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -259,7 +262,7 @@ char m_strProImage[32]; char m_strAvgGray_0[12]; char m_strPortion_0[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_0[12]; char m_strAvgAmp_0[12]; char m_strFFTVar_0[12]; @@ -269,7 +272,7 @@ char m_strAvgGray_1[12]; char m_strPortion_1[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_1[12]; char m_strAvgAmp_1[12]; char m_strFFTVar_1[12]; @@ -279,7 +282,7 @@ char m_strAvgGray_2[12]; char m_strPortion_2[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_2[12]; char m_strAvgAmp_2[12]; char m_strFFTVar_2[12]; @@ -289,7 +292,7 @@ char m_strAvgGray_3[12]; char m_strPortion_3[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_3[12]; char m_strAvgAmp_3[12]; char m_strFFTVar_3[12]; @@ -308,17 +311,17 @@ int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - // Filtering占쏙옙 Stack占쏙옙 占쏙옙 + // Filtering된 Stack별 수 int m_nDefectTDCount; int m_nDefectSDCount; int m_nDefectPDCount; int m_nDefectSPCount; - // Gate/Data 占쏙옙 占쏙옙占쏙옙 + // Gate/Data 총 갯수 int m_nGateNum; int m_nDataNum; - // 210129 CJH - Cell Origin 占쏙옙占쏙옙 + // 210129 CJH - Cell Origin 방향 int m_nCellXDir; int m_nCellYDir; }; @@ -331,10 +334,10 @@ } ////////////////////////////////////////////////////////////////////////// - //占쏙옙占썩서 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] + //여기서 부터 리뷰 영역 [김태현 2019/1/19] ditRaw::ReviewPlanType m_nPlanType ; int m_nResultCode; //0:None, 1:Success - int m_nShotIndex; //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] int m_nModuleIndex; int m_nMagnificIndex; float m_fManification; @@ -343,15 +346,15 @@ char m_strRevImagePath[256]; ////////////////////////////////////////////////////////////////////////// - // Measure 占쏙옙占쏙옙 + // 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占쏙옙占쏙옙 + // WSI영역 int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 占쌉몌옙 / 占쏙옙占쏙옙 + 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]; @@ -359,14 +362,14 @@ int m_nWsi_pReflowResultData[8]; double m_dWsi_DamDistance; - double m_dWsiMmMotorX; // WSI 占쏙옙占쏙옙 占쏙옙표 20180223 HJH + double m_dWsiMmMotorX; // WSI 모터 좌표 20180223 HJH double m_dWsiMmMotorY; - float m_fWsiManification; // WSI 占쏙옙占쏙옙 + float m_fWsiManification; // WSI 배율 ////////////////////////////////////////////////////////////////////////// - // Reflow 占쏙옙占쏙옙 + // 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 + 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; @@ -382,108 +385,108 @@ short m_nDefectID; short m_nCameraID; short m_nScanIdx; - //short m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 - int m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 201207 CJH - 占쌘몌옙 占쏙옙 占쏙옙침. int占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //short m_nDefectIdx; // 카메라에서의 결함 인덱스 + int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - int m_nPixelConv; // pixel 占쏙옙占쏙옙 占쏙옙표 - int m_nPixelScan; // pixel 占쏙옙占쏙옙 占쏙옙표 + 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_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 - short m_nLevelSrcMax; // 占쏙옙占쏙옙 占쏙옙占� Max -----------------------------SX - short m_nLevelSrcAvg; // 占쏙옙占쏙옙 占쏙옙占� Avg -----------------------------SA - short m_nLevelRefMin; // 占쏟교댐옙占� 占쏙옙占� Min -------------------------RN - short m_nLevelRefMax; // 占쏟교댐옙占� 占쏙옙占� Max -------------------------RX - short m_nLevelRefAvg; // 占쏟교댐옙占� 占쏙옙占� Avg -------------------------RA - short m_nLevelDiffMin; // 占쏙옙占쏙옙 Min ---------------------------------DN - short m_nLevelDiffMax; // 占쏙옙占쏙옙 Max ---------------------------------DX - short m_nLevelDiffAvg; // 占쏙옙占쏙옙 Avg ---------------------------------DA + short m_sPixelWidth; // 픽셀단위 결함 너비 + short m_sPixelHeight; // 픽셀단위 결함 높이 + short m_nLevelSrcMin; // 결함 밝기 Min -----------------------------SN + short m_nLevelSrcMax; // 결함 밝기 Max -----------------------------SX + short m_nLevelSrcAvg; // 결함 밝기 Avg -----------------------------SA + short m_nLevelRefMin; // 비교대상 밝기 Min -------------------------RN + short m_nLevelRefMax; // 비교대상 밝기 Max -------------------------RX + short m_nLevelRefAvg; // 비교대상 밝기 Avg -------------------------RA + 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_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 占쏙옙占쏙옙 占싫쇽옙 + 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_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 + //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; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占썹각占쏙옙. + 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 占쏙옙占쏙옙 占싸듸옙占쏙옙 + 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占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) + 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라인(얼라인 보정 후) - int m_nUMShotX; // 占쏙옙 占쏙옙占쏙옙 X占쏙옙표 - int m_nUMShotY; // 占쏙옙 占쏙옙占쏙옙 Y占쏙옙표 - short m_nMaskDefectIdx; // 占쏙옙 Glass占쏙옙占쏙옙 占쌩견듸옙 占쏙옙占쏙옙크占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙. - short m_nShotIdx; // 占쎈광占쏙옙 占쏙옙호 - short m_nMatchShotCount; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙占쏙옙占쏙옙 占쏙옙. - short m_nMatchMaxSize; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙 占쏙옙占쏙옙 큰 占쏙옙占쏙옙占쏙옙 크占쏙옙. + 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_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占쏙옙 占쏙옙占쏙옙占싹댐옙 占싸듸옙占쏙옙. + BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. + short m_nStackStepCount; // Stack 수 + short m_nStackColorIdx; // Color를 선택하는 인덱스. //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 占쌍댐옙 占쏙옙占쏙옙占쏙옙 60bytes - char m_strUnitID[16]; // 占쏙옙占쌍억옙占싱듸옙 + 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; // 占쏙옙占쏙옙 占쏙옙占쏙옙 + 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_nDefectMerge; // 현재 디펙의 머지 여부 int m_nPixelSizeOrigin; int m_nScratchRatio; - int m_nDensity; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻듸옙 [2017.8.2 bhs] + int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] char m_strDefectName[16]; char m_strDefectType[16]; @@ -491,16 +494,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) + 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처占쏙옙 + short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? + int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - BOOL m_bShrinked; //210323 CJH - Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 char m_strAoiImagePath[255]; char m_strReviewImagePath[255]; @@ -511,7 +514,6 @@ int m_nAlignRectRight; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] _grmDefectReviewData m_ReviewDefect; }; @@ -556,32 +558,35 @@ struct _grmDitMemInfo { - //占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //공유 메모리 생성할 공간 결정 [김태현 2018/11/12] size_t m_nGlassRawDataSize; int m_nGlassMaxDataNum; int m_nBlockMaxDataNum; int m_nCellMaxDataNum; int m_nDefectMaxDataNum; int m_nStackMaxDataNum; + int m_nRawMergeMaxDataNum; - //Char 占쏙옙占쏙옙 占쌘료가 占쌍댐옙 占쏙옙占쏙옙 占쏙옙치 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] int m_nGlassDataPoint; int m_nBlockDataPoint; int m_nCellDataPoint; int m_nDefectDataPoint; int m_nStackDataPoint; + int m_nRawMergeDataPoint; int m_nSizeOfGlassData; int m_nSizeOfBlockData; int m_nSizeOfCellData; int m_nSizeOfDefectData; int m_nSizeOfStackData; + int m_nSizeOfRawMergeData; }; struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand { size_t m_nGlassLoadingCount; - emAOIProcStep m_ClientProcStep; //AOI, Review占쏙옙 占쏙옙占쏙옙 占쏙옙占� - emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)占쏙옙 처占쏙옙 占싹뤄옙 占쏙옙 占쏙옙占� + emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 + emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 }; class CgrmGlassRawData @@ -668,7 +673,7 @@ { if(pInfo == NULL || pData == NULL) return FALSE; - if(1) //new type //占쌨몌옙 占쏙옙 占쏙옙占쏙옙 크占썩에 占쏙옙占쏙옙占쏙옙占� + if(1) //new type //메모리 총 공간 크기에 상관없이 { //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; diff --git a/ReviewHistory/bin/Config/PathSetting.ini b/ReviewHistory/bin/Config/PathSetting.ini index 3398cde..f334552 100644 --- a/ReviewHistory/bin/Config/PathSetting.ini +++ b/ReviewHistory/bin/Config/PathSetting.ini @@ -1,5 +1,5 @@ [Path] Align=D:\ResultData\Align\ Bin=D:\DIT_ResultData\RawBin\ -Inspector=D:\Image\Defect +Inspector=\\126.100.100.1\d\Image\Defect Review=D:\ResultData\UploadImage\ diff --git a/ReviewHistory/bin/ReviewHistroy.exe b/ReviewHistory/bin/ReviewHistroy.exe index 2ad1974..4764ff5 100644 --- a/ReviewHistory/bin/ReviewHistroy.exe +++ b/ReviewHistory/bin/ReviewHistroy.exe Binary files differ diff --git a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp index e518d50..de5f5ca 100644 --- a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp +++ b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp @@ -77,7 +77,7 @@ ProcessFlatness(); Sleep(1000); - if (ProcessDiagnosisJudge() == FALSE) { + if (ProcessDiagnosisJudge(nProcessMode) == FALSE) { strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL")); m_pDP2P->IDP2P_DisplayMessage(0, strMessage); } @@ -97,7 +97,7 @@ ProcessWsi(); Sleep(1000); - if (ProcessDiagnosisJudge() == FALSE) { + if (ProcessDiagnosisJudge(nProcessMode) == FALSE) { strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL")); m_pDP2P->IDP2P_DisplayMessage(0, strMessage); } @@ -111,7 +111,7 @@ m_pManager->m_bProcessAll = false; ProcessSquareness(); Sleep(1000); - if (ProcessDiagnosisJudge() == FALSE) { + if (ProcessDiagnosisJudge(nProcessMode) == FALSE) { strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL")); m_pDP2P->IDP2P_DisplayMessage(0, strMessage); } @@ -121,7 +121,7 @@ m_pManager->m_bProcessAll = false; ProcessFlatness(); Sleep(1000); - if (ProcessDiagnosisJudge() == FALSE) { + if (ProcessDiagnosisJudge(nProcessMode) == FALSE) { strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL")); m_pDP2P->IDP2P_DisplayMessage(0, strMessage); } @@ -171,7 +171,7 @@ //Sleep(2000); Sleep(1000); - if (ProcessDiagnosisJudge() == FALSE) { + if (ProcessDiagnosisJudge(DiagnosisMode_All) == FALSE) { strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL")); m_pDP2P->IDP2P_DisplayMessage(0, strMessage); } @@ -479,7 +479,7 @@ { //#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START //if (10000 <= GetTickCount() - stTime) - if (1000 <= GetTickCount() - stTime) + if (11000 <= GetTickCount() - stTime) //#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END { break; @@ -601,33 +601,33 @@ Sleep(500); } - if (nIdx == 0) - { - pResultPoint[nIdx].dPosX = 657.425 - ; - pResultPoint[nIdx].dPosY = 540.14 - ; - } - else if (nIdx == 1) - { - pResultPoint[nIdx].dPosX = 657.425 - ; - pResultPoint[nIdx].dPosY = 2278.636 - ; - } - else if (nIdx == 2) - { - pResultPoint[nIdx].dPosX = 2096.944 - ; - pResultPoint[nIdx].dPosY = 540.141 - ; - } - else if (nIdx == 3) - { - pResultPoint[nIdx].dPosX = 2096.944 - ; - pResultPoint[nIdx].dPosY = 2278.636; - } +// if (nIdx == 0) +// { +// pResultPoint[nIdx].dPosX = 657.425 +// ; +// pResultPoint[nIdx].dPosY = 540.14 +// ; +// } +// else if (nIdx == 1) +// { +// pResultPoint[nIdx].dPosX = 657.425 +// ; +// pResultPoint[nIdx].dPosY = 2278.636 +// ; +// } +// else if (nIdx == 2) +// { +// pResultPoint[nIdx].dPosX = 2096.944 +// ; +// pResultPoint[nIdx].dPosY = 540.141 +// ; +// } +// else if (nIdx == 3) +// { +// pResultPoint[nIdx].dPosX = 2096.944 +// ; +// pResultPoint[nIdx].dPosY = 2278.636; +// } //1. 紐⑦꽣瑜� �씠�룞 @@ -735,7 +735,7 @@ return TRUE; } -int CDiagnosisProcessor::ProcessDiagnosisJudge() +int CDiagnosisProcessor::ProcessDiagnosisJudge(int nMode) { for (int i = 0; i < 2; i++) { @@ -760,22 +760,28 @@ } CString strMessage = _T(""); - - double dDate = (90 - pProcessResult->GetGantryDegree()); - if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 吏곴컖�룄�뿉�꽌 �굹�삩 Dgree 媛믪씠 �꽕�젙�븳 Judge 媛믩낫�떎 �겕嫄곕굹 媛숈쓣寃쎌슦 + if (nMode == DiagnosisMode_All || nMode == DiagnosisMode_Review || nMode == DiagnosisMode_Squareness) { + double dDate = (90 - pProcessResult->GetGantryDegree()); + if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 吏곴컖�룄�뿉�꽌 �굹�삩 Dgree 媛믪씠 �꽕�젙�븳 Judge 媛믩낫�떎 �겕嫄곕굹 媛숈쓣寃쎌슦 + { - m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮 - strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree()); - m_pDP2P->IDP2P_DisplayMessage(0, strMessage); + m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮 + strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree()); + m_pDP2P->IDP2P_DisplayMessage(0, strMessage); + } } - if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI �몴以��렪李� 鍮꾧탳 + if (nMode == DiagnosisMode_All || nMode == DiagnosisMode_Wsi) { - m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮 - strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma()); - m_pDP2P->IDP2P_DisplayMessage(0, strMessage); + if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI �몴以��렪李� 鍮꾧탳 + { + m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮 + strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma()); + m_pDP2P->IDP2P_DisplayMessage(0, strMessage); + } } + } //#3407 KYH �옄媛�吏꾨떒 Judge �뙋�젙 諛� �븣�엺 諛쒖깮 湲곕뒫 ADD END diff --git a/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp b/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp index 98841f2..914ff08 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp +++ b/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp @@ -105,6 +105,7 @@ m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint]; return TRUE; } @@ -139,7 +140,7 @@ if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//占쏙옙占쏙옙 占쏙옙占쌕는곤옙占쏙옙 占쏙옙큘占쏙옙 占쏙옙占쌜곤옙 占싼뱄옙占쏙옙 占쏙옙占쌀다는곤옙!! [占쏙옙占쏙옙占쏙옙 2018/11/12] { - m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12] + m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占?占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12] } m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd; @@ -171,6 +172,7 @@ if(isConnect() == FALSE) return FALSE; m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading; m_pGlassData->m_bStackRead = FALSE; + m_pGlassData->m_bRawMergeRead = FALSE; return SetCommand(grcSequenceGlassLoading); } diff --git a/ReviewSystem/ReviewSystem/DitGlassRawClient.h b/ReviewSystem/ReviewSystem/DitGlassRawClient.h index a3ce795..3ad927e 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawClient.h +++ b/ReviewSystem/ReviewSystem/DitGlassRawClient.h @@ -56,6 +56,7 @@ _grmCellData* m_pCellData; _grmDefectData* m_pDefectData; _grmDefectData* m_pStackData; + _grmDefectData* m_pRawMergeData; protected: HANDLE m_hMapBasicInfo; diff --git a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h index e84fb29..e5f7a55 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h +++ b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h @@ -8,6 +8,7 @@ #define RAWMESSENGER_MAXCAMNUM 30 #define RAWMESSENGER_MAXSCANNUM 20 +#define RAWMESSENGER_MAXHLINUM 8 #define MAX_ZONE_NUM 16 @@ -47,7 +48,7 @@ memset(this, 0, sizeof(_grmGlassData)); } - //Glass 占쏙옙占쏙옙 + //Glass 정보 char m_strFileName[64]; char m_strPath[256]; @@ -56,12 +57,12 @@ 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_nScanCoordinateY; //여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은) int m_nGlassSizeWidth; int m_nGlassSizeHeight; - //占쏙옙占쏙옙占쏙옙占쏙옙 + //설비정보 char m_strLine[32]; char m_strEquipType[32]; char m_strEquipID[32]; @@ -74,7 +75,7 @@ CTime m_tmReviewLoading; CTime m_tmReviewEnd; - //占썩본 占쏙옙占쏙옙占쏙옙占쏙옙 + //기본 물류정보 char m_strGlassID[32]; //Glass ID char m_strPPID[32]; char m_strEPPID[32]; @@ -91,7 +92,7 @@ char m_strVCRGlassID[32]; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -126,14 +127,14 @@ int m_nDefectNumStackSP; - //카占쌨띰옙/占쏙옙캔 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //카메라/스캔 정보 [김태현 2018/12/5] short m_nCameraNum; short m_nScanNum; - unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; + 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] + //얼라인 정보 um[김태현 2018/12/10] double m_nAlignCcdTheta; double m_nAlignCcdShitftX; double m_nAlignCcdShitftY; @@ -147,7 +148,7 @@ char m_strAlignSecond[64]; // char m_strAlignPath[256]; - //CSOT占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //CSOT용 물류 정보 [김태현 2018/12/5] char m_strCassetteSequenceNo[16]; char m_strOwnerCode[16]; //2. OWNER_CODE char m_strOwnerType[16]; //3. OWNER_TYPE @@ -162,7 +163,7 @@ char m_strGroupID[16]; //14.GROUP_ID char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG - // CPRJ占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // CPRJ용 물류 정보 char m_strProdType[3]; char m_strBatchID[13]; char m_strPairHPanelID[13]; @@ -188,17 +189,19 @@ BYTE m_nGlassDataBitSignal[4]; bool m_bJob_end; - //201217 CJH - 占쏙옙占쏙옙 Defect Review 占쏙옙占쏙옙 + //201217 CJH - 찍은 Defect Review 개수 int m_nReviewNum; - //201221 CJH - 占식쏙옙占쏙옙 Stack 占쏙옙占� + //201221 CJH - 파싱한 Stack 결과 int m_nStackNum; BOOL m_bStackRead; - //210203 CJH - CutOff 占쏙옙占� 占쏙옙占쏙옙 占쏙옙 + int m_nRawMergeNum; + BOOL m_bRawMergeRead; + //210203 CJH - CutOff 대상 결함 수 int m_nCutOffDefectNum; - //210323 CJH - Server/Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + //210323 CJH - Server/Frame Shrink 정보 추가 char m_strShrinked[6]; - //210326 CJH - RAW 占쌉뤄옙 Defect 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙肉⑼옙占� + //210326 CJH - RAW 입력 Defect 수량 상한 사용여부 BOOL m_bRawCutoff; }; @@ -222,7 +225,7 @@ } int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; int m_nCellID; //1. PANEL_ID - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? + short m_nModelIdx; // 몇 번째 모델인가? char m_strCellName[32]; int m_rectCellLeft; @@ -235,7 +238,7 @@ int m_nJudgeGlade; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -259,7 +262,7 @@ char m_strProImage[32]; char m_strAvgGray_0[12]; char m_strPortion_0[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_0[12]; char m_strAvgAmp_0[12]; char m_strFFTVar_0[12]; @@ -269,7 +272,7 @@ char m_strAvgGray_1[12]; char m_strPortion_1[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_1[12]; char m_strAvgAmp_1[12]; char m_strFFTVar_1[12]; @@ -279,7 +282,7 @@ char m_strAvgGray_2[12]; char m_strPortion_2[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_2[12]; char m_strAvgAmp_2[12]; char m_strFFTVar_2[12]; @@ -289,7 +292,7 @@ char m_strAvgGray_3[12]; char m_strPortion_3[12]; - //kyh Mura Data 占쌩곤옙 0622 + //kyh Mura Data 추가 0622 char m_strCorner_Gray_3[12]; char m_strAvgAmp_3[12]; char m_strFFTVar_3[12]; @@ -308,17 +311,17 @@ int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - // Filtering占쏙옙 Stack占쏙옙 占쏙옙 + // Filtering된 Stack별 수 int m_nDefectTDCount; int m_nDefectSDCount; int m_nDefectPDCount; int m_nDefectSPCount; - // Gate/Data 占쏙옙 占쏙옙占쏙옙 + // Gate/Data 총 갯수 int m_nGateNum; int m_nDataNum; - // 210129 CJH - Cell Origin 占쏙옙占쏙옙 + // 210129 CJH - Cell Origin 방향 int m_nCellXDir; int m_nCellYDir; }; @@ -331,10 +334,10 @@ } ////////////////////////////////////////////////////////////////////////// - //占쏙옙占썩서 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] + //여기서 부터 리뷰 영역 [김태현 2019/1/19] ditRaw::ReviewPlanType m_nPlanType ; int m_nResultCode; //0:None, 1:Success - int m_nShotIndex; //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] int m_nModuleIndex; int m_nMagnificIndex; float m_fManification; @@ -343,15 +346,15 @@ char m_strRevImagePath[256]; ////////////////////////////////////////////////////////////////////////// - // Measure 占쏙옙占쏙옙 + // 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占쏙옙占쏙옙 + // WSI영역 int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 占쌉몌옙 / 占쏙옙占쏙옙 + 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]; @@ -359,14 +362,14 @@ int m_nWsi_pReflowResultData[8]; double m_dWsi_DamDistance; - double m_dWsiMmMotorX; // WSI 占쏙옙占쏙옙 占쏙옙표 20180223 HJH + double m_dWsiMmMotorX; // WSI 모터 좌표 20180223 HJH double m_dWsiMmMotorY; - float m_fWsiManification; // WSI 占쏙옙占쏙옙 + float m_fWsiManification; // WSI 배율 ////////////////////////////////////////////////////////////////////////// - // Reflow 占쏙옙占쏙옙 + // 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 + 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; @@ -382,108 +385,108 @@ short m_nDefectID; short m_nCameraID; short m_nScanIdx; - //short m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 - int m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 201207 CJH - 占쌘몌옙 占쏙옙 占쏙옙침. int占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //short m_nDefectIdx; // 카메라에서의 결함 인덱스 + int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - int m_nPixelConv; // pixel 占쏙옙占쏙옙 占쏙옙표 - int m_nPixelScan; // pixel 占쏙옙占쏙옙 占쏙옙표 + 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_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 - short m_nLevelSrcMax; // 占쏙옙占쏙옙 占쏙옙占� Max -----------------------------SX - short m_nLevelSrcAvg; // 占쏙옙占쏙옙 占쏙옙占� Avg -----------------------------SA - short m_nLevelRefMin; // 占쏟교댐옙占� 占쏙옙占� Min -------------------------RN - short m_nLevelRefMax; // 占쏟교댐옙占� 占쏙옙占� Max -------------------------RX - short m_nLevelRefAvg; // 占쏟교댐옙占� 占쏙옙占� Avg -------------------------RA - short m_nLevelDiffMin; // 占쏙옙占쏙옙 Min ---------------------------------DN - short m_nLevelDiffMax; // 占쏙옙占쏙옙 Max ---------------------------------DX - short m_nLevelDiffAvg; // 占쏙옙占쏙옙 Avg ---------------------------------DA + short m_sPixelWidth; // 픽셀단위 결함 너비 + short m_sPixelHeight; // 픽셀단위 결함 높이 + short m_nLevelSrcMin; // 결함 밝기 Min -----------------------------SN + short m_nLevelSrcMax; // 결함 밝기 Max -----------------------------SX + short m_nLevelSrcAvg; // 결함 밝기 Avg -----------------------------SA + short m_nLevelRefMin; // 비교대상 밝기 Min -------------------------RN + short m_nLevelRefMax; // 비교대상 밝기 Max -------------------------RX + short m_nLevelRefAvg; // 비교대상 밝기 Avg -------------------------RA + 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_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 占쏙옙占쏙옙 占싫쇽옙 + 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_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 + //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; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占썹각占쏙옙. + 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 占쏙옙占쏙옙 占싸듸옙占쏙옙 + 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占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) + 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라인(얼라인 보정 후) - int m_nUMShotX; // 占쏙옙 占쏙옙占쏙옙 X占쏙옙표 - int m_nUMShotY; // 占쏙옙 占쏙옙占쏙옙 Y占쏙옙표 - short m_nMaskDefectIdx; // 占쏙옙 Glass占쏙옙占쏙옙 占쌩견듸옙 占쏙옙占쏙옙크占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙. - short m_nShotIdx; // 占쎈광占쏙옙 占쏙옙호 - short m_nMatchShotCount; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙占쏙옙占쏙옙 占쏙옙. - short m_nMatchMaxSize; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙 占쏙옙占쏙옙 큰 占쏙옙占쏙옙占쏙옙 크占쏙옙. + 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_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占쏙옙 占쏙옙占쏙옙占싹댐옙 占싸듸옙占쏙옙. + BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. + short m_nStackStepCount; // Stack 수 + short m_nStackColorIdx; // Color를 선택하는 인덱스. //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 占쌍댐옙 占쏙옙占쏙옙占쏙옙 60bytes - char m_strUnitID[16]; // 占쏙옙占쌍억옙占싱듸옙 + 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; // 占쏙옙占쏙옙 占쏙옙占쏙옙 + 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_nDefectMerge; // 현재 디펙의 머지 여부 int m_nPixelSizeOrigin; int m_nScratchRatio; - int m_nDensity; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻듸옙 [2017.8.2 bhs] + int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] char m_strDefectName[16]; char m_strDefectType[16]; @@ -491,16 +494,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) + 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처占쏙옙 + short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? + int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - BOOL m_bShrinked; //210323 CJH - Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 char m_strAoiImagePath[255]; char m_strReviewImagePath[255]; @@ -511,7 +514,6 @@ int m_nAlignRectRight; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] _grmDefectReviewData m_ReviewDefect; }; @@ -556,32 +558,35 @@ struct _grmDitMemInfo { - //占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //공유 메모리 생성할 공간 결정 [김태현 2018/11/12] size_t m_nGlassRawDataSize; int m_nGlassMaxDataNum; int m_nBlockMaxDataNum; int m_nCellMaxDataNum; int m_nDefectMaxDataNum; int m_nStackMaxDataNum; + int m_nRawMergeMaxDataNum; - //Char 占쏙옙占쏙옙 占쌘료가 占쌍댐옙 占쏙옙占쏙옙 占쏙옙치 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] int m_nGlassDataPoint; int m_nBlockDataPoint; int m_nCellDataPoint; int m_nDefectDataPoint; int m_nStackDataPoint; + int m_nRawMergeDataPoint; int m_nSizeOfGlassData; int m_nSizeOfBlockData; int m_nSizeOfCellData; int m_nSizeOfDefectData; int m_nSizeOfStackData; + int m_nSizeOfRawMergeData; }; struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand { size_t m_nGlassLoadingCount; - emAOIProcStep m_ClientProcStep; //AOI, Review占쏙옙 占쏙옙占쏙옙 占쏙옙占� - emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)占쏙옙 처占쏙옙 占싹뤄옙 占쏙옙 占쏙옙占� + emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 + emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 }; class CgrmGlassRawData @@ -668,7 +673,7 @@ { if(pInfo == NULL || pData == NULL) return FALSE; - if(1) //new type //占쌨몌옙 占쏙옙 占쏙옙占쏙옙 크占썩에 占쏙옙占쏙옙占쏙옙占� + if(1) //new type //메모리 총 공간 크기에 상관없이 { //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis.cpp b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis.cpp index 8fcb808..5d47ee1 100644 --- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis.cpp +++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis.cpp @@ -70,8 +70,8 @@ m_pDlgWsi->DisableBtSIMULATION(FALSE); break; case 7: - m_pDlgWsi->UpdateWSIResult(0, 0, 0, 0, 0); - m_pDlgWsi->UpdateWSIResult(1, 0, 0, 0, 0); + //m_pDlgWsi->UpdateWSIResult(0, 0, 0, 0, 0); + //m_pDlgWsi->UpdateWSIResult(1, 0, 0, 0, 0); default: break; diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp index 4c08810..2940785 100644 --- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp +++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp @@ -32,26 +32,24 @@ DDX_Control(pDX, IDC_EDIT_WSI_RTB_01, m_ctrlWsiRtb01); DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_btSimulation); DDX_Text(pDX, IDC_EDIT_WSI_FIRST_STANDARD, m_editWSIFirstStandard); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT1, m_editWSIHeight1); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT2, m_editWSIHeight2); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT3, m_editWSIHeight3); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT4, m_editWSIHeight4); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT5, m_editWSIHeight5); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT6, m_editWSIHeight6); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT7, m_editWSIHeight7); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT8, m_editWSIHeight8); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT9, m_editWSIHeight9); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT10, m_editWSIHeight10); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT11, m_editWSIHeight11); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT12, m_editWSIHeight12); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT13, m_editWSIHeight13); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT14, m_editWSIHeight14); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT15, m_editWSIHeight15); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT16, m_editWSIHeight16); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT17, m_editWSIHeight17); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT18, m_editWSIHeight18); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT19, m_editWSIHeight19); - DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT20, m_editWSIHeight20); + DDX_Control(pDX, IDC_LIST_WSI_DIAGNOSIS_RESULT, m_ListWSIResult); +} + +BOOL CDlgSelfDiagnosis_Wsi::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + m_ListWSIResult.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); + m_ListWSIResult.InsertColumn(0, _T("Index"), LVCFMT_CENTER, 70); + m_ListWSIResult.InsertColumn(1, _T("Left Module"), LVCFMT_CENTER, 100); + m_ListWSIResult.InsertColumn(2, _T("Right Module"), LVCFMT_CENTER, 100); + + m_ListWSIResult.SetRedraw(TRUE); + + // TODO: �뿬湲곗뿉 異붽� 珥덇린�솕 �옉�뾽�쓣 異붽��빀�땲�떎. + + return TRUE; // return TRUE unless you set the focus to a control + // �삁�쇅: OCX �냽�꽦 �럹�씠吏��뒗 FALSE瑜� 諛섑솚�빐�빞 �빀�땲�떎. } @@ -67,6 +65,7 @@ void CDlgSelfDiagnosis_Wsi::OnBnClickedButtonSimulation() { + if (m_pDiagnosisManager == NULL) return; //#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START @@ -135,65 +134,21 @@ m_ctrlWsiRtb00.SetWindowTextA(strRTB00); m_ctrlWsiRtb01.SetWindowTextA(strRTB01); - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[0]); - m_editWSIHeight1.SetWindowTextA(strDiagnosisHeight); + for (int i = 0; i < 10; i++) + { + int nRow = i + 1; - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[1]); - m_editWSIHeight2.SetWindowTextA(strDiagnosisHeight); + strDiagnosisHeight.Format(_T("%d"), nRow); + m_ListWSIResult.InsertItem(nRow, strDiagnosisHeight); - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[2]); - m_editWSIHeight3.SetWindowTextA(strDiagnosisHeight); + strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[i]); + m_ListWSIResult.SetItemText(nRow, 1, strDiagnosisHeight); - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[3]); - m_editWSIHeight4.SetWindowTextA(strDiagnosisHeight); + strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[i+10]); + m_ListWSIResult.SetItemText(nRow, 2, strDiagnosisHeight); - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[4]); - m_editWSIHeight5.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[5]); - m_editWSIHeight6.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[6]); - m_editWSIHeight7.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[7]); - m_editWSIHeight8.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[8]); - m_editWSIHeight9.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[9]); - m_editWSIHeight10.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[10]); - m_editWSIHeight11.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[11]); - m_editWSIHeight12.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[12]); - m_editWSIHeight13.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[13]); - m_editWSIHeight14.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[14]); - m_editWSIHeight15.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[15]); - m_editWSIHeight16.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[16]); - m_editWSIHeight17.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[17]); - m_editWSIHeight18.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[18]); - m_editWSIHeight19.SetWindowTextA(strDiagnosisHeight); - - strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[19]); - m_editWSIHeight20.SetWindowTextA(strDiagnosisHeight); + m_ListWSIResult.EnsureVisible(nRow, FALSE); + } } @@ -226,6 +181,7 @@ double nRTB00 = dRbt00; double nRTB01 = dRbt01; + CString strDiagnosisHeight; CString strACC00, strACC01; CString strRTB00, strRTB01; strACC00.Format(_T("%f"),nACC00); @@ -242,6 +198,36 @@ m_ctrlWsiRtb01.SetWindowTextA(strRTB01); } + double dDiagnosisHeightleft[10]; + double dDiagnosisHeightRight[10]; + + for (int i = 0; i < 10; i++) + { + dDiagnosisHeightleft[i] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->GetDiagnosisHeight(i); + } + + for (int i = 0; i < 10; i++) + { + dDiagnosisHeightRight[i] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->GetDiagnosisHeight(i); + } + + m_ListWSIResult.DeleteAllItems(); + + for (int i = 0; i < 10; i++) + { + int nRow = i; + + strDiagnosisHeight.Format(_T("%d"), nRow + 1); + m_ListWSIResult.InsertItem(nRow, strDiagnosisHeight); + + strDiagnosisHeight.Format(_T("%.3f"), dDiagnosisHeightleft[i]); + m_ListWSIResult.SetItemText(nRow, 1, strDiagnosisHeight); + + strDiagnosisHeight.Format(_T("%.3f"), dDiagnosisHeightRight[i]); + m_ListWSIResult.SetItemText(nRow, 2, strDiagnosisHeight); + + m_ListWSIResult.EnsureVisible(nRow, FALSE); + } } @@ -270,3 +256,4 @@ // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. } + diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h index 22a364e..36e9023 100644 --- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h +++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h @@ -18,6 +18,9 @@ protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 吏��썝�엯�땲�떎. + virtual BOOL OnInitDialog(); + + CListCtrl m_ListWSIResult; DECLARE_MESSAGE_MAP() public: @@ -35,24 +38,5 @@ CEdit m_ctrlWsiRtb01; CButton m_btSimulation; double m_editWSIFirstStandard; - CEdit m_editWSIHeight1; - CEdit m_editWSIHeight2; - CEdit m_editWSIHeight3; - CEdit m_editWSIHeight4; - CEdit m_editWSIHeight5; - CEdit m_editWSIHeight6; - CEdit m_editWSIHeight7; - CEdit m_editWSIHeight8; - CEdit m_editWSIHeight9; - CEdit m_editWSIHeight10; - CEdit m_editWSIHeight11; - CEdit m_editWSIHeight12; - CEdit m_editWSIHeight13; - CEdit m_editWSIHeight14; - CEdit m_editWSIHeight15; - CEdit m_editWSIHeight16; - CEdit m_editWSIHeight17; - CEdit m_editWSIHeight18; - CEdit m_editWSIHeight19; - CEdit m_editWSIHeight20; + }; diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp index 313cec6..6b2beb7 100644 --- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp +++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp @@ -124,6 +124,9 @@ m_bIsOffSetOn = 0; m_bIsSimulation = 0; + m_bFirstReviewLeft = 0; + m_bFirstReviewRight = 0; + // cs init InitializeCriticalSection(&m_csReviewResult); InitializeCriticalSection(&m_csReviewSignal); @@ -3379,6 +3382,26 @@ return m_pEdgeRecipeManager; } +BOOL CReviewInterface::IRP2P_GetFirstReviewLeft() +{ + return m_bFirstReviewLeft; +} + +BOOL CReviewInterface::IRP2P_GetFirstReviewRight() +{ + return m_bFirstReviewRight; +} + +void CReviewInterface::IRP2P_SetFirstReviewLeft(BOOL b_Check) +{ + m_bFirstReviewLeft = b_Check; +} + +void CReviewInterface::IRP2P_SetFirstReviewRight(BOOL b_Check) +{ + m_bFirstReviewRight = b_Check; +} + int CReviewInterface::PS2P_GetModuleStatusCount(int nModuleType) { @@ -3798,12 +3821,15 @@ if (m_SequenceProcessor == NULL) return; m_SequenceProcessor->SetWsiType(9); - if (!m_SequenceProcessor->WSIAllReadySignal(1)) + if (nModuleIdx == 0) { - g_pLog->DisplayMessage(_T("[WSI] Send Ready Signal to All WIS Fail")); + if (!m_SequenceProcessor->WSIAllReadySignal(1)) + { + g_pLog->DisplayMessage(_T("[WSI] Send Ready Signal to All WIS Fail")); + return; + } } - else - { + SetCurrentWsiMode(WsiMeasureType_VLSI); CWsiControl* pWsiControl = ISP2P_GetWSIControl(nModuleIdx); @@ -3817,7 +3843,6 @@ pWsiControl->SetWsiStart(1, vectorPosX, vectorPosY, 0); - } } void CReviewInterface::IDP2P_WsiMotorMotionEnd(int nModuleIdx, double dPosX, double dPosY) @@ -8379,6 +8404,26 @@ return m_pDlgHistoryTool; } +BOOL CReviewInterface::ISP2P_GetFirstReviewLeft() +{ + return m_bFirstReviewLeft; +} + +BOOL CReviewInterface::ISP2P_GetFirstReviewRight() +{ + return m_bFirstReviewRight; +} + +void CReviewInterface::ISP2P_SetFirstReviewLeft(BOOL b_Check) +{ + m_bFirstReviewLeft = b_Check; +} + +void CReviewInterface::ISP2P_SetFirstReviewRight(BOOL b_Check) +{ + m_bFirstReviewRight = b_Check; +} + void CReviewInterface::ILCC2P_DisplayMessage( int nIndex, const TCHAR* lpstrFormat, ... ) { diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.h b/ReviewSystem/ReviewSystem/ReviewInterface.h index 0d9175a..8f2d7ce 100644 --- a/ReviewSystem/ReviewSystem/ReviewInterface.h +++ b/ReviewSystem/ReviewSystem/ReviewInterface.h @@ -256,6 +256,13 @@ virtual void IRP2P_CompletePlanIndex(int nReviewStatus, int nPlanIndex); virtual void IRP2P_UpdateReviewProcessStatus(int nReviewStatus, int nPlanIndex=0); virtual CRecipeManager* IRP2P_GetEdgeRecipeManager(); + virtual BOOL IRP2P_GetFirstReviewLeft(); + virtual BOOL IRP2P_GetFirstReviewRight(); + virtual void IRP2P_SetFirstReviewLeft(BOOL b_Check); + virtual void IRP2P_SetFirstReviewRight(BOOL b_Check); + + BOOL m_bFirstReviewLeft; + BOOL m_bFirstReviewRight; virtual BOOL IRP2P_SaveDefectMap(const CString& strPath); @@ -398,6 +405,12 @@ virtual CDlgSelfDiagnosis* ISP2P_GetDlgDiagnosis(); virtual CDlgReviewHistoryTool* ISP2P_GetDlgHistory(); + + virtual BOOL ISP2P_GetFirstReviewLeft(); + virtual BOOL ISP2P_GetFirstReviewRight(); + virtual void ISP2P_SetFirstReviewLeft(BOOL b_Check); + virtual void ISP2P_SetFirstReviewRight(BOOL b_Check); + public: virtual BOOL ISP2P_Motor_CameraGo(int nModuleIndex, double dPosX, double dPosY, int nMoveAxis, BOOL bAutoSelectCamera=FALSE, BOOL bGoEnd=FALSE); diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor.h b/ReviewSystem/ReviewSystem/ReviewProcessor.h index dbfb2ff..4de61ac 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor.h +++ b/ReviewSystem/ReviewSystem/ReviewProcessor.h @@ -76,6 +76,12 @@ virtual void IRP2P_UpdateWSISelfDiagnosisResult(); + virtual BOOL IRP2P_GetFirstReviewLeft() = 0; + virtual BOOL IRP2P_GetFirstReviewRight() = 0; + + virtual void IRP2P_SetFirstReviewLeft(BOOL b_Check) = 0; + virtual void IRP2P_SetFirstReviewRight(BOOL b_Check) = 0; + }; typedef std::vector<CPoint> VectorPoint; diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp index 06fae9b..30d317a 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp @@ -1278,19 +1278,17 @@ } } - if (pReviewResult->nModuleIdx == 0) + if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft()) { m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue; - /* double dAverageGray = 0.0; - if (CCHImageProcess::ImageAverage(pImageData, dAverageGray) == 1) - { - m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dAverageGray; - }*/ - } - else + m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE); + m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue); + } + else if(pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight()) { m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue; - + m_pRP2P->IRP2P_SetFirstReviewRight(FALSE); + m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue); } } } @@ -1311,13 +1309,16 @@ dFocusValue = CalcFocusValue(imageConvert.GetImageBuffer(), imageConvert.GetWidth(), imageConvert.GetHeight()); } - if (pReviewResult->nModuleIdx == 0) + if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft()) { m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue; + m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE); } - else + else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight()) { m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue; + m_pRP2P->IRP2P_SetFirstReviewRight(FALSE); + } } @@ -1424,9 +1425,23 @@ if (imageConvert.GetImageExist()) { dFocusValue = CalcFocusValue(imageConvert.GetImageBuffer(), imageConvert.GetWidth(), imageConvert.GetHeight()); + + if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft()) + { + m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue; + m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE); + m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue); + } + else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight()) + { + m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue; + m_pRP2P->IRP2P_SetFirstReviewRight(FALSE); + m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue); + + } + } - // count defocus CGlassResult* pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); if (pGlassResult) diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.rc b/ReviewSystem/ReviewSystem/ReviewSystem.rc index 0a9c0ae..a565daf 100644 --- a/ReviewSystem/ReviewSystem/ReviewSystem.rc +++ b/ReviewSystem/ReviewSystem/ReviewSystem.rc @@ -687,69 +687,8 @@ EDITTEXT IDC_EDIT_WSI_RTB_01,123,94,40,14,ES_AUTOHSCROLL LTEXT "WSI Standard (um)",IDC_STATIC,32,113,65,10 EDITTEXT IDC_EDIT_WSI_FIRST_STANDARD,97,112,40,15,ES_AUTOHSCROLL - LTEXT "um",IDC_STATIC,267,33,19,12 - LTEXT "WSI Height 1",IDC_STATIC,179,34,43,8 - LTEXT "WSI Height 2",IDC_STATIC,179,48,43,8 - LTEXT "WSI Height 3",IDC_STATIC,179,62,43,8 - LTEXT "WSI Height 4",IDC_STATIC,179,76,43,8 - LTEXT "WSI Height 5",IDC_STATIC,179,90,43,8 - LTEXT "WSI Height 6",IDC_STATIC,179,104,43,8 - LTEXT "WSI Height 7",IDC_STATIC,179,117,43,8 - LTEXT "WSI Height 8",IDC_STATIC,179,132,43,8 - LTEXT "WSI Height 9",IDC_STATIC,179,145,43,8 - LTEXT "WSI Height 10",IDC_STATIC,179,158,47,8 - EDITTEXT IDC_EDIT_WSI_HEIGHT1,227,33,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT2,227,47,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT3,227,61,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT4,226,75,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT5,226,89,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT6,226,103,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT7,226,117,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT8,226,131,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT9,226,145,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT10,226,158,39,12,ES_AUTOHSCROLL - LTEXT "um",IDC_STATIC,148,121,19,12 - LTEXT "um",IDC_STATIC,267,47,19,12 - LTEXT "um",IDC_STATIC,267,61,19,12 - LTEXT "um",IDC_STATIC,267,75,19,12 - LTEXT "um",IDC_STATIC,267,89,19,12 - LTEXT "um",IDC_STATIC,267,103,19,12 - LTEXT "um",IDC_STATIC,267,117,19,12 - LTEXT "um",IDC_STATIC,267,131,19,12 - LTEXT "um",IDC_STATIC,267,145,19,12 - LTEXT "um",IDC_STATIC,267,159,19,12 - LTEXT "um",IDC_STATIC,387,33,19,12 - LTEXT "WSI Height 1",IDC_STATIC,299,34,43,8 - LTEXT "WSI Height 2",IDC_STATIC,299,48,43,8 - LTEXT "WSI Height 3",IDC_STATIC,299,62,43,8 - LTEXT "WSI Height 4",IDC_STATIC,299,76,43,8 - LTEXT "WSI Height 5",IDC_STATIC,299,90,43,8 - LTEXT "WSI Height 6",IDC_STATIC,299,104,43,8 - LTEXT "WSI Height 7",IDC_STATIC,299,117,43,8 - LTEXT "WSI Height 8",IDC_STATIC,299,132,43,8 - LTEXT "WSI Height 9",IDC_STATIC,299,145,43,8 - LTEXT "WSI Height 10",IDC_STATIC,299,158,47,8 - EDITTEXT IDC_EDIT_WSI_HEIGHT11,347,33,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT12,347,47,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT13,347,61,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT14,346,75,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT15,346,89,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT16,346,103,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT17,346,117,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT18,346,131,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT19,346,145,39,12,ES_AUTOHSCROLL - EDITTEXT IDC_EDIT_WSI_HEIGHT20,346,158,39,12,ES_AUTOHSCROLL - LTEXT "um",IDC_STATIC,387,47,19,12 - LTEXT "um",IDC_STATIC,387,61,19,12 - LTEXT "um",IDC_STATIC,387,75,19,12 - LTEXT "um",IDC_STATIC,387,89,19,12 - LTEXT "um",IDC_STATIC,387,103,19,12 - LTEXT "um",IDC_STATIC,387,117,19,12 - LTEXT "um",IDC_STATIC,387,131,19,12 - LTEXT "um",IDC_STATIC,387,145,19,12 - LTEXT "um",IDC_STATIC,387,159,19,12 - GROUPBOX "Left",IDC_STATIC,176,24,105,154 - GROUPBOX "Right",IDC_STATIC,296,24,105,154 + LTEXT "um",IDC_STATIC,141,113,19,12 + CONTROL "",IDC_LIST_WSI_DIAGNOSIS_RESULT,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,182,30,162,187 END IDD_DLG_SELF_DIAGNOSIS_SETTING DIALOGEX 0, 0, 435, 379 diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor.cpp index 3f38f28..0a4610f 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor.cpp +++ b/ReviewSystem/ReviewSystem/SequenceProcessor.cpp @@ -1882,9 +1882,11 @@ if(pWsiControl == NULL) continue ; CRcpAFMRecipeInfo *pRcpWsiAFMInfo = pRsRcpReviewInfo->GetRcpWsiAFMRecipeInfo(nWsiControlIdx); - if(pRcpWsiAFMInfo == NULL) continue ; +// if(pRcpWsiAFMInfo == NULL) continue ; +// +// int nRealMagIndex = GetRealMagnification(nWsiControlIdx, pRcpWsiAFMInfo->m_nZoomIndex); - int nRealMagIndex = GetRealMagnification(nWsiControlIdx, pRcpWsiAFMInfo->m_nZoomIndex); + int nRealMagIndex = 0; //pWsiControl->SetWsiReady(*pGlassResult->GetJobID(),_T("LGDemo"),2, 0); //TEST0716 diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor.h b/ReviewSystem/ReviewSystem/SequenceProcessor.h index 3d8f40f..902ed1b 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor.h +++ b/ReviewSystem/ReviewSystem/SequenceProcessor.h @@ -484,6 +484,13 @@ virtual CDlgSelfDiagnosis* ISP2P_GetDlgDiagnosis() = 0; virtual CDlgReviewHistoryTool* ISP2P_GetDlgHistory() = 0; + virtual BOOL ISP2P_GetFirstReviewLeft() = 0; + virtual BOOL ISP2P_GetFirstReviewRight() = 0; + virtual void ISP2P_SetFirstReviewLeft(BOOL b_Check) = 0; + virtual void ISP2P_SetFirstReviewRight(BOOL b_Check) = 0; + + + virtual BOOL GetOffSetValue(int nModule, int nCam, int nScan, double dGlassXPos, double &dXpos, double &dYpos) = 0; public: diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp index 4c7a1f9..c50b3f2 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp @@ -946,6 +946,9 @@ bFileFind = FALSE; m_pSP2P->ISP2P_GetDiagnosisHistory(); + + m_pSP2P->ISP2P_SetFirstReviewLeft(TRUE); + m_pSP2P->ISP2P_SetFirstReviewRight(TRUE); if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT)) m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!")); diff --git a/ReviewSystem/ReviewSystem/resource.h b/ReviewSystem/ReviewSystem/resource.h index 0ae58b7..4309eef 100644 --- a/ReviewSystem/ReviewSystem/resource.h +++ b/ReviewSystem/ReviewSystem/resource.h @@ -430,6 +430,7 @@ #define IDC_EDIT_WSI_HEIGHT11 1181 #define IDC_EDIT_WSI_HEIGHT12 1182 #define IDC_EDIT_WSI_HEIGHT13 1183 +#define IDC_LIST_WSI_DIAGNOSIS_RESULT 1184 #define ID_INS_HOOK 32772 #define ID_UNINS_HOOK 32773 @@ -439,7 +440,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 381 #define _APS_NEXT_COMMAND_VALUE 32775 -#define _APS_NEXT_CONTROL_VALUE 1181 +#define _APS_NEXT_CONTROL_VALUE 1185 #define _APS_NEXT_SYMED_VALUE 346 #endif #endif diff --git a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h index d2dac1a..7a21ff7 100644 --- a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h +++ b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h @@ -49,7 +49,7 @@ int ProcessFlatness(); int ProcessFlatness_Manual(); int ProcessSimulation(); - int ProcessDiagnosisJudge(); + int ProcessDiagnosisJudge(int nMode); BOOL CalculateSquareness(int nIndex); protected: -- Gitblit v1.9.3