python 调用海康工业相机调试后出现被占用问题

问题描述:
在使用海康工业网口相机开发过程中,调试阶段异常结束程序调试时,经常出现相机被占用的异常情况,无论是使用海康的客户端界面连接相机还是使用调试代码连接相机,都没有权限再次打开相机,需要相机断电或者长时间等待(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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值