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