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
パラメーターに必要なフレームレートを入力します。
同期されたすべてのカメラに同じパラメーター値を指定する必要があります。例えば、カメラで1秒あたり10フレームを取得する場合は、すべてのカメラでパラメーターを10に設定する必要があります。-
最初のカメラの開始時刻を決定します。
- 最初のカメラで
TimestampLatch
コマンドを実行します。
カメラの現在のタイムスタンプ値の「スナップショット」が取得されます。 - 同じカメラの
TimestampLatchValue
パラメーターの値を取得します。
値は目盛で指定されています。Precision Time Protocol機能が有効になっているBaslerカメラでは、1目盛りは1ナノ秒に相当します。 -
ステップBで決定された値に開始遅延(= ナノ秒)を追加します。
例えば、開始遅延を1秒に指定するには、次のようにします。手順bで決定した値に1 000 000 000 000 000を追加します。
最初のカメラは他のカメラが正しく設定されるまで待機する必要があるため、遅延が必要です。
- 最初のカメラで
-
手順5で決定した値を、開始時間の上限値と開始時間の下限値に変換し、それに応じて
SyncFreeRunTimerStartTimeHigh
およびSyncFreeRunTimerStartTimeLow
パラメーターを設定します。 SyncFreeRunTimerUpdate
コマンドを実行します。SyncFreeRunTimerEnable
パラメーターをtrue
に設定します。- 次のカメラを時系列順序で開きます。
- このカメラでフリーラン画像取得を有効にします。
SyncFreeRunTimerTriggerRateAbs
パラメーターに必要なフレームレートを入力します。
同期されたすべてのカメラで同じパラメーター値を指定する必要があります。例えば、カメラで1秒あたり10フレームを取得する場合は、すべてのカメラでパラメーターを10に設定します。- 最初のカメラの開始時間(ステップ5で決定)に必要な間隔(ナノ秒単位)を追加します。
例えば、最初のカメラの100ミリ秒後にカメラで画像取得を開始する場合は、ステップ5で決定した値に100 000 000 000を追加します。 - 手順12で決定した値を開始時間の上限値と開始時間の下限値に変換し、それに応じて
SyncFreeRunTimerStartTimeHigh
およびSyncFreeRunTimerStartTimeLow
パラメーターを設定します。 SyncFreeRunTimerUpdate
コマンドを実行します。SyncFreeRunTimerEnable
パラメーターをtrue
に設定します。- 残りのすべてのカメラについて、手順9~15を繰り返します。
情報
カメラが切断されてから再接続されるたびに、クロックを再同期するために、すべてのカメラでSyncFreeRunTimer
UpdatePTPコマンドを実行する必要があります。
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:00UTCの開始時刻を設定するには、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++言語でのみ使用できます。