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

本文深入解析VisionPro脚本功能,涵盖Job、ToolGroup及ToolBlock脚本的使用,包括脚本类、方法及实际案例,助您掌握脚本定制技巧。
该文章已生成可运行项目,

一、脚本简介

1.1 VisionPro项目组成简介
在介绍脚本之前先简单介绍一下VisionPro开发环境(QuickBuild)的项目结构,Job是QuickBuild工程的基本组成单位,一个QucikBuild工程至少含有一个Job,工程中所有的Job是并行结构,各个Job之间不会相互影响。每个Job中默认包含一个toolGroup,用户可以在默认的toolGroup中添加项目所需的工具工具块。工具块(toolBlock)与工具组(toolGroup)都是工具的**“容器”**,通过使用工具块与工具组可以将完成某一功能的工具进行封装,实现项目模块化,同时亦可将某一特定功能的工具块或工具组导出实现重复使用,类似于编程语言中“函数”功能。工具块中亦可以包含工具块与工具组,两者之间的包含关系没有明确层次关系
关于toolGroup与toolBlock的区别,请参考链接: https://blog.csdn.net/dongxin_ming/article/details/104926910.
在这里插入图片描述
1.2 VisionPro脚本简介
VisionPro工具封装了视觉算法与用户交互界面,toolGroup与toolBlock提供了组合工具的容器,但是并非所有的功能都能通过既定交互界面实现。为了让用户实现客制化功能更加“随心所欲”,实现VisionPro本身无法实现的逻辑功能,VisionPro预留了脚本功能。脚本的类型、作用与支持语言如下图所示:
在这里插入图片描述

二、脚本类与方法

VisionPro通过”多态”技术实现脚本功能,VisionPro 的每一Job、toolGroup、toolBlock对象都含有一个接口对象,用户通过重写接口方法实现自定义拓展功能。以toolGroup为例, ICogToolGroupScript接口中定义了子类中必须实现的函数,当toolGruoup执行到某一节点(工具准备运行、工具运行完成等)时会调用相应的接口函数实现用户指定的功能。
如果你对接口、多态理解不够深入,你只需要明白脚本就是**“填空题”**,VisionPro在适当的位置给你留下空白,在这个空白区域你可以在满足条件的情况下“自由发挥”,实现你想要实现的功能。
2.1 toolGroup脚本类
以ToolGroup脚本为例展开,toolGroup 脚本是继承于CogToolGroupBaseScript,实现了ICogToolGroupScript接口,该接口有四个方法,详细介绍如下:

public class CogToolGroupBaseScript : ICogToolGroupScript
{
   
   
 	// 
  public virtual bool GroupRun(ref string message,ref Cognex.VisionPro.CogToolResultConstants result)
  {
   
    
  		return true; 
  }
  
  public virtual void ModifyCurrentRunRecord(ICogRecord currentRecord)
  {
   
   }
  public virtual void ModifyLastRunRecord(ICogRecord lastRecord)
  {
   
   }
  public virtual void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host)
  {
   
   
    toolGroup = host;
  }
  protected Cognex.VisionPro.ToolGroup.CogToolGroup toolGroup=null;
}
  • Initialize() 顾名思义,该方法用于对toolGroup工具进行初始化,当退出脚本编辑工具时脚本会进行编译并进行初始化,此时该方法会被调用。此外,在对该group通过*.vpp文件进行加载时也会被立即调用。所以,所有的“一次性”的初始化工作都应该写在该方法中。
  • GroupRun()方法运行该Group中的工具,如果该方法返回值为true,所有的属于当前Group的视觉工具都将运行,如果返回值为false,用户可以自定义工具的执行顺序,返回值为false为常见情况。
  • ModifyCurrentRunRecord() 方法用于修改CurrentRecord,在toolGroup的CurrentRecord被创建后调用。
  • ModifyLastRunRecord() 方法用于修改LastRunRecord,在toolGroup的LastRunRecord被创建后调用,例如:在最终生成图像中添加标签、该表颜色、用不同几何图像标记目标区域。
  • 成员变量toolGroup为CogToolGroup类型,该类的runTool方法用于运行指定视觉工具;Tools 属性为当前Group的工具集合,一般用于获取当前工具组中某一工具的引用;DefineScriptTerminal、GetScriptTerminalData、SetScriptTerminalData 方法用于定义、获取、设置输入输出终端。
//对于当前Group存在的视觉工具的程序集与命名空间会自动添加,如果用户想要使用当前Group不存在的工具或者添加自定义程序集可以手动添加
//详细的操作步骤会在后续实例中进行介绍
using System;
using Cognex.VisionPro;
using Cognex.VisionPro3D;
using Cognex.VisionPro.ToolGroup;

public class UserScript : CogToolGroupBaseScript
{
   
   
  //默认情况下遍历group中所有的工具并运行,用户可以根据实际情况自定义运行逻辑与顺序
  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
    for (Int32 toolIdx = 0; toolIdx < toolGroup.Tools.Count; toolIdx++)
      toolGroup.RunTool(toolGroup.Tools[toolIdx], ref message, ref result);
    return false;//默认情况下为false表示用户可以控制工具的运行顺序,返回值为true则运行当前Group中所有工具。
  }
  public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord)
  <
本文章已经生成可运行项目
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值