当前位置: 首页 > news >正文

大恒2509新版本掉线重连

大恒2509新版本掉线重连

  • (一)相机出现掉线原因
  • (二)2509新版本驱动新增掉线重连
    • 1.掉线重连流程
    • 2.DEMO设置界面
    • 3.SDK设置掉线重连
      • 1)C语言代码示例:
      • 2)C++代码示例:
      • 3)C#代码示例:
      • 4)python重连代码示例:
    • 4.重连注意事项

工业相机在自动化生产、检测等环节中扮演着“眼睛”的角色,其连接的稳定性至关重要。掉线重连功能能有效应对工业环境中网络波动、电压不稳、物理接口松动等导致的相机意外断开,确保生产流程的连续性和数据完整性。

(一)相机出现掉线原因

  • 物理连接问题:传输线、电源线松动或损坏,接口氧化等。这在振动环境中尤其常见。

  • 网络电脑配置与波动:IP冲突、网络交换机故障、带宽拥塞、网络风暴、节能等。

  • 电源干扰:供电不稳或浪涌可能导致相机重启。

  • 硬件故障:相机本身、网卡或光模块损坏。

  • 软件与驱动问题:驱动程序bug、SDK与系统或其他软件的兼容性问题。

(二)2509新版本驱动新增掉线重连

2509新版本驱动新增本地设备事件,可以检测网口和U3相机断线(端开触发)、掉线(重连时间未连接上进入)、重连(重连时间重连上)

1.掉线重连流程

在这里插入图片描述在这里插入图片描述

2.DEMO设置界面

在这里插入图片描述

在这里插入图片描述

3.SDK设置掉线重连

1)C语言代码示例:

断线重连示例

#include "GxIAPI.h"
// 重连回调函数
static void GX_STDC OnDeviceReconnectCallbackFun(void *pUserParam)
{// 收到重连通知,用户根据需求进行操作…return;
}
// 断线回调函数
static void GX_STDC OnDeviceDisconnectCallbackFun(void *pUserParam)
{// 收到断线通知,用户根据需求进行操作…return;
}
int main(int argc, char *argv[])
{GXInitLib();GX_STATUS emStatus = GX_STATUS_SUCCESS;GX_DEV_HANDLE hDevice = NULL;GX_OPEN_PARAM stOpenParam;uint32_t ui32DeviceNum = 0;emStatus = GXUpdateDeviceList(&ui32DeviceNum, 1000);if ((emStatus != GX_STATUS_SUCCESS) || (ui32DeviceNum <= 0)){GXCloseLib();return 0;}stOpenParam.accessMode = GX_ACCESS_EXCLUSIVE;stOpenParam.openMode = GX_OPEN_INDEX;stOpenParam.pszContent = "1";emStatus = GXOpenDevice(&stOpenParam, &hDevice);if (emStatus == GX_STATUS_SUCCESS){// 启用设备断线重连机制GX_LOCAL_DEV_HANDLE hLocalDevice;GXGetLocalDeviceHandleFromDev(hDevice, &hLocalDevice);emStatus = GXSetBoolValue(hLocalDevice,"EnableAutoConnection", true);if (emStatus != GX_STATUS_SUCCESS){GXCloseDevice(hDevice);GXCloseLib();return 0;}// 设置重连超时时间emStatus = GXSetIntValue(hDevice, "AutoConnectTimeout", 500);if (emStatus != GX_STATUS_SUCCESS){GXCloseDevice(hDevice);GXCloseLib();return 0;}// 注册设备重连回调函数emStatus = GXRegisterDeviceReconnectCallback(hDevice, NULL,OnDeviceReconnectCallbackFun);if (emStatus != GX_STATUS_SUCCESS){GXCloseDevice(hDevice);GXCloseLib();return 0;}// 注册设备断线回调函数emStatus = GXRegisterDeviceDisconnectCallback(hDevice, NULL,OnDeviceDisconnectCallbackFun);if (emStatus != GX_STATUS_SUCCESS){GXCloseDevice(hDevice);GXCloseLib();return 0;}// ......// 注销设备重连事件回调emStatus = GXUnregisterDeviceReconnectCallback(hDevice);if (emStatus != GX_STATUS_SUCCESS){GXCloseDevice(hDevice);GXCloseLib();return 0;}// 注销设备断线事件回调emStatus =GXUnregisterDeviceDisconnectCallback(hDevice);if (emStatus != GX_STATUS_SUCCESS){GXCloseDevice(hDevice);GXCloseLib();return 0;}}GXCloseDevice(hDevice);GXCloseLib();return 0;
}

2)C++代码示例:

(1)设备掉线事件
目前 Gige Vision 相机、USB3 Vision 相机提供设备掉线通知事件机制,用户可以通过回调通知的方式获取设备掉线事件,打开设备之后就可以注册此事件。
获取掉线事件分成以下几步:

  1. 注册掉线事件;
  2. 设备掉线之后激发回调函数;
  3. 注销掉线事件。
    用户必须继承 IDeviceOfflineEventHandler 虚基类回调函数,代码片段如下:
class CSampleDeviceOfflineEventHandler : public IDeviceOfflineEventHandler
{
public:void DoOnDeviceOfflineEvent(void* pUserParam){cout <<" 掉线!"<<endl;}
};

注册掉线事件示例代码片段如下:

GX_DEVICE_OFFLINE_CALLBACK_HANDLEhDeviceOffline = NULL;
//objDevicePtr 为 CGXDevicePointer 设备对象,设备已经打开
//第二个参数为用户私有参数,用户可以在回调函数内部将其还原然使用,如果不需要则可传入 NULL 即可
IDeviceOfflineEventHandler* pDeviceOfflineEventHandler = newCSampleDeviceOfflineEventHandler();
hDeviceOffline = objDevicePtr->RegisterDeviceOfflineCallback(pDeviceOfflineEventHandler,NULL);

在关闭设备之前一定要注销事件:

objDevicePtr->UnregisterDeviceOfflineCallback(hDeviceOffline);
delete pDeviceOfflineEventHandler;
pDeviceOfflineEventHandler = NULL;

注意:在掉线回调函数内部不允许执行关闭设备操作。

(2)断线重连示例

#include "GalaxyIncludes.h"
//继承设备重连处理类
class DeviceReconnectEventHandler : public IDeviceReconnectEventHandler
{
public:virtual ~DeviceReconnectEventHandler(void) {};//设备重连回调函数virtual void DoOnDeviceReconnectEvent(void* pUserParam){// 收到重连通知,用户根据需求进行操作…}
};
//继承设备断线处理类
class DeviceDisconnectEventHandler : public IDeviceDisconnectEventHandler
{
public:virtual ~DeviceDisconnectEventHandler(void) {};//设备断线回调函数virtual void DoOnDeviceDisconnectEvent(void* pUserParam){// 收到断线通知,用户根据需求进行操作…}
};
int main(int argc, char* argv[])
{try{//初始化库IGXFactory::GetInstance().Init();//枚举相机GxIAPICPP::gxdeviceinfo_vector vecDeviceInfo;IGXFactory::GetInstance().UpdateDeviceList(1000, vecDeviceInfo);//判断当前设备连接个数if (vecDeviceInfo.size() <= 0){IGXFactory::GetInstance().Uninit();return 0;}//打开相机CGXDevicePointer pDevice =IGXFactory::GetInstance().OpenDeviceBySN(vecDeviceInfo[0].GetSN(), GX_ACCESS_EXCLUSIVE);DeviceReconnectEventHandler hReconnect;DeviceDisconnectEventHandler hDisconnect;//注册重连和断线回调pDevice->RegisterDeviceReconnectCallback(&hReconnect, nullptr);pDevice->RegisterDeviceDisconnectCallback(&hDisconnect, nullptr);//开启重连pDevice->GetFeatureControl()->GetBoolFeature("EnableAutoConnection")->SetValue(true);//......//注销重连和断线回调pDevice->UnregisterDeviceDisconnectCallback();pDevice->UnregisterDeviceReconnectCallback();//关闭相机pDevice->Close();//关闭库IGXFactory::GetInstance().Uninit();}catch (CGalaxyException &e){std::cout << "<" << e.GetErrorCode() << ">" << "<" << e.what() << ">" << std::endl;}catch (std::exception &e){std::cout << "<" << e.what() << ">" << std::endl;}return 0;
}

3)C#代码示例:

(1)设备掉线事件
GigE Vision 相机和 U3 Vision 相机提供掉线通知事件机制,用户可以通过回调通知的方式获取设备掉线事件,打开设备之后就可以注册此事件。
获取掉线事件分成以下几步:

  1. 注册掉线事件;
  2. 设备掉线之后激发回调函数;
  3. 注销掉线事件。
    代码样例:
GX_DEVICE_OFFLINE_CALLBACK_HANDLE hDeviceOffline = null;
//objIGXDevice 为 IGXDevice 设备对象,设备已经打开
//第一个参数可以传入一个字符串,例如设备名称,此参数为用户私有参数,用户可以在回调
//函数内部将其还原然后打印,如果不需要则可传入 null 即可
hDeviceOffline = objIGXDevice.RegisterDeviceOfflineCallback(null, OnDeviceOfflineEvent);

在关闭设备之前一定要注销事件:

objIGXDevice.UnregisterDeviceOfflineCallback(hDeviceOffline);

回调函数如下:

public void OnDeviceOfflineEvent(object objUserParam)
{//obj 为用户私有参数,在注册回调函数的时候传入,用户可在此处将其还原//用户在掉线回调函数内部不允许执行关闭设备动作,否则抛出非法调用异常
}

注意:在掉线回调函数内部不允许执行关闭设备操作。

(2)断线重连示例

using GxIAPINET;
namespace GxAutoConnect
{class Sample{// 重连回调函数private static void __OnDeviceReconnectCallbackFun(object pUserParam){// 收到重连通知,用户根据需求进行操作…}// 断线回调函数private static void __OnDeviceDisconnectCallbackFun(object pUserParam){// 收到断线通知,用户根据需求进行操作…}static void Main(string[] args){try{// 初始化库IGXFactory.GetInstance().Init();// 枚举相机List<IGXDeviceInfo> lstDevInfo = new List<IGXDeviceInfo>();IGXFactory.GetInstance().UpdateAllDeviceList(300, lstDevInfo);if (lstDevInfo.Count < 1){IGXFactory.GetInstance().Uninit();return;}// 打开相机IGXDevice objDevice = IGXFactory.GetInstance().OpenDeviceBySN(lstDevInfo[0].GetSN(), GX_ACCESS_MODE.GX_ACCESS_CONTROL);// 开启自动重连IBoolFeature pAutoConnect =objDevice.GetFeatureControl().GetBoolFeature("EnableAutoConnection");if (pAutoConnect == null){objDevice.Close();IGXFactory.GetInstance().Uninit();return;}pAutoConnect.SetValue(true);DeviceReconnectDelegate reconnectDelegate = new DeviceReconnectDelegate(__OnDeviceReconnectCallbackFun);DeviceDisconnectDelegate disconnectDelegate = newDeviceDisconnectDelegate(__OnDeviceDisconnectCallbackFun);// 注册设备重连回调objDevice.RegisterDeviceReconnectCallback(null, reconnectDelegate);// 注册设备断线回调objDevice.RegisterDeviceDisconnectCallback(null, disconnectDelegate);// ......// 注销设备重连回调objDevice.UnregisterDeviceReconnectCallback();// 注销设备断线回调objDevice.UnregisterDeviceDisconnectCallback();objDevice.Close();IGXFactory.GetInstance().Uninit();}catch (CGalaxyException ex){Console.WriteLine("GalaxyException: " +ex.Message);}catch (Exception ex){Console.WriteLine("Exception: " + ex.Message);}}}
}

4)python重连代码示例:

断线重连

from gxipy.gxidef import *
def reconnect_callback():# 收到重连通知,用户根据需求进行操作…def disconnect_callback():# 收到断线通知,用户根据需求进行操作…def main():# 打开设备管理器device_manager = gx.DeviceManager()dev_num, dev_info_list = device_manager.update_all_device_list()if dev_num == 0:return# 打开相机cam = device_manager.open_device_by_index(1)remote_device_feature = cam.get_remote_device_feature_control()# 注册重连回调、断线回调cam.register_device_reconnect_callback(reconnect_callback)cam.register_device_disconnect_callback(disconnect_callback)# 开启断线重连功能local_device_feature = cam.get_local_device_feature_control()local_device_feature.get_bool_feature("EnableAutoConnection").set(True)# ......local_device_feature.get_bool_feature("EnableAutoConnection").set(False)# 注销重连回调、断线回调cam.unregister_device_reconnect_callback()cam.unregister_device_disconnect_callback()# 关闭相机cam.close_device()if __name__ == "__main__":main()

4.重连注意事项

注意

  1. 如果相机重连成功,相机在重连过程中可能会产生一个残帧。
  2. 如果使用断线重连功能强烈建议用户使用默认参数组,不设置参数。如果未使用默认参数组运行相 机,修改过 ROI 属性可能会导致重连后相机无法恢复开采问题。如果断线后修改自动重连使能状 态,可能存在依然进行重连问题。
  3. 相机在重连成功后,相机的传输数据信息恢复到采集初始状态,例如:交付帧数、残帧等归零。
  4. 若掉线频繁,仍需首先排查网线、交换机、电源等基础硬件环境是否可靠
http://www.dtcms.com/a/391452.html

相关文章:

  • 基于Docker Desktop和Windows的Milvus本地部署教程
  • 【Kubernetes】-- Gonzo 之 Go 基于 TUI 的日志分析工具
  • 无人驾驶技术:智能决策与精准执行的融合
  • YOLO11 改进、魔改|RFA(Receptive Field Aggregator)通过分层聚合多尺度感受野,提高多尺度目标检测能力
  • 【人工智能99问】QWen中的动态RoPE与LLaMA中的RoPE有什么区别?(40/99)
  • Function Calling:让语言模型调用外部功能
  • UI动画设计基础:提升用户体验的动效设计技巧
  • 业务视角下的主机维护模式:三重自动化,提升运维效率与业务连续性
  • 前端CSP(内容安全策略):防范XSS攻击的配置指南
  • Python基于SnowNLP与ARIMA的微博舆情分析系统 Django+Echarts可视化(建议收藏)✅
  • 1.Rotation用于3D翻转旋转
  • vue3学习日记(十八):状态管理
  • react+antdesign实现后台管理系统面包屑
  • Day02【哔哩哔哩2023校园招聘后端开发方向笔试卷B】螺旋输出矩阵
  • 硬件开发_基于STM32单片机的家养绿植生长健康管理系统
  • 安装Node.js与NPM包管理器
  • 【数据结构】深入浅出图论:拓扑排序算法全面解析与应用实践
  • 全矩阵布局+硬核技术,中资机器人管家重塑智能服务新格局
  • Linux进程间通信(IPC)完全指南:从管道到共享内存的系统性学习
  • vllm安装使用及问题
  • redis配置与优化(2)
  • 苹果开发者账号( Apple Developer)登录出现:你的 Apple ID 暂时不符合使用此应用程序的条件(您的apple账户不符合资格)
  • Git常用命令和分支管理
  • AI报告撰写实战指南:从提示词工程到全流程优化的底层逻辑与实践突破
  • 主流数据库压测工具全解析(从工具选型到实战压测步骤)
  • Vue的理解与应用
  • TDMQ CKafka 版客户端实战指南系列之一:生产最佳实践
  • 苹果群控系统的资源调度
  • Qt如何实现自定义标题栏
  • Qt QPlugin界面插件式开发Q_DECLARE_INTERFACE、Q_PLUGIN_METADATA和Q_INTERFACES