修复相同SN相机重新创建后引用失效导致无法采集的问题
1. 修复引用更新逻辑:修改`CameraConfig.Run` 方法,将仅对比SN字符串改为对比全局 `dicCameras`中的对象实例,解决相机删除重建(SN不变)后流程仍调用已销毁旧对象的问题。
2. 增强健壮性:在检测到相机实例变更后,增加自动检查并调用 `StartGrabbing()`的逻辑,确保新相机能自动进入采集状态,防止报“相机未打开”错误。
已修改1个文件
22 ■■■■ 文件已修改
LB_VisionProcesses/Cameras/CameraConfig.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/CameraConfig.cs
@@ -206,12 +206,24 @@
                        return Result;
                    }
                    if (Camera == null || Camera.SN != SN)
                    // 始终检查缓存的Camera对象是否与全局字典中的一致
                    // 防止相机被删除并重建后(SN相同), 仍然引用旧的已销毁对象
                    if (dicCameras.ContainsKey(SN))
                    {
                        if (dicCameras.ContainsKey(SN))
                            Camera = dicCameras[SN];
                        else
                            Camera = null;
                        var currentCam = dicCameras[SN];
                        if (Camera != currentCam)
                        {
                            Camera = currentCam;
                            // 如果切换了相机实例,且未开始采集,尝试开启采集
                            if (Camera != null && !Camera.isGrabbing)
                            {
                                try { Camera.StartGrabbing(); } catch { }
                            }
                        }
                    }
                    else
                    {
                        Camera = null;
                    }
                    if (Camera == null)