Browse Source

统一相机采集策略,优化PLC读取与异常处理

- 相机采集策略统一为 SciCam_GrabStrategy_Upcoming,移除 lastImageOnly 动态切换逻辑
- PLC 结果读取支持格式化地址,按站点索引读取
- 释放压力采样资源时增加空引用保护
- 采集图片前增加 250ms 延时,提升采集稳定性
徐孝锋 7 tháng trước cách đây
mục cha
commit
f249defbf4

+ 19 - 19
TeamAAS-VM/Core/Cameras/OptCamera.cs

@@ -357,7 +357,7 @@ namespace TeamAAS_VP.Core.Cameras
                 // ch:注册事件回调 | en:Register event callback
                 //nReVal = mvCameraAcq.RegisterPayloadCallBack(new SciCam.fnOnPayloadDelegate(ImageCallBack), IntPtr.Zero, true);
                 // ch:设置采集策略 | en:Set Grab Strategy
-                nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
+                nReVal = mvCameraAcq.SetGrabStrategy(SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Upcoming);
                 if (nReVal != SciCam.SCI_CAMERA_OK)
                 {
                     Console.WriteLine("Register Event CallBack fail! nRet {0}", nReVal);
@@ -433,24 +433,24 @@ namespace TeamAAS_VP.Core.Cameras
                         }
 
                         //如果仅仅采集最后一帧,则清空缓存
-                        if (lastImageOnly)
-                        {
-                            //判断当前的模式是否为最新模式,如果不是则设置为最新模式
-                            if (CurrentGrabStrategy != SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_OneByOne)
-                            {
-                                CurrentGrabStrategy = SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_OneByOne;
-                                nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
-                            }
-                        }
-                        else
-                        {
-                            //判断当前的模式是否为顺序模式,如果不是则设置为顺序模式
-                            if (CurrentGrabStrategy != SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Latest)
-                            {
-                                CurrentGrabStrategy = SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Latest;
-                                nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
-                            }
-                        }
+                        //if (lastImageOnly)
+                        //{
+                        //    //判断当前的模式是否为最新模式,如果不是则设置为最新模式
+                        //    if (CurrentGrabStrategy != SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Upcoming)
+                        //    {
+                        //        CurrentGrabStrategy = SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Upcoming;
+                        //        nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
+                        //    }
+                        //}
+                        //else
+                        //{
+                        //    //判断当前的模式是否为顺序模式,如果不是则设置为顺序模式
+                        //    if (CurrentGrabStrategy != SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Latest)
+                        //    {
+                        //        CurrentGrabStrategy = SciCam.SciCamGrabStrategy.SciCam_GrabStrategy_Latest;
+                        //        nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
+                        //    }
+                        //}
                         //if (!mvCameraAcq.IsGrabbing())
                         //{
                         //    mvCameraAcq.StartGrabbing();

+ 2 - 2
TeamAAS-VM/Core/Management.cs

@@ -2101,7 +2101,7 @@ namespace TeamAAS_VP.Core
                                     }
 
                                     //读取产品结果
-                                    Int16 resultIndex = plc.ReadNode<Int16>(addressConfig.In_Result.Address);
+                                    Int16 resultIndex = plc.ReadNode<Int16>(string.Format(addressConfig.In_Result.Address,i));
 
                                     //目前只记录当前站
                                     if (i == 0)
@@ -2415,7 +2415,7 @@ namespace TeamAAS_VP.Core
                     _pressureLinkedCts[Index]?.Dispose();
                     _pressureTimeoutCts[Index]?.Dispose();
                     _pressureCts[Index]?.Dispose();
-                    _pressureSamples[Index].Clear();
+                    _pressureSamples[Index]?.Clear();
                 }
                 catch { }
             }

+ 1 - 0
TeamAAS-VM/Services/RemoteCommandService.cs

@@ -1474,6 +1474,7 @@ namespace TeamAAS_VP.Services
                 }
                 DateTime nowtime = DateTime.Now;
                 LogHelper.WriteLogInfo("¿ªÊ¼²É¼¯Í¼Ïñ");
+                Thread.Sleep(250);
                 var image = camera.Grab();
                 if (image == null)
                 {