工业相机 SDK 二次开发-VC6.0 程序示例

本文主要介绍了使用工业相机SDK(Software Development Kit)开发C++程序方法及过

程。在 SDK 开发包目录下,提供了 13 个 VC6.0 示例程序,其中 MFC 程序 5 个,分别为

BasicDemo、ReconnectDemo、SetIODemo、ForceIpDemo、MultipleCamera;控制台程序 8

个,分别为 ConnectSpecCamera、ConvertPixelType、Events、Grab_Callback、GrabImage、

MultiCast、ParametrizeCamera_FileAccess、ParametrizeCamera_LoadAndSave。这些示例程序

展示了工业相机 SDK 的各个接口的调用方式。

本文就这五个 MFC 示例程序的操作方法和开发流程展开讨论,介绍各个示例程序的

使用步骤和开发流程,方便用户快速入门使用 C++的 SDK。

【注意】

C++版示例程序兼容中英文,对关键的程序会有中英文的注释,且界面控件支持中英文

根据安装时操作系统,可通过切换 Dialog 实现。

一.BasicDemo 使用步骤及开发流程

BasicDemo 是一个基本示例程序,包含了 SDK 使用过程中常用的一些接口调用,初次

使用工业相机 SDK 进行二次开发的用户推荐首先参考 BasicDemo,其涵盖了大多数用户对

SDK 的使用方法示例需求。

1.1 Demo 软件使用步骤

1.1.1 界面总体

软件界面总览,一共包括四个控制模块(初始化,图像采集,图片保存,参数控制)、一

个下拉设备列表和一个图像显示区域

1.1.2 使用过程

点击【查找设备】进行查找设备,这时(17)会出现当前在线的设备列表,命名方式为

用户 ID 不为空时显示设备类型+设备名称+IP 地址,设备为空时显示设备类型+设备型号+IP

地址。选择其中一个设备

点击【打开设备】打开当前选中的设备,默认以连续方式打开设备。选择触发模式可以

选中触发模式单选框。

在触发模式下,可以设置为软触发,当点击【开始采集】后,同时【软触发一次】也是

可以点击从而完成触发一次功能

采用连续模式下,点击【开始采集】进行图像采集,左边的显示区域将会出现实时图像

此时,若点击【保存 BMP】或者【保存 JPG】,将会在当前 exe 目录下出现一个 bmp

或 jpg 类型的图片,即为保存的当前图像

点击【获取参数】将会刷新当前的曝光时间、增益和帧率的数值,而更改【曝光】、【增

益】、【帧率】的数值之后点击【设置参数】将会重新设置新的曝光时间、增益和帧率的数值

在使用过程中有任何异常或错误,都会以弹窗的形式出现提示,若没有任何提示,则认

为一切正常地运行。

1.2 Demo 软件开发步骤

1.2.1 Dll 加载

安装好 MVS 的同时会把相应 32 和 64 的 dll 打到环境变量。

1.2.2 工程配置

创建 VS 工程并添加引用,加入 MvSdkExport.lib 和 MvSdkExport.h 到工程中。

1.2.3 引用命名空间

添加头文件和库文件引用之后,就可以调 MvSdkExport.h 中相机操作的函数。

二.ReconnectDemo 使用步骤及开发流程

ReconnectDemo 重点展示了 SDK 中相机断线重连的操作步骤。告知用户如何使用断

线回调以及如何重新连接相机。

2.1 Demo 软件使用步骤

2.1.1 界面总体

总体界面如下图。界面类似 BasicDemo,具有查找设备、打开设备、关闭设备、开始采

集、停止采集、设置触发等功能。

2.1.2 使用过程

ReconnectDemo 中,当相机断线时,程序会进入异常回调,异常回调中,会根据当前选

中的相机信息进行不断的尝试连接,当相机在线时则会被连接上。

2.2 Demo 软件开发步骤

关于相机操作的开发流程与 BasicDemo 相似。本节重点介绍回调函数的使用方法。

在 C++中,通过传函数指针实现回调功能。在工业相机 C++ SDK 中,异常断线的回调

为 RegisterExceptionCallBack。

在 CBasicDemoDlg 类中实现断线重连的函数 ReconnectDevice,然后传入回调函数

RegisterExceptionCallBack 中,当打开相机操作之后,利用 SDK 中注册回调函数接口,注册

回调函数。当相机异常断线时,程序会进入异常回调。用户可在异常回调中进行重新连接相

机的操作。注册过程如下:

m_pcMyCamera->RegisterExceptionCallBack(ReconnectDevice, this);

SetIODemo 使用步骤及开发流程

本节介绍的 Demo 主要实现对相机 IO 输入输出的控制。使用用户群体为需要对相机 IO

进行控制的用户。

3.1 Demo 软件使用步骤

3.1.1 界面总体

总体界面如下图所示。

3.1.2 使用过程

相机基本操作与 BasicDemo 相似。打开一个设备后可以对相机的 IO 属性进行获取和设

置。IO 属性主要有 LineSelector 和 LineMode 两个。分别点击获取和设置可以对相应的属性

进行读取和写入。

3.2 Demo 软件开发步骤

3.2.1 IO 属性

有关相机 IO 属性主要有两个:LineSelector 和 LineMode。LineSelector 指输出端口选择,

目前相机主要有三个 IO 端口:Line0,Line1,Line2.其中,Line0 只可配置为输入,Line1

只可配置为输出,Line2 可配置为输入或者输出。LineMode 表示输入或者输出模式。

3.2.2 获取和设置接口

在示例程序中,获取和设置 IO 用到的接口分别为:MV_CC_GetEnumValue(IN void*

handle,IN const char* strKey,OUT MVCC_ENUMVALUE *pEnumValue) ,以及

MV_CC_SetEnumValue(IN void* handle,IN const char* strKey,IN unsigned int nValue)。

在 SDK 中,类似此类 Set 或 Get + 数据类型 + Value 的接口函数成为万能接口函数,

其作用为获取或设置相机任意属性值。万能接口的第一个参数为属性名称,为一个 string 型

字符串,相机属性名称可以通过查找 MvCameraNode.xls 文档查询。第二个参数为获取到的

或者设置的属性值。

3.2.3 IO 操作

在本节示例程序中,主要用到的属性节点为"LineSelector"以及"LineMode",其属性类型

均为 Enumeration 类型。调用万能接口即可实现对其属性的操作。

获取操作如下:

nRet = m_pcMyCamera->GetEnumValue("LineSelector", &stSelector);

nRet = m_pcMyCamera->GetEnumValue("LineMode", &stSelector);

设置操作如下:

nRet = m_pcMyCamera->SetEnumValue("LineSelector", nValue);

nRet = m_pcMyCamera->SetEnumValue("LineMode", nValue);

三. ForceIpDemo 使用步骤和开发流程

4.1 Demo 软件使用步骤

4.1.1 界面总体

软件界面如下图所示。

界面主要分为两个模块:初始化模块和设置 IP 模块。

4.1.2 使用过程

首先,点击查找设备对网段内的设备进行枚举,软件自动选择列表中第一项。

然后,选择需要配置 IP 的设备。

在设置 IP 模块的提示信息中会提示本机网卡所在的网段并显示建议设置的 IP 范围。在

输入框中输入想要设置的 IP,点击设置。

4.2 Demo 软件开发步骤

设置 IP 调用 SDK 中 MV_GIGE_ForceIpEx(IN void* handle, unsigned int nIP, unsigned int

nSubNetMask, unsigned int nDefaultGateWay)接口。

四.MultipleDemo 使用步骤及开发流程

5.1 Demo 软件使用步骤

5.1.1 界面总体

总览界面,软件界面主要包括三个控制模块(初始化、参数设置、采集图像),四块图像显

示区域以及帧数信息显示区域。

5.1.2 使用过程

打开软件,"在线设备数量"会自行枚举在线相机个数,在"使用设备个数"文本框内填写

需要打开的相机个数 n,单击"初始化相机",默认以连续方式打开 n 台设备。

在"曝光"和"增益"中填写修改的参数,单击"设置参数",即可依次修改 n 台设备参数。

同时可选择连续或者触发模式。

点击"开始采集",左侧会显示预览图像。同时采集帧数和丢帧数会即时更新数据(1 秒

更新一次)。此时若点击"保存图片",会在当前 exe 目录下出现所保存的图片。若希望结束,

则点击"停止采集","关闭设备"即可。

当出现异常和错误时,会以弹窗的形式提示。有一些操作成功时也会有提示。

5.2 Demo 软件开发步骤

5.2.1 多相机的实现

MultipleDemo 在 BasicDemo 基础上,在类中添加 m_nUseNumEdit 的成员变量,表示四

台相机的序号,初始化时由"使用数量"和对应相机打开的序列号决定是否对某台相机执行操

作。

5.2.2 总帧数、丢帧数、保存图片

总帧数在回调函数中计数(成员变量)。回调函数中同时完成保存图片的功能,判断是

否点击保存图片的按钮确定是否保存当前帧为图片,保存完成后,修改相应标志位以免下次

取流重复保存图片。丢帧数由调用

m_pcMyCamera[nUsingDeviceNum]->GetAllMatchInfo(&struMatchInfo)接口获取。

相关推荐
机器视觉小小测试员11 小时前
工业相机常用词语解释
运维·ui·自动化·工业相机
机器视觉小小测试员4 天前
工业相机 SDK 二次开发-Sherlock插件
二次开发·工业相机·sherlock插件
机器视觉小小测试员8 天前
工业相机 SDK 二次开发-Halcon 插件
halcon·工业相机·sdk开发
规划GIS会8 天前
CC工具箱使用指南:【Excel点集转面要素(批量)】
excel·二次开发·arcgis pro
SkyXZ~12 天前
海康工业相机的应用部署不是简简单单!?
linux·ubuntu·计算机视觉·机器人·工业相机·海康相机·海康工业相机
0xCC说逆向15 天前
Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化
c语言·开发语言·c++·windows·qt·mfc·sdk
规划GIS会25 天前
【ArcGIS Pro二次开发实例教程】(2):BSM字段赋值
arcgis·二次开发·arcgis pro
规划GIS会25 天前
【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置
arcgis·二次开发·arcgis pro
MicrosoftReactor1 个月前
技术速递|使用 Dependabot 管理 .NET SDK 更新
.net·sdk