gige相机二次开发_海康工业相机 SDK 二次开发示例程序说明(C#版)

时间:2024-10-05 12:24:29

这个是海康相机官方的文档,勇哥放上来是为了方便查阅。

【摘要】本文档主要介绍了使用工业相机SDK(Software Development Kit)开发C#程序方法及过程。在SDK开发包目录下,提供了21个C#示例程序,其中Form程序6个,分别为BasicDemo、ReconnectDemo、SetIODemo、ForceIpDemo、MultipleDemo、BasedOnGenTL;控制台程序15个,分别为CamLBasicDemo、ChunkData、ConnectSpecCamera、ConvertPixelType、Events、Grab_ActionCommand、Grab_Callback、GrabImage、GrabImage_HighPerformance、GrabStrategies、MultiCast、ParametrizeCamera_FileAccess、ParametrizeCamera_LoadAndSave、Recording、SavePonitCloudData_3D。 这 些 示 例 程 序 分 别 从 不 同 角 度 展 示 了 利 用进行开发的方法。本文档就这六个C# Form示例程序的操作方法和开发流程展开讨论,介绍各个示例程序的使用步骤和开发流程,方便用户快速入门使用C# SDK。

【注意】C#版示例程序兼容中英文,对关键的程序会有中英文的注释,且界面控件也有中英文的区分,可通过切换属性的language实现。目前是默认打开以中文界面展现,exe程序随系统语言而改变,用户可根据实际需求选择语言。如下所示,根据form界面的语言选择来进行转换。

一.BasicDemo 使用步骤及开发流程BasicDemo是一个基本示例程序,包含了SDK使用过程中常用的一些接口调用,

初次使用工业相机SDK进行二次开发的用户推荐首先参考BasicDemo,其涵盖了大多数用户对SDK的使用方法示例需求。

1.1 Demo 软件使用步骤

1.1.1界面总体

软件界面总览,一共包括四个控制模块(初始化,图像采集,图片保存,参数控制)、一个下拉设备列表和一个图像显示区域

1.1.2使用过程点击【查找设备】进行查找设备,这时(17)会出现当前在线的设备列表,

命名方式为用户ID不为空时显示设备类型+设备名称+序列号,ID为空时显示设备类型+设备型号+序列号,选择其中一个设备

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

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

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

此时,若点击【保存BMP】或者【保存JPG】,将会在当前exe目录下出现一个名称为Image.bmp或者的图片,

即为保存的当前图像点击【获取参数】将会刷新当前的曝光时间、增益和帧率的数值,

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

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

1.2 Demo 软件开发步骤

1.2.1Dll加载

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

1.2.2工程配置

创建CS工程并添加引用,加入到工程中。

1.2.3引用命名空间

添加引用后再工程中引用命名空间using ,就可以调MyCamera类中相机操作的函数。

二.ReconnectDemo

使用步骤及开发流程ReconnectDemo重点展示了SDK中相机断线重连的操作步骤。

告知用户如何使用断线回调以及如何重新连接相机。

2.1 Demo 软件使用步骤

2.1.1界面总体总体界面如下图。

界面类似BasicDemo,具有查找设备、打开设备、关闭设备、开始采集、停止采集、设置触发等功能。

2.1.2使用过程

ReconnectDemo中,当相机断线时,程序会进入异常回调,异常回调中,会根据当前选中的相机信息进行不断的尝试连接,

当相机在线时则会被连接上。

2.2 Demo 软件开发步骤

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

在C#中,用delegate(代理)的方式代替C语言中函数指针。

在工业相机C# SDK中,异常断线的回调代理为MyCamera. cbExceptiondelegate。

首先在 Form1 类中申明一个回调代理成员变量,如下:MyCamera. cbExceptiondelegate pCallBackFunc;

然后为pCallBackFunc创建一个实例:

pCallBackFunc= new MyCamera. cbExceptiondelegate (cbExceptiondelegate);

其中,cbExceptiondelegate表示回调处理函数。

其次,在打开相机操作之后,利用 SDK 中注册回调函数接口,注册回调函数。

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

注册过程如下:

m_pMyCamera.MV_CC_RegisterExceptionCallBack_NET(pCallBackFunc,);

在 本 示 例 程 序 中 ,cbExceptiondelegate函 数 先 是 会 对 进 行CloseDevice和DestroyHandle操作,

之后则会不断的尝试连接相机。

三.SetIODemo 使用步骤及开发流程

本节介绍的Demo主要实现对相机IO输入输出的控制。

使用用户群体为需要对相机IO进行控制的用户。

当用户需要使用功能相机IO属性时,首先需要将相机设置成触发模式,并且选择相应的触发源TriggerSource,例如选择Line0进行输入设置,可以选择高电平、低电平触发等;

然后在Digital IO Control中对触发源进一步设置,比如滤波,延时等,也可以对Line1进行输出设置,对Line2进行输入或者输出的设置;其中输入和输出对应不同颜色的信号线,不同系列的相机,IO定义和接线也可能不同,所以设置好这些IO属性后,要通过相机IO特定的接线图,连接对应的信号线,来实现该IO的功能。

本节介绍的demo是关于相机IO属性的简单设置,相机的Digital IO Control详细设置可以参考MVS。

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用 到 的 接 口 分 别 为 :

m_pMyCamera.MV_CC_GetEnumValue_NET(string strKey, ref CSI.MVCC_ENUMVALUEpstValue),

以及m_pMyCamera.MV_CC_SetEnumValue_ NET (string strKey, UInt32 nValue)

在SDK中,类似此类Set或Get +数据类型+ Value的接口函数成为万能接口函数,其作用为获取或设置相机任意属性值。

万能接口的第一个参数为属性名称,为一个string型字符串,相机属性名称可以通过查找文档查询。

第二个参数为获取到的或者设置的属性值

3.2.3 IO 操作

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

其属性类型均为Enumeration类型。

调用万能接口即可实现对其属性的操作。

获取操作如下:

MyCamera.MVCC_ENUMVALUE stSelValue = newMyCamera.MVCC_ENUMVALUE();

nRet = m_pMyCamera.GetEnumValue("LineSelector", ref stSelValue);

MyCamera.MVCC_ENUMVALUE stModeValue = newMyCamera.MVCC_ENUMVALUE();

nRet = m_pMyCamera.GetEnumValue("LineMode", ref stModeValue);

设置操作如下:

nRet = m_pMyCamera.SetEnumValue("LineSelector", nValue);nRet = m_pMyCamera.SetEnumValue("LineMode", nValue);

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

4.1 Demo 软件使用步骤

4.1.1界面总体

软件界面如下图所示。

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

4.1.2使用过程

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

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

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

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

4.2 Demo 软件开发步骤

设置IP调用SDK中MyCamera.MV_GIGE_ForceIp_NET(UInt32 nIp)接口。

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

5.1 Demo 软件使用步骤

5.1.1界面总体

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

5.1.2使用过程

打开软件,“在线设备数量”会自行枚举在线相机个数,在“使用设备个数”文本框内填写需要打开的相机个数n,

单击“初始化相机”,默认以连续方式打开n台设备。

在“曝光”和“增益”中填写修改的参数,单击“设置参数”,即可依次修改n台设备参数。同时可选择连续或者触发模式。

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

此时若点击“保存图片”,会在当前exe目录下出现一个名称为image1-image4的bmp文件,分别对应1-4台设备保存的图片。

若希望结束,则点击“停止采集”,“关闭设备”即可。

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

5.2 Demo 软件开发步骤

5.2.1多相机的实现

MultipleDemo在BasicDemo基础上,在类中添加m_bEnabled数组的成员变量,表示四台相机的使能,

初始化时由“使用数量”和是否成功打开决定m_bEnabled为True或者False。

后面的基本操作均由m_bEnabled判断是否需要对相应的相机进行操作。

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

总帧数在回调函数中计数(成员变量)。回调函数中同时完成保存图片的功能,判断是否点击保存图片的按钮确定是否保存当前帧为图片,

保存完成后,修改相应标志位以免下次取流重复保存图片。

丢帧数由调用CSI.MV_CC_GetAllMatchInfo_CSI(ref pstInfo)接口获取。

总帧数和丢帧数的更新周期为1秒,设置定时器,1秒获取一次丢帧数,然后再更新总帧数和丢帧数。

六.BasedOnGenTL使用步骤及开发流程

BasedOnGenTL是一个使用GenTL的示例程序,可以加载不同的CTI文件,枚举到对应的设备,其他操作类似于BasicDemo。

6.1 Demo软件使用步骤

6.1.1界面总体

软件界面总览,一共包括五个控制模块(枚举Interface、查找设备、初始化,图像采集,参数控制)、

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

6.1.2使用过程

首先点击【枚举Interface】,选择需要的CTI文件,例如选择MVS安装包路径C:\ProgramFiles (x86)\Common Files\MVS\Runtime\Win32_i86下的文件,然后点击【查找设备】进行查找设备,

这时下拉列表会出现当前在线GigeVision设备列表,命名方式为用户ID不为空时显示设备类型+设备名称+IP地址,

设备为空时显示设备类型+设备型号+IP地址。选择不同的CTI文件,会枚举出不同类型的设备。选择其中一个设备;

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

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

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

点击【获取参数】将会刷新当前的曝光时间、帧率的数值,而更改【曝光】、【帧率】的数值之后点击【设置参数】将会重新设置新的曝光时间、帧率的数值

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

6.2 Demo软件开发步骤

同1.2节Demo开发步骤