From f06ae0e33e33f1ed5f198827b9b5a53e765b3eee Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期一, 11 一月 2021 10:58:26 +0800 Subject: [PATCH] 1. 来料检测添加线体代码 2. 添加检测数据区间压缩配置和功能 --- src/Bro.M071.Process/M071Process.cs | 248 ++++++++++++++++++++++++++++++++----------------- 1 files changed, 163 insertions(+), 85 deletions(-) diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index 1de633a..cc95119 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -2,7 +2,7 @@ using Bro.Common.Helper; using Bro.Common.Interface; using Bro.Common.Model; -using Bro.M071.DBManager; +//using Bro.M071.DBManager; using Bro.M071.Model; using Bro.M071.Model.Model; using Bro.M071.Process.UI; @@ -14,6 +14,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Configuration; using System.Drawing; using System.Drawing.Imaging; using System.IO; @@ -49,6 +50,7 @@ #endregion string _precision = "f3"; + double _allowedShift = 0; public override void Open() { @@ -73,6 +75,12 @@ IncomingCheckMethod = InitialMESWebServiceMethod(IncomingCheckMethodName, out IncomingCheckObj); DataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj); + + var allowedShiftStr = ConfigurationManager.AppSettings["DataShift"]; + if (!double.TryParse(allowedShiftStr, out _allowedShift)) + { + _allowedShift = 0; + } } private void InitialMotionCardBaseAxisAlarm() @@ -361,6 +369,74 @@ return new ProcessResponse(); } + + [ProcessMethod("Demostration", "CheckBasePlan", "鍩哄噯骞抽潰妫�鏍�", InvokeType.TestInvoke)] + public ProcessResponse CheckBasePlan(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) + { + if (opConfig is DemostrationOperationConfig config) + { + config.DemoOperations.ForEach(d => + { + IDevice device = DeviceCollection.FirstOrDefault(u => u.Id == d.MotionOp.Device); + if (device != null) + { + IMotionCard motionDevice = device as IMotionCard; + + if (motionDevice != null) + { + var response = motionDevice.Run(d.MotionOp.OpConfig); + if (!response.Result) + { + throw new ProcessException($"{device.Name}寮傚父锛寋response.Message}", null, ExceptionLevel.Fatal); + } + } + } + + CameraBase camera = DeviceCollection.FirstOrDefault(u => u.Id == d.CameraOp.Device) as CameraBase; + if (camera != null) + { + IImageSet set = null; + try + { + set = CollectHImage(camera, d.CameraOp.OpConfig); + } + catch (ProcessException pEx) + { + pEx.Level = ExceptionLevel.Fatal; + throw pEx; + } + + if (set != null) + { + LaserScanParam scanParam = JsonConvert.DeserializeObject<LaserScanParam>(set.ImageData); + LogAsync(DateTime.Now, $"鎵弿鍙傛暟:{set.ImageData}", ""); + + var tool = GetHalconTool(d.CameraOp.OpConfig, config.MonitorSetId); + if (tool != null) + { + using (tool.InputImageDic["INPUT_Image"] = set.HImage) + { + tool.InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z / 1000000.0; + + if (!tool.RunProcedure(out string error)) + { + LogAsync(DateTime.Now, $"{tool.ProcedureName}鎵ц寮傚父", error); + } + else + { + var diffX = tool.GetResultTuple("OUTPUT_Result_X").D; + var diffY = tool.GetResultTuple("OUTPUT_Result_Y").D; + LogAsync(DateTime.Now, $"妫�娴嬪钩闈紝X鏂瑰悜鏋佸樊锛歿diffX.ToString(_precision)}锛孻鏂瑰悜鏋佸樊锛歿diffY.ToString(_precision)}", ""); + } + } + } + } + } + }); + } + + return new ProcessResponse(); + } #endregion #region 绉佹湁鏂规硶 @@ -418,17 +494,20 @@ } else { - m.Spec.ActualValue = double.Parse(_halconToolDict[toolKey].GetResultTuple("OUTPUT_Result").D.ToString(_precision)); - //LogAsync(DateTime.Now, $"{m.GetDisplayText()}鏁版嵁{m.Spec.ActualValue}锛岀粨鏋渰(m.Spec.MeasureResult == null ? "TBD" : (m.Spec.MeasureResult == true ? "OK" : "NG"))}", ""); + double actualValue = double.Parse(_halconToolDict[toolKey].GetResultTuple("OUTPUT_Result").D.ToString(_precision)); + m.Spec.ActualValue = actualValue; + + //M071瑕佹眰瓒呴檺鏁版嵁鍦ㄥ厑璁歌寖鍥村唴鍘嬬缉鍒板悎鏍艰寖鍥村唴 + if (_allowedShift > 0 && m.Spec.MeasureResult != null && m.Spec.MeasureResult.Value == false) + { + m.Spec.ActualValue = m.Spec.StandardValue + (actualValue - m.Spec.StandardValue) * (m.Spec.Tolrenance_Positive - m.Spec.StandardValue) / (m.Spec.Tolrenance_Positive - m.Spec.StandardValue + _allowedShift); + } } } } } - //LogAsync(DateTime.Now, $"{m.GetDisplayText()}妫�娴嬬粨鏋�", $"{((m.Spec.MeasureResult ?? false) ? "OK" : "NG")}"); - KeyIndicator indicator = new KeyIndicator(m.Id, m.DisplayLocation); - //indicator.Text = (m.Spec.ActualValue == null || m.Spec.ActualValue == -999) ? "NA" : m.Spec.ActualValue.Value.ToString(_precision); indicator.Text = m.Spec.ActualValue == null ? "NA" : m.Spec.ActualValue.Value.ToString(_precision); indicator.ResultState = m.Spec.MeasureResult; pMeasure.ElementList.Add(indicator); @@ -500,44 +579,44 @@ } } - KeyUnitDataManager keyUnitDataManager = new KeyUnitDataManager(); - MeasurementUnitResultManager measurementUnitResultManager = new MeasurementUnitResultManager(); - MeasurementAndKeyDataRelationManager measurementAndKeyDataRelationManager = new MeasurementAndKeyDataRelationManager(); - ProductionMeasurementRecordsManager productionMeasurementRecordsManager = new ProductionMeasurementRecordsManager(); + //KeyUnitDataManager keyUnitDataManager = new KeyUnitDataManager(); + //MeasurementUnitResultManager measurementUnitResultManager = new MeasurementUnitResultManager(); + //MeasurementAndKeyDataRelationManager measurementAndKeyDataRelationManager = new MeasurementAndKeyDataRelationManager(); + //ProductionMeasurementRecordsManager productionMeasurementRecordsManager = new ProductionMeasurementRecordsManager(); static object dataSaveLock = new object(); - private async void SaveProductionData(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet) - { - await Task.Run(() => - { - try - { - lock (dataSaveLock) - { - // 鑾峰彇 浜у搧鏁版嵁 骞朵繚瀛� - var productionMeasurementRecords = measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord; - productionMeasurementRecordsManager.CreateModel(productionMeasurementRecords); + //private async void SaveProductionData(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet) + //{ + // await Task.Run(() => + // { + // try + // { + // lock (dataSaveLock) + // { + // // 鑾峰彇 浜у搧鏁版嵁 骞朵繚瀛� + // var productionMeasurementRecords = measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord; + // productionMeasurementRecordsManager.CreateModel(productionMeasurementRecords); - // 鑾峰彇 鍘熷鏁版嵁 骞朵繚瀛� - var keyUnitDatas = measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList; - keyUnitDataManager.BatchAddKeyUnitData(keyUnitDatas); + // // 鑾峰彇 鍘熷鏁版嵁 骞朵繚瀛� + // var keyUnitDatas = measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList; + // keyUnitDataManager.BatchAddKeyUnitData(keyUnitDatas); - // 鑾峰彇 妫�娴嬬粨鏋滄暟鎹� 骞朵繚瀛� - var measurementUnitResults = measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList; - measurementUnitResultManager.BatchAddMeasurementUnitResult(measurementUnitResults); + // // 鑾峰彇 妫�娴嬬粨鏋滄暟鎹� 骞朵繚瀛� + // var measurementUnitResults = measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList; + // measurementUnitResultManager.BatchAddMeasurementUnitResult(measurementUnitResults); - // 鑾峰彇 鍏崇郴鏁版嵁骞朵繚瀛� - var measurementAndKeyDataRelationList = measurementUnitResultAndKeyUnitDataSet.MeasurementAndKeyDataRelationList; - measurementAndKeyDataRelationManager.BatchAddMeasurementAndKeyDataRelation(measurementAndKeyDataRelationList); - } - } - catch (Exception ex) - { - LogAsync(DateTime.Now, "鏁版嵁淇濆瓨寮傚父", ex.GetExceptionMessage()); - } - }); - } + // // 鑾峰彇 鍏崇郴鏁版嵁骞朵繚瀛� + // var measurementAndKeyDataRelationList = measurementUnitResultAndKeyUnitDataSet.MeasurementAndKeyDataRelationList; + // measurementAndKeyDataRelationManager.BatchAddMeasurementAndKeyDataRelation(measurementAndKeyDataRelationList); + // } + // } + // catch (Exception ex) + // { + // LogAsync(DateTime.Now, "鏁版嵁淇濆瓨寮傚父", ex.GetExceptionMessage()); + // } + // }); + //} private ProductionMeasurementUnitResultAndKeyUnitDataSet GetMeasurementUnitResultAndKeyUnitData(ProductionMeasurement pData) { @@ -570,12 +649,12 @@ measurementUnitResult.ProductionBarcode = productionMeasurementRecords.ProductionBarcode; measurementUnitResult.MeasurementName = measurementUnit.GetDisplayText(); - if (measurementUnit.MeasureType == "Alignment" || measurementUnit.MeasureType == "Slant") + if (measurementUnit.MeasureType.StartsWith("Alignment") || measurementUnit.MeasureType.StartsWith("Slant")) { measurementUnitResult.Keys = string.Join("-", measurementUnit.KeyUnitCollection.Select(u => u.Key)); measurementUnitResult.Positions = string.Join("-", measurementUnit.KeyUnitCollection.Select(u => u.KeyResultId)); } - else if (measurementUnit.MeasureType == "RowAlignment") + else if (measurementUnit.MeasureType.StartsWith("RowAlignment")) { measurementUnitResult.Keys = measurementUnit.KeyUnitCollection[0].Key + "~" + measurementUnit.KeyUnitCollection[measurementUnit.KeyUnitCollection.Count() - 1].Key; measurementUnitResult.Keys = measurementUnit.KeyUnitCollection[0].KeyResultId + "~" + measurementUnit.KeyUnitCollection[measurementUnit.KeyUnitCollection.Count() - 1].KeyResultId; @@ -620,49 +699,49 @@ return measurementUnitResultAndKeyUnitDataSet; } - private async void ExportProductionExcel(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet) - { - if (!Config.IsCSVOutputEnabled) - return; + //private async void ExportProductionExcel(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet) + //{ + // if (!Config.IsCSVOutputEnabled) + // return; - await Task.Run(() => - { - ExcelExportSet excelExportDto = new ExcelExportSet(); - 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", "妫�娴嬪��"}, - {"MeasurementResult", "妫�娴嬬粨鏋�"}, - }; - excelExportDto.WorksheetColumns[excelExportDto.Worksheets[0]] = keyUnitColumns; - excelExportDto.WorksheetColumns[excelExportDto.Worksheets[1]] = measurementUnitResultColumns; + // await Task.Run(() => + // { + // ExcelExportSet excelExportDto = new ExcelExportSet(); + // 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", "妫�娴嬪��"}, + // {"MeasurementResult", "妫�娴嬬粨鏋�"}, + // }; + // excelExportDto.WorksheetColumns[excelExportDto.Worksheets[0]] = keyUnitColumns; + // excelExportDto.WorksheetColumns[excelExportDto.Worksheets[1]] = measurementUnitResultColumns; - excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[0]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList, keyUnitColumns); - excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[1]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList, measurementUnitResultColumns); ; + // excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[0]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList, keyUnitColumns); + // excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[1]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList, measurementUnitResultColumns); ; - if (!Directory.Exists(Config.LogPath)) - { - Directory.CreateDirectory(Config.LogPath); - } - var fileName = Path.Combine(Config.LogPath, $"ProductionData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx"); + // if (!Directory.Exists(Config.LogPath)) + // { + // Directory.CreateDirectory(Config.LogPath); + // } + // var fileName = Path.Combine(Config.LogPath, $"ProductionData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx"); - 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(); - }); - } + // 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) @@ -731,7 +810,7 @@ positionCell.Value = "Positions"; SetTitleCell(positionCell); - var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "Alignment").ToList(); + var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); for (int i = 0; i < alignmentMeasures.Count(); i++) { var cellKeys = alignmentSheet.Cells[i + 3, 1]; @@ -758,7 +837,7 @@ positionCell.Value = "Positions"; SetTitleCell(positionCell); - var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "RowAlignment").ToList(); + var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); for (int i = 0; i < rowAlignmentMeasures.Count(); i++) { var cellKeys = rowAlignmentSheet.Cells[i + 3, 1]; @@ -815,7 +894,7 @@ #endregion #region Slant - var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "Slant").ToList(); + var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Slant")).ToList(); if (slantMeasures.Count > 0) { int slantStartCol = slantSheet.Dimension.Columns; @@ -854,7 +933,7 @@ #region Alignment { - var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "Alignment").ToList(); + var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); if (alignmentMeasures.Count > 0) { List<string> keysList = new List<string>(); @@ -913,7 +992,7 @@ #region RowAlignment { - var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "RowAlignment").ToList(); + var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); if (rowAlignmentMeasures.Count > 0) { List<string> keysList = new List<string>(); @@ -1105,7 +1184,6 @@ var keyBindCollection = measureList.SelectMany(u => u.KeyUnitCollection).Where(u => keys.Any(k => k.Key == u.Key)).ToList(); string toolKey = (opConfig as CameraOprerationConfigBase).AlgorithemPath; - //HObject images = imgSet.HImage; HObject images = new HObject(); LaserScanParam scanParam = JsonConvert.DeserializeObject<LaserScanParam>(imgSet.ImageData); -- Gitblit v1.8.0