From 1f2fa3f54d4a7b5a2f601c4c947a06476342e3bd Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期五, 22 一月 2021 09:23:06 +0800 Subject: [PATCH] 1. gocator驱动将system.stop移到system.ReceiveData之后 2. 修改测量完成后状态切换逻辑,避免安全光线等干扰 3. 添加设备异常输出日志记录 4. 产品结果输出时做硬盘文件记录 --- src/Bro.Common.Device/DeviceBase/CameraBase.cs | 126 ++++++++++++++++++++++++----------------- 1 files changed, 73 insertions(+), 53 deletions(-) diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs index b479b33..ca7afb3 100644 --- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs +++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs @@ -71,7 +71,7 @@ #endregion #region 鍥剧墖鐩稿叧 - public event Action<CameraBase, Bitmap, string> OnImageUpdated; + public Action<CameraBase, Bitmap, string> OnImageUpdated; public Action<CameraBase, HObject, string> OnHImageOutput { get; set; } public event Action OnCameraOpModeChanged; @@ -141,22 +141,21 @@ /// </summary> /// <returns></returns> public abstract void Snapshot(); + public abstract IImageSet Snapshot(IOperationConfig config); - public virtual ImageSet Snapshot(IOperationConfig config) + public virtual void InitialImageSet(IImageSet set, ImageSaveOption saveOption) { OpMode = CameraOpMode.SingleSnapShot; - ImageSet set = new ImageSet(); - CameraOprerationConfigBase opConfig = config as CameraOprerationConfigBase; - set.ImageSaveOption.DataFrom(opConfig.ImageSaveOption); + //CameraOprerationConfigBase opConfig = config as CameraOprerationConfigBase; + set.ImageSaveOption.DataFrom(saveOption); set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage; set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage; - set.IsAddtionalSaved = !string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); - set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; - _imageSetList.Add(set); + set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); + //set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; - return set; + _imageSetList[set.Id] = set; } /// <summary> @@ -172,19 +171,20 @@ #endregion #region 鍩哄厓澶勭悊 - public event Action<CameraBase, List<IShapeElement>, string> OnElementsUpdated; + public Action<CameraBase, List<IShapeElement>, string> OnElementsUpdated; #endregion #region 鍥剧墖缂撳瓨/淇濆瓨 - readonly ConcurrentBag<ImageSet> _imageSetList = new ConcurrentBag<ImageSet>(); + //public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>(); + protected Dictionary<string, IImageSet> _imageSetList = new Dictionary<string, IImageSet>(); - public void NewImageSet(ImageSet set) + public void NewImageSet(IImageSet set) { set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage; set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage; - set.IsAddtionalSaved = !string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); - set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; - _imageSetList.Add(set); + set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); + //set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; + _imageSetList[set.Id] = set; } //public virtual async void UpdateFitElements(List<IShapeElement> eleList, string imgSetId) @@ -197,12 +197,12 @@ public virtual async void SaveOriginImage(Bitmap map, Bitmap showImage, string imgSetId) { - Task.Run(() => + await Task.Run(() => { OnImageUpdated?.Invoke(this, showImage, imgSetId); }); - ImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -225,10 +225,6 @@ { LogAsync(DateTime.Now, $"{set.Id}鍘熷浘淇濆瓨澶辫触", ex.GetExceptionMessage()); } - //finally - //{ - // set.IsOriginSaved = true; - //} } set.IsOriginSaved = true; ClearImageSet(set); @@ -241,7 +237,7 @@ if (eleList.Count > 0) OnElementsUpdated?.BeginInvoke(this, eleList, imgSetId, null, null); - ImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -305,7 +301,7 @@ { await Task.Run(() => { - ImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -341,7 +337,7 @@ }); } - private string CheckImageDirectory(string subDir, string prefix) + protected string CheckImageDirectory(string subDir, string prefix) { if (string.IsNullOrWhiteSpace(subDir)) { @@ -363,7 +359,7 @@ return imgDir; } - private void SaveImageByNameAndType(Bitmap map, string imageName, ImageFormat imgFormat, string imageDir) + protected void SaveImageByNameAndType(Bitmap map, string imageName, ImageFormat imgFormat, string imageDir) { string filePath = Path.Combine(imageDir, $"{imageName}.{imgFormat.ToString().ToLower()}"); map.Save(filePath, imgFormat); @@ -371,7 +367,7 @@ //private Timer clearImageSetTimer = null; - public void ClearImageSet(ImageSet set) + public virtual void ClearImageSet(IImageSet set) { try { @@ -380,9 +376,10 @@ // && (!set.ImageSaveOption.IsSaveNGImage || set.IsNGSaved)) if (set.IsOriginSaved && set.IsFitSaved && set.IsAddtionalSaved) { - _imageSetList.TryTake(out set); set.Dispose(); - //LogAsync(DateTime.Now, $"绉婚櫎鍥剧墖淇℃伅锛屽綋鍓嶇紦瀛樻暟閲忥細{_imageSetList.Count}", ""); + + _imageSetList.Remove(set.Id); + LogAsync(DateTime.Now, $"绉婚櫎鍥剧墖淇℃伅锛屽綋鍓嶇紦瀛樻暟閲忥細{_imageSetList.Count}", ""); } //bool flag = false; @@ -402,7 +399,7 @@ public void ClearImageSet(string imgSetId) { - ImageSet set = _imageSetList.First(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set != null) ClearImageSet(set); } @@ -544,10 +541,11 @@ }); } - protected async void Generate16GrayImageByPointer(int width, int height, IntPtr dataPtr, string imgSetId) + protected async Task Generate16GrayImageByPointer(int width, int height, IntPtr dataPtr, string imgSetId) { await Task.Run(() => { + //Thread.Sleep(1000); int widthIn4 = (int)Math.Ceiling(width / 4.0) * 4; Bitmap bmp = new Bitmap(widthIn4, height, PixelFormat.Format48bppRgb); @@ -575,15 +573,14 @@ { int index = (i + 1) % width + widthIn4 * ((i + 1) / width) - 1; - showBitmapBuffer[index * 6] = data[i * 2]; - showBitmapBuffer[index * 6 + 1] = data[i * 2 + 1]; + showBitmapBuffer[index * 6] = bitmapBuffer[index * 6] = data[i * 2]; + showBitmapBuffer[index * 6 + 1] = bitmapBuffer[index * 6 + 1] = data[i * 2 + 1]; }); } - + bmp.UnlockBits(bitmapData); showImage.UnlockBits(showImageData); - //showImage.Save(@"D:\1.bmp", ImageFormat.Bmp); SaveOriginImage(bmp, showImage, imgSetId); }); } @@ -838,7 +835,29 @@ } } - public class ImageSet : IDisposable + public interface IImageSet:IDisposable + { + DateTime InitialTime { get; set; } + string Id { get; } + HImage HImage { get; set; } + Bitmap Image { get; set; } + + object SaveLock { get; set; } + + ImageSaveOption ImageSaveOption { get; set; } + bool IsOriginSaved { get; set; } + bool IsFitSaved { get; set; } + bool IsAddtionalSaved { get; set; } + + //event Action<ImageSet> OnImageSetTimeout; + + /// <summary> + /// 搴忓垪鍖栨搷浣滅殑鍥惧儚淇℃伅 + /// </summary> + string ImageData { get; set; } + } + + public class ImageSet : IImageSet { public DateTime InitialTime { get; set; } = DateTime.Now; @@ -873,31 +892,32 @@ //public bool IsInvokeSaveNG { get; set; } = false; public bool IsAddtionalSaved { get; set; } = false; - public object SaveLock = new object(); + public object SaveLock { get; set; } = new object(); - public event Action<ImageSet> OnImageSetTimeout; - private Timer autoDisposeTimer = null; + public virtual string ImageData { get; set; } - private void OnAutoDispose(object state) + //public event Action<ImageSet> OnImageSetTimeout; + //private Timer autoDisposeTimer = null; + + public void Dispose(object state) { - OnImageSetTimeout?.Invoke(this); + //OnImageSetTimeout?.Invoke(this); + + //autoDisposeTimer.Change(-1, -1); + //autoDisposeTimer.Dispose(); + + Image?.Dispose(); + Image = null; + } + + public virtual void Dispose() + { + Dispose(null); } public ImageSet() { - autoDisposeTimer = new Timer(OnAutoDispose, null, -1, 10 * 1000); - } - - public void Dispose() - { - autoDisposeTimer.Change(-1, -1); - autoDisposeTimer.Dispose(); - - Image?.Dispose(); - Image = null; - - HImage?.Dispose(); - HImage = null; + //autoDisposeTimer = new Timer(Dispose, null, 10 * 1000, -1); } #endregion } -- Gitblit v1.8.0