这个是海康相机官方的文档,勇哥放上来是为了方便查阅。
【摘要】本文档主要介绍了使用工业相机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开发步骤