4. 图像采集模式与触发配置
在 pylon SDK 中,相机采集行为由两个相互独立的维度共同决定:采集模式决定“相机是否持续输出图像”,触发模式决定“每一帧在什么时刻被启动”。很多初学者把二者混为一谈,结果在配置时出现“设了触发却仍在连续出图”或“单帧采集只拿到一帧就卡住”的现象。理解这两个维度的正交关系,是掌握 Basler 相机采集控制的关键。
采集模式:连续采集与单帧采集
连续采集(Continuous Acquisition)下,相机一旦收到开始采集命令,就按当前帧率持续输出图像,直到收到停止命令。它适合实时监控、视频流录制、长时间检测等场景。单帧采集(Single Frame)则只输出一帧图像后自动停止,常用于标定、抓拍、一次性测量等只需一张图的场合。
在 pylon API 中,采集模式通过 AcquisitionMode 节点控制,其枚举值包括 Continuous、SingleFrame 和 MultiFrame。当使用 MultiFrame 时,还需配合 AcquisitionFrameCount 指定帧数。需要注意的是,采集模式只描述“输出多少帧”,并不规定“何时输出”,后者由触发模式决定。
触发模式:自由运行、软件触发与硬件触发
触发模式由 TriggerMode 与 TriggerSource 共同定义。当 TriggerMode = Off 时,相机处于自由运行(Free Run)状态,按内部定时器以设定帧率自行曝光输出,无需外部事件。当 TriggerMode = On 时,每一帧都必须等待一个触发信号才会启动曝光。
触发源 TriggerSource 决定信号来自哪里。常见取值有:
Software:由主机通过 API 调用TriggerSoftware.Execute()发出触发,适合与上位机逻辑同步的场合。Line1/Line2:来自相机 I/O 接口的物理电平信号,即硬件触发,适合与光电传感器、PLC、编码器等外部设备同步。Action1:基于 GigE Vision Action Command 的广播触发,可让多台相机同时曝光。
硬件触发还涉及触发沿(TriggerActivation,如 RisingEdge、FallingEdge)和触发延迟(TriggerDelay,单位微秒)。触发延迟用于补偿从触发信号到实际曝光之间的固定时延,例如让相机在传送带移动到指定位置后再曝光。此外,TriggerSelector 用于选择触发作用于 FrameStart 还是 FrameBurstStart,多数应用只需配置 FrameStart。
通过 pylon API 配置采集行为
下面以 C++ API 为例,展示自由运行连续采集与硬件触发单帧采集两种典型配置。所有参数均通过 GenApi 节点访问,配置前需确保相机已打开且处于停止采集状态。
// 示例一:自由运行 + 连续采集
camera.AcquisitionMode.SetValue(AcquisitionMode_Continuous);
camera.TriggerMode.SetValue(TriggerMode_Off);
camera.AcquisitionFrameRateEnable.SetValue(true);
camera.AcquisitionFrameRate.SetValue(30.0); // 目标 30 fps
camera.StartGrabbing(GrabStrategy_LatestImageOnly);
// 示例二:硬件触发 + 单帧采集
camera.AcquisitionMode.SetValue(AcquisitionMode_SingleFrame);
camera.TriggerSelector.SetValue(TriggerSelector_FrameStart);
camera.TriggerMode.SetValue(TriggerMode_On);
camera.TriggerSource.SetValue(TriggerSource_Line1);
camera.TriggerActivation.SetValue(TriggerActivation_RisingEdge);
camera.TriggerDelay.SetValue(50.0); // 延迟 50 微秒
camera.StartGrabbing(GrabStrategy_OneByOne);
配置完成后,通过 WaitForFrame 或事件回调获取图像。若使用 GrabStrategy_LatestImageOnly,缓冲区中只保留最新一帧,适合实时显示;若使用 GrabStrategy_OneByOne,则按顺序取帧,适合不丢帧的测量任务。
采集行为对比与选型建议
| 组合 | 触发源 | 帧输出节奏 | 典型场景 |
|---|---|---|---|
| 连续 + 自由运行 | 无 | 按设定帧率等间隔输出 | 视频监控、实时预览 |
| 连续 + 软件触发 | Software | 每次调用 Execute 输出一帧 | 上位机逻辑同步采集 |
| 连续 + 硬件触发 | Line1 | 外部脉冲驱动,间隔由信号决定 | 传送带、旋转编码器同步 |
| 单帧 + 硬件触发 | Line1 | 一次触发只输出一帧后停止 | 定位抓拍、一次性测量 |
TriggerMode 是否真正写入(部分相机需先停止采集才能修改);若硬件触发无响应,用示波器确认 Line1 电平是否达到相机规定的触发阈值,并核对 TriggerActivation 的边沿设置是否与信号一致。
TriggerDelay 是“从触发信号有效到曝光开始”的补偿量,不是曝光时间。曝光时间由 ExposureTime 单独控制,两者不要混淆。设置过大的 TriggerDelay 可能导致帧率下降甚至丢帧。
实际工程中,选择哪种组合取决于同步需求:如果图像采集必须与外部物理事件严格对齐,应使用硬件触发;如果只需与上位机软件流程配合,软件触发更简单;如果对时间精度要求不高、只追求流畅画面,自由运行连续采集是首选。理解采集模式与触发模式的正交关系,并熟练使用 pylon API 中的对应节点,就能在不同项目中快速切换采集策略。