From f6faaf9e513c25abe51855c9a798af0afb2cc9dd Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 08 八月 2025 11:13:07 +0800
Subject: [PATCH] 1. 封装目录测试函数,方便本地测试
---
EdgeInspector_App/EdgeInspector_App.rc | 0
EdgeInspector_App/Define/Global_Define.h | 3
EdgeInspector_App/MainFrm.h | 1
EdgeInspector_App/MainFrm.cpp | 169 +++++++++++++++++++++++++++++----
EdgeInspector_App/View/ViewMain_ScanImage.cpp | 72 +++++++-------
EdgeInspector_App/View/ViewMain_ScanImage.h | 2
6 files changed, 185 insertions(+), 62 deletions(-)
diff --git a/EdgeInspector_App/Define/Global_Define.h b/EdgeInspector_App/Define/Global_Define.h
index 3d70b00..67f2028 100644
--- a/EdgeInspector_App/Define/Global_Define.h
+++ b/EdgeInspector_App/Define/Global_Define.h
@@ -114,10 +114,11 @@
enum Procee_Mode {
PROC_MODE_AUTO = 0,
+ PROC_MODE_SIMULATION_SIDERIP,
PROC_MODE_SIMULATION_ONESIDE,
PROC_MODE_SIMULATION_SIDESHORT,
PROC_MODE_SIMULATION_SIDELONG,
- PROC_MODE_SIMULATION_ALL
+ PROC_MODE_SIMULATION_ALL,
};
enum Init_View_Command {VIEW_RECIPE=0,VIEW_SCANIMAGE};
diff --git a/EdgeInspector_App/EdgeInspector_App.rc b/EdgeInspector_App/EdgeInspector_App.rc
index ee26496..5f85e87 100644
--- a/EdgeInspector_App/EdgeInspector_App.rc
+++ b/EdgeInspector_App/EdgeInspector_App.rc
Binary files differ
diff --git a/EdgeInspector_App/MainFrm.cpp b/EdgeInspector_App/MainFrm.cpp
index 74539d1..61450a6 100644
--- a/EdgeInspector_App/MainFrm.cpp
+++ b/EdgeInspector_App/MainFrm.cpp
@@ -359,9 +359,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 +372,7 @@
UINT CMainFrame::ManualInspectProcess(LPVOID pParam)
{
- CMainFrame *pMain = (CMainFrame *)pParam;
+ CMainFrame *pMain = (CMainFrame *)pParam;
pMain->SetInspectionEnd();
@@ -399,11 +400,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,26 +430,44 @@
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:
@@ -476,7 +495,7 @@
pMain->ScanStartManual(iCam,0);
}
- DWORD sTime = GetTickCount();
+ DWORD sTime = GetTickCount();
while(TRUE)
{
if(pMain->m_GlassData.GetScanEnd(0) == TRUE)
@@ -722,4 +741,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
diff --git a/EdgeInspector_App/MainFrm.h b/EdgeInspector_App/MainFrm.h
index ba9eedb..19b48b8 100644
--- a/EdgeInspector_App/MainFrm.h
+++ b/EdgeInspector_App/MainFrm.h
@@ -57,6 +57,7 @@
public:
void SetView(CEdgeInspector_AppView *pView);
+ void Simulate2PhaseScanByDirs(const std::vector<DimensionDir>& vDirs, int nTimeoutMs = 0);
protected:
void KillProcessByName(LPCTSTR lpProcessName);
diff --git a/EdgeInspector_App/View/ViewMain_ScanImage.cpp b/EdgeInspector_App/View/ViewMain_ScanImage.cpp
index 7587647..1e953b6 100644
--- a/EdgeInspector_App/View/ViewMain_ScanImage.cpp
+++ b/EdgeInspector_App/View/ViewMain_ScanImage.cpp
@@ -10,7 +10,8 @@
enum TYPE_MANUAL_CMD
{
- M_CMD_PROC_SHORT_START = 0,
+ M_CMD_PROC_RIP_START = 0,
+ M_CMD_PROC_SHORT_START,
M_CMD_PROC_LONG_START,
M_CMD_PROC_ALL_START,
M_CMD_IMG_LOAD_ALL,
@@ -263,12 +264,10 @@
void CViewMain_ScanImage::OnShowWindow(BOOL bShow, UINT nStatus)
{
- if(bShow == TRUE)
- {
+ if(bShow == TRUE) {
int nSide;
CString strTitle;
- for(int i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
- {
+ for(int i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
nSide = GetSideIdx(i);
m_frameImg[i].SetSideIdx(nSide);
m_frameImg[i].SetGlassData(m_pGlassData);
@@ -278,15 +277,15 @@
m_frameImg[i].Invalidate();
if(m_pHardware != NULL) {
- CCameraSettings *pCamera = LiveGetSideIdx(i);
+ CCameraSettings *pCamera = GetCameraSettingsByViewIndex(i);
if(pCamera != NULL) {
double dPixelSizeX = pCamera->m_dConvResolution[0];
double dPixelSizeY = pCamera->m_dScanResolution[0];
m_frameImg[i].SetPixelSize(dPixelSizeX, dPixelSizeY);
+
+ strTitle.Format(_T("BORD[%d] CHANNEL[%d]"), pCamera->m_iCamera, 0);
+ m_staticCamInfo[i].SetWindowText(strTitle);
}
-
- strTitle.Format(_T("BORD[%d] CHANNEL[%d]"),pCamera->m_iCamera, 0);
- m_staticCamInfo[i].SetWindowText(strTitle);
}
}
@@ -1189,8 +1188,9 @@
CViewMain_ScanImage *pDlg = (CViewMain_ScanImage*)pParam;
int i =0;
if(pDlg->m_nThreadCmd == M_CMD_PROC_ALL_START
+ || pDlg->m_nThreadCmd == M_CMD_PROC_LONG_START
|| pDlg->m_nThreadCmd == M_CMD_PROC_SHORT_START
- || pDlg->m_nThreadCmd == M_CMD_PROC_LONG_START)
+ || pDlg->m_nThreadCmd == M_CMD_PROC_RIP_START)
{
pDlg->m_IV2M->IV2M_InspectionProcessAll(pDlg->m_nThreadCmd);
}
@@ -1303,9 +1303,9 @@
ManualThreadStart(M_CMD_PROC_SHORT_START);
break;
- //case 3:
- // ManualThreadStart(M_CMD_PROC_RIP_START);
- // break;
+ case 3:
+ ManualThreadStart(M_CMD_PROC_RIP_START);
+ break;
}
}
@@ -1364,32 +1364,30 @@
}
}
-CCameraSettings* CViewMain_ScanImage::LiveGetSideIdx(int nViewIndex)
+CCameraSettings* CViewMain_ScanImage::GetCameraSettingsByViewIndex(int nViewIndex)
{
CCameraSettings* pCamera = NULL;
- if (m_pHardware != nullptr) {
- int nSide = GetSideIdx(nViewIndex);
- int nCamera = m_pHardware->GetCameraIndexToDimension((DimensionDir)nSide);
- if (nViewIndex < MAX_PANEL_SIDE) {
- // Long side
- pCamera = m_pHardware->GetCameraSettings(nCamera, 0);
- }
- else if (nViewIndex < 2 * MAX_PANEL_SIDE) {
- // Short side
- pCamera = m_pHardware->GetCameraSettings(nCamera, 1);
- }
- else {
- // Rip side
- int nRipIndex = nViewIndex - 2 * MAX_PANEL_SIDE;
- int nRipCamera = nRipIndex / 2 + MAX_PANEL_SIDE;
- if (nRipIndex % 2 != 0) {
- pCamera = m_pHardware->GetCameraSettings(nCamera, 0);
- }
- else {
- pCamera = m_pHardware->GetCameraSettings(nCamera, 1);
- }
- }
+ if (nullptr != m_pHardware) {
+ return pCamera;
}
- return pCamera;
+ // ViewIndex -> DimensionDir
+ static const DimensionDir SIDE_MAP[] = {
+ DIMENSION_C, DIMENSION_C_DN,
+ DIMENSION_A, DIMENSION_A_DN,
+ DIMENSION_D, DIMENSION_D_DN,
+ DIMENSION_B, DIMENSION_B_DN,
+ DIMENSION_A_RIP, DIMENSION_B_RIP,
+ DIMENSION_C_RIP, DIMENSION_D_RIP
+ };
+
+ if (nViewIndex < 0 || nViewIndex >= _countof(SIDE_MAP)) {
+ AfxMessageBox(_T("GetCameraSettingsByViewIndex: Invalid view index"));
+ return nullptr;
+ }
+
+ DimensionDir eSide = SIDE_MAP[nViewIndex];
+ int nScan = m_pHardware->GetScanToDimension(eSide);
+ int nCamera = m_pHardware->GetCameraIndexToDimension(eSide);
+ return pCamera = m_pHardware->GetCameraSettings(nCamera, nScan);
}
\ No newline at end of file
diff --git a/EdgeInspector_App/View/ViewMain_ScanImage.h b/EdgeInspector_App/View/ViewMain_ScanImage.h
index 8ee7098..4532081 100644
--- a/EdgeInspector_App/View/ViewMain_ScanImage.h
+++ b/EdgeInspector_App/View/ViewMain_ScanImage.h
@@ -107,7 +107,7 @@
void SaveFullImageAll();
void LayoutCameraGroup(int nStartIdx, int nCount, CPoint& pt, int nImgWidth, int nImgHeight, int nInfo, int nHScroll);
void ShowCameraGroup(int nStartIdx, int nCount, BOOL bShow);
- CCameraSettings* LiveGetSideIdx(int nViewIndex);
+ CCameraSettings* GetCameraSettingsByViewIndex(int nViewIndex);
protected:
CMFCButton m_btnLoad[MAX_PANEL_SIDE * UPDN_TYPE];
--
Gitblit v1.9.3