From e54c5a471c372e314f89c340644ddda98ab063bb Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期三, 19 八月 2020 11:04:22 +0800
Subject: [PATCH] 1. 优化gts板卡回原点操作 2. 添加数据精度配置 3. 添加HalconTool异常捕捉分类和部分非空判断

---
 src/Bro.Device.GTSCard/GTSCardDriver.cs            |   17 +++++---
 src/Bro.M071.Process/M071Process.cs                |   38 ++++++++++++++----
 src/Bro.Common.Device/DeviceBase/HDevEngineTool.cs |    8 +++
 src/Bro.M071.Process/M071Config.cs                 |    5 ++
 4 files changed, 51 insertions(+), 17 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/HDevEngineTool.cs b/src/Bro.Common.Device/DeviceBase/HDevEngineTool.cs
index f1f385d..ceb3068 100644
--- a/src/Bro.Common.Device/DeviceBase/HDevEngineTool.cs
+++ b/src/Bro.Common.Device/DeviceBase/HDevEngineTool.cs
@@ -136,9 +136,15 @@
             catch (HDevEngineException ex)
             {
                 IsSuccessful = false;
+                errorMsg = $"HDevProgram {ex.ProcedureName} Run fail , Line number: {ex.LineNumber}, Halcon error number : {ex.HalconError},ex:{ex.Message}";
+                return false;
+            }
+            catch (Exception ex)
+            {
+                IsSuccessful = false;
                 //Trace.TraceInformation("HDevProgram {0} Run fail , Line number: {1}, Halcon error number : {2},ex:{3}", ex.ProcedureName, ex.LineNumber, ex.HalconError, ex.Message);
                 //return;
-                errorMsg = $"HDevProgram {ex.ProcedureName} Run fail , Line number: {ex.LineNumber}, Halcon error number : {ex.HalconError},ex:{ex.Message}";
+                errorMsg = $"{ex.Message}";
                 return false;
             }
         }
diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index 573f480..c430886 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -894,11 +894,9 @@
                 short capture = 0;
 
                 GTSCardAPI.TTrapPrm trapPrm;
-                //鎼滅储璺濈 闃舵1
-                // 鍚姩Home鎹曡幏
-                short sRtn = GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME);
+
                 // 鍒囨崲鍒扮偣浣嶈繍鍔ㄦā寮�
-                sRtn = GTSCardAPI.GT_PrfTrap((short)IConfig.CardNum, (short)movingOption.AxisIndex);
+                short sRtn = GTSCardAPI.GT_PrfTrap((short)IConfig.CardNum, (short)movingOption.AxisIndex);
                 // 璇诲彇鐐逛綅妯″紡杩愬姩鍙傛暟
                 sRtn = GTSCardAPI.GT_GetTrapPrm((short)IConfig.CardNum, (short)movingOption.AxisIndex, out trapPrm);
                 trapPrm.acc = movingOption.VelocityPara.Acc;
@@ -912,6 +910,10 @@
                 {
                     PositionReset(movingOption.AxisIndex, 1);
                     ClearStatus(movingOption.AxisIndex, 1);
+
+                    //鎼滅储璺濈 闃舵1
+                    // 鍚姩Home鎹曡幏
+                    sRtn = GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME);
 
                     // 璁剧疆鐐逛綅妯″紡鐩爣浣嶇疆锛屽嵆鍘熺偣鎼滅储璺濈
                     sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, homeDirection ? 99999999 : -99999999);
@@ -942,8 +944,6 @@
 
                     if (isStop && capture != 1)
                     {
-                        ClearStatus((short)movingOption.AxisIndex, 1);
-
                         if (((axisStatus.AxisStatus & 0x20) != 0) || ((axisStatus.AxisStatus & 0x40) != 0))
                         {
                             //movingOption.GoHomePara.HomeDir = (short)(movingOption.GoHomePara.HomeDir == 1 ? -1 : 1);
@@ -954,7 +954,6 @@
                                 isRightLimitReached = true;
                             }
 
-
                             //璐熼檺浣�
                             if ((axisStatus.AxisStatus & 0x40) != 0 && goHomePara.IsCaptureDirPositive)
                             {
@@ -963,6 +962,8 @@
 
                             homeDirection = !homeDirection;
                         }
+
+                        ClearStatus(movingOption.AxisIndex, 1);
                     }
 
                     if (capture == 1)
@@ -970,6 +971,7 @@
                         if (!isRightLimitReached)
                         {
                             capture = 0;
+                            ClearStatus(movingOption.AxisIndex, 1);
                             //GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME);
                             continue;
                         }
@@ -977,6 +979,7 @@
                         //鍏坰top
                         MoveStop((short)movingOption.AxisIndex, 0);
                         ClearStatus((short)movingOption.AxisIndex, 1);
+
                         //宸茬粡鎹曡幏鍒癏ome鎵嶅彲浠ュ洖闆� 闃舵2
                         // 杩愬姩鍒�"鎹曡幏浣嶇疆+鍋忕Щ閲�"
                         sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, pos + goHomePara.HomeOffset);
diff --git a/src/Bro.M071.Process/M071Config.cs b/src/Bro.M071.Process/M071Config.cs
index c1e726f..08a33a7 100644
--- a/src/Bro.M071.Process/M071Config.cs
+++ b/src/Bro.M071.Process/M071Config.cs
@@ -80,6 +80,11 @@
         [DisplayName("4.骞抽潰琛ュ伩鍊�")]
         public double PlanCompensation { get; set; }
 
+        [Category("妫�娴嬭缃�")]
+        [Description("鏁版嵁绮惧害璁剧疆")]
+        [DisplayName("5.鏁版嵁绮惧害浣嶆暟")]
+        public int Precision { get; set; } = 3;
+
         //[Category("妫�娴嬭缃�")]
         //[DisplayName("缁撴灉鏁版嵁淇濆瓨璺緞")]
         //[Description("妫�娴嬬粨鏋滄暟鎹繚瀛樿矾寰�")]
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 7847649..a3a23dc 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -48,6 +48,9 @@
         public event Action OnFullResetDone;
         #endregion
 
+        string _precision = "f3";
+
+
         public override void Open()
         {
             InitialSetting();
@@ -63,6 +66,11 @@
 
             Reset(null, null, null);
             FullReset(null);
+
+            if (Config.Precision > 0)
+            {
+                _precision = "f" + Config.Precision;
+            }
         }
 
         private void InitialMotionCardBaseAxisAlarm()
@@ -367,17 +375,28 @@
                                     }
                                     else
                                     {
-                                        var array = m.KeyUnitCollection.SelectMany(u => u.MeasureValueDict.Values.ToList().ConvertAll(v => v ?? -999)).ToArray();
-                                        _halconToolDict[toolKey].InputTupleDic["INPUT_Params"] = new HTuple(array);
-                                        if (!_halconToolDict[toolKey].RunProcedure(out string error))
+                                        //var array = m.KeyUnitCollection.SelectMany(u => u.MeasureValueDict.Values.ToList().ConvertAll(v => v ?? -999)).ToArray();
+                                        var array = m.KeyUnitCollection.SelectMany(u => u.MeasureValueDict.Values.Select(v => v ?? -999)).ToArray();
+
+                                        if (array == null || array.Length == 0)
                                         {
-                                            LogAsync(DateTime.Now, $"{m.GetDisplayText()}{m.Spec.Code}绠楁硶寮傚父,{error}", "");
+                                            LogAsync(DateTime.Now, $"{m.GetDisplayText()}{m.Spec.Code}鏈兘鑾峰彇瀵瑰簲妫�娴嬪��", "");
                                             m.Spec.ActualValue = -999;
                                         }
                                         else
                                         {
-                                            m.Spec.ActualValue = double.Parse(_halconToolDict[toolKey].GetResultTuple("OUTPUT_Result").D.ToString("f2"));
-                                            //LogAsync(DateTime.Now, $"{m.GetDisplayText()}鏁版嵁{m.Spec.ActualValue}锛岀粨鏋渰(m.Spec.MeasureResult == null ? "TBD" : (m.Spec.MeasureResult == true ? "OK" : "NG"))}", "");
+
+                                            _halconToolDict[toolKey].InputTupleDic["INPUT_Params"] = new HTuple(array);
+                                            if (!_halconToolDict[toolKey].RunProcedure(out string error))
+                                            {
+                                                LogAsync(DateTime.Now, $"{m.GetDisplayText()}{m.Spec.Code}绠楁硶寮傚父,{error}", "");
+                                                m.Spec.ActualValue = -999;
+                                            }
+                                            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"))}", "");
+                                            }
                                         }
                                     }
                                 }
@@ -385,7 +404,7 @@
                                 //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("f2");
+                                indicator.Text = (m.Spec.ActualValue == null || m.Spec.ActualValue == -999) ? "NA" : m.Spec.ActualValue.Value.ToString(_precision);
                                 indicator.ResultState = m.Spec.MeasureResult;
                                 pMeasure.ElementList.Add(indicator);
                                 //杈撳嚭鍥惧舰鍩哄厓鍒扮晫闈� 
@@ -517,7 +536,7 @@
                         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("f2");
+                    measurementUnitResult.MeasurementValue = measurementUnit.Spec.ActualValue == null ? "NA" : measurementUnit.Spec.ActualValue.Value.ToString(_precision);
                     measurementUnitResult.MeasurementResult = measurementUnit.Spec.MeasureResult.Value ? "OK" : "NG";
 
                     measurementUnitResults.Add(measurementUnitResult);
@@ -533,7 +552,7 @@
                                 keyUnitData.ProductionBarcode = productionMeasurementRecords.ProductionBarcode;
                                 keyUnitData.Key = keyUnit.Key;
                                 keyUnitData.MeasurementItem = keyValue.Key;
-                                keyUnitData.ItemValue = keyValue.Value == null ? "NA" : keyValue.Value.Value.ToString("f2");
+                                keyUnitData.ItemValue = keyValue.Value == null ? "NA" : keyValue.Value.Value.ToString(_precision);
                                 keyUnitDatas.Add(keyUnitData);
 
                                 MeasurementAndKeyDataRelation measurementAndKeyDataRelation = new MeasurementAndKeyDataRelation();
@@ -1129,6 +1148,7 @@
                              {
                                  _halconToolDict[keyToolKey].InputImageDic["INPUT_Image"] = image;
                                  _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X / 1000000.0;
+                                 _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Y"] = scanParam.Resolution_Y / 1000000.0;
                                  _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z / 1000000.0;
                                  _halconToolDict[keyToolKey].InputTupleDic["INPUT_ImageId"] = $"{k.AliasName}_{DateTime.Now.ToString("HHmmssfff")}.tif";
                                  if (!_halconToolDict[keyToolKey].RunProcedure(out string error))

--
Gitblit v1.8.0