【04】大恒相机SDK C++发开——调试千兆网相机心跳超时设备掉线

发布于:2025-08-03 ⋅ 阅读:(22) ⋅ 点赞:(0)

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 注意事项

注意:如果用户将心跳超时时间设置的非常长,当结束程序的时候没有调用关闭设备接口来关闭设备,这就会导致设备在心跳时间内无法复位,从而导致用户再次尝试打开设备的时候失败

可通过复位或重连设备解决此问题,有两种方式实现设备的复位或重连:

    1. 在IP 配置工具中直接选择复位设备或重连设备;
    1. 通过接口GXGigEResetDevice 实现设备的复位/重连。
      复位设备:等同于给设备掉电上电一次,相机内程序全部重新加载。
      重连设备:等同于软件接口关闭设备,执行此操作后,允许用户重新打开设备。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到