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

您所在的位置:网站首页 摄像头设备被占用怎么处理 python 调用海康工业相机调试后出现被占用问题

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

2024-07-10 13:14| 来源: 网络整理| 查看: 265

问题描述:

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3