海康VisionMaster-脚本模块

这篇具有很好参考价值的文章主要介绍了海康VisionMaster-脚本模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

VM是海康机器人自主研发的机器视觉软件,将一系列的图像算法、逻辑工具和通讯协议等封装成图形化模块,致力于帮助客户提供快速搭建视觉应用、解决视觉难题,能够满足视觉定位、尺寸测量、缺陷检测以及信息识别等机器视觉应用。
转自:机器视觉技术交流社区

1 引言

在VM的工具箱中,虽然已经包含了一百多个算法模块可供用户通过连线组合的方式来完成相应的视觉需求,但仍存在一些数据处理逻辑是工具箱中的模块所不涵盖的。此时,脚本模块就可以体现数据处理的灵活性。脚本使用的常用场景包括:日志打印、坐标排序、定位偏差计算、检测结果分类、图像格式转换、联合OpenCV开发等等。
脚本模块主要是需要确定输入变量、输出变量以及数据处理逻辑。可导入或导出已经编写的脚本内容,脚本文本格式的后缀为cs;可编辑程序集来调用第三方库;可直接在脚本编辑页面编写代码、预编译和执行;也可导出当前脚本的工程,直接就会打开工程所在文件夹,再用VS打开工程、附加进程就可以进行脚本的调试,具体介绍见脚本模块章节。

2 脚本模块

双击打开脚本模块,界面如下所示,可以分为五个区域:变量输入区、变量输出区、菜单栏、C#编程区、提示区。
海康VisionMaster-脚本模块

C#编程区的代码可分为三部分:命名空间、初始化函数、执行函数。Init()函数为初始化函数,Process()为执行函数。
海康VisionMaster-脚本模块

2.1 接口介绍

使用脚本模块的目的,主要是为了处理数据,那么就需要获取脚本输入的数据以及通过设置数据将脚本某些结果进行输出,因此需要了解相应的获取和设置数据的接口函数。针对不同类型的数据有不同的接口函数,如:string、float、int、byte、image等数据类型的获取和设置接口大同小异。另外,还可以使用通信的发送数据接口,全局变量获取及设置接口,模块的结果获取和运行参数设置。

  1. 数据类型接口
功能 函数方法 参数说明
获取int型 GetIntValue(string paramName, ref int paramValue) 输入:变量名paramName;输出:变量值paramValue
获取float型 GetFloatValue (string paramName, ref float paramValue) 输入:变量名paramName;输出:变量值paramValue
获取string型 GetStringValue (string paramName, ref string paramValue) 输入:变量名paramName;输出:变量值paramValue
获取byte型 GetBytesValue (string paramName,ref byte[] paramValue) 输入:变量名paramName;输出:变量值paramValue
获取图像数据 GetIMAGEValue (string paramName, ref Image paramValue) 输入:变量名paramName;输出:变量值paramValue
获取int型数组 GetIntArrayValue(string paramName, ref int[] paramValue,out int arrayCount) 输入:变量名paramName;输出:变量值paramValue,数组个数arrayCount
获取float型数组 GetFloatArrayValue(string paramName, ref float[] paramValue,out int arrayCount) 输入:变量名paramName;输出:变量值paramValue,数组个数arrayCount
获取string型数组 GetStringArrayValue(string paramName, ref string[] paramValue,out int arrrayCount) 输入:变量名paramName;输出:变量值paramValue,数组个数arrayCount
设置int型 SetIntValue(string key, int value) 输入:变量名key,变量值value
设置float型 SetFloatValue (string key, float value) 输入:变量名key,变量值value
设置string型 SetStringValue (string key, string value) 输入:变量名key,变量值value
设置byte型 SetBytesValue (string key, byte[] value) 输入:变量名key,变量值value
设置图像数据 SetImageValue (string key, Image value) 输入:变量名key,变量值value
设置int型数组 SetIntValueByIndex(string key, int[] value, int index, int total) 输入:变量名key,变量值value,数组索引index,数组元素个数total
设置float型数组 SetFloatValueByIndex (string key, float[] value, int index, int total) 输入:变量名key,变量值value,数组索引index,数组元素个数total
设置string型数组 SetStringValueByIndex(string key, string[] value, int index, int total) 输入:变量名key,变量值value,数组索引index,数组元素个数total
  1. 其它接口
功能 函数方法 参数说明
设置全局变量 GlobalVariableModule.SetValue(string paramName,string paramValue) 输入:变量名paramName,变量值paramValue
获取全局变量 GlobalVariableModule.GetValue (string paramName) 输入:变量名paramName
获取模块结果数据 CurrentProcess.GetModule(string paramModuleName).GetValue(string paramValueName) 输入:模块名paramModuleName,结果名paramValueName
设置模块运行参数 CurrentProcess.GetModule(string paramModuleName).SetValue(string paramValueName,string paramValue) 输入:模块名paramModuleName,变量名paramValueName,变量值paramValue
PLC、Modbus发送数据 GlobalCommunicateModule.GetDevice(int deviceID).GetAddress(int addressID).SendData(string data,DataType dataType) 输入:设备deviceID,设备地址addressID,待发送数组data,待发送数据类型dataType
TCP、UDP、串口发送数据 GlobalCommunicateModule.GetDevice(int deviceID).SendData(string data) 输入:设备deviceID,待发送数据data

2.2 引用和调试

  1. 添加引用
    在脚本界面点击【编辑程序集】进入程序集界面,点击【添加】根据需求进行程序集动态库的添加,仅支持C#程序集添加,到需要的第三方程序集路径下找到想要添加的.dll点击打开即可添加,添加完成后在脚本中调用即可。
    海康VisionMaster-脚本模块

  2. 调试步骤
    在脚本界面点击【导出工程】,选择.sln文件使用VS打开,设置断点并且重新生成,然后点击【调试】中的【附加到进程】,VM4.2版本是选择VmModuleProxy.exe(VM4.0版本是附加ShellMouleManager.exe)附加,最后在VM中单次执行方案或者单次执行流程或者脚本模块来查看是否能进入断点。小小提示:断点调试时,每次修改代码都需要重新编译,VS每次重新编译后,只有第一次运行会进入初始化函数Init()。
    海康VisionMaster-脚本模块

2.3 VM4.2的更新

  1. VM4.2虽然保留了VM4.0的一系列接口函数,但VM4.2的脚本模块提供了更简单更方便的编程写法,不需要使用接口函数,直接在脚本中用等于号(=)来获取输入变量的值或用等于号(=)给输出变量赋值。

  2. VM4.2在调试的时候,相比较VM4.0,附件的进程由ShellMouleManager.exe变为VmModuleProxy.exe。这是因为当一个方案中包含多个脚本,我们对每个脚本进行调试附加进程时,每个脚本得附加进程名都是ShellMouleManager.exe,因此得打开任务管理器,需要在进程中来查看每个脚本对应的PID,然后通过ID编号来确定当前脚本调试需要附加的是哪个ShellMouleManager.exe。这一步查看比较繁琐,因此提出附加VmModuleProxy.exe,无论时哪个脚本进行调试,都只需要附加这个进程即可。

3 案例演示

需求:获取下图中条码信息和二维码信息,然后通过编写脚本打印日志到本地。
海康VisionMaster-脚本模块

海康VisionMaster-脚本模块

根据案例需求,步骤如下:

  1. 使用条码识别模块和二维码识别模块获取识别信息;
  2. 用GetStringValue函数分别获取条码和二维码信息;
  3. 通过FileStream类操作流写入信息到本地;
  4. 并通过SetstringValue函数输出打印日志的状态信息给到下一个模块。

效果如下所示,确定输入输出变量,然后编写代码,执行之后将输出相应得结果。
海康VisionMaster-脚本模块

完整代码如下所示:

using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Script.Methods;
public partial class UserScript:ScriptMethods,IProcessMethods
{
   //********输入变量**********   
    string Barcode; 				//条码 
	string TwoD_Code;				//二维码	    
    //*******输出变量**********    
    string writeSucceedOrFailed; 	//日志写入状态;
    
    /// <summary>
    /// 预编译时变量初始化
    /// </summary>
    public void Init()
    {
		//变量初始化,其余变量可在该函数中添加      
    }

    /// <summary>
    /// Enter the process function when running code once
	/// 流程执行一次进入Process函数
    /// </summary>
    /// <returns></returns>
    public bool Process()
    {
        //每次执行将进入该函数,此处添加所需的逻辑流程处理           
        GetStringValue("barcode",ref Barcode);				//获取条码信息
        GetStringValue("twoD_Code", ref TwoD_Code);			//获取二维码信息        
        try
       {
       	   using(FileStream fsWrite = new FileStream(@"E:\\Log.txt",FileMode.Append,FileAccess.Write) )
           {
       		  string str= "条码信息:"+ Barcode + "\r\n" + "二维码信息:" + TwoD_Code;
       		  byte[] buffer=Encoding.Default.GetBytes(str+"\r\n");		
       		  fsWrite.Write(buffer,0,buffer.Length); 		
           }
           writeSucceedOrFailed="写入OKAY";    
       }
         catch
       {
			writeSucceedOrFailed="写入失败";
       }
       SetStringValue("stateOutput",writeSucceedOrFailed);	  //输出日志打印状态
        
        return true;
    }
}

由于我们可以直接使用等于号(=)进行赋值,不需要使用不同类型的接口函数获取变量(GetxxxxValue)和赋值变量(SetxxxxValue),上述Process()函数中的代码也可以用如下方式实现。

public bool Process()
{
    //每次执行将进入该函数,此处添加所需的逻辑流程处理           
    Barcode=barcode;//获取条码信息
    TwoD_Code=twoD_Code;//获取二维码信息
        
    try
    {
       	using(FileStream fsWrite = new FileStream(@"E:\\Log.txt",FileMode.Append,FileAccess.Write) )
        {
       		string str= "条码信息:"+ Barcode + "\r\n" + "二维码信息:" + TwoD_Code;
       		byte[] buffer=Encoding.Default.GetBytes(str+"\r\n");		
       		fsWrite.Write(buffer,0,buffer.Length); 		
        }
        writeSucceedOrFailed="写入OKAY";    
    }
    catch
    {
		writeSucceedOrFailed="写入失败";
    }
    //输出日志打印状态
    stateOutput=writeSucceedOrFailed; 
    return true;
}

4 总结

作为VM中的逻辑模块之一,脚本模块能够灵活的按照需求处理数据,只要简单的模仿写过一遍,就能掌握其中规则,随后就能在实际项目中拓展使用。根据经验,有以下两点需要注意:文章来源地址https://www.toymoban.com/news/detail-458473.html

  1. 无法进入到断点位置。建议调试过程中,导出工程后关闭脚本模块编辑界面,只使用vs修改代码和编译,然后附加进程。
  2. 全局变量与局部变量的差异,在函数外定义的是全局变量,在process函数定义的是局部变量。

到了这里,关于海康VisionMaster-脚本模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【HIKROBOT】海康机器人:工业相机SDK二次开发

    海康机器人官网链接:https://www.hikrobotics.com/cn 根据购买设备的型号下载用户说明书 笔者实验室购买了两款,一款GigE网口接口的,一款USB接口 GigE网口接口 USB接口:MV-CA050-20UC 服务支持”“下载中心”“机器视觉”中下载MVS客户端安装包及SDK开发包。 1.1.1 Ubuntu18.04系统安装 下

    2024年02月05日
    浏览(45)
  • 海康机器人工业相机 Win10+Qt+Cmake 开发环境搭建

    参考这个链接安装好MVS客户端 Qt新建一个c++项目 cmakeList中添加海康机器人的库,如下: main.cpp中添加以下代码 运行程序,出现以下内容则说明安装库成功

    2024年02月11日
    浏览(41)
  • 海康Visionmaster-全局脚本:PLC 通讯字符触发流程执行的方法

    打开全局通信脚本,在 UserGlobalMethods_OnReceiveCommunicateDataEvent 里面 修改,修改代码如下

    2024年02月05日
    浏览(97)
  • 海康Visionmaster-全局变量:全局变量关联流程中具体 模块结果的方法

    将视觉流程中模板匹配算法模块运行的结果数据:特征匹配点 X 关联全局变量 MatchResultX。 在流程运行的主界面中,按照下面 1,2,3,4 步骤操作,第一步选中算法模块,第二步择模块结果 Tab 页,第三步点击订阅数据图标,第 4 步选择全局变量。

    2024年02月05日
    浏览(45)
  • Python 实现海康机器人工业相机 MV-CU060-10GM 的实时显示视频流及拍照功能

    一、背景介绍 1、最近项目中需要给客户对接海康机器人工业相机 MV-CU060-10GM; 2、客户要求通过部署的管理平台,可以在页面上实现如下功能: 1)相机视频流开始预览; 2)相机视频流停止预览; 3)相机拍照功能。 需求背景:客户需要对生产的产品进行定期抽样质检,其中

    2024年02月08日
    浏览(58)
  • 海康机器视觉Visionmaster-VM3D常见问题及解决方法

    海康机器视觉Visionmaster-缺失检测 软件及环境问题 第一个问题:软件获取问题 官网获取 第二个问题:环境配置类问题 1.软件打不开,加密狗灯不亮,6报错:加密狗未检测到或异常。解决方法:安装3DVM的驱动。 安装后加密狗无法识别,安装此驱动。 第三个问题:安装VM3D后,

    2023年04月26日
    浏览(63)
  • shell脚本实现告警消息推送钉钉机器人

    一、准备钉钉机器人         钉钉创建群聊                  群设置、智能群助手、添加机器人         机器人类型选择 自定义 (通过webhook接入自定义服务)         添加到刚才创建的群组、安全设置选择自定义 ( 将设置为告警二字,有用),配

    2024年02月14日
    浏览(39)
  • ABB PM864A 机器人模块

    ABB  PM864A 机器人模块   ABB  PM864A 机器人模块       详情介绍: ABB PM864A 机器人模块是一款高性能、高可靠性、模块化设计、多种接口支持、安全性强、易于操作、长寿命和低维护成本以及工业级可靠的机器人控制系统模块。其特点包括: 高性能与高可靠性:该模块具备高

    2024年02月02日
    浏览(35)
  • KUKA机器人后台逻辑功能模块sps

    KUKA机器人的后台逻辑功能体现在其sps.sub文件中,其中功能和其他品牌的机器人一致(详细的说明解释可参考小编另一篇文章 FANUC机器人后台逻辑功能 ),这边对软plc,后台逻辑功能的具体解释不做过多的赘述,下面进入讲解的主题。 在workvisual软件中我们可以看到后台文件

    2024年04月13日
    浏览(43)
  • 前端web3入门脚本六:套利夹子机器人,羊毛党必备

    DEX上有很多零风险套利的机会,包括三角套利,夹子机器人… 今天主要介绍一下架子机器人的思路和简易实现。 套利原理 : 夹子机器人的核心:在韭菜买入前以更低价格买入,并再韭菜买入后卖出,赚取差价 / 在韭菜卖出前以更高价格将token卖出 ,并在韭菜卖出后以低价将

    2024年02月05日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包