> 技术文档 > HALCON 连接相机详解_halcon连接相机

HALCON 连接相机详解_halcon连接相机


一、HALCON 相机连接核心架构

HALCON 通过 硬件抽象层(Hardware Abstraction Layer, HAL) 实现对不同相机的兼容,支持 标准接口相机(如 GigE、USB3.0、Camera Link)和 第三方 SDK 相机(需安装对应驱动)。其核心流程包括:

  1. 相机枚举:扫描可用相机设备。
  2. 参数配置:设置曝光时间、增益、分辨率等采集参数。
  3. 图像采集:通过缓冲区(Buffer)实时获取图像数据。
  4. 通信控制:与相机进行指令交互(如触发采集、调整参数)。

二、主流相机接口连接详解

1. GigE Vision(以太网接口)

协议标准:遵循 GigE Vision 协议(基于 TCP/IP),支持远程传输(最长 100 米)。
连接步骤

  • 配置相机 IP
    • 相机默认 IP 通常为 192.168.0.xxx,需将主机 IP 设置为同网段(如 192.168.0.100)。
    • 使用工具(如相机厂商提供的配置软件)修改相机 IP。
  • HALCON 代码示例

    hdevelop

    * 枚举 GigE 相机list_image_acquisition_devices (\'GigEVision\', \'false\', \'false\', CameraList)if (|CameraList| == 0) stop ()endifselect_obj (CameraList, 1, SelectedCamera) * 选择第一台相机* 打开相机连接open_framegrabber (\'GigEVision\', 1, 1, 0, 0, 0, 0, \'default\', 8, \'rgb\', -1, \'false\', \'default\', SelectedCamera, 0, AcqHandle)* 设置采集参数(如分辨率、曝光时间)set_framegrabber_param (AcqHandle, \'AcquisitionFrameRate\', 30) * 帧率set_framegrabber_param (AcqHandle, \'ExposureTime\', 1000) * 曝光时间(μs)

优势:长距离传输、成本低、易扩展;支持 PoE(以太网供电)。
注意事项

  • 需安装 GigE Vision 驱动(如 GenICam 标准驱动)。
  • 确保网络带宽足够(图像分辨率 × 帧率 ≤ 网络带宽)。
2. USB3.0 接口(U3V 协议)

协议标准:遵循 USB3 Vision(U3V)协议,传输速度可达 5 Gbps。
连接步骤

  • 驱动安装:安装相机厂商提供的 USB3 驱动(如 Sony、Basler 等)。
  • HALCON 代码示例

    hdevelop

    list_image_acquisition_devices (\'USB3Vision\', \'false\', \'false\', CameraList)open_framegrabber (\'USB3Vision\', 1, 1, 0, 0, 0, 0, \'default\', 8, \'rgb\', -1, \'false\', \'default\', CameraList[0], 0, AcqHandle)* 设置 ROI(感兴趣区域)set_framegrabber_param (AcqHandle, \'RegionOfInterest\', [0, 0, 640, 480]) * 左上坐标 (0,0),宽高 640×480

优势:即插即用、兼容性好;适合中小型设备。
注意事项

  • 需使用原生 USB3.0 接口(非 USB2.0 转接),避免带宽瓶颈。
  • 相机供电不足时可能导致采集不稳定,建议使用带独立供电的 USB 集线器。
3. Camera Link(高速数字接口)

协议标准:基于 LVDS(低压差分信号),传输速率可达数 Gbps,适合高分辨率、高帧率场景(如工业检测)。
连接步骤

  • 硬件要求:需配备 Camera Link 采集卡(如 Euresys、DALSA 等品牌)。
  • HALCON 代码示例

    hdevelop

    list_image_acquisition_devices (\'CameraLink\', \'false\', \'false\', CameraList)open_framegrabber (\'CameraLink\', 1, 1, 0, 0, 0, 0, \'default\', 8, \'mono\', -1, \'false\', \'default\', CameraList[0], 0, AcqHandle)* 启用触发模式(如软触发)set_framegrabber_param (AcqHandle, \'TriggerMode\', \'On\')set_framegrabber_param (AcqHandle, \'TriggerSource\', \'Software\')

优势:超高速传输、低延迟;适合实时性要求极高的场景。
注意事项

  • 采集卡需安装对应驱动,且与 HALCON 版本兼容。
  • 电缆长度受限(通常 ≤10 米),需使用专用线缆。

三、关键参数配置与调优

1. 曝光与增益控制
  • 自动曝光(AUTO Exposure)

    hdevelop

    set_framegrabber_param (AcqHandle, \'ExposureAuto\', \'Continuous\') * 连续自动曝光
  • 手动曝光(Manual Exposure)

    hdevelop

    set_framegrabber_param (AcqHandle, \'ExposureTime\', 500) * 曝光时间 500 μs(根据光照调整)
  • 增益(Gain)

    hdevelop

    set_framegrabber_param (AcqHandle, \'Gain\', 10) * 增益倍数(过高会引入噪声)
2. 触发模式(Trigger Mode)
  • 软触发(Software Trigger):由 HALCON 发送指令触发采集。

    hdevelop

    grab_image_start (AcqHandle, -1) * 开始触发grab_image_async (Image, AcqHandle, -1) * 异步采集图像
  • 硬触发(Hardware Trigger):通过外部信号(如光电传感器)触发。

    hdevelop

    set_framegrabber_param (AcqHandle, \'TriggerSource\', \'Line1\') * 使用相机 IO 线 1 作为触发源set_framegrabber_param (AcqHandle, \'TriggerActivation\', \'RisingEdge\') * 上升沿触发
3. 图像格式与分辨率
  • 获取支持的格式

    hdevelop

    get_framegrabber_param (AcqHandle, \'PixelFormat\', PixelFormats)
  • 设置格式(如灰度图 mono8 或彩色图 rgb8

    hdevelop

    set_framegrabber_param (AcqHandle, \'PixelFormat\', \'mono8\')
  • 分辨率调整

    hdevelop

    set_framegrabber_param (AcqHandle, \'Width\', 1280)set_framegrabber_param (AcqHandle, \'Height\', 1024)

四、常见问题与解决方案

1. 相机无法枚举(List 失败)
  • 可能原因
    • 驱动未安装或版本不兼容。
    • 相机未上电或物理连接故障。
    • IP 地址冲突(GigE 相机)。
  • 解决方法
    • 重新安装驱动,检查 HALCON 支持的相机列表(HALCON Supported Hardware)。
    • 检查相机电源、线缆连接,重启设备。
    • 手动配置相机 IP 至唯一地址。
2. 图像采集卡顿 / 丢帧
  • 可能原因
    • 网络带宽不足(GigE/USB3)。
    • 缓冲区(Buffer)大小不足或队列满。
    • 帧率设置超过相机硬件极限。
  • 解决方法
    • 降低分辨率或帧率,或升级网络设备(如更换千兆网卡)。
    • 增加缓冲区数量:

      hdevelop

      set_framegrabber_param (AcqHandle, \'NumBuffers\', 5) * 设置 5 个缓冲区
    • 启用异步采集(grab_image_async)避免主线程阻塞。
3. 图像偏色 / 亮度异常
  • 可能原因
    • 白平衡未校准。
    • 曝光时间或增益设置不合理。
    • 光照不均匀或光源故障。
  • 解决方法
    • 启用自动白平衡:

      hdevelop

      set_framegrabber_param (AcqHandle, \'WhiteBalanceAuto\', \'Continuous\')
    • 手动调整曝光和增益,或使用均匀光源补光。

五、高级技巧:自定义相机集成

若相机未在 HALCON 官方支持列表中,可通过以下方式集成:

  1. 使用第三方 SDK

    • 通过 HALCON 与 C++/C# 混合编程,调用相机厂商提供的 SDK 接口。
    • 示例流程:

      hdevelop

      * 调用 C# 封装的相机 SDK 函数read_image_from_sdk (Image, \'CameraSDK.dll\', CameraHandle) * 自定义算子
  2. 基于 GenICam 标准

    • 支持 GenICam 的相机可通过 XML 描述文件(.xml)导入 HALCON,无需额外驱动。

    hdevelop

    open_framegrabber (\'GenICam\', 1, 1, 0, 0, 0, 0, \'default\', 8, \'mono\', -1, \'false\', \'xml\', \'camera_description.xml\', 0, AcqHandle)
  3. 硬件触发同步

    • 配合运动控制设备(如 PLC)实现精准触发,确保相机与机械动作同步:

    hdevelop

    * 等待外部触发信号(如 GPIO 输入)wait_for_硬件信号 (SignalPin, \'rising_edge\')grab_image (Image, AcqHandle)

六、性能优化与最佳实践

  1. 使用 GPU 加速

    • 对图像处理环节(如滤波、匹配)启用 GPU 加速,减少采集与处理的时间差。

    hdevelop

    dev_update_off () * 关闭显示更新,提升处理速度set_system (\'int_zooming\', \'true\') * 启用 GPU 插值
  2. 多线程采集

    • 通过多线程分离图像采集与处理任务,避免阻塞:

    hdevelop

    * 线程 1:采集图像thread := create_thread (\'采集线程\', \'acquisition_thread\', AcqHandle)* 线程 2:处理图像thread := create_thread (\'处理线程\', \'processing_thread\', Image)
  3. 定期维护与校准

    • 定期检查相机固件版本,升级至最新以修复 bug。
    • 进行几何校准(camera_calibration)和辐射校准(radiometric_calibration),确保测量精度。

总结

HALCON 连接相机的核心是 协议适配 与 参数调优,需根据相机类型(GigE/USB3/Camera Link)选择对应接口,并合理配置曝光、触发、分辨率等参数。遇到问题时,优先检查硬件连接、驱动兼容性和网络配置,结合 HALCON 提供的调试工具(如 hdev_close_window 清空缓存)逐步排查。通过自定义集成和性能优化,可进一步拓展 HALCON 在复杂工业场景中的应用。