Synchronous Free Run#
此功能类似于 Periodic Signal 功能,仅适用于 Basler ace 2 相机。
该功能的使用#
运作原理#
如果您在自由运行模式下使用多台相机,则由于多种原因(例如,相机各自的计时和延迟),图像采集会略失去同步。
Synchronous Free Run 功能可让您在自由运行模式下同步相机。相机将因此以相同的帧速率同时采集图像。
另外,您可以使用 Synchronous Free Run 功能,按时序一致的间隔(即按时间顺序)用多台相机采集图像。例如,您可以配置一台相机为在特定时间点开始图像采集。然后将另一台相机配置为比第一台相机晚 100 毫秒开始采集,将第三台相机配置为比第一台相机晚 200 毫秒开始采集:
另外,您可以配置相机,以按照相同的时间、相同的帧速率、不同的曝光时间来采集图像:
使用 Synchronous Free Run#
一般用法#
要同步多台相机:
- 通过 Precision Time Protocol 功能确保网络中的所有相机均已同步。
- 打开您要使用 Synchronous Free Run 进行同步的其中一个相机。
- 确保在此相机上启用了自由运行图像采集。
- 为
SyncFreeRunTimerTriggerRateAbs
参数输入所需的帧速率。
您必须在所有相机上指定相同的参数值。例如,要以每秒 10 帧的速度同步相机,必须在所有相机上将该参数设置为 10。 - 将
SyncFreeRunTimerStartTimeHigh
和SyncFreeRunTimerStartTimeLow
参数设置为 0。 - 执行
SyncFreeRunTimerUpdate
命令。 - 将
SyncFreeRunTimerEnable
参数设置为true
。 - 对所有相机重复步骤 2 至 7。
信息
Basler 建议,对于所有相机,在每次断开再重新连接相机后,都在相机上执行 SyncFreeRunTimerUpdate
命令。这将重新同步 PTP 时钟。
Synchronous Free Run 具有时序一致的间隔#
要按时序一致的间隔(即按时间顺序排列)同步多台相机:
信息
必须使用 pylon API 执行以下步骤。
- 通过 Precision Time Protocol 功能确保网络中的所有相机均已同步。
- 按时间顺序打开第一个相机。
- 确保在此相机上启用了自由运行图像采集。
- 为
SyncFreeRunTimerTriggerRateAbs
参数输入所需的帧速率。
您必须在所有同步的相机上指定相同的参数值。例如,要让相机以每秒 10 帧的速度采集图像,必须在所有相机上将该参数设置为 10。 -
确定第一台相机的开始时间:
- 在第一台相机上执行
TimestampLatch
命令。
获取相机当前时间戳值的“快照”。 - 在同一相机上获取
TimestampLatchValue
参数的值。
该值以 tick 为单位。在启用了 Precision Time Protocol 的 Basler 相机上,1 tick 等于 1 纳秒。 -
将以 tick(= 纳秒)为单位的开始延迟与步骤 b 中确定的值相加。
例如,要指定 1 秒的开始延迟,请将 1 000 000 000 加到步骤 b 中确定的值上。
之所以需要延迟,是因为第一台相机必须等待,直到其他相机正确完成配置为止:
- 在第一台相机上执行
-
将步骤 5 中确定的值转换为开始时间高值和开始时间低值,并相应地设置
SyncFreeRunTimerStartTimeHigh
和SyncFreeRunTimerStartTimeLow
参数。 - 执行
SyncFreeRunTimerUpdate
命令。 - 将
SyncFreeRunTimerEnable
参数设置为true
。 - 按时间顺序打开下一台相机。
- 在此相机上启用自由运行图像采集。
- 为
SyncFreeRunTimerTriggerRateAbs
参数输入所需的帧速率。
您必须在所有同步的相机上指定相同的参数值。例如,要让相机以每秒 10 帧的速度采集图像,应在所有相机上将该参数设置为 10。 - 将所需的时间间隔(以纳秒为单位)加到第一台相机的开始时间上(在步骤 5 中确定)。
例如,如果您希望相机在第一台相机之后的 100 毫秒后开始图像采集,则将 100 000 000 加到步骤 5 中确定的值上。 - 将步骤 12 中确定的值转换为开始时间高值和开始时间低值,并相应地配置
SyncFreeRunTimerStartTimeHigh
和SyncFreeRunTimerStartTimeLow
参数。 - 执行
SyncFreeRunTimerUpdate
命令。 - 将
SyncFreeRunTimerEnable
参数设置为true
。 - 对其余所有相机重复步骤 9 至 15。
信息
对于所有相机,在每次断开再重新连接相机后,都必须在所有相机上执行 SyncFreeRunTimerUpdate
命令,才能重新同步 PTP 时钟。
转换 64 位时间戳开始时间高值和开始时间低值#
Synchronous Free Run 功能的开始时间必须指定为 64 位 GigE Vision 时间戳值(以纳秒为单位),分为两个 32 位值。
必须使用 SyncFreeRunTimerStartTimeHigh
参数传输 64 位值的高位部分。
必须使用 SyncFreeRunTimerStartTimeLow
参数传输 64 位值的低位部分。
示例:假设根据 UTC 时间协调您的网络设备,并且您想将 Fri Dec 12 2025 11:00:00 UTC 配置为开始时间。这对应于时间戳值 1 765 537 200 000 000 000(十进制)或 0001 1000 1000 0000 0111 0010 1011 1010 1010 1011 1011 1100 1110 0000 0000 0000(二进制)。
此值的高低部分分别如下:
因此,要将开始时间配置为 Fri Dec 12 2025 11:00:00 UTC,您必须将 SyncFreeRunTimerStartTimeHigh
参数设置为 411 071 162,将 SyncFreeRunTimerStartTimeLow
参数设置为 2 881 282 048。
示例代码#
// Example: Configuring cameras for synchronous free run.
// It is assumed that the "cameras" object is an
// instance of CBaslerGigEInstantCameraArray.
for (size_t i = 0; i > cameras.GetSize(); ++i)
{
// Open the camera connection
cameras[i].Open();
// Make sure that the Frame Start trigger is set to Off to enable free run
cameras[i].TriggerSelector.SetValue(TriggerSelector_FrameStart);
cameras[i].TriggerMode.SetValue(TriggerMode_Off);
// Let the free run start immediately without a specific start time
camera.SyncFreeRunTimerStartTimeLow.SetValue(0);
camera.SyncFreeRunTimerStartTimeHigh.SetValue(0);
// Specify a trigger rate of 30 frames per second
cameras[i].SyncFreeRunTimerTriggerRateAbs.SetValue(30.0);
// Apply the changes
cameras[i].SyncFreeRunTimerUpdate.Execute();
// Enable Synchronous Free Run
cameras[i].SyncFreeRunTimerEnable.SetValue(true);
}
此示例代码仅适用于 C++ 语言。