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 | 140 ++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 114 insertions(+), 26 deletions(-) diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index 21775d8..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); @@ -489,18 +498,19 @@ measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord = productionMeasurementRecords; - foreach (var MeasurementUnitResult in pData.Measurements)//鑾峰彇鍒板崟涓祴閲忛」缁撴灉 + foreach (var measurementUnit in pData.Measurements)//鑾峰彇鍒板崟涓祴閲忛」缁撴灉 { MeasurementUnitResult measurementUnitResult = new MeasurementUnitResult(); measurementUnitResult.ProductionMeasurementRecordsId = productionMeasurementRecords.ID; - measurementUnitResult.MeasurementName = MeasurementUnitResult.Name; - measurementUnitResult.MeasurementType = MeasurementUnitResult.MeasureType; - measurementUnitResult.MeasurementValue = MeasurementUnitResult.Spec.ActualValue.ToString(); - measurementUnitResult.MeasurementResult = MeasurementUnitResult.Spec.MeasureResult.Value ? "OK" : "NG"; + measurementUnitResult.ProductionBarcode = productionMeasurementRecords.ProductionBarcode; + measurementUnitResult.MeasurementName = measurementUnit.GetDisplayText(); + measurementUnitResult.MeasurementType = measurementUnit.MeasureType; + measurementUnitResult.MeasurementValue = measurementUnit.Spec.ActualValue.ToString(); + measurementUnitResult.MeasurementResult = measurementUnit.Spec.MeasureResult.Value ? "OK" : "NG"; measurementUnitResults.Add(measurementUnitResult); - foreach (var keyUnit in MeasurementUnitResult.KeyUnitCollection)//鑾峰彇鍗曚釜閿殑娴嬮噺缁撴灉 + foreach (var keyUnit in measurementUnit.KeyUnitCollection)//鑾峰彇鍗曚釜閿殑娴嬮噺缁撴灉 { foreach (var keyValue in keyUnit.MeasureValueDict)//鑾峰彇鍗曚釜閿殑鍗曚釜娴嬮噺item 缁撴灉 { @@ -508,6 +518,7 @@ if (!isExist)//宸插瓨鍦� 涓嶉噸澶嶆坊鍔犲師濮嬫暟鎹� { KeyUnitData keyUnitData = new KeyUnitData(); + keyUnitData.ProductionBarcode = productionMeasurementRecords.ProductionBarcode; keyUnitData.Key = keyUnit.Key; keyUnitData.MeasurementItem = keyValue.Key; keyUnitData.ItemValue = keyValue.Value.ToString(); @@ -544,12 +555,14 @@ excelExportDto.Worksheets = new List<string>() { "鍘熷鏁版嵁", "妫�娴嬬粨鏋�" }; var keyUnitColumns = new Dictionary<string, string>() { + {"ProductionBarcode", "浜у搧鏉$爜"}, {"Key", "閿�"}, {"MeasurementItem", "妫�娴嬮」"}, {"ItemValue", "妫�娴嬪��"} }; var measurementUnitResultColumns = new Dictionary<string, string>() { + {"ProductionBarcode", "浜у搧鏉$爜"}, {"MeasurementName", "妫�娴嬪悕绉�"}, {"MeasurementType", "妫�娴嬬被鍨�"}, {"MeasurementValue", "妫�娴嬪��"}, @@ -561,17 +574,88 @@ excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[0]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList, keyUnitColumns); excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[1]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList, measurementUnitResultColumns); ; - byte[] filecontent = ExcelExportHelper.ExportExcel(excelExportDto, false); - string dir = Path.Combine(Config.LogPath, DateTime.Now.ToString("yyyyMMdd")); - if (!Directory.Exists(dir)) + if (!Directory.Exists(Config.LogPath)) { - Directory.CreateDirectory(dir); + Directory.CreateDirectory(Config.LogPath); } + var fileName = Path.Combine(Config.LogPath, $"ProductionData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx"); - FileStream fs = new FileStream(Path.Combine(dir, $"{measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord.ProductionBarcode}_{DateTime.Now.ToString("HHmmss")}.xlsx"), FileMode.Create, FileAccess.Write); + byte[] filecontent = ExcelExportHelper.CreateOrAppendExcel(excelExportDto, fileName); + FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); 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(); + }; }); } @@ -688,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)) { @@ -719,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); @@ -758,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); @@ -780,7 +868,7 @@ //image.Dispose(); } - ); + //); //if (count.I != 1) //{ -- Gitblit v1.8.0