一、HALCON 相机连接核心架构
HALCON 通过 硬件抽象层(Hardware Abstraction Layer, HAL) 实现对不同相机的兼容,支持 标准接口相机(如 GigE、USB3.0、Camera Link)和 第三方 SDK 相机(需安装对应驱动)。其核心流程包括:
- 相机枚举:扫描可用相机设备。
- 参数配置:设置曝光时间、增益、分辨率等采集参数。
- 图像采集:通过缓冲区(Buffer)实时获取图像数据。
- 通信控制:与相机进行指令交互(如触发采集、调整参数)。
二、主流相机接口连接详解
1. GigE Vision(以太网接口)
协议标准:遵循 GigE Vision 协议(基于 TCP/IP),支持远程传输(最长 100 米)。
连接步骤:
- 配置相机 IP:
- 相机默认 IP 通常为
192.168.0.xxx
,需将主机 IP 设置为同网段(如192.168.0.100
)。 - 使用工具(如相机厂商提供的配置软件)修改相机 IP。
- 相机默认 IP 通常为
- HALCON 代码示例:
hdevelop
* 枚举 GigE 相机 list_image_acquisition_devices ('GigEVision', 'false', 'false', CameraList) if (|CameraList| == 0) stop () endif select_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 官方支持列表中,可通过以下方式集成:
-
使用第三方 SDK:
- 通过 HALCON 与 C++/C# 混合编程,调用相机厂商提供的 SDK 接口。
- 示例流程:
hdevelop
* 调用 C# 封装的相机 SDK 函数 read_image_from_sdk (Image, 'CameraSDK.dll', CameraHandle) * 自定义算子
-
基于 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)
-
硬件触发同步:
- 配合运动控制设备(如 PLC)实现精准触发,确保相机与机械动作同步:
hdevelop
* 等待外部触发信号(如 GPIO 输入) wait_for_硬件信号 (SignalPin, 'rising_edge') grab_image (Image, AcqHandle)
六、性能优化与最佳实践
-
使用 GPU 加速:
- 对图像处理环节(如滤波、匹配)启用 GPU 加速,减少采集与处理的时间差。
hdevelop
dev_update_off () * 关闭显示更新,提升处理速度 set_system ('int_zooming', 'true') * 启用 GPU 插值
-
多线程采集:
- 通过多线程分离图像采集与处理任务,避免阻塞:
hdevelop
* 线程 1:采集图像 thread := create_thread ('采集线程', 'acquisition_thread', AcqHandle) * 线程 2:处理图像 thread := create_thread ('处理线程', 'processing_thread', Image)
-
定期维护与校准:
- 定期检查相机固件版本,升级至最新以修复 bug。
- 进行几何校准(
camera_calibration
)和辐射校准(radiometric_calibration
),确保测量精度。
总结
HALCON 连接相机的核心是 协议适配 与 参数调优,需根据相机类型(GigE/USB3/Camera Link)选择对应接口,并合理配置曝光、触发、分辨率等参数。遇到问题时,优先检查硬件连接、驱动兼容性和网络配置,结合 HALCON 提供的调试工具(如 hdev_close_window
清空缓存)逐步排查。通过自定义集成和性能优化,可进一步拓展 HALCON 在复杂工业场景中的应用。