From b5e7fa2db4ac36fdb7bf9fd330d12a72ade9d483 Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期日, 24 一月 2021 15:07:26 +0800
Subject: [PATCH] 0124

---
 src/Bro.M071.Process/M071Process.cs |  100 +++++++++++++++++++++++++++++++++++---------------
 1 files changed, 70 insertions(+), 30 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 47498b8..f4108cd 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -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()
@@ -185,6 +193,7 @@
         }
         #endregion
 
+        object productionLock = new object();
         List<ProductionMeasurement> productionList = new List<ProductionMeasurement>();
 
         [ProcessMethod("", "StartJob", "寮�濮嬫壂鎻�", InvokeType.TestInvoke)]
@@ -196,12 +205,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 +248,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 +448,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 +502,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 +561,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 +593,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 +672,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 +833,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 +860,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 +1206,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