一、VisionPro脚本介绍

1.1项目组成

​ 首先介绍一下QuickBuild的项目结构,Job是QuickBuild工程中的基本组成单位,一个QuickBuild至少有一个Job,每个Job之间互不影响。每个Job中默认包含一个toolGroup,在toolGroup中可以添加项目需要的工具和工具块。
​ 其中工具块(toolBlock)和工具组(toolGroup)都是工具的“容器”,通过工具块和工具组对某些功能的工具进行封装,实现项目模块化。但一般都是使用toolBlock较多,是因为toolBlock添加输入输出的方式比较灵活,甚至toolBlock可以在“输入输出”页面查看输入输出数据的当前值、类型等信息,甚至可以手动修改输入输出的值,toolGroup则不支持这些功能。

1.2 VisionPro脚本简介

VisionPro工具封装了视觉算法与用户交互界面,toolGroup与toolBlock提供了组合工具的容器,但是并非所有的功能都能通过既定交互界面实现。VisionPro本身是无法实现逻辑功能,但可以通过VisionPro中的脚本功能实现逻辑判断。

二、脚本类与方法

VisionPro通过”多态”技术实现脚本功能,VisionPro 的每一Job、toolGroup、toolBlock对象都含有一个接口对象,用户通过重写接口方法实现自定义拓展功能。以toolBlock为例, CogToolBlockAdvancedScriptBase接口中定义了子类中必须实现的函数,当toolBlock执行到某一节点(工具准备运行、工具运行完成等)时会调用相应的接口函数实现用户指定的功能。

2.1 toolBlock脚本类的分析

(1)添加命名空间的区域,需要用到工具什么就进行添加。脚本的流程:1、初始化+工具关联,运行+输出结果,逻辑判断

#region namespace imports
using System;
using System.Collections;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro3D;
using Cognex.VisionPro.QuickBuild.Implementation.Internal;
using Cognex.VisionPro.ImageProcessing;
using Cognex.VisionPro.Caliper;
#endregion

这里会可能出现错误,比如会出现没有程序集的添加,这要手动添加参考程序集,步骤如下。

1)若不知道要添加什么,可以先收索需要添加相关单词,再去程序集中查找添加:

2)在参考程序集中添加需要的程序集。

(2)脚本中添加变量如下:

  #region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;private double Radius = 0;private CogFindCircleTool CogFindCircleToolObject;private CogCircle myCircle;#endregion

(3)重写GroupRun,主要都是在这里进行脚本的更改和添加,这里可以添加输出结果和逻辑判断。(其中工具关联也可以放在后面的初始化那边,这个代码位置不是硬性要求的,根据具体情况具体分析)

public override bool GroupRun(ref string message, ref CogToolResultConstants result){foreach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);//循环运行工具CogFindCircleToolObject = mToolBlock.Tools["CogFindCircleTool1"] as CogFindCircleTool;//工具关联myCircle = CogFindCircleToolObject.Results.GetCircle();Radius = double.Parse(myCircle.Radius.ToString("0.00"));//可以继续添加逻辑判断等操作return false;}

(4)重写ModifyCurrentRunRecord方法,这个用于修改CurrentRecord,在toolBlock的CurrentRecord被创建后调用。这个一般用不到。

  public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord){}

(5)重写ModifyLastRunRecord方法,这个用于修改LastRunRecord,在toolBlock的LastRunRecord被创建后调用,例如:在最终生成图像中添加标签、该表颜色、用不同几何图像标记目标区域,例如代码:

  public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){CogGraphicLabel ResultLabel = new CogGraphicLabel();string labelStr = string.Format("Radius={0:F2} pixel", Radius);ResultLabel.SetXYText(myCircle.CenterX, myCircle.CenterY, labelStr);ResultLabel.Color = Cognex.VisionPro.CogColorConstants.Red;mToolBlock.AddGraphicToRunRecord(ResultLabel, lastRecord, "CogImageConvertTool1.OutputImage", "script");}

(6)重写Initialize方法,这个用于对toolBlock工具进行初始化,当退出脚本编辑工具时脚本会进行编译并进行初始化,此时该方法会被调用。(这里可以放些工具关联的相关代码)

  public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host){base.Initialize(host); this.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock) (host));}

VisionPro总脚本:

#region namespace imports
using System;
using System.Collections;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro3D;
using Cognex.VisionPro.QuickBuild.Implementation.Internal;
using Cognex.VisionPro.ImageProcessing;
using Cognex.VisionPro.Caliper;
#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;private double Radius = 0;private CogFindCircleTool CogFindCircleToolObject;private CogCircle myCircle;#endregion/// <summary>/// Called when the parent tool is run./// Add code here to customize or replace the normal run behavior./// </summary>/// <param name="message">Sets the Message in the tool's RunStatus.</param>/// <param name="result">Sets the Result in the tool's RunStatus</param>/// <returns>True if the tool should run normally,///          False if GroupRun customizes run behavior</returns>public override bool GroupRun(ref string message, ref CogToolResultConstants result){// To let the execution stop in this script when a debugger is attached, uncomment the following lines.// #if DEBUG// if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();// #endif// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);CogFindCircleToolObject = mToolBlock.Tools["CogFindCircleTool1"] as CogFindCircleTool;myCircle = CogFindCircleToolObject.Results.GetCircle();Radius = double.Parse(myCircle.Radius.ToString("0.00"));return false;}#region When the Current Run Record is Created/// <summary>/// Called when the current record may have changed and is being reconstructed/// </summary>/// <param name="currentRecord">/// The new currentRecord is available to be initialized or customized.</param>public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord){}#endregion#region When the Last Run Record is Created/// <summary>/// Called when the last run record may have changed and is being reconstructed/// </summary>/// <param name="lastRecord">/// The new last run record is available to be initialized or customized.</param>public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){CogGraphicLabel ResultLabel = new CogGraphicLabel();string labelStr = string.Format("Radius={0:F2} pixel", Radius);ResultLabel.SetXYText(myCircle.CenterX, myCircle.CenterY, labelStr);ResultLabel.Color = Cognex.VisionPro.CogColorConstants.Red;mToolBlock.AddGraphicToRunRecord(ResultLabel, lastRecord, "CogImageConvertTool1.OutputImage", "script");}#endregion#region When the Script is Initialized/// <summary>/// Perform any initialization required by your script here/// </summary>/// <param name="host">The host tool</param>public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host){// DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVEbase.Initialize(host);// Store a local copy of the script hostthis.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock) (host));}#endregion}

三、运行结果

找圆,并用脚本写显示输出圆的半径运行结果:

VisionPro之脚本相关推荐

  1. VisionPro——在脚本中调用自己封装的DLL

    VisionPro--在脚本中调用自己封装的DLL 前言 一.具体配置与代码 前言 做硬件测试时,用到了vp的c#脚本,由于偷懒导出数据表想直接用以前封装好的函数库,在测试时遇到些问题,在此做些记录. ...

  2. VisionPro之脚本(一文读懂VisionPro脚本原理与使用方法)

    文章目录 一.脚本简介 二.脚本类与方法 三.脚本使用案例 四.脚本进阶 一.脚本简介 1.1 VisionPro项目组成简介 在介绍脚本之前先简单介绍一下VisionPro开发环境(QuickBui ...

  3. [VisionPro] C#脚本介绍

    一.主要功能 和ToolBlocks工具搭配运行,得到更确定的输出结果 二.设置 可以改动的地方由三个 Property:设置这个类的属性 GroupRun方法:这里是脚本运行的主要内容 Modify ...

  4. 视觉平台Visionpro脚本神器

    废话前言,关于visionpro脚本 作者:mingqi QQ 297294753,本文原创,如果要转载请注明出处. 关于vision的脚本操作,官方没有说明,帮助文档也只是说了visionpro内部 ...

  5. 知道被测物的长、宽、高以及要求的测量精度,如何来选择 CCD 相机和工业镜头,选择以上器件需要注意什么?

    (Q有答疑)1.基于visionpro高级脚本图片存储1 首先要选择合适的镜头.选择镜头应该遵循以下原则: 1).与之相配的相机的芯片尺寸是多大: 2).相机的接口类型是哪种的,C 接口,CS 接口还 ...

  6. visionpro的无脚本和高级脚本(你要偷偷的卷,然后惊艳所有人)

    目录 推荐B站视频: visionpro的工具测量无脚本显示: visionpro的工具测量高级脚本显示: 首先说明高级脚本高级在哪里: 引言:多多学习,卷死别人 推荐B站视频: 工业机器视觉 大家别 ...

  7. VisionPro使用C#编写脚本

    本文链接:https://blog.csdn.net/dongxin_ming/article/details/104932352 一.脚本简介 1.1 VisionPro项目组成简介 在介绍脚本之前 ...

  8. VisionPro脚本详解

    一.VisionPro脚本的种类及功能 VisionPro 脚本可以定制或扩展 QuickBuild 的功能,主要表现在以下几个方面: 根据其他工具的运行结果有条件的运行视觉工具 对视觉工具的执行结果 ...

  9. VisionPro脚本Simple与Advanced

    以VB脚本代码为例: VB-Simple: 主要包含以下栏目: 1. GroupRun函数 脚本的编写一般在GroupRun函数中编辑 Initialize:函数的初始化 auto-generated ...

最新文章

  1. php数组合并如何不覆盖,php如何实现合并数组并且不覆盖重复值
  2. ROS系统 实现客户端Client和服务端Server
  3. 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
  4. 探讨“临时对象”(temporary object)
  5. HTTP基本认证(Basic Authentication)的JAVA示例
  6. 打造具有物联网基因的现代化商业银行
  7. html恢复安卓版,recovery恢复模式 进入Recovery模式前
  8. python中index方法详解_详解python中的index函数用法
  9. oppo9.0系统手机一键激活Xposed框架的步骤
  10. cryptojs des php,前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
  11. 高数篇(三)-- 最小二乘法、正则化
  12. WSO2 Micro Integrator环境安装及部署
  13. 迅雷下载遇到“应版权方要求无法下载”,怎么办
  14. Facebook广告收费出价方式之cpi
  15. nali——linux显示IP来源的工具
  16. 台式计算机拆卸步骤,拆卸和组装台式计算机主机的说明步骤
  17. windows主机和虚拟机设置桥接
  18. 计算机基础应用本终结性考试,计算机应用基础
  19. 【读书笔记】Robot Framework 的变量
  20. html5密码确认属性,HTML5表单及其验证【html自带属性验证】

热门文章

  1. APP开发项目流程详解,长知识了!
  2. python 编写函数,实现根据键盘输入的长、宽、高之值计算长方体体积
  3. 双电子两个格点Hubbard模型严格对角化
  4. 上海迪士尼将新增黄色小狗可琦安系列主题商品
  5. android开机图片修改工具栏,如何以编程方式更改android工具栏中的图标...
  6. 百度智能小程序SEO指南
  7. R语言利用igraph和networkD3包快速入门做出炫酷的社交网络图等几类图。
  8. Java基于opencv—矫正图像
  9. java24设计模式思维导图以及源码配置,思维导图使用幕布处理
  10. 当渠道需要在Application中调用有参方法