【04】大恒相机SDK C++发开——调试千兆网相机心跳超时设备掉线
文章目录
- 1 调试千兆网相机注意事项
- 1.1 第一种方式——宏编译条件判断 增加心跳超时
- 1.2 第二种方式——系统中环境变量 添加 心跳超时时间
- 1.3 注意事项
1 调试千兆网相机注意事项
Windows 的用户在使用Visual Studio 开发平台在Debug 模式下调试千兆网相机的时候**可能会遇到因为心跳超时而导致设备掉线的情况。**应用程序必须以固定的时间间隔发送心跳包到设备,如果设备没有接收到心跳包则会认为当前连接已经断开,从而不会再接收从应用程序发送的任何命令。
- 当用户正常运行应用程序的时候,底层库会正常发送心跳包,保持和设备的连接状态,
- 但是当用户在应用程序中设置
断点调试的时候
,程序运行到这些断点时,调试器会暂停所有线程,包括发送心跳包的线程,所以当用户在Debug 模式下单步调试代码的时候,就不会发送心跳包到设备
。
用户可以通过增加心跳超时时间的方式来解决这个问题,用户修改心跳超时时间有以下两种方式:
1.1 第一种方式——宏编译条件判断 增加心跳超时
代码使用宏编译条件判断包含,只有在Debug 调试模式才编译此段代码,切忌不要将此段代码带到正
常发布产品中。
//打开设备,此处以序列号为例打开设备,序列号以实际设备为准。用户可以选择其他方式打开设备。
#ifdef_DEBUG
CGXDevicePointer objDevicePtr = IGXFactory::GetInstance().OpenDeviceBySN("RN0001007012",GX_ACCESS_EXCLUSIVE);
//获取远端设备属性控制器
CGXFeatureControlPointer objFeatureControl = objDevicePtr->GetRemoteFeatureControl();
//设置心跳超时时间5 分钟
objFeatureControl->GetIntFeature("GevHeartbeatTimeout")->SetValue(300000);
#endif
1.2 第二种方式——系统中环境变量 添加 心跳超时时间
在系统中添加环境变量"MER_HEARTBEAT_TIMEOUT
",并赋给一个大于零的值,添加完成后使用应用程序打开设备,设备的心跳超时时间就会自动变成此环境变量的值。
注意只需要在开发的系统上添加此环境变量,因为无论在Debug 还是Release 的应用程序中都起作用。
1.3 注意事项
注意:如果用户将心跳超时时间设置的非常长,当结束程序的时候没有调用关闭设备接口来关闭设备,这就会导致设备在心跳时间内无法复位,从而导致用户再次尝试打开设备的时候失败。
可通过复位或重连设备解决此问题,有两种方式实现设备的复位或重连:
-
- 在IP 配置工具中直接选择复位设备或重连设备;
-
- 通过接口GXGigEResetDevice 实现设备的复位/重连。
复位设备:等同于给设备掉电上电一次,相机内程序全部重新加载。
重连设备:等同于软件接口关闭设备,执行此操作后,允许用户重新打开设备。
- 通过接口GXGigEResetDevice 实现设备的复位/重连。