| | |
| | | |
| | | SetSlashText(GLOBAL_DEFINE::emShow, _T(""), RGB(0,0,0)); |
| | | |
| | | //SetSlashText(GLOBAL_DEFINE::emText, _T("Image Save Start"), RGB(0,0,0)); |
| | | |
| | | BOOL bRet = SaveFullImage(strPath, iSide, ptStart, nLength); |
| | | |
| | | SetSlashText(GLOBAL_DEFINE::emText, strPath, RGB(0,0,0)); |
| | |
| | | |
| | | switch(iProceMode) |
| | | { |
| | | case 0: g_pBase->m_eProcessMode = PROC_MODE_SIMULATION_SIDELONG; break; |
| | | case 0: g_pBase->m_eProcessMode = PROC_MODE_SIMULATION_SIDERIP; break; |
| | | case 1: g_pBase->m_eProcessMode = PROC_MODE_SIMULATION_SIDESHORT; break; |
| | | case 2: g_pBase->m_eProcessMode = PROC_MODE_SIMULATION_ALL; break; |
| | | case 2: g_pBase->m_eProcessMode = PROC_MODE_SIMULATION_SIDELONG; break; |
| | | case 3: g_pBase->m_eProcessMode = PROC_MODE_SIMULATION_ALL; break; |
| | | } |
| | | |
| | | AfxBeginThread(ManualInspectProcess,this); |
| | |
| | | |
| | | UINT CMainFrame::ManualInspectProcess(LPVOID pParam) |
| | | { |
| | | CMainFrame *pMain = (CMainFrame *)pParam; |
| | | CMainFrame *pMain = (CMainFrame *)pParam; |
| | | |
| | | pMain->SetInspectionEnd(); |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | DWORD tTime = GetTickCount(); |
| | | int iScan = 0; |
| | | int iScanEnd = 0; |
| | | int iCam = 0; |
| | | double dOneScanTime = pMain->m_GlassRecipe.m_RecieParm.m_dOneScanTime_sec; |
| | | DWORD tTime = GetTickCount(); |
| | | int iScan = 0; |
| | | int iScanEnd = 0; |
| | | int iCam = 0; |
| | | double dOneScanTime = pMain->m_GlassRecipe.m_RecieParm.m_dOneScanTime_sec; |
| | | |
| | | pMain->InitLoadingProcess(); |
| | | pMain->m_GlassData.SetScanStart(TRUE); |
| | |
| | | pMain->ScanStartManual(iCam,iScan, TRUE); |
| | | } |
| | | break; |
| | | case PROC_MODE_SIMULATION_SIDERIP: |
| | | { |
| | | std::vector<DimensionDir> vecDirs = { |
| | | DIMENSION_A_RIP, DIMENSION_B_RIP, DIMENSION_C_RIP, DIMENSION_D_RIP |
| | | }; |
| | | pMain->Simulate2PhaseScanByDirs(vecDirs, 1000); |
| | | } |
| | | break; |
| | | case PROC_MODE_SIMULATION_SIDESHORT: |
| | | { |
| | | pMain->m_GlassData.SetScanStartCount(MAX_CAMERA_COUNT); |
| | | pMain->SendGlassRecipe(); |
| | | for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++) |
| | | { |
| | | pMain->ScanStartGrabManual(iCam,0); |
| | | pMain->ScanStartManual(iCam,0); |
| | | } |
| | | //pMain->m_GlassData.SetScanStartCount(MAX_CAMERA_COUNT); |
| | | //pMain->SendGlassRecipe(); |
| | | //for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++) |
| | | //{ |
| | | // pMain->ScanStartGrabManual(iCam,0); |
| | | // pMain->ScanStartManual(iCam,0); |
| | | //} |
| | | |
| | | std::vector<DimensionDir> vecDirs = { |
| | | DIMENSION_B, DIMENSION_D, DIMENSION_B_DN, DIMENSION_D_DN |
| | | }; |
| | | pMain->Simulate2PhaseScanByDirs(vecDirs, 1000); |
| | | } |
| | | break; |
| | | case PROC_MODE_SIMULATION_SIDELONG: |
| | | { |
| | | pMain->m_GlassData.SetScanStartCount(MAX_CAMERA_COUNT); |
| | | pMain->SendGlassRecipe(); |
| | | for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++) |
| | | { |
| | | pMain->ScanStartGrabManual(iCam,1); |
| | | pMain->ScanStartManual(iCam,1); |
| | | } |
| | | //pMain->m_GlassData.SetScanStartCount(MAX_CAMERA_COUNT); |
| | | //pMain->SendGlassRecipe(); |
| | | //for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++) |
| | | //{ |
| | | // pMain->ScanStartGrabManual(iCam,1); |
| | | // pMain->ScanStartManual(iCam,1); |
| | | //} |
| | | |
| | | std::vector<DimensionDir> vecDirs = { |
| | | DIMENSION_A, DIMENSION_C, DIMENSION_A_DN, DIMENSION_C_DN |
| | | }; |
| | | pMain->Simulate2PhaseScanByDirs(vecDirs, 1000); |
| | | } |
| | | break; |
| | | case PROC_MODE_SIMULATION_ALL: |
| | |
| | | pMain->ScanStartManual(iCam,0); |
| | | } |
| | | |
| | | DWORD sTime = GetTickCount(); |
| | | DWORD sTime = GetTickCount(); |
| | | while(TRUE) |
| | | { |
| | | if(pMain->m_GlassData.GetScanEnd(0) == TRUE) |
| | |
| | | void CMainFrame::DisplayMessage(TCHAR* str) |
| | | { |
| | | WriteLogManager(str); |
| | | } |
| | | |
| | | void CMainFrame::Simulate2PhaseScanByDirs(const std::vector<DimensionDir>& vDirs, int nTimeoutMs /*=0 表示取配方时间*/) |
| | | { |
| | | struct SCamScan { int cam; int scan; }; |
| | | |
| | | if (vDirs.empty()) { |
| | | g_pLog->DisplayMessage(_T("No valid directions provided for simulation.")); |
| | | return; |
| | | } |
| | | |
| | | if (m_pView == NULL) { |
| | | g_pLog->DisplayMessage(_T("View is not initialized.")); |
| | | return; |
| | | } |
| | | |
| | | if (m_bManualProcessStart) { |
| | | g_pLog->DisplayMessage(_T("Manual process is already running.")); |
| | | return; |
| | | } |
| | | |
| | | std::vector<SCamScan> phase0; // scan == 0 |
| | | std::vector<SCamScan> phase1; // scan == 1 |
| | | |
| | | for (DimensionDir dir : vDirs) { |
| | | int nCam = m_HardwareRecipe.GetCameraIndexToDimension(dir); |
| | | if (nCam < 0) { |
| | | continue; // 未配置该方向 |
| | | } |
| | | |
| | | int nScan = m_HardwareRecipe.GetScanToDimension(dir); |
| | | if (nScan != 0 && nScan != 1) { |
| | | continue; // 只支持两相扫描 |
| | | } |
| | | |
| | | if (nScan == 0) { |
| | | phase0.push_back({ nCam, 0 }); |
| | | } |
| | | else if (nScan == 1) { |
| | | phase1.push_back({ nCam, 1 }); |
| | | } |
| | | } |
| | | |
| | | SendGlassRecipe(); |
| | | |
| | | if (!phase0.empty() && !phase1.empty()) { |
| | | if (m_pThread_CheckSequence != NULL) { |
| | | double dOneScanTime = m_GlassRecipe.m_RecieParm.m_dOneScanTime_sec; |
| | | m_pThread_CheckSequence->AddCheckSeqMSG(CHECKSEQ_GLASS_INSPECTION_OVERTIME, (int)(dOneScanTime * nTimeoutMs), m_HardwareRecipe.GetScanCount() - 1); |
| | | g_pLog->DisplayMessage(_T("Simulation Time Out Set : %.1f"), dOneScanTime); |
| | | } |
| | | |
| | | // nScan == 0 |
| | | if (!phase0.empty()) { |
| | | m_GlassData.SetScanStartCount((int)phase0.size()); |
| | | for (const auto& cs : phase0) { |
| | | ScanStartGrabManual(cs.cam, cs.scan); |
| | | ScanStartManual(cs.cam, cs.scan); |
| | | } |
| | | } |
| | | |
| | | if (!phase0.empty() && !phase1.empty()) { |
| | | DWORD sTime = GetTickCount(); |
| | | while (TRUE) { |
| | | if (m_GlassData.GetScanEnd(0) == TRUE) { |
| | | break; |
| | | } |
| | | |
| | | if (GetTickCount() - sTime > 5000) { |
| | | break; |
| | | } |
| | | |
| | | Sleep(10); |
| | | } |
| | | |
| | | // nScan == 1 |
| | | if (!phase1.empty()) { |
| | | m_GlassData.SetScanStartCount((int)phase1.size()); |
| | | for (const auto& cs : phase1) { |
| | | ScanStartGrabManual(cs.cam, cs.scan); |
| | | ScanStartManual(cs.cam, cs.scan); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else { |
| | | // nScan == 0 |
| | | if (!phase0.empty()) { |
| | | m_GlassData.SetScanStartCount((int)phase0.size()); |
| | | for (const auto& cs : phase0) { |
| | | ScanStartGrabManual(cs.cam, cs.scan); |
| | | ScanStartManual(cs.cam, cs.scan); |
| | | } |
| | | } |
| | | |
| | | // nScan == 1 |
| | | if (!phase1.empty()) { |
| | | m_GlassData.SetScanStartCount((int)phase1.size()); |
| | | for (const auto& cs : phase1) { |
| | | ScanStartGrabManual(cs.cam, cs.scan); |
| | | ScanStartManual(cs.cam, cs.scan); |
| | | } |
| | | } |
| | | } |
| | | } |