海康VisionMaster-脚本模块

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

1 引言

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

2 脚本模块

双击打开脚本模块,界面如下所示,可以分为五个区域:变量输入区、变量输出区、菜单栏、C#编程区、提示区。
在这里插入图片描述

C#编程区的代码可分为三部分:命名空间、初始化函数、执行函数。Init()函数为初始化函数,Process()为执行函数。
在这里插入图片描述

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点击打开即可添加,添加完成后在脚本中调用即可。
    在这里插入图片描述

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

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 案例演示

需求:获取下图中条码信息和二维码信息,然后通过编写脚本打印日志到本地。
在这里插入图片描述

在这里插入图片描述

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

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

效果如下所示,确定输入输出变量,然后编写代码,执行之后将输出相应得结果。
在这里插入图片描述

完整代码如下所示:

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中的逻辑模块之一,脚本模块能够灵活的按照需求处理数据,只要简单的模仿写过一遍,就能掌握其中规则,随后就能在实际项目中拓展使用。根据经验,有以下两点需要注意:

  1. 无法进入到断点位置。建议调试过程中,导出工程后关闭脚本模块编辑界面,只使用vs修改代码和编译,然后附加进程。
  2. 全局变量与局部变量的差异,在函数外定义的是全局变量,在process函数定义的是局部变量。
  • 27
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要安装海康Vision Master的GigE驱动,您可以按照以下步骤进行操作: 首先,确保您已经获得了适用于海康Vision Master的GigE驱动程序。您可以从官方网站或其他可靠来源下载最新的驱动程序。 接下来,双击驱动程序安装文件,开始安装过程。通常情况下,将会出现一个安装向导,您只需要按照提示进行操作即可。 在安装过程中,可能需要您同意许可协议并选择安装位置。请根据您的个人需求选择适当的选项。 完成安装后,您需要将您的GigE设备连接到计算机。确保设备正常连接并电源供应正常。 然后,打开海康Vision Master软件。在软件界面上选择“设备配置”或类似选项,进入设备配置界面。 在设备配置界面上,您将看到可以添加设备的选项。选择添加设备,然后选择GigE设备类型。 在添加设备时,系统可能会自动搜索可用的设备。如果没有自动检测到设备,则可能需要手动输入设备的IP地址或其他必要信息。 完成设备添加后,您应该能够看到您的GigE设备在海康Vision Master软件中显示,并且可以正常操作和配置。 总结起来,安装海康Vision Master的GigE驱动涉及下载并安装适当的驱动程序,连接GigE设备,然后在软件中添加和配置设备。记得遵循安装向导的提示,并确保设备连接稳定。 ### 回答2: 要安装海康Vision Master摄像头的GigE驱动,首先要确保计算机已经安装了适当的操作系统,并且满足驱动程序的最低系统要求。在安装驱动程序之前,需要确保计算机上没有其他GigE网卡驱动程序或软件与之冲突。 接下来,可以从海康官方网站上下载最新版本的GigE驱动程序。下载完成后,双击安装程序进行安装。 安装过程中可能需要选择安装目录和设置相关选项,按照提示进行操作即可。安装完成后,需要重启计算机以完成驱动程序的安装。 安装完成后,可以将海康Vision Master摄像头连接到计算机的GigE网卡上,并确保摄像头的供电正常。然后,打开Vision Master软件,在设备管理器中搜索并添加相机设备。 如果驱动程序安装成功,相机设备应该能够被检测到并且可以正常使用。可以通过Vision Master软件进行相机参数的设置和图像的采集等操作。 总之,安装海康Vision Master摄像头的GigE驱动需要下载驱动程序,进行安装并重启计算机。安装完成后,可以通过Vision Master软件管理和使用相机设备。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值