From e69865a1a3739740201bac8782b721da35d49923 Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期一, 25 一月 2021 18:45:28 +0800 Subject: [PATCH] 1. gocator添加重试和清理缓存操作 2. gts板卡调整监听频率 3. 记录产品数据使用filsstream避免程序崩溃影响 --- src/Bro.M071.Process/M071Process.cs | 102 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 72 insertions(+), 30 deletions(-) diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index 47498b8..7165338 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -14,10 +14,12 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Configuration; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -49,6 +51,7 @@ #endregion string _precision = "f3"; + double _allowedShift = 0; public override void Open() { @@ -73,6 +76,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() @@ -185,9 +194,11 @@ } #endregion + object productionLock = new object(); List<ProductionMeasurement> productionList = new List<ProductionMeasurement>(); [ProcessMethod("", "StartJob", "寮�濮嬫壂鎻�", InvokeType.TestInvoke)] + [MethodImpl(MethodImplOptions.Synchronized)] public ProcessResponse StartJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) { if (!IsAllowedWork) @@ -196,12 +207,12 @@ } string hint = ""; - if (MachineState != MachineState.Ready) - { - hint = "鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�"; - OnCheckHintUpload?.Invoke(hint, true); - throw new ProcessException(hint, null, ExceptionLevel.Fatal); - } + //if (MachineState != MachineState.Ready) + //{ + // hint = "鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�"; + // OnCheckHintUpload?.Invoke(hint, true); + // throw new ProcessException(hint, null, ExceptionLevel.Warning); + //} if (string.IsNullOrWhiteSpace(BarCode)) { @@ -239,15 +250,18 @@ BarCode = ""; - var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); - if (existedProduction != null) + lock (productionLock) { - productionList.Remove(existedProduction); - existedProduction.Dispose(); - existedProduction = null; - } + var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); + if (existedProduction != null) + { + productionList.Remove(existedProduction); + existedProduction.Dispose(); + existedProduction = null; + } - productionList.Add(pMeasure); + productionList.Add(pMeasure); + } pMeasure.InitialMeasurementsPropertyChanged(); pMeasure.PropertyChanged += MeasureProduction_PropertyChanged; @@ -436,9 +450,13 @@ { if (sender is ProductionMeasurement pMeasure) { - var production = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); - if (production == null) - return; + ProductionMeasurement production = null; + lock (productionLock) + { + production = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); + if (production == null) + return; + } lock (production) { @@ -486,17 +504,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); @@ -542,8 +563,20 @@ LogAsync(DateTime.Now, $"{pMeasure.Barcode} 妫�娴嬪畬鎴愶紝缁撴灉 {pMeasure.PResult}", ""); - if (MachineState == MachineState.Running) - MachineState = MachineState.Ready; + //if (MachineState == MachineState.Running) + // MachineState = MachineState.Ready; + + if (MachineState != MachineState.Alarm) + { + if (MachineState == MachineState.Pause) + { + _machineStateBeforePause = MachineState.Ready; + } + else + { + MachineState = MachineState.Ready; + } + } var measurementUnitResultAndKeyUnitDataSet = GetMeasurementUnitResultAndKeyUnitData(pMeasure); @@ -562,7 +595,10 @@ SaveWholeImage(pMeasure); - productionList.RemoveAll(p => p.Barcode == pMeasure.Barcode); + lock (productionLock) + { + productionList.RemoveAll(p => p.Barcode == pMeasure.Barcode); + } pMeasure.Dispose(); //LogAsync(DateTime.Now, $"{pMeasure.Barcode}浜у搧淇℃伅閲婃斁瀹屾垚", JsonConvert.SerializeObject(pMeasure)); } @@ -638,19 +674,19 @@ 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; } measurementUnitResult.MeasurementType = measurementUnit.MeasureType; measurementUnitResult.MeasurementValue = measurementUnit.Spec.ActualValue == null ? "NA" : measurementUnit.Spec.ActualValue.Value.ToString(_precision); - measurementUnitResult.MeasurementResult = measurementUnit.Spec.MeasureResult.Value ? "OK" : "NG"; + measurementUnitResult.MeasurementResult = measurementUnit.Spec.MeasureResult == null ? "NA" : measurementUnit.Spec.MeasureResult.Value ? "OK" : "NG"; measurementUnitResults.Add(measurementUnitResult); @@ -799,7 +835,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]; @@ -826,7 +862,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]; @@ -1172,8 +1208,14 @@ var keys = Config.KeyUnitCollection.Where(u => u.IsEnabled && u.SnapshotPointId == snapshotId); var keyBindCollection = measureList.SelectMany(u => u.KeyUnitCollection).Where(u => keys.Any(k => k.Key == u.Key)).ToList(); + if (imgSet.HImage == null) + { + LogAsync(DateTime.Now, $"{snapshotName}鏈幏鍙栨壂鎻忓浘鍍�", ""); + keyBindCollection.ForEach(k => k.FillKeyValues(null)); + return; + } + 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