2. Basler设备发现与枚举

在批量配置场景中,第一步永远不是“改参数”,而是“把设备找全、认准、记录清楚”。如果设备发现环节遗漏了某台相机,后续无论版本升级还是参数下发都会出现“漏网之鱼”;如果同一台设备在不同工具中显示为不同标识,批量脚本就可能把配置写到错误的机器上。因此,理解 Basler 相机的发现与枚举机制,是整条批量管理链路的地基。

一、两种接口,两套发现机制

Basler 相机主要分为 GigE Vision 和 USB3 Vision 两大类,它们的发现机制在底层完全不同。

GigE Vision 设备发现基于 UDP 广播。主机侧(pylon 或 IP Configurator)向本地子网广播地址发送 GVCP Discovery 命令,所有处于同一广播域的 GigE 相机会回应自身的 MAC 地址、IP 地址、子网掩码、网关、厂商名称、型号、序列号、设备版本、用户自定义名称等信息。这意味着:只要相机与主机在同一二层网络内,即使相机 IP 与主机不在同一网段,也能被发现——这正是 IP Configurator 能够“跨网段看到设备并修改 IP”的原因。反之,如果相机与主机之间隔着路由器且未配置广播转发,发现就会失败。

USB3 Vision 设备发现则依赖操作系统的 USB 枚举。相机插入后,系统识别其 USB 描述符,pylon 通过底层驱动读取设备信息。USB3 Vision 没有 IP 概念,因此不存在“改 IP”这一步,但同样存在设备标识(序列号、用户自定义名称)和带宽、供电等约束。USB 设备发现通常更“即时”,但受限于 USB 控制器、线缆质量和供电能力,批量场景下更容易出现枚举不稳定。

Basler 设备发现与枚举机制对比 GigE Vision 发现路径 主机 / pylon IP Configurator 发送 GVCP Discovery(UDP 广播) 广播域内传播 交换机 / 二层网络 同一子网内所有端口可达 相机响应 GigE 相机(可多台) 返回:MAC / IP / 子网掩码 / 网关 型号 / 序列号 / 用户自定义名称 关键特性 • 可跨网段发现(同广播域) • 支持修改 IP / 子网掩码 / 网关 • 依赖网络配置与广播可达性 USB3 Vision 发现路径 主机 / pylon 通过 USB 驱动枚举设备 USB 描述符读取 USB 控制器 / 集线器 端口供电与带宽分配 设备枚举 USB3 相机(可多台) 返回:厂商 / 型号 / 序列号 用户自定义名称 / 设备版本 关键特性 • 即插即用,枚举速度快 • 无 IP 概念,不可改网络参数 • 受供电、线缆、控制器影响

二、pylon IP Configurator 的定位与操作

pylon IP Configurator 是 Basler 官方提供的 GigE 相机网络配置工具,它的核心价值在于:在相机 IP 与主机不在同一网段时,仍能发现并修改相机网络参数。典型操作流程如下:

  1. 打开 IP Configurator,工具自动广播扫描当前广播域内的所有 GigE 相机。
  2. 设备列表显示每台相机的 MAC 地址、当前 IP、子网掩码、网关、型号、序列号、用户自定义名称。
  3. 选中目标相机,修改 IP 地址、子网掩码、网关,点击“Write Configuration”。
  4. 修改后相机可能短暂离线,重新扫描确认新 IP 生效。

在批量场景中,建议先通过 MAC 地址建立“物理设备—目标 IP”的映射表,再逐台写入。因为 MAC 地址是唯一且不变的,而 IP 可能被重复分配或冲突。例如,某产线有 12 台 acA1920-40gm 相机,可规划为 192.168.10.101~112,子网掩码 255.255.255.0,网关 192.168.10.1。写入前务必确认没有 IP 冲突,否则会出现“两台相机抢同一地址”的异常。

IP Configurator 只能发现同一广播域内的 GigE 相机。如果相机与主机之间隔着路由器且未开启广播转发,工具将无法发现设备。此时需要先通过直连或同网段接入完成初始 IP 配置。

三、批量扫描与设备列表导出

当设备数量达到几十台甚至上百台时,逐台点击查看效率极低。pylon 提供了批量扫描与列表导出能力,常见做法有两种:

方式一:pylon Viewer 设备列表导出。在 pylon Viewer 中打开“Device”面板,扫描后可将设备列表导出为 CSV 或文本文件。导出字段通常包括:接口类型、厂商、型号、序列号、用户自定义名称、IP 地址、MAC 地址、设备版本。这份列表可直接作为批量配置的输入清单。

方式二:pylon API 编程枚举。使用 pylon C++ 或 C# API 中的 TlFactory::EnumerateDevices 或 DeviceEnumerator,可遍历所有已发现设备并读取其属性。以下为 C# 示例片段:

using PylonC.NET;

var devices = DeviceEnumerator.EnumerateDevices();
foreach (var dev in devices)
{
    Console.WriteLine($"Model: {dev.ModelName}");
    Console.WriteLine($"Serial: {dev.SerialNumber}");
    Console.WriteLine($"UserDefinedName: {dev.UserDefinedName}");
    Console.WriteLine($"DeviceClass: {dev.DeviceClass}");
    Console.WriteLine($"Interface: {dev.Interface}");
}

导出后的设备列表建议至少包含以下字段,便于后续批量配置与版本管理:

字段 说明 示例值
序列号 设备唯一标识,不可更改 12345678
型号 相机型号 acA1920-40gm
接口类型 GigE 或 USB3 GigE
MAC 地址 GigE 设备物理地址 00:30:53:AA:BB:CC
IP 地址 当前网络地址 192.168.10.101
用户自定义名称 便于人工识别 Line1_Cam01
设备版本 固件/设备描述版本 1.2.3

四、发现环节的常见问题与判断

批量扫描时,如果发现设备数量少于预期,可按以下顺序排查:

  • GigE 相机未出现:检查相机与主机是否在同一广播域;检查网卡是否启用;检查防火墙是否拦截 UDP 广播;检查相机是否已上电且网口指示灯正常。
  • USB3 相机未出现:检查 USB 线缆是否支持 USB3 速率;检查是否使用了带供电的集线器;检查驱动是否安装正确;尝试更换 USB 控制器端口。
  • 设备出现但信息异常:如 IP 显示为 169.254.x.x,说明相机未获取到有效 DHCP 地址,处于链路本地地址状态,需要通过 IP Configurator 手动分配。
  • 同一设备重复出现:可能同时存在 GigE 和 USB 接口,或同一相机被多个网卡发现,需根据接口类型和 MAC 地址去重。
在批量修改 IP 前,务必先导出原始设备列表并备份。一旦 IP 写入错误或发生冲突,可能导致多台相机同时离线,恢复时需要逐台直连处理,耗时且影响产线。

完成设备发现与列表导出后,你就拥有了一份“设备台账”。这份台账是后续批量参数配置、固件版本核对、设备替换追踪的基础。下一阶段的工作,将围绕这份台账展开参数下发与版本一致性校验。