跳至內容
測試伺服器
開發伺服器

Synchronous Free Run#

Synchronous Free Run camera feature 允許您在多個相機上以相同的時間和相同的幀率擷取影像。

此功能類似於 Periodic Signal 功能,該功能僅適用於 Basler ace 2 相機。

使用此功能#

運作原理#

如果您在 free run 模式下使用多個相機,由於各種原因(例如相機各自的 timings and delays),影像擷取會稍微不同步。

以相同幀率擷取但非同步運作的相機

Synchronous Free Run 功能允許您同步 free run 模式下的相機。因此,相機將在相同時間且以相同幀率擷取影像。

同時且以相同幀率擷取的相機

此外,您可以使用 Synchronous Free Run 功能,利用多個相機在精確的時間對齊間隔(即按時間順序)內擷取影像。例如,您可以將一台相機設定為在特定時間點開始影像擷取。然後,您可以將第二台相機設定為在第一台相機之後 100 毫秒開始,並將第三台相機設定為在第一台相機之後 200 毫秒開始:

以時間對齊間隔擷取的相機

此外,您可以將相機設定為在相同時間和相同幀率下擷取影像,但採用不同的 Exposure Time:

以不同 Exposure Time 擷取的相機

使用 Synchronous Free Run#

一般用途#

若要同步多個相機:

  1. 確保網路中的所有相機都透過 Precision Time Protocol 功能進行同步。
  2. 開啟您要使用 Synchronous Free Run 進行同步的其中一台相機。
  3. 確保在此相機上啟用了 free run image acquisition。
  4. 輸入所需的幀率 SyncFreeRunTimerTriggerRateAbs 參數的值。
    您必須在所有相機上指定相同的參數值。例如,若要以每秒 10 幀的速率同步相機,您必須將所有相機上的參數設定為 10。
  5. 將 SyncFreeRunTimerStartTimeHigh 會設為 SyncFreeRunTimerStartTimeLow 參數設為 0。
  6. 執行 SyncFreeRunTimerUpdate 命令。
  7. 將 SyncFreeRunTimerEnable 參數設為 true.
  8. 對所有相機重複步驟 2 至 7。

資訊

Basler 建議在每當相機中斷連線然後重新連線時,在所有相機上執行 SyncFreeRunTimerUpdate 指令。這會重新同步 PTP 時脈。

具備時間對齊間隔的 Synchronous Free Run#

若要以時間對齊間隔(即按時間順序)同步多個相機:

資訊

必須使用 pylon API 執行下列步驟。

  1. 確保網路中的所有相機都透過 Precision Time Protocol 功能進行同步。
  2. 開啟時間順序中的第一台相機。
  3. 確保在此相機上啟用了 free run image acquisition。
  4. 輸入所需的幀率 SyncFreeRunTimerTriggerRateAbs 參數的值。
    您必須在所有已同步的相機上指定相同的參數值。例如,如果您希望相機每秒擷取 10 幀,則必須將所有相機上的參數設定為 10。
  5. 確定第一台相機的開始時間:

    1. 執行 TimestampLatch 在第一台相機上執行命令。
      會擷取相機目前 timestamp 值的「快照」。
    2. 取得 TimestampLatchValue 位於同一台相機上的 Property。
      該值以 tick 為單位指定。在具有以下功能的 Basler 相機上 Precision Time Protocol 功能的 Basler 相機上,一個 tick 等於一奈秒。
    3. 將以 tick(= 奈秒)為單位的啟動延遲新增至步驟 b 中確定的值。
      例如,若要指定 1 秒的啟動延遲,請將 1 000 000 000 新增至步驟 b 中確定的值。
      需要此延遲是因為第一台相機必須等待其他相機正確設定完畢:

      Synchronous Free Run Start Delay

  6. 將步驟 5 中確定的值轉換為 start time high and start time low values 並將對應翻譯和參照參數的 SyncFreeRunTimerStartTimeHigh 會設為 SyncFreeRunTimerStartTimeLow 相應的參數。

  7. 執行 SyncFreeRunTimerUpdate 命令。
  8. 將 SyncFreeRunTimerEnable 參數設為 true.
  9. 按時間順序開啟下一台相機。
  10. 在此相機上啟用 free run image acquisition。
  11. 輸入所需的幀率 SyncFreeRunTimerTriggerRateAbs 參數的值。
    您必須在所有同步相機上指定相同的參數值。例如,如果您希望相機每秒擷取 10 個影格,請將所有相機上的該參數設定為 10。
  12. 將所需的間隔(以奈秒為單位)新增至第一台相機的開始時間(在步驟 5 中確定)。
    例如,如果您希望相機在第一台相機開始影像擷取 100 毫秒後啟動,請將 100 000 000 新增至步驟 5 中確定的值。
  13. 將步驟 12 中確定的值轉換為 start time high and start time low values 並設定 SyncFreeRunTimerStartTimeHigh 會設為 SyncFreeRunTimerStartTimeLow 相應的參數。
  14. 執行 SyncFreeRunTimerUpdate 命令。
  15. 將 SyncFreeRunTimerEnable 參數設為 true.
  16. 對所有剩餘相機重複步驟 9 至 15。

資訊

每當相機中斷連線然後重新連線時, SyncFreeRunTimerUpdate 必須在所有相機上執行命令以重新同步 PTP 時脈。

將 64 位元 Timestamp 轉換為 Start Time High 與 Start Time Low#

Synchronous Free Run 功能的開始時間必須指定為 64 位元 GigE Vision Timestamp 值(以奈秒為單位),並分割為兩個 32 位元值。

64 位元值的高位部分必須使用以下方式傳輸: SyncFreeRunTimerStartTimeHigh 參數的值。

64 位元值的低位部分必須使用以下方式傳輸: SyncFreeRunTimerStartTimeLow 參數的值。

範例:假設您的網路裝置已協調至 UTC,且您想將 2025 年 12 月 12 日星期五 11:00:00 UTC 設定為開始時間。這對應於 Timestamp 值 1 765 537 200 000 000 000(十進位)或 0001 1000 1000 0000 0111 0010 1011 1010 1010 1011 1011 1100 1110 0000 0000 0000(二進位)。

此值的高位和低位部分如下:

Timestamp 值的高位和低位部分

因此,若要設定 2025 年 12 月 12 日星期五 11:00:00 UTC 的開始時間,您必須將 SyncFreeRunTimerStartTimeHigh 參數設定為 411 071 162,並將 SyncFreeRunTimerStartTimeLow 將 parameter 設為 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++ 語言版本。