From f3b1cd8c7e62c04d8b1a3acace9396f3dbadafd4 Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期一, 22 十二月 2025 11:01:23 +0800
Subject: [PATCH] 修复相同SN相机重新创建后引用失效导致无法采集的问题   1. 修复引用更新逻辑:修改`CameraConfig.Run` 方法,将仅对比SN字符串改为对比全局 `dicCameras`中的对象实例,解决相机删除重建(SN不变)后流程仍调用已销毁旧对象的问题。    2. 增强健壮性:在检测到相机实例变更后,增加自动检查并调用 `StartGrabbing()`的逻辑,确保新相机能自动进入采集状态,防止报“相机未打开”错误。

---
 LB_VisionProcesses/Cameras/2DCameraForm.cs |   31 ++++++++++++++++++++++++-------
 1 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/LB_VisionProcesses/Cameras/2DCameraForm.cs b/LB_VisionProcesses/Cameras/2DCameraForm.cs
index 252b28f..7081cd6 100644
--- a/LB_VisionProcesses/Cameras/2DCameraForm.cs
+++ b/LB_VisionProcesses/Cameras/2DCameraForm.cs
@@ -107,6 +107,12 @@
                 cmbSN.Text = SN;
                 cmbSN.SelectedIndex = Index;
 
+                // 濡傛灉娌℃壘鍒扮储寮曪紙鍙兘鏄柊澧炵殑锛夛紝鎵嬪姩瑙﹀彂涓�娆¢�昏緫浠ユ洿鏂癠I
+                if (Index == -1)
+                {
+                    cmbSN_SelectedIndexChanged(null, null);
+                }
+
                 ckbLocalTest.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁鏈湴鍙栧浘"].ToString());
                 ckbUpParams.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁姣忔鍐欏叆鍙傛暟"].ToString());
                 ckbRegrab.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁澶辫触閲嶆柊鍙栧浘"].ToString());
@@ -195,15 +201,26 @@
                 camera = dicCameras[cmbSN.Text];
 
             //璇存槑鐩告満宸茬粡鍒濆鍖栨垚鍔�
-            if (camera != null && camera.isGrabbing)
+            if (camera != null)
             {
-                camera.ImageGrabbed -= GetImageBllComplete;
-                camera.ImageGrabbed += GetImageBllComplete;
+                int Index = cmbBrand.FindString(camera.Brand.ToString());
+                if (Index >= 0)
+                {
+                    cmbBrand.Text = camera.Brand.ToString();
+                    cmbBrand.SelectedIndex = Index;
+                }
 
-                int Index = cmbBrand.FindString(camera.Brand.ToString()); ;
-                cmbBrand.Text = camera.Brand.ToString();
-                cmbBrand.SelectedIndex = Index;
-                this.btnEdit.Enabled = true;
+                if (camera.isGrabbing)
+                {
+                    camera.ImageGrabbed -= GetImageBllComplete;
+                    camera.ImageGrabbed += GetImageBllComplete;
+                    this.btnEdit.Enabled = true;
+                }
+                // 濡傛灉鐩告満瀛樺湪浜庡瓧鍏镐腑锛岃鏄庢槸宸茶繛鎺ョ殑璁惧锛屽厑璁哥紪杈�
+                else if (dicCameras != null && dicCameras.ContainsKey(camera.SN))
+                {
+                    this.btnEdit.Enabled = true;
+                }
             }
         }
 

--
Gitblit v1.9.3