领胜LDS 键盘AOI检测项目
1. 优化gts板卡回原点操作
2. 添加数据精度配置
3. 添加HalconTool异常捕捉分类和部分非空判断
4个文件已修改
68 ■■■■ 已修改文件
src/Bro.Common.Device/DeviceBase/HDevEngineTool.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardDriver.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Config.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Process.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
            }
        }
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 @@
                        //先stop
                        MoveStop((short)movingOption.AxisIndex, 0);
                        ClearStatus((short)movingOption.AxisIndex, 1);
                        //已经捕获到Home才可以回零 阶段2
                        // 运动到"捕获位置+偏移量"
                        sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, pos + goHomePara.HomeOffset);
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("检测结果数据保存路径")]
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))