跳转到内容

Synchronous Free Run#

相机的 Synchronous Free Run 功能可让您以相同的帧速率同时在多台相机上采集图像。

该功能的使用#

运作原理#

如果您在自由运行模式下使用多台相机,则由于多种原因(例如,相机各自的计时和延迟),图像采集会略失去同步。

相机以相同的帧速率拍摄,但异步运行

Synchronous Free Run 功能可让您在自由运行模式下同步相机。相机将因此以相同的帧速率同时采集图像。

相机以相同的帧速率同时拍摄

另外,您可以使用 Synchronous Free Run 功能,按时序一致的间隔(即按时间顺序)用多台相机采集图像。例如,您可以配置一台相机为在特定时间点开始图像采集。然后将另一台相机配置为比第一台相机晚 100 毫秒开始采集,将第三台相机配置为比第一台相机晚 200 毫秒开始采集:

相机按时序一致的间隔拍摄

另外,您可以配置相机,以按照相同的时间、相同的帧速率、不同的曝光时间来采集图像:

相机使用不同的曝光时间拍摄

使用 Synchronous Free Run#

一般用法#

要同步多台相机:

  1. 通过 Precision Time Protocol 功能确保网络中的所有相机均已同步。
  2. 打开您要使用 Synchronous Free Run 进行同步的其中一个相机。
  3. 确保在此相机上启用了自由运行图像采集
  4. SyncFreeRunTimerTriggerRateAbs 参数输入所需的帧速率。
    您必须在所有相机上指定相同的参数值。例如,要以每秒 10 帧的速度同步相机,必须在所有相机上将该参数设置为 10。
  5. SyncFreeRunTimerStartTimeHighSyncFreeRunTimerStartTimeLow 参数设置为 0。
  6. 执行 SyncFreeRunTimerUpdate 命令。
  7. SyncFreeRunTimerEnable 参数设置为 true
  8. 对所有相机重复步骤 2 至 7。

信息

Basler 建议,对于所有相机,在每次断开再重新连接相机后,都在相机上执行 SyncFreeRunTimerUpdate 命令。这将重新同步 PTP 时钟。

Synchronous Free Run 具有时序一致的间隔#

要按时序一致的间隔(即按时间顺序排列)同步多台相机:

信息

必须使用 pylon API 执行以下步骤。

  1. 通过 Precision Time Protocol 功能确保网络中的所有相机均已同步。
  2. 按时间顺序打开第一个相机。
  3. 确保在此相机上启用了自由运行图像采集
  4. SyncFreeRunTimerTriggerRateAbs 参数输入所需的帧速率。
    您必须在所有同步的相机上指定相同的参数值。例如,要让相机以每秒 10 帧的速度采集图像,必须在所有相机上将该参数设置为 10。
  5. 确定第一台相机的开始时间:

    1. 在第一台相机上执行 TimestampLatch 命令。
      获取相机当前时间戳值的“快照”。
    2. 在同一相机上获取 TimestampLatchValue 参数的值。
      该值以 tick 为单位。在启用了 Precision Time Protocol 的 Basler 相机上,1 tick 等于 1 纳秒。
    3. 将以 tick(= 纳秒)为单位的开始延迟与步骤 b 中确定的值相加。
      例如,要指定 1 秒的开始延迟,请将 1 000 000 000 加到步骤 b 中确定的值上。
      之所以需要延迟,是因为第一台相机必须等待,直到其他相机正确完成配置为止:

      Synchronous Free Run 启动延迟

  6. 将步骤 5 中确定的值转换为开始时间高值和开始时间低值,并相应地设置 SyncFreeRunTimerStartTimeHighSyncFreeRunTimerStartTimeLow 参数。

  7. 执行 SyncFreeRunTimerUpdate 命令。
  8. SyncFreeRunTimerEnable 参数设置为 true
  9. 按时间顺序打开下一台相机。
  10. 在此相机上启用自由运行图像采集
  11. SyncFreeRunTimerTriggerRateAbs 参数输入所需的帧速率。
    您必须在所有同步的相机上指定相同的参数值。例如,要让相机以每秒 10 帧的速度采集图像,应在所有相机上将该参数设置为 10。
  12. 将所需的时间间隔(以纳秒为单位)加到第一台相机的开始时间上(在步骤 5 中确定)。
    例如,如果您希望相机在第一台相机之后的 100 毫秒后开始图像采集,则将 100 000 000 加到步骤 5 中确定的值上。
  13. 将步骤 12 中确定的值转换为开始时间高值和开始时间低值,并相应地配置 SyncFreeRunTimerStartTimeHighSyncFreeRunTimerStartTimeLow 参数。
  14. 执行 SyncFreeRunTimerUpdate 命令。
  15. SyncFreeRunTimerEnable 参数设置为 true
  16. 对其余所有相机重复步骤 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++ 语言。