From 78289c64a16dd02cc9fec595bf758a9e30a30926 Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期六, 20 二月 2021 10:51:11 +0800 Subject: [PATCH] gocator修改异步模式下图片获取操作 --- src/Bro.Device.Gocator/GocatorDriver.cs | 81 +++++++++++++++++++++++++++++----------- 1 files changed, 58 insertions(+), 23 deletions(-) diff --git a/src/Bro.Device.Gocator/GocatorDriver.cs b/src/Bro.Device.Gocator/GocatorDriver.cs index fb7e04f..99263dc 100644 --- a/src/Bro.Device.Gocator/GocatorDriver.cs +++ b/src/Bro.Device.Gocator/GocatorDriver.cs @@ -13,6 +13,7 @@ using System.Drawing; using System.IO; using System.Linq; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Threading; @@ -218,6 +219,7 @@ } } + [MethodImpl(MethodImplOptions.Synchronized)] public override IImageSet Snapshot(IOperationConfig config) { GocatorOperationConfig opConfig = config as GocatorOperationConfig; @@ -234,7 +236,8 @@ { try { - system.Start(); + sensor.Start(); + LogAsync(DateTime.Now, $"浼犳劅鍣ㄧ姸鎬侊細{sensor.State.ToString()}", ""); if (sensor.State != GoState.Running) { Thread.Sleep(100); @@ -247,6 +250,7 @@ catch (Exception ex) { LogAsync(DateTime.Now, $"寮�鍚紓甯革細{ex.GetExceptionMessage()}", ""); + Thread.Sleep(100); } } while (true); @@ -265,16 +269,23 @@ GoDataSet dataSet = null; if (IIConfig.IsAsyncMode) { - if (!IIConfig.IsHardwareTrigger) + if (opConfig.IsSnapshotAction) { - _snapFlag = true; - if (!_snapHandle.WaitOne(IIConfig.SnapshotTimeout)) + if (!IIConfig.IsHardwareTrigger) { - LogAsync(DateTime.Now, $"{Name}鑾峰彇鍥惧儚瓒呮椂", ""); - return null; - } + _snapFlag = true; + if (!_snapHandle.WaitOne(IIConfig.SnapshotTimeout)) + { + LogAsync(DateTime.Now, $"{Name}鑾峰彇鍥惧儚瓒呮椂", ""); + return null; + } - dataSet = _currentData; + dataSet = _currentData; + } + } + else + { + imgSet = null; } } else @@ -284,17 +295,27 @@ return null; } - try + int reTryTime = 3; + do { - dataSet = system.ReceiveData(IIConfig.SnapshotTimeout); - } - catch (Exception ex) - { - LogAsync(DateTime.Now, $"{Name}鑾峰彇鍥惧儚寮傚父", ex.GetExceptionMessage()); - imgSet.HImage = null; - dataSet = null; - //return imgSet; - } + try + { + dataSet = system.ReceiveData(IIConfig.SnapshotTimeout); + reTryTime = 0; + } + catch (Exception ex) + { + reTryTime--; + LogAsync(DateTime.Now, $"{Name}鑾峰彇鍥惧儚寮傚父", ex.GetExceptionMessage()); + + if (reTryTime <= 0) + { + imgSet.HImage = null; + dataSet = null; + system.ClearData(); + } + } + } while (reTryTime > 0); } if (!IIConfig.IsAsyncMode) @@ -310,8 +331,9 @@ { try { - system.Stop(); + sensor.Stop(); + LogAsync(DateTime.Now, $"浼犳劅鍣ㄧ姸鎬侊細{sensor.State.ToString()}", ""); if (sensor.State != GoState.Ready) { Thread.Sleep(100); @@ -324,13 +346,14 @@ catch (Exception ex) { LogAsync(DateTime.Now, $"鍏抽棴寮傚父锛歿ex.GetExceptionMessage()}", ""); + Thread.Sleep(100); } } while (true); - - sensor.Flush(); LogAsync(DateTime.Now, $"浼犳劅鍣ㄥ叧闂垚鍔�", ""); } } + + sensor.Flush(); if (dataSet != null) { @@ -442,10 +465,22 @@ { base.Start(); - //system.Start(); + if (sensor.State != GoState.Ready) + { + system.Start(); + } if (IIConfig.IsAsyncMode) - system.Start(); + { + sensor.Start(); + } + else + { + //if (sensor.State == GoState.Ready) + { + sensor.Stop(); + } + } } protected override void Stop() -- Gitblit v1.8.0