From aa2c9d14b1b4058639d938ef7f943c7c7fc7c210 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 14 八月 2025 14:57:08 +0800
Subject: [PATCH] 1. 离线全部执行和在线执行时可以选择启用或禁用侧面检功能
---
EdgeInspector_App/MainFrm.cpp | 259 +++++++++++++++++++++++++++++++++++++++------------
1 files changed, 198 insertions(+), 61 deletions(-)
diff --git a/EdgeInspector_App/MainFrm.cpp b/EdgeInspector_App/MainFrm.cpp
index c80f5fc..ce4c954 100644
--- a/EdgeInspector_App/MainFrm.cpp
+++ b/EdgeInspector_App/MainFrm.cpp
@@ -338,8 +338,6 @@
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));
@@ -359,9 +357,10 @@
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);
@@ -371,7 +370,7 @@
UINT CMainFrame::ManualInspectProcess(LPVOID pParam)
{
- CMainFrame *pMain = (CMainFrame *)pParam;
+ CMainFrame *pMain = (CMainFrame *)pParam;
pMain->SetInspectionEnd();
@@ -399,11 +398,11 @@
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);
@@ -429,69 +428,103 @@
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:
{
- g_pLog->DisplayMessage(_T("Simulation Full "));
- pMain->m_GlassData.SetScanStartCount(MAX_DIMENSION_COUNT);
- pMain->SendGlassRecipe();
- for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
- {
- pMain->ScanStartGrabManual(iCam,0);
- pMain->ScanStartGrabManual(iCam,1);
+ //g_pLog->DisplayMessage(_T("Simulation Full "));
+ //pMain->m_GlassData.SetScanStartCount(MAX_DIMENSION_COUNT);
+ //pMain->SendGlassRecipe();
+ //for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
+ //{
+ // pMain->ScanStartGrabManual(iCam,0);
+ // pMain->ScanStartGrabManual(iCam,1);
+ //}
+
+ //if(pMain->m_pThread_CheckSequence != NULL)
+ //{
+ // double dOneScanTime = pMain->m_GlassRecipe.m_RecieParm.m_dOneScanTime_sec;
+ //
+ // pMain->m_pThread_CheckSequence->AddCheckSeqMSG(CHECKSEQ_GLASS_INSPECTION_OVERTIME,(int)(dOneScanTime* 1000.),pMain->m_HardwareRecipe.GetScanCount()-1);
+
+ // g_pLog->DisplayMessage(_T("Simulation Time Out Set : %.1f"),dOneScanTime);
+ //}
+
+ //for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
+ //{
+ // pMain->ScanStartManual(iCam,0);
+ //}
+
+ //DWORD sTime = GetTickCount();
+ //while(TRUE)
+ //{
+ // if(pMain->m_GlassData.GetScanEnd(0) == TRUE)
+ // break;
+
+ // if(GetTickCount() - sTime >= 5000)
+ // break;
+ //
+ // Sleep(10);
+ //}
+
+ //for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
+ //{
+ // pMain->ScanStartManual(iCam,1);
+ //}
+
+ if (pMain->m_HardwareRecipe.m_bUseRipInspection) {
+ std::vector<DimensionDir> vecDirs = {
+ DIMENSION_A, DIMENSION_C, DIMENSION_A_DN, DIMENSION_C_DN,
+ DIMENSION_B, DIMENSION_D, DIMENSION_B_DN, DIMENSION_D_DN,
+ DIMENSION_A_RIP, DIMENSION_B_RIP, DIMENSION_C_RIP, DIMENSION_D_RIP
+ };
+ pMain->Simulate2PhaseScanByDirs(vecDirs, 1000);
}
-
- if(pMain->m_pThread_CheckSequence != NULL)
- {
- double dOneScanTime = pMain->m_GlassRecipe.m_RecieParm.m_dOneScanTime_sec;
-
- pMain->m_pThread_CheckSequence->AddCheckSeqMSG(CHECKSEQ_GLASS_INSPECTION_OVERTIME,(int)(dOneScanTime* 1000.),pMain->m_HardwareRecipe.GetScanCount()-1);
-
- g_pLog->DisplayMessage(_T("Simulation Time Out Set : %.1f"),dOneScanTime);
+ else {
+ std::vector<DimensionDir> vecDirs = {
+ DIMENSION_A, DIMENSION_C, DIMENSION_A_DN, DIMENSION_C_DN,
+ DIMENSION_B, DIMENSION_D, DIMENSION_B_DN, DIMENSION_D_DN
+ };
+ pMain->Simulate2PhaseScanByDirs(vecDirs, 1000);
}
-
- for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
- {
- pMain->ScanStartManual(iCam,0);
- }
-
- DWORD sTime = GetTickCount();
- while(TRUE)
- {
- if(pMain->m_GlassData.GetScanEnd(0) == TRUE)
- break;
-
- if(GetTickCount() - sTime >= 5000)
- break;
-
- Sleep(10);
- }
-
- for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
- {
- pMain->ScanStartManual(iCam,1);
- }
}
break;
}
@@ -722,4 +755,108 @@
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);
+ }
+ }
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3