工业相机 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)接口获取。

相关推荐
水哥ansys4 天前
ANSYS ACT 格式及文件组成如何?
二次开发·脚本·ansys·workbench·水哥ansys·act
钢琴上的汽车软件9 天前
ARXML可视化转换工具使用说明
自动化·二次开发·可视化·转换·arxml
千里马学框架25 天前
想一想android桌面的未读计数角标应该如何设计呢?
android·framework·sdk·角标·桌面角标·未读计数角标·华为桌面
钱彬 (Qian Bin)1 个月前
一文掌握工业相机选型计算
机器视觉·工业·工业相机·相机选型·焦距·视场
DONSEE广东东信智能读卡器1 个月前
鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK
二次开发·sdk·arkts·鸿蒙·身份证阅读器·社保卡读卡器
罗迪尼亚的熔岩1 个月前
kuka, fanuc, abb机器人和移动相机的标定
机器人·工业相机·海康威视·标定·visonmaster
ClkLog-开源埋点用户分析2 个月前
全开源、私有化部署!轻量级用户行为分析系统-ClkLog
开源·开源软件·sdk·用户画像·埋点分析
51camera2 个月前
在机器视觉检测中为何选择线阵工业相机?
视觉检测·工业相机
leichangqing2 个月前
macos下 ragflow二次开发环境搭建
macos·二次开发·ragflow
“抚琴”的人3 个月前
【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】
c#·工业相机·visionpro·机械视觉