Synchronous Free Run#
此功能類似於 Periodic Signal 功能,該功能僅適用於 Basler ace 2 相機。
使用此功能#
運作原理#
如果您在 free run 模式下使用多個相機,由於各種原因(例如相機各自的 timings and delays),影像擷取會稍微不同步。
Synchronous Free Run 功能允許您同步 free run 模式下的相機。因此,相機將在相同時間且以相同幀率擷取影像。
此外,您可以使用 Synchronous Free Run 功能,利用多個相機在精確的時間對齊間隔(即按時間順序)內擷取影像。例如,您可以將一台相機設定為在特定時間點開始影像擷取。然後,您可以將第二台相機設定為在第一台相機之後 100 毫秒開始,並將第三台相機設定為在第一台相機之後 200 毫秒開始:
此外,您可以將相機設定為在相同時間和相同幀率下擷取影像,但採用不同的 Exposure Time:
使用 Synchronous Free Run#
一般用途#
若要同步多個相機:
- 確保網路中的所有相機都透過 Precision Time Protocol 功能進行同步。
- 開啟您要使用 Synchronous Free Run 進行同步的其中一台相機。
- 確保在此相機上啟用了 free run image acquisition。
- 輸入所需的幀率
SyncFreeRunTimerTriggerRateAbs參數的值。
您必須在所有相機上指定相同的參數值。例如,若要以每秒 10 幀的速率同步相機,您必須將所有相機上的參數設定為 10。 - 將
SyncFreeRunTimerStartTimeHigh會設為SyncFreeRunTimerStartTimeLow參數設為 0。 - 執行
SyncFreeRunTimerUpdate命令。 - 將
SyncFreeRunTimerEnable參數設為true. - 對所有相機重複步驟 2 至 7。
資訊
Basler 建議在每當相機中斷連線然後重新連線時,在所有相機上執行 SyncFreeRunTimerUpdate 指令。這會重新同步 PTP 時脈。
具備時間對齊間隔的 Synchronous Free Run#
若要以時間對齊間隔(即按時間順序)同步多個相機:
資訊
必須使用 pylon API 執行下列步驟。
- 確保網路中的所有相機都透過 Precision Time Protocol 功能進行同步。
- 開啟時間順序中的第一台相機。
- 確保在此相機上啟用了 free run image acquisition。
- 輸入所需的幀率
SyncFreeRunTimerTriggerRateAbs參數的值。
您必須在所有已同步的相機上指定相同的參數值。例如,如果您希望相機每秒擷取 10 幀,則必須將所有相機上的參數設定為 10。 -
確定第一台相機的開始時間:
- 執行
TimestampLatch在第一台相機上執行命令。
會擷取相機目前 timestamp 值的「快照」。 - 取得
TimestampLatchValue位於同一台相機上的 Property。
該值以 tick 為單位指定。在具有以下功能的 Basler 相機上 Precision Time Protocol 功能的 Basler 相機上,一個 tick 等於一奈秒。 -
將以 tick(= 奈秒)為單位的啟動延遲新增至步驟 b 中確定的值。
例如,若要指定 1 秒的啟動延遲,請將 1 000 000 000 新增至步驟 b 中確定的值。
需要此延遲是因為第一台相機必須等待其他相機正確設定完畢:
- 執行
-
將步驟 5 中確定的值轉換為 start time high and start time low values 並將對應翻譯和參照參數的
SyncFreeRunTimerStartTimeHigh會設為SyncFreeRunTimerStartTimeLow相應的參數。 - 執行
SyncFreeRunTimerUpdate命令。 - 將
SyncFreeRunTimerEnable參數設為true. - 按時間順序開啟下一台相機。
- 在此相機上啟用 free run image acquisition。
- 輸入所需的幀率
SyncFreeRunTimerTriggerRateAbs參數的值。
您必須在所有同步相機上指定相同的參數值。例如,如果您希望相機每秒擷取 10 個影格,請將所有相機上的該參數設定為 10。 - 將所需的間隔(以奈秒為單位)新增至第一台相機的開始時間(在步驟 5 中確定)。
例如,如果您希望相機在第一台相機開始影像擷取 100 毫秒後啟動,請將 100 000 000 新增至步驟 5 中確定的值。 - 將步驟 12 中確定的值轉換為 start time high and start time low values 並設定
SyncFreeRunTimerStartTimeHigh會設為SyncFreeRunTimerStartTimeLow相應的參數。 - 執行
SyncFreeRunTimerUpdate命令。 - 將
SyncFreeRunTimerEnable參數設為true. - 對所有剩餘相機重複步驟 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(二進位)。
此值的高位和低位部分如下:
因此,若要設定 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++ 語言版本。