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.UI.Config/MenuForms/FrmStatistic.cs       |    6 ++
 src/Bro.M071.Process/M071Process.cs               |   20 +++++-
 src/Bro.Device.Gocator/GocatorDriver.cs           |   60 ++++++++++++-------
 src/Bro.Process/ProcessControl.cs                 |    7 ++
 src/Bro.Common.Device/DeviceBase/CameraBase.cs    |   25 +++++---
 src/Bro.Device.Gocator/Properties/AssemblyInfo.cs |    4 
 src/Bro.UI.Config/MainFrm.cs                      |    5 +
 7 files changed, 89 insertions(+), 38 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
index 85b5458..ca7afb3 100644
--- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
@@ -153,7 +153,7 @@
             set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage;
             set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage;
             set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType);
-            set.OnImageSetTimeout += ImageSet_OnImageSetTimeout;
+            //set.OnImageSetTimeout += ImageSet_OnImageSetTimeout;
 
             _imageSetList[set.Id] = set;
         }
@@ -183,7 +183,7 @@
             set.IsOriginSaved = !set.ImageSaveOption.IsSaveOriginImage;
             set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage;
             set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType);
-            set.OnImageSetTimeout += ImageSet_OnImageSetTimeout;
+            //set.OnImageSetTimeout += ImageSet_OnImageSetTimeout;
             _imageSetList[set.Id] = set;
         }
 
@@ -376,6 +376,8 @@
                 //    && (!set.ImageSaveOption.IsSaveNGImage || set.IsNGSaved))
                 if (set.IsOriginSaved && set.IsFitSaved && set.IsAddtionalSaved)
                 {
+                    set.Dispose();
+
                     _imageSetList.Remove(set.Id);
                     LogAsync(DateTime.Now, $"绉婚櫎鍥剧墖淇℃伅锛屽綋鍓嶇紦瀛樻暟閲忥細{_imageSetList.Count}", "");
                 }
@@ -543,7 +545,7 @@
         {
             await Task.Run(() =>
             {
-                Thread.Sleep(1000);
+                //Thread.Sleep(1000);
                 int widthIn4 = (int)Math.Ceiling(width / 4.0) * 4;
 
                 Bitmap bmp = new Bitmap(widthIn4, height, PixelFormat.Format48bppRgb);
@@ -847,7 +849,7 @@
         bool IsFitSaved { get; set; }
         bool IsAddtionalSaved { get; set; }
 
-        event Action<ImageSet> OnImageSetTimeout;
+        //event Action<ImageSet> OnImageSetTimeout;
 
         /// <summary>
         /// 搴忓垪鍖栨搷浣滅殑鍥惧儚淇℃伅
@@ -894,15 +896,18 @@
 
         public virtual string ImageData { get; set; }
 
-        public event Action<ImageSet> OnImageSetTimeout;
-        private Timer autoDisposeTimer = null;
+        //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();
+            //autoDisposeTimer.Change(-1, -1);
+            //autoDisposeTimer.Dispose();
+
+            Image?.Dispose();
+            Image = null;
         }
 
         public virtual void Dispose()
@@ -912,7 +917,7 @@
 
         public ImageSet()
         {
-            autoDisposeTimer = new Timer(Dispose, null, 10 * 1000, -1);
+            //autoDisposeTimer = new Timer(Dispose, null, 10 * 1000, -1);
         }
         #endregion
     }
diff --git a/src/Bro.Device.Gocator/GocatorDriver.cs b/src/Bro.Device.Gocator/GocatorDriver.cs
index a45de96..ba3546f 100644
--- a/src/Bro.Device.Gocator/GocatorDriver.cs
+++ b/src/Bro.Device.Gocator/GocatorDriver.cs
@@ -218,23 +218,17 @@
 
         public override IImageSet Snapshot(IOperationConfig config)
         {
+            GocatorOperationConfig opConfig = config as GocatorOperationConfig;
             if (!IIConfig.IsAsyncMode)
             {
-                if (config is GocatorOperationConfig opConfig)
+                if (opConfig.IsOpenConnection)
                 {
-                    if (opConfig.IsOpenConnection)
-                    {
-                        system.Start();
-                    }
-                    else
-                    {
-                        system.Stop();
-                    }
+                    system.Start();
+                }
 
-                    if (!opConfig.IsSnapshotAction)
-                    {
-                        return null;
-                    }
+                if (!opConfig.IsSnapshotAction)
+                {
+                    return null;
                 }
             }
 
@@ -258,6 +252,11 @@
             }
             else
             {
+                if (!opConfig.IsSnapshotAction)
+                {
+                    return null;
+                }
+
                 try
                 {
                     dataSet = system.ReceiveData(IIConfig.SnapshotTimeout);
@@ -266,6 +265,15 @@
                 {
                     LogAsync(DateTime.Now, $"{Name}鑾峰彇鍥惧儚寮傚父", ex.GetExceptionMessage());
                     return null;
+                }
+            }
+
+            if (!IIConfig.IsAsyncMode)
+            {
+                if (!opConfig.IsOpenConnection)
+                {
+                    system.Stop();
+                    sensor.Flush();
                 }
             }
 
@@ -535,21 +543,29 @@
             });
         }
 
-        public override void ClearImageSet(IImageSet set)
-        {
-            if (set.IsOriginSaved && set.IsFitSaved && set.IsAddtionalSaved)
-            {
-                (set as GoImageSet).HImage_2?.Dispose();
-                (set as GoImageSet).HImage_2 = null;
-            }
+        //public override void ClearImageSet(IImageSet set)
+        //{
+        //    if (set.IsOriginSaved && set.IsFitSaved && set.IsAddtionalSaved)
+        //    {
+        //        (set as GoImageSet).HImage_2?.Dispose();
+        //        (set as GoImageSet).HImage_2 = null;
+        //    }
 
-            base.ClearImageSet(set);
-        }
+        //    base.ClearImageSet(set);
+        //}
         #endregion
     }
 
     public class GoImageSet : ImageSet
     {
         public HImage HImage_2 { get; set; }
+
+        public override void Dispose()
+        {
+            base.Dispose();
+
+            HImage_2?.Dispose();
+            HImage_2 = null;
+        }
     }
 }
diff --git a/src/Bro.Device.Gocator/Properties/AssemblyInfo.cs b/src/Bro.Device.Gocator/Properties/AssemblyInfo.cs
index 08d604e..43f4501 100644
--- a/src/Bro.Device.Gocator/Properties/AssemblyInfo.cs
+++ b/src/Bro.Device.Gocator/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
 //鍙互鎸囧畾鎵�鏈夎繖浜涘�硷紝涔熷彲浠ヤ娇鐢ㄢ�滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊�
 //閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyVersion("1.0.1.0")]
+[assembly: AssemblyFileVersion("1.0.1.0")]
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index cc95119..4a24029 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -208,7 +208,7 @@
             {
                 hint = "鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�";
                 OnCheckHintUpload?.Invoke(hint, true);
-                throw new ProcessException(hint, null, ExceptionLevel.Fatal);
+                throw new ProcessException(hint, null, ExceptionLevel.Warning);
             }
 
             if (string.IsNullOrWhiteSpace(BarCode))
@@ -553,8 +553,20 @@
 
                 LogAsync(DateTime.Now, $"{pMeasure.Barcode} 妫�娴嬪畬鎴愶紝缁撴灉 {pMeasure.PResult}", "");
 
-                if (MachineState == MachineState.Running)
-                    MachineState = MachineState.Ready;
+                //if (MachineState == MachineState.Running)
+                //    MachineState = MachineState.Ready;
+
+                if (MachineState != MachineState.Alarm)
+                {
+                    if (MachineState == MachineState.Pause)
+                    {
+                        _machineStateBeforePause = MachineState.Ready;
+                    }
+                    else
+                    {
+                        MachineState = MachineState.Ready;
+                    }
+                }
 
                 var measurementUnitResultAndKeyUnitDataSet = GetMeasurementUnitResultAndKeyUnitData(pMeasure);
 
@@ -661,7 +673,7 @@
                     }
                     measurementUnitResult.MeasurementType = measurementUnit.MeasureType;
                     measurementUnitResult.MeasurementValue = measurementUnit.Spec.ActualValue == null ? "NA" : measurementUnit.Spec.ActualValue.Value.ToString(_precision);
-                    measurementUnitResult.MeasurementResult = measurementUnit.Spec.MeasureResult.Value ? "OK" : "NG";
+                    measurementUnitResult.MeasurementResult = measurementUnit.Spec.MeasureResult == null ? "NA" : measurementUnit.Spec.MeasureResult.Value ? "OK" : "NG";
 
                     measurementUnitResults.Add(measurementUnitResult);
 
diff --git a/src/Bro.Process/ProcessControl.cs b/src/Bro.Process/ProcessControl.cs
index 2f31a10..9519754 100644
--- a/src/Bro.Process/ProcessControl.cs
+++ b/src/Bro.Process/ProcessControl.cs
@@ -208,11 +208,18 @@
                     d.OnLog -= OnDeviceLog;
                     d.OnLog += OnDeviceLog;
 
+                    d.OnExceptionOccured = OnDeviceExceptionRaised;
+
                     d.StateChange(DeviceState.DSInit);
                     d.StateChange(DeviceState.DSOpen);
                 }
             });
         }
+
+        private void OnDeviceExceptionRaised(DateTime dt, Exception ex)
+        {
+            LogAsync(dt, "璁惧寮傚父", ex.GetExceptionMessage());
+        }
         #endregion
 
         #region Close
diff --git a/src/Bro.UI.Config/MainFrm.cs b/src/Bro.UI.Config/MainFrm.cs
index c734c03..1d27f20 100644
--- a/src/Bro.UI.Config/MainFrm.cs
+++ b/src/Bro.UI.Config/MainFrm.cs
@@ -371,6 +371,11 @@
 
         private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
         {
+            try
+            {
+                _process?.Close();
+            }
+            catch { }
             CloseAllDocuments();
         }
 
diff --git a/src/Bro.UI.Config/MenuForms/FrmStatistic.cs b/src/Bro.UI.Config/MenuForms/FrmStatistic.cs
index 080514a..30b5409 100644
--- a/src/Bro.UI.Config/MenuForms/FrmStatistic.cs
+++ b/src/Bro.UI.Config/MenuForms/FrmStatistic.cs
@@ -5,6 +5,7 @@
 using System;
 using System.Configuration;
 using System.IO;
+using System.Threading.Tasks;
 using WeifenLuo.WinFormsUI.Docking;
 using static Bro.Common.Helper.EnumHelper;
 
@@ -432,6 +433,11 @@
             }
 
             Qty_OEE++;
+
+            Task.Run(() =>
+            {
+                SaveNumRecord();
+            });
         }
 
         private void UpdateCT(float ctTime)

--
Gitblit v1.8.0