From 8a3ab64a65da226636743be07c4bee63f50da25d Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期六, 06 三月 2021 11:35:20 +0800
Subject: [PATCH] 1. 解决软件异常崩溃问题

---
 src/Bro.M071.Process/M071Process.cs |  143 +++++++++++++++++++++++++++++++----------------
 1 files changed, 93 insertions(+), 50 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 9f967b6..69301a8 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -195,6 +195,37 @@
         }
         #endregion
 
+
+        AutoResetEvent _jobDoneHandle = new AutoResetEvent(false);
+        [ProcessMethod("ManualTest", "ManualTest", "鎵嬪姩娴嬭瘯", InvokeType.TestInvoke)]
+        public ProcessResponse ManualTest(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (config is ManualTestOperationConfig opConfig)
+            {
+                Task.Run(async () =>
+                {
+                    for (int i = 0; i < opConfig.RepeatTimes; i++)
+                    {
+                        BarCode = $"Test_{i + 1}";
+                        StartJob(null, null, null);
+
+                        if (_jobDoneHandle.WaitOne(20000))
+                        {
+                            LogAsync(DateTime.Now, $"绗瑊i + 1}娆′换鍔″畬鎴�", "");
+                            await Task.Delay(500);
+                        }
+                        else
+                        {
+                            LogAsync(DateTime.Now, $"绗瑊i + 1}娆′换鍔¤秴鏃�", "");
+                            break;
+                        }
+                    }
+                });
+            }
+
+            return new ProcessResponse(true);
+        }
+
         object productionLock = new object();
         List<ProductionMeasurement> productionList = new List<ProductionMeasurement>();
 
@@ -394,7 +425,6 @@
 
         private void StartCheck()
         {
-
             if (isRightStart && isLeftStart)
             {
                 if (_isdoing)
@@ -630,6 +660,8 @@
                     }
                 }
 
+                _jobDoneHandle.Set();
+
                 var measurementUnitResultAndKeyUnitDataSet = GetMeasurementUnitResultAndKeyUnitData(pMeasure);
 
                 if (pMeasure.PResult != "NA")
@@ -821,6 +853,7 @@
         //}
 
         static object excelExportLock = new object();
+        string fileName = "";
         private async void ExportProductionInColumns(ProductionMeasurementUnitResultAndKeyUnitDataSet exportData)
         {
             if (!Config.IsCSVOutputEnabled)
@@ -834,7 +867,11 @@
                     {
                         Directory.CreateDirectory(Config.LogPath);
                     }
-                    var fileName = Path.Combine(Config.LogPath, $"LDSData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx");
+
+                    if (string.IsNullOrWhiteSpace(fileName))
+                    {
+                        fileName = Path.Combine(Config.LogPath, $"LDSData_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.xlsx");
+                    }
 
                     try
                     {
@@ -1139,9 +1176,10 @@
                     catch (Exception ex)
                     {
                         LogAsync(DateTime.Now, "Excel鏃ュ織寮傚父", ex.GetExceptionMessage());
-                        string bkFileName = Path.Combine(Config.LogPath, $"{Path.GetFileNameWithoutExtension(fileName)}_bk_{DateTime.Now.ToString("HHmmss")}.xlsx");
-                        File.Copy(fileName, bkFileName);
-                        File.Delete(fileName);
+                        fileName = Path.Combine(Config.LogPath, $"LDSData_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.xlsx");
+                        //string bkFileName = Path.Combine(Config.LogPath, $"{Path.GetFileNameWithoutExtension(fileName)}_bk_{DateTime.Now.ToString("HHmmss")}.xlsx");
+                        //File.Copy(fileName, bkFileName);
+                        //File.Delete(fileName);
                     }
                 }
             });
@@ -1263,6 +1301,8 @@
         }
         #endregion
 
+        static object _resultCalcLock = new object();
+
         private async void RunImageHandle(IOperationConfig opConfig, IImageSet imgSet, string snapshotId, string snapshotName, List<MeasurementUnit> measureList)
         {
             await Task.Run(() =>
@@ -1340,71 +1380,74 @@
                 //    Directory.CreateDirectory(dir);
                 //}
 
-                //Parallel.For(1, count.I + 1, (i) =>
-                for (int i = 1; i <= count.I; i++)
+                lock (_resultCalcLock)
                 {
-                    HOperatorSet.SelectObj(images, out HObject image, i);
-
-                    //string fileName = Path.Combine(dir, $"{i}.tif");
-                    //using (HImage temp = image.ConvertHObjectToHImage())
-                    //{
-                    //    temp.WriteImage("tiff", 0, fileName);
-                    //}
-
-                    keys.Where(u => u.ImageSeq == i).ToList().ForEach(k =>
+                    //Parallel.For(1, count.I + 1, (i) =>
+                    for (int i = 1; i <= count.I; i++)
                     {
-                        Dictionary<string, double> resultDict = null;
+                        HOperatorSet.SelectObj(images, out HObject image, i);
 
-                        var keyBindList = keyBindCollection.Where(u => u.Key == k.Key).ToList();
+                        //string fileName = Path.Combine(dir, $"{i}.tif");
+                        //using (HImage temp = image.ConvertHObjectToHImage())
+                        //{
+                        //    temp.WriteImage("tiff", 0, fileName);
+                        //}
 
-                        string keyToolKey = k.AliasName + "|" + k.KeyAlgorithemPath;
-                        if (!_halconToolDict.ContainsKey(keyToolKey))
+                        keys.Where(u => u.ImageSeq == i).ToList().ForEach(k =>
                         {
-                            LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬畻娉曟湭鍒濆鍖�", "");
-                        }
-                        else
-                        {
-                            _halconToolDict[keyToolKey].InputImageDic["INPUT_Image"] = image;
-                            _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X / 1000000.0;
-                            _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Y"] = scanParam.Resolution_Y / 1000000.0;
-                            _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z / 1000000.0;
-                            _halconToolDict[keyToolKey].InputTupleDic["INPUT_ImageId"] = $"{k.AliasName}_{DateTime.Now.ToString("HHmmssfff")}.tif";
-                            if (!_halconToolDict[keyToolKey].RunProcedure(out string error))
+                            Dictionary<string, double> resultDict = null;
+
+                            var keyBindList = keyBindCollection.Where(u => u.Key == k.Key).ToList();
+
+                            string keyToolKey = k.AliasName + "|" + k.KeyAlgorithemPath;
+                            if (!_halconToolDict.ContainsKey(keyToolKey))
                             {
-                                LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬畻娉曞紓甯革紝{error}", "");
+                                LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬畻娉曟湭鍒濆鍖�", "");
                             }
                             else
                             {
-                                var results = _halconToolDict[keyToolKey].GetResultTuple("OUTPUT_Results").DArr.ToList();
-                                if (results.Count == 0 || results.Any(u => u < 0))
+                                _halconToolDict[keyToolKey].InputImageDic["INPUT_Image"] = image;
+                                _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X / 1000000.0;
+                                _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Y"] = scanParam.Resolution_Y / 1000000.0;
+                                _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z / 1000000.0;
+                                _halconToolDict[keyToolKey].InputTupleDic["INPUT_ImageId"] = $"{k.AliasName}_{DateTime.Now.ToString("HHmmssfff")}.tif";
+                                if (!_halconToolDict[keyToolKey].RunProcedure(out string error))
                                 {
-                                    LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁寮傚父", "");
+                                    LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬畻娉曞紓甯革紝{error}", "");
                                 }
                                 else
                                 {
-                                    //LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁", $"{string.Join(" ", results)}");
-
-                                    results = results.Select(u => u - Config.PlanCompensation).ToList();
-                                    resultDict = k.KeyResultList.ToDictionary(u => u, u =>
+                                    var results = _halconToolDict[keyToolKey].GetResultTuple("OUTPUT_Results").DArr.ToList();
+                                    if (results.Count == 0 || results.Any(u => u < 0))
                                     {
-                                        int index = k.KeyResultList.IndexOf(u);
-                                        return results[index];
-                                    });
+                                        LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁寮傚父", "");
+                                    }
+                                    else
+                                    {
+                                        //LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁", $"{string.Join(" ", results)}");
+
+                                        results = results.Select(u => u - Config.PlanCompensation).ToList();
+                                        resultDict = k.KeyResultList.ToDictionary(u => u, u =>
+                                        {
+                                            int index = k.KeyResultList.IndexOf(u);
+                                            return results[index];
+                                        });
+                                    }
                                 }
                             }
-                        }
 
-                        keyBindList.ForEach(kb =>
-                        {
-                            kb.KeyImages.Add(image.ConvertHObjectToHImage());
-                            kb.FillKeyValues(resultDict);
+                            keyBindList.ForEach(kb =>
+                            {
+                                kb.KeyImages.Add(image.ConvertHObjectToHImage());
+                                kb.FillKeyValues(resultDict);
+                            });
                         });
-                    });
 
-                    image.Dispose();
-                    image = null;
+                        image.Dispose();
+                        image = null;
+                    }
+                    //);
                 }
-                //);
 
                 imgSet.HImage.Dispose();
                 imgSet.HImage = null;

--
Gitblit v1.8.0