1. 课程导入与开发环境搭建
在工业视觉项目中,相机能否被稳定地发现、打开、取流并触发,往往决定了后续算法与产线节拍能否成立。Basler pylon 是围绕 Basler 相机的一套完整软件栈,它既包含底层驱动与 GenICam 传输层,也提供 pylon Viewer 这样的图形化验证工具,以及 C++、C#、Python 等语言的 SDK 接口。本课程的目标不是泛泛介绍相机参数,而是围绕“采集”与“触发控制”两条主线,建立一套可复现的工程方法:先用 pylon Viewer 快速确认相机与链路正常,再用 pylon SDK 把采集与触发逻辑写进自己的程序,最后能对丢帧、触发丢失、时间戳异常等问题做出判断。
因此,本章要完成三件事:安装 pylon SDK、把相机连上并让系统识别、用 pylon Viewer 做一次最小可用的取流验证,同时明确整个课程的工程目标。这三件事看起来是“准备动作”,但实际决定了后面所有章节的调试效率。很多现场问题——例如相机枚举不到、GigE 相机被防火墙拦截、USB 相机带宽不足、触发信号进不来——都可以在这一步提前暴露。
1.1 pylon SDK 的组成与安装选择
Basler 官方把 pylon 分为几个可独立安装的组件。最常用的是 pylon Camera Software Suite,它包含 pylon Viewer、pylon IP Configurator、驱动以及各语言运行时。安装时需要注意两点:第一,若使用 GigE 相机,安装程序会一并安装高性能网络驱动(pylon GigE Vision Performance Driver),它绕过部分系统网络栈,能显著降低丢包;第二,若使用 USB 3.0 相机,需要确认主机 USB 控制器与驱动版本,避免相机被识别为 USB 2.0 而降速。
安装完成后,建议先确认版本与安装路径。以 Windows 为例,默认路径通常为 C:\Program Files\Basler\pylon 7\,其中 Runtime 目录存放运行时库,Development 目录存放头文件与示例。可以用命令行快速确认环境变量是否生效:
# 查看 pylon 环境变量(Windows CMD)
echo %PYLON_ROOT%
# 典型输出
C:\Program Files\Basler\pylon 7\Runtime\x64
# 查看已安装的 pylon Viewer 版本
"C:\Program Files\Basler\pylon 7\Runtime\x64\pylonviewer.exe" --version
如果使用 Python 开发,还需要安装 pypylon。它是对 pylon C++ API 的封装,安装后可直接用 import pypylon.pylon as py 访问相机。注意 pypylon 的版本要与已安装的 pylon Runtime 匹配,否则可能出现找不到 pylon.dll 或 GenICam 库的错误。
1.2 相机连接与网络/接口配置
连接相机时,先区分接口类型。GigE 相机通过网线接入主机网卡或交换机,需要保证相机与主机在同一子网;USB 相机直接接入 USB 3.0 端口,建议使用带屏蔽和锁扣的工业线缆;CoaXPress 或 Camera Link 相机则需要对应的采集卡。以最常见的 GigE 为例,推荐把主机网卡设为固定 IP,例如 192.168.1.100,子网掩码 255.255.255.0,相机默认 IP 常为 192.168.1.x 段。若不确定相机 IP,可用 pylon IP Configurator 扫描并修改。
连接完成后,打开 pylon Viewer,左侧设备树应出现相机型号与序列号。若没有出现,按以下顺序排查:网卡是否启用、网线是否插好、相机是否供电(PoE 需确认交换机供电能力)、防火墙是否拦截了 GigE Vision 发现协议、相机 IP 是否与主机同网段。对于 USB 相机,则检查设备管理器中是否出现“Basler”设备,以及是否被识别为 USB 3.0。
1.3 用 pylon Viewer 做最小验证
pylon Viewer 的价值在于“先排除软件问题”。打开后,左侧设备树会列出所有被 pylon 发现的相机。双击相机即可打开参数面板,常用操作包括:点击 Continuous Shot 连续取流,点击 Single Shot 单帧采集,调整 ExposureTime 与 Gain 观察亮度变化。若图像能稳定刷新,说明驱动、传输链路和相机基本正常。
接下来验证触发。在 Features 面板中找到 TriggerSelector 设为 FrameStart,TriggerMode 设为 On,TriggerSource 可选 Software 或 Line1。若选软触发,点击 Execute 应只出一帧;若选硬件触发,需要给相机触发线输入一个上升沿或下降沿信号。此时观察 AcquisitionStatus 与帧计数是否随触发递增,就能判断触发链路是否打通。
.pfs 文件,后续在 SDK 中可直接加载,避免每次手动配置。1.4 工程目标与后续路线
本课程的工程目标可以概括为一条链路:可枚举 → 可采集 → 可触发 → 可诊断。可枚举指程序能列出相机并获取型号、序列号;可采集指能稳定取流并控制曝光、增益、帧率;可触发指能配置软触发或硬件触发,并保证每次触发对应一帧;可诊断指在出现丢帧、触发丢失、时间戳异常时,能通过日志、状态码和参数回读定位问题。
后续章节会围绕这条链路展开:先讲 pylon SDK 的对象模型与生命周期,再讲采集循环与缓冲区管理,然后深入触发模式、触发源、去抖与延迟,最后讲多相机同步与异常处理。本章的验证结果就是后续所有代码的基线——如果 pylon Viewer 里都取不到流,就不必急着写代码;如果 Viewer 里能取流但程序里不行,问题通常出在 SDK 初始化、权限或参数加载上。
完成本章后,你应该能够独立完成一次“从零到出图”的验证:安装 pylon、连接相机、在 pylon Viewer 中看到图像、切换一次触发模式并确认帧计数变化。这个看似简单的过程,正是后面所有采集与触发控制代码的起点。