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參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。
您必須在所有攝影機上設定相同的參數值。例如,若要將攝影機同步至每秒 10 幀,您必須在所有攝影機上將該參數設定為 10。 - 將相機中的
SyncFreeRunTimerStartTimeHigh及SyncFreeRunTimerStartTimeLow將參數設為 0。 - 執行
SyncFreeRunTimerUpdate指令。 - 將相機中的
SyncFreeRunTimerEnable參數設為true. - 請針對所有攝影機重複步驟 2 至 7。
資訊
Basler 建議執行該 SyncFreeRunTimerUpdate 每當某台攝影機斷開連接後再次連接時,此指令會對所有攝影機生效。這會重新同步PTP 的時鐘。
Synchronous Free Run 採用時間對齊間隔#
若要將多台攝影機以時間對齊的間隔進行同步,亦即按照時間順序排列:
資訊
以下步驟必須使用pylon API 來執行。
- 請確保網路中的所有攝影機皆已透過 Precision Time Protocol 功能進行同步。
- 開啟按時間順序排列的首台攝影機。
- 請確認此攝影機已啟用自由運行影像擷取功能。
- 請輸入所需的幀率,以設定
SyncFreeRunTimerTriggerRateAbs參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。
您必須在所有同步運作的攝影機上設定相同的參數值。例如,若要讓攝影機以每秒 10 格的速率擷取影像,您必須在所有攝影機上將該參數設定為 10。 -
確定第一台攝影機的開始時間:
- 執行
TimestampLatch第一台攝影機上的指令。
系統會擷取相機目前 timestamp 值的一個「快照」。 - 取得
TimestampLatchValue同一台相機上的參數。
該數值以 tick 為單位。在配備 Precision Time Protocol 此功能已啟用,一個刻度等於一奈秒。 -
在步驟 b 中確定的數值上,加上以 tick(= 奈秒)為單位的啟動延遲。
例如,若要指定 1 秒的啟動延遲,請在步驟 b 中確定的數值上加上 1 000 000 000。
之所以需要此延遲,是因為第一台攝影機必須等待其他攝影機完成正確配置後才可運作:
- 執行
-
將步驟 5 中確定的數值轉換為 開始時間的高值與低值 ,並將對應轉譯與參照參數的
SyncFreeRunTimerStartTimeHigh及SyncFreeRunTimerStartTimeLow請據此調整參數。 - 執行
SyncFreeRunTimerUpdate指令。 - 將相機中的
SyncFreeRunTimerEnable參數設為true. - 開啟按時間順序排列的下一台攝影機。
- 在此攝影機上啟用自由運行影像擷取功能。
- 請輸入所需的幀率,以設定
SyncFreeRunTimerTriggerRateAbs參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。
您必須在所有同步運作的攝影機上設定相同的參數值。例如,若您希望攝影機以每秒 10 幀的速度擷取畫面,請將所有攝影機的該參數設定為 10。 - 將所需的間隔(以奈秒為單位)加到第一台攝影機的開始時間(於步驟 5 中確定)上。
例如,若您希望該攝影機在第一台攝影機開始後 100 毫秒才開始擷取影像,請將 100 000 000 加到步驟 5 中確定的數值上。 - 將步驟 12 中計算出的數值轉換為 開始時間的高值與低值 並設定
SyncFreeRunTimerStartTimeHigh及SyncFreeRunTimerStartTimeLow請據此調整參數。 - 執行
SyncFreeRunTimerUpdate指令。 - 將相機中的
SyncFreeRunTimerEnable參數設為true. - 請對所有其餘的攝影機重複步驟 9 至 15。
資訊
每當相機斷開連接後再重新連接時,該 SyncFreeRunTimerUpdate 必須在所有攝影機上執行此指令,以重新同步PTP 的時鐘。
將 64 位元Timestamp 轉換為「起始時間高」與「起始時間低」#
Synchronous Free Run 功能的開始時間必須指定為 64 位元 GigE Vision 時間戳值(以奈秒為單位),並拆分為兩個 32 位元值。
64 位元數值的高位必須使用 SyncFreeRunTimerStartTimeHigh 參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。
64 位元值的低位必須透過以下方式傳輸: SyncFreeRunTimerStartTimeLow 參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。
範例:假設您的網路裝置已與 UTC 同步,且您希望將 2025 年 12 月 12 日 星期五 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(二進位)。
此數值的高點與低點如下:
因此,若要將開始時間設定為 2025 年 12 月 12 日(週五)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++ 版本。