VisionPro之脚本
一、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之脚本相关推荐
- VisionPro——在脚本中调用自己封装的DLL
VisionPro--在脚本中调用自己封装的DLL 前言 一.具体配置与代码 前言 做硬件测试时,用到了vp的c#脚本,由于偷懒导出数据表想直接用以前封装好的函数库,在测试时遇到些问题,在此做些记录. ...
- VisionPro之脚本(一文读懂VisionPro脚本原理与使用方法)
文章目录 一.脚本简介 二.脚本类与方法 三.脚本使用案例 四.脚本进阶 一.脚本简介 1.1 VisionPro项目组成简介 在介绍脚本之前先简单介绍一下VisionPro开发环境(QuickBui ...
- [VisionPro] C#脚本介绍
一.主要功能 和ToolBlocks工具搭配运行,得到更确定的输出结果 二.设置 可以改动的地方由三个 Property:设置这个类的属性 GroupRun方法:这里是脚本运行的主要内容 Modify ...
- 视觉平台Visionpro脚本神器
废话前言,关于visionpro脚本 作者:mingqi QQ 297294753,本文原创,如果要转载请注明出处. 关于vision的脚本操作,官方没有说明,帮助文档也只是说了visionpro内部 ...
- 知道被测物的长、宽、高以及要求的测量精度,如何来选择 CCD 相机和工业镜头,选择以上器件需要注意什么?
(Q有答疑)1.基于visionpro高级脚本图片存储1 首先要选择合适的镜头.选择镜头应该遵循以下原则: 1).与之相配的相机的芯片尺寸是多大: 2).相机的接口类型是哪种的,C 接口,CS 接口还 ...
- visionpro的无脚本和高级脚本(你要偷偷的卷,然后惊艳所有人)
目录 推荐B站视频: visionpro的工具测量无脚本显示: visionpro的工具测量高级脚本显示: 首先说明高级脚本高级在哪里: 引言:多多学习,卷死别人 推荐B站视频: 工业机器视觉 大家别 ...
- VisionPro使用C#编写脚本
本文链接:https://blog.csdn.net/dongxin_ming/article/details/104932352 一.脚本简介 1.1 VisionPro项目组成简介 在介绍脚本之前 ...
- VisionPro脚本详解
一.VisionPro脚本的种类及功能 VisionPro 脚本可以定制或扩展 QuickBuild 的功能,主要表现在以下几个方面: 根据其他工具的运行结果有条件的运行视觉工具 对视觉工具的执行结果 ...
- VisionPro脚本Simple与Advanced
以VB脚本代码为例: VB-Simple: 主要包含以下栏目: 1. GroupRun函数 脚本的编写一般在GroupRun函数中编辑 Initialize:函数的初始化 auto-generated ...
最新文章
- php数组合并如何不覆盖,php如何实现合并数组并且不覆盖重复值
- ROS系统 实现客户端Client和服务端Server
- 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
- 探讨“临时对象”(temporary object)
- HTTP基本认证(Basic Authentication)的JAVA示例
- 打造具有物联网基因的现代化商业银行
- html恢复安卓版,recovery恢复模式 进入Recovery模式前
- python中index方法详解_详解python中的index函数用法
- oppo9.0系统手机一键激活Xposed框架的步骤
- cryptojs des php,前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
- 高数篇(三)-- 最小二乘法、正则化
- WSO2 Micro Integrator环境安装及部署
- 迅雷下载遇到“应版权方要求无法下载”,怎么办
- Facebook广告收费出价方式之cpi
- nali——linux显示IP来源的工具
- 台式计算机拆卸步骤,拆卸和组装台式计算机主机的说明步骤
- windows主机和虚拟机设置桥接
- 计算机基础应用本终结性考试,计算机应用基础
- 【读书笔记】Robot Framework 的变量
- html5密码确认属性,HTML5表单及其验证【html自带属性验证】