From d3a44f202c0b12cbac67c71129c3c4f480df55b9 Mon Sep 17 00:00:00 2001 From: xcd <834800634@qq.com> Date: 星期三, 15 七月 2020 15:48:32 +0800 Subject: [PATCH] 光幕触发修改为同步,消弭信号抖动问题 Excel导出测试 --- src/Bro.M071.Process/M071Process.cs | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 100 insertions(+), 16 deletions(-) diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index 1d81456..c9ff290 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -9,6 +9,7 @@ using Bro.Process; using HalconDotNet; using Newtonsoft.Json; +using OfficeOpenXml; using System; using System.Collections.Generic; using System.ComponentModel; @@ -61,7 +62,6 @@ Reset(null, null, null); FullReset(null); - } private void InitialMotionCardBaseAxisAlarm() @@ -82,7 +82,7 @@ private void InitialSetting() { //鏁版嵁搴撹縼绉绘鏌� - DatabaseInitialize.Initialize(); + //DatabaseInitialize.Initialize(); MotionCardSettingCheck(); @@ -196,7 +196,7 @@ } MachineState = MachineState.Running; - OnMeasureStart?.BeginInvoke(null, null); + OnMeasureStart?.Invoke(); var measurements = Config.MeasurementUnitCollection.Where(u => u.IsEnabled).ToList().DeepSerializeClone(); measurements.ForEach(m => @@ -226,9 +226,12 @@ Config.SnapshotPointCollection.Where(u => u.IsEnabled).ToList().ForEach(s => { - _pauseHandle.WaitHandle.WaitOne(); + _pausedHandle.Wait(); - if (MachineState != MachineState.Running) + if (MachineState == MachineState.Ready) + return; + + if (MachineState != MachineState.Running && MachineState != MachineState.Pause) { throw new ProcessException("鏈哄彴鐘舵�佷笉鍦ㄨ繍琛屼腑锛岄��鍑烘娴�"); } @@ -336,10 +339,14 @@ { if (sender is ProductionMeasurement pMeasure) { - lock (pMeasure) + var production = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); + if (production == null) + return; + + lock (production) { //妫�鏌ユ槸鍚﹀叏閮ㄥ畬鎴� - pMeasure.Measurements.ForEach(m => + pMeasure.Measurements?.ForEach(m => { if (m.KeyUnitCollection.All(k => k.IsDone != null)) { @@ -381,7 +388,7 @@ indicator.ResultState = m.Spec.MeasureResult; pMeasure.ElementList.Add(indicator); //杈撳嚭鍥惧舰鍩哄厓鍒扮晫闈� - OnElementUpdated?.BeginInvoke(indicator, null, null); + OnElementUpdated?.Invoke(indicator); SaveKeyImages(pMeasure.Barcode, m); @@ -414,8 +421,10 @@ { } - ////Excel鎶ヨ〃杈撳嚭 锛堝崟涓骇鍝佺殑excel瀵煎嚭锛� - //ExportProductionExcel(measurementUnitResultAndKeyUnitDataSet); + //Excel鎶ヨ〃杈撳嚭 锛堝崟涓骇鍝佺殑excel瀵煎嚭锛� + ExportProductionExcel(measurementUnitResultAndKeyUnitDataSet); + + ExportProductionInColumns(measurementUnitResultAndKeyUnitDataSet); ////鏁版嵁搴撲繚瀛� //SaveProductionData(measurementUnitResultAndKeyUnitDataSet); @@ -494,7 +503,7 @@ MeasurementUnitResult measurementUnitResult = new MeasurementUnitResult(); measurementUnitResult.ProductionMeasurementRecordsId = productionMeasurementRecords.ID; measurementUnitResult.ProductionBarcode = productionMeasurementRecords.ProductionBarcode; - measurementUnitResult.MeasurementName = measurementUnit.Name; + measurementUnitResult.MeasurementName = measurementUnit.GetDisplayText(); measurementUnitResult.MeasurementType = measurementUnit.MeasureType; measurementUnitResult.MeasurementValue = measurementUnit.Spec.ActualValue.ToString(); measurementUnitResult.MeasurementResult = measurementUnit.Spec.MeasureResult.Value ? "OK" : "NG"; @@ -576,6 +585,77 @@ fs.Write(filecontent, 0, filecontent.Length); fs.Flush(); fs.Close(); + }); + } + + static object excelExportLock = new object(); + private async void ExportProductionInColumns(ProductionMeasurementUnitResultAndKeyUnitDataSet exportData) + { + if (!Config.IsCSVOutputEnabled) + return; + + await Task.Run(() => + { + if (!Directory.Exists(Config.LogPath)) + { + Directory.CreateDirectory(Config.LogPath); + } + var fileName = Path.Combine(Config.LogPath, $"LDSData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx"); + bool isExisted = File.Exists(fileName); + using (ExcelPackage package = new ExcelPackage(new FileInfo(fileName))) + { + ExcelWorksheet rawDataSheet = null; + ExcelWorksheet slantSheet = null; + ExcelWorksheet alignmentSheet = null; + ExcelWorksheet rowAlignmentSheet = null; + if (!isExisted) + { + package.Workbook.Worksheets.Add("RawData"); + rawDataSheet = package.Workbook.Worksheets["RawData"]; + for (int i = 0; i < Config.KeyNameCollection.Count; i++) + { + var cell = rawDataSheet.Cells[i + 3, 1]; + cell.Value = Config.KeyNameCollection[i]; + cell.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(31, 73, 125)); + } + + //package.Workbook.Worksheets.Add("Slant"); + //slantSheet = package.Workbook.Worksheets["Slant"]; + //for(int i=0;i<exportData.MeasurementUnitResultList) + //package.Workbook.Worksheets.Add("Alignment"); + //package.Workbook.Worksheets.Add("RowAlignment"); + } + + rawDataSheet = package.Workbook.Worksheets["RawData"]; + + int rowDataStartCol = rawDataSheet.Dimension.Columns; + var barcodeCell = rawDataSheet.Cells[1, rowDataStartCol + 1, 1, rowDataStartCol + 1 + 4]; + barcodeCell.Merge = true; + barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; + + var z1Cell = rawDataSheet.Cells[2, rowDataStartCol + 1]; + z1Cell.Value = "Z1"; + + var z2Cell = rawDataSheet.Cells[2, rowDataStartCol + 2]; + z2Cell.Value = "Z2"; + + var z3Cell = rawDataSheet.Cells[2, rowDataStartCol + 3]; + z3Cell.Value = "Z3"; + + var z4Cell = rawDataSheet.Cells[2, rowDataStartCol + 4]; + z4Cell.Value = "Z4"; + + exportData.KeyUnitDataList.ForEach(k => + { + int keyIndex = Config.KeyNameCollection.IndexOf(k.Key); + int zIndex = int.Parse(k.MeasurementItem.Substring(1)); + + var cell = rawDataSheet.Cells[keyIndex + 1 + 2, rowDataStartCol + zIndex]; + cell.Value = k.ItemValue; + }); + + package.Save(); + }; }); } @@ -692,6 +772,9 @@ return; } + string fileName = Path.Combine(Config.ImageSaveFolder, "BeforeRun", $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.tif"); + imgSet.HImage.WriteImage("tiff", 0, fileName); + _halconToolDict[toolKey].InputImageDic["INPUT_Image"] = imgSet.HImage; if (!_halconToolDict[toolKey].RunProcedure(out string error)) { @@ -723,14 +806,14 @@ }); } - string dir = Path.Combine(Config.ImageSaveFolder, "Clips", $"{snapshotName}_{DateTime.Now.ToString("HHmmss")}"); + string dir = Path.Combine(Config.ImageSaveFolder, "Clips", $"{DateTime.Now.ToString("yyyyMMdd")}", $"{snapshotName}_{DateTime.Now.ToString("HHmmss")}"); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } - Parallel.For(1, count.I + 1, (i) => - //for (int i = 1; i <= count.I; i++) + //Parallel.For(1, count.I + 1, (i) => + for (int i = 1; i <= count.I; i++) { HOperatorSet.SelectObj(images, out HObject image, i); @@ -762,10 +845,11 @@ var results = _halconToolDict[keyToolKey].GetResultTuple("OUTPUT_Results").HTupleToDouble(); if (results.Count == 0 || results.Any(u => u < 0)) { - LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬粨鏋滃紓甯�", ""); + LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁寮傚父", ""); } else { + LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁", $"{string.Join(" ", results)}"); resultDict = k.KeyResultList.ToDictionary(u => u, u => { int index = k.KeyResultList.IndexOf(u); @@ -784,7 +868,7 @@ //image.Dispose(); } - ); + //); //if (count.I != 1) //{ -- Gitblit v1.8.0