Synchronous Free Run#
この機能はPeriodic Signal機能に似ており、Basler ace 2カメラでのみ利用可能です。
機能を使用する#
仕組み#
フリーランモードで複数のカメラを使用している場合、カメラ個々のタイミングや遅延など、さまざまな理由により、画像取得はわずかに非同期になります。
Synchronous Free Run機能を使用すると、カメラをフリーランモードで同期できます。その結果、カメラは、同じフレームレートで同時に画像を取得します。
また、Synchronous Free Run機能を使用して、複数のカメラで正確に時間調整された間隔(時系列順)で画像をキャプチャすることもできます。例えば、特定の時点で画像取得を開始するように1台のカメラを設定し、次に、最初のカメラから100ミリ秒後に別のカメラを起動し、3台目のカメラを最初のカメラから200ミリ秒後に起動するように設定することができます。
また、同じフレームレートで同時に、しかし異なる露光時間で画像を取得するように複数のカメラを設定することもできます。
Synchronous Free Runの使用#
General Use#
複数のカメラを同期するには、次の手順に従います。
- ネットワーク内のすべてのカメラがPrecision Time Protocol機能を介して同期されていることを確認します。
- Synchronous Free Runを使用して同期するカメラの1つを開きます。.
- このカメラでフリーラン画像取得が有効になっていることを確認してください。
- 次に対して希望するフレームレートを入力します:
SyncFreeRunTimerTriggerRateAbsパラメータ。
すべてのカメラで同じパラメーター値を指定する必要があります。たとえば、1秒あたり10フレームでカメラを同期させるには、すべてのカメラでパラメーターを10に設定する必要があります。 - パラメーターを
SyncFreeRunTimerStartTimeHighおよびSyncFreeRunTimerStartTimeLowパラメーターを0に設定します。 - 実行します:
SyncFreeRunTimerUpdateコマンド。 - パラメーターを
SyncFreeRunTimerEnableパラメータをtrue. - すべてのカメラについて、手順2~7を繰り返します。
情報
Baslerでは以下の実行を推奨しています: SyncFreeRunTimerUpdate カメラが切断されて再接続されるたびに、すべてのカメラでコマンドを実行します。これにより、PTPクロックが再同期されます。
Synchronous Free Run With Time-Aligned Intervals#
複数のカメラを時間的に調整された間隔(時系列順)で同期するには、次の手順に従います。
情報
pylon APIを使用して次の手順を実行する必要があります。
- ネットワーク内のすべてのカメラがPrecision Time Protocol機能を介して同期されていることを確認します。
- 最初のカメラを時系列順序で開きます。
- このカメラでフリーラン画像取得が有効になっていることを確認してください。
- 次に対して希望するフレームレートを入力します:
SyncFreeRunTimerTriggerRateAbsパラメータ。
同期するすべてのカメラで同じパラメーター値を指定する必要があります。たとえば、カメラに毎秒10フレームを取り込ませたい場合は、すべてのカメラでパラメーターを10に設定する必要があります。 -
最初のカメラの開始時刻を決定します。
- 実行します:
TimestampLatch最初のカメラでコマンドを実行します。
カメラの現在の Timestamp 値の「スナップショット」が取得されます。 - 次の値を取得します。
TimestampLatchValue同じカメラのパラメータ。
値はティック単位で指定されます。次の機能を備えたBaslerカメラの場合: Precision Time Protocol 機能が有効になっているBaslerカメラでは、1ティックは1ナノ秒に相当します。 -
ステップBで決定された値に開始遅延(= ナノ秒)を追加します。
例えば、開始遅延を1秒に指定するには、次のようにします。手順bで決定した値に1 000 000 000 000 000を追加します。
最初のカメラは他のカメラが正しく設定されるまで待機する必要があるため、遅延が必要です。
- 実行します:
-
ステップ5で求めた値を次のように変換します: スタートタイムハイおよびスタートタイムロウの値 に設定し、対応する変換および参照パラメータの
SyncFreeRunTimerStartTimeHighおよびSyncFreeRunTimerStartTimeLowそれに応じてパラメーターを設定します。 - 実行します:
SyncFreeRunTimerUpdateコマンド。 - パラメーターを
SyncFreeRunTimerEnableパラメータをtrue. - 次のカメラを時系列順序で開きます。
- このカメラでフリーラン画像取得を有効にします。
- 次に対して希望するフレームレートを入力します:
SyncFreeRunTimerTriggerRateAbsパラメータ。
同期するすべてのカメラで同じパラメーター値を指定する必要があります。たとえば、カメラに毎秒10フレームを取り込ませたい場合は、すべてのカメラでパラメーターを10に設定します。 - 最初のカメラの開始時間(ステップ5で決定)に必要な間隔(ナノ秒単位)を追加します。
例えば、最初のカメラの100ミリ秒後にカメラで画像取得を開始する場合は、ステップ5で決定した値に100 000 000 000を追加します。 - ステップ12で求めた値を次のように変換します: スタートタイムハイおよびスタートタイムロウの値 そして、次を設定します:
SyncFreeRunTimerStartTimeHighおよびSyncFreeRunTimerStartTimeLowそれに応じてパラメーターを設定します。 - 実行します:
SyncFreeRunTimerUpdateコマンド。 - パラメーターを
SyncFreeRunTimerEnableパラメータをtrue. - 残りのすべてのカメラについて、手順9~15を繰り返します。
情報
カメラが切断されて再接続されるたびに、次の処理が行われます: SyncFreeRunTimerUpdate PTPクロックを再同期するには、すべてのカメラでコマンドを実行する必要があります。
Converting the 64-bit Timestamp to Start Time High and Start Time Low#
Synchronous Free Run機能の開始時刻は、64ビットのGigE Visionタイムスタンプ値(ナノ秒単位)で指定し、2つの32ビット値で分割する必要があります。
64ビット値の上位部分は、次を使用して送信する必要があります: SyncFreeRunTimerStartTimeHigh パラメータ。
64ビット値の下位部分は、次を使用して送信する必要があります: SyncFreeRunTimerStartTimeLow パラメータ。
例:ネットワークデバイスがUTCに調整されており、2025年12月12日金曜日11:00:00UTCを開始時刻として設定するとします。これは、タイムスタンプ値1 765 537 200 000 000 000(10進数)または 0001 1000 0000 0111 0010 1011 1010 1011 1011 1100 1110 0000 0000 0000 0000(2進数)に対応します。
この値の上位部分と下位部分は次のとおりです。
したがって、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++言語でのみ使用できます。