相关文章推荐
冷静的灯泡  ·  python海康工业相机 ...·  6 天前    · 
快乐的哑铃  ·  [VB.NET ...·  1 年前    · 

问题描述:

在使用 海康工业网口相机开发过程 中,调试阶段异常结束程序调试时,经常出现相机被占用的异常情况,无论是使用海康的客户端界面连接相机还是使用调试代码连接相机,都没有权限再次打开相机,需要相机断电或者长时间等待(60s)才能正常打开相机;

问题出现时,在海康客户端界面有如下红色框图中的状态,该状态表示相机被占用,无法连接调用;

原因分析:

网口相机,有一种心跳保护机制,在相机链接状态,为检测控制通道是否处于活跃状态,SDK会定时500ms发送一个GVSP指令给相机,相机收到指令后,同时会回复一个GVSP命令;

这样一来一回就确保了相机被指定的软件打开,防止意外掉线的情况;

相机默认3s的心跳超时时间,如果相机连续6次没有收到sdk的心跳数据包,那么相机就会主动清空的当前的控制权限,使相机能够被其他软件链接;

解决方案:

在 opendevice 之后,设置相机心跳时间值范围是3s-60s。减小心跳时间可减少等待时间,这样就可以减小因为异常退出调试程序导致的相机被占用时间,降低调试过程中的耗时;

具体参数在客户端显示如下:

可以在客户端中修改相关值,但是在每次相机重新上电之后,该值就会再次变为 60s,因而建议直接在每次调用相机时,连接上相机之后写入,这样每次调用就不会再出现以上问题,如下所示:

    if stDeviceList.nTLayerType == MV_GIGE_DEVICE:
        stParam = 30000
        ret = cam.MV_CC_SetIntValueEx("GevHeartbeatTimeout", stParam)
        if ret != 0:
            print("set GevHeartbeatTimeout fail! ret[0x%x]" %  ret)
            sys.exit()
        nPacketSize = cam.MV_CC_GetOptimalPacketSize()
        if int(nPacketSize) > 0:
            ret = cam.MV_CC_SetIntValue("GevSCPSPacketSize",nPacketSize)
            if ret != 0:
                print ("Warning: Set Packet Size fail! ret[0x%x]" % ret)
        else:
            print ("Warning: Get Packet Size fail! ret[0x%x]" % nPacketSize)

因为该参数只对网口相机有作用,可以将该设置部分添加到探测网络最佳包大小部分(官方例程中有探测网络最佳包大小的代码,可以找到相关位置添加)

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多同志一、一些基础信息MVS 版本 V3.1.0SDK 版本:V3.2.0.31.库与头文件... 最近在进行机器视觉系统的搭建,积累了经验,想和大家讨论、互相学习。相机是图像的来源。为了搭建视觉系统,完成图像分析、机器视觉任务,需要编程控制相机按工作所需的曝光、增益和帧率同步采集和存储图像。 工业相机 通常支持C/C++程序进行控制,提供了SDK(Software Development Kit)。这些SDK包括对相机进行基本控制的函数,利用这些函数,就可以控制相机参数(如曝光时间、增益、帧率、像素格式),满足视觉系统任务需求。 1.1相机选型 工业相机 分为彩色工业(... 在出差的过程中,曾经 出现 了一个微小人脸检测的需求,该算法的主要工作流程是从一张图片上通过算法识别出图片上的微小人脸。撇去算法如何实现,在这个微小人脸检测执行的过程中,图片的来源经过协商,希望通过 海康 威视摄像头的抓拍功能来实现,毕竟做安放平台摄像头是必不可少的设备,现场也采购了几个 海康 威视的人脸相机。这样也就定下来了实现的方案,即通过 调用 海康 威视的设备SDK来实现摄像头的抓图的功能。然后通... 1)创建QT项目,在pro文件中添加相机的引用文件 1.1)添加 海康 的库: 将 海康 SDK库MVS\Development\Includes和MVS\Development\Libraries\win64下复制到自己的工程目录下 然后把库添加到... heartbeat超时值定义了RabbitMQ及其client库在多久之后认为TCP连接不可到达。这个值是在client连接RabbitMQ服务器的时候协商好的,在RabbitMQ 3.0及以上版本,broker缺省就会自动尝试进行heartbeat协商,而对于低版本则必须由client在连接时显示地请求协商。该值单位为秒,缺省是60秒。 每隔timeout / 2秒发送一个Heartbeat消息帧,这个值有时被称作heartbeat interval,如果连续丢失两个heartbeats消息帧,就认...