コンテンツにスキップ
ステージングサーバー
開発サーバー

Periodic Signal#

Periodic Signalカメラ機能を使用すると、デバイス間で同期される定期的なトリガー信号を生成できます。

これにより、複数のカメラで同時に同じフレームレートで画像をキャプチャしたりできます。

この機能はSynchronous Free Run機能に似ていますが、画像取得以外に、他の目的にも使用できます。

機能を使用する#

仕組み#

Periodic Signal機能をサポートするBaslerカメラは、追加のカメラ信号ソースを提供します。 PeriodicSignal1このソースを介して、カメラは次のような特性を持つ信号を送信します。

  • 信号は反復的です。
  • 信号は、Precision Time Protocolを介してデバイス間で同期できます。
  • 信号の周期を設定できます。
  • 最初の期間までの遅延を設定できます。

イメージ PeriodicSignal1 signal sourceは、デバイス間でCounterや画像取得を同期させるなど、さまざまな目的に使用できます。

Periodic Signalを使用して画像取得を同期する#

複数のカメラで画像取得を同期するには、次の手順に従います。

  1. Periodic Signalを使用して同期するカメラの1つを開きます。.
  2. カメラの BslPeriodicSignalSource パラメータが次のように設定されていることを確認してください: PtpClock.
    これは、カメラが次の機能によって同期されていることを示します: Precision Time Protocol feature.
  3. パラメーターを BslPeriodicSignalPeriod パラメータに、希望するフレームレートの逆数をマイクロ秒に換算した値を設定します。たとえば、50フレーム/秒でカメラを同期させるには、パラメータを20000に設定します(1 / 50 = 0.02秒 = 20000マイクロ秒)。すべてのカメラで同じパラメータ値を指定する必要があります。
  4. 定期的な信号遅延を、次のように設定します。
    • すべてのカメラで画像を取得したい場合 同時に、 BslPeriodicSignalDelay パラメータをすべてのカメラで0に設定します。
    • すべてのカメラで画像を取得したい場合 順番に、つまり一定の間隔で取得するには、最初のカメラの BslPeriodicSignalDelay パラメータを0に設定し、他のカメラには希望する間隔の倍数を設定します。
      たとえば、カメラ間で10000 µsの間隔で画像を取得したいとします。その場合、1台目のカメラの遅延を0に、2台目のカメラを10000に、3台目のカメラを20000に設定し、以下同様に設定します。
  5. 定期的な信号によってトリガーされるようにカメラを設定します。
    1. パラメーターを TriggerSelector パラメータを FrameStart.
    2. パラメーターを TriggerMode パラメータを On.
    3. パラメーターを TriggerSource パラメータを PeriodicSignal1.
  6. すべてのカメラについて、手順1~5を繰り返します。

Periodic Signalを使用して外部デバイスを同期的にトリガーする#

Periodic Signal機能を使用して、外部デバイスを同期的にトリガーできます。これにより、非PTPデバイスPTP対応にできます。

カメラの内部周期信号をI/O信号として使用することはできません。ただし、周期信号を使用してカメラのTimer機能をトリガーし、タイマー信号をI/O信号として使用することは可能です。

これを行うには:

  1. 外部デバイスの起動に使用するカメラを開きます。
  2. カメラの BslPeriodicSignalSource パラメータが次のように設定されていることを確認してください: PtpClock.
    これは、カメラが次の機能によって同期されていることを示します: Precision Time Protocol feature.
  3. パラメーターを BslPeriodicSignalPeriod パラメータに、希望するトリガーレートの逆数をマイクロ秒に換算した値を設定します。たとえば、1秒あたり20個のトリガー信号を生成する場合は、パラメータを50000に設定します(1/20 = 0.05秒 = 50000マイクロ秒)。
  4. 外部デバイスを時間遅延させてトリガーする場合は、 BslPeriodicSignalDelay パラメータを希望する遅延に設定します。
  5. カメラを設定 Timer 定期的な信号によって起動される機能:
    1. パラメーターを TimerSelector パラメータを Timer1.
    2. パラメーターを TimerDuration パラメータを希望する Timer duration (マイクロ秒単位)に設定します。
      カメラは、この値と等しいパルス幅のI/O信号を送信します。そのため、外部デバイスが信号を受信できるように、十分に大きなパラメータ値を設定してください。ほとんどの場合、デフォルト値の10 µsで十分です。
    3. パラメーターを TimerTriggerSource パラメータを PeriodicSignal1.
  6. タイマー信号を出力するようにカメラを設定します:
    1. パラメーターを LineSelector パラメータを希望するI/O line(例: Line2)に設定します。回線は 出力として設定.
    2. パラメーターを LineSource パラメータを Timer1Active.
  7. 外部デバイスをステップ6で選択した出力ラインに接続します。
    これで、デバイスはこのラインで同期されたトリガー信号を受信するようになります。
  8. 別の外部デバイスをトリガーする場合は、次の項目を使用して手順1〜6を繰り返します。 Timer2 および Timer2Active ステップ5および6。

情報

また、カメラ間で画像取得を同期し、さらに同じ周期信号を使用して外部デバイスを同期的に起動することもできます。これを行うには、上記の手順を両方とも実行します。

追加パラメーター#

  • BslPeriodicSignalSelector: 設定する Periodic Signal チャンネルを設定します。現在、すべての Basler カメラは1つのチャンネルを提供しているため、このパラメータは PeriodicSignal1 に事前設定されており、変更できません。

サンプルコード#

/* Using Periodic Signal to Synchronize Image Acquisition */
// Set the signal period to 20000 µs
camera.BslPeriodicSignalPeriod.SetValue(20000.0);
// Set the signal delay to 0
camera.BslPeriodicSignalDelay.SetValue(0);
// Configure the camera to be triggered by the periodic signal
camera.TriggerSelector.SetValue(TriggerSelector_FrameStart);
camera.TriggerMode.SetValue(TriggerMode_On);
camera.TriggerSource.SetValue(TriggerSource_PeriodicSignal1);

/* Using Periodic Signal to Synchronously Trigger External Devices */
// Set the signal period to 50000 µs
camera.BslPeriodicSignalPeriod.SetValue(50000.0);
// Set the signal delay to 0
camera.BslPeriodicSignalDelay.SetValue(0);
// Configure the camera's Timer feature to be triggered by periodic signals
camera.TimerSelector.SetValue(TimerSelector_Timer1);
camera.TimerDuration.SetValue(10.0);
camera.TimerTriggerSource.SetValue(TimerTriggerSource_PeriodicSignal1);
// Configure the camera to output the timer signal on Line 2
camera.LineSelector.SetValue(LineSelector_Line2);
camera.LineMode.SetValue(LineMode_Output);
camera.LineSource.SetValue(LineSource_Timer1Active);
INodeMap& nodemap = camera.GetNodeMap();
/*Using Periodic Signal to Synchronize Image Acquisition*/

CFloatParameter(nodemap, "BslPeriodicSignalPeriod").SetValue(20000.0);
// Set the signal delay to 0
CIntegerParameter(nodemap, "BslPeriodicSignalDelay").SetValue(0);
// Configure the camera to be triggered by the periodic signal
CEnumParameter(nodemap, "TriggerSelector").SetValue("FrameStart");
CEnumParameter(nodemap, "TriggerMode").SetValue("On");
CEnumParameter(nodemap, "TriggerSource").SetValue("PeriodicSignal1");

/*Using Periodic Signal to Synchronously Trigger External Devices*/

CFloatParameter(nodemap, "BslPeriodicSignalPeriod").SetValue(50000.0);
// Set the signal delay to 0
CIntegerParameter(nodemap, "BslPeriodicSignalDelay").SetValue(0);
// Configure the camera's Timer feature to be triggered by periodic signals
CEnumParameter(nodemap, "TimerSelector").SetValue("Timer1");
CFloatParameter(nodemap, "TimerDuration").SetValue(10.0);
CEnumParameter(nodemap, "TimerTriggerSource").SetValue("PeriodicSignal1");
// Configure the camera to output the timer signal on Line 2
CEnumParameter(nodemap, "LineSelector").SetValue("Line2");
CEnumParameter(nodemap, "LineMode").SetValue("Output");
CEnumParameter(nodemap, "LineSource").SetValue("Timer1Active");
/*Using Periodic Signal to Synchronize Image Acquisition*/

camera.Parameters[PLCamera.BslPeriodicSignalPeriod].SetValue(20000.0);
// Set the signal delay to 0
camera.Parameters[PLCamera.BslPeriodicSignalDelay].SetValue(0);
// Configure the camera to be triggered by the periodic signal
camera.Parameters[PLCamera.TriggerSelector].SetValue(PLCamera.TriggerSelector.FrameStart);
camera.Parameters[PLCamera.TriggerMode].SetValue(PLCamera.TriggerMode.On);
camera.Parameters[PLCamera.TriggerSource].SetValue(PLCamera.TriggerSource.PeriodicSignal1);

/*Using Periodic Signal to Synchronously Trigger External Devices*/

camera.Parameters[PLCamera.BslPeriodicSignalPeriod].SetValue(50000.0);
// Set the signal delay to 0
camera.Parameters[PLCamera.BslPeriodicSignalDelay].SetValue(0);
// Configure the camera's Timer feature to be triggered by periodic signals
camera.Parameters[PLCamera.TimerSelector].SetValue(PLCamera.TimerSelector.Timer1);
camera.Parameters[PLCamera.TimerDuration].SetValue(10.0);
camera.Parameters[PLCamera.TimerTriggerSource].SetValue(PLCamera.TimerTriggerSource.PeriodicSignal1);
// Configure the camera to output the timer signal on Line 2
camera.Parameters[PLCamera.LineSelector].SetValue(PLCamera.LineSelector.Line2);
camera.Parameters[PLCamera.LineMode].SetValue(PLCamera.LineMode.Output);
camera.Parameters[PLCamera.LineSource].SetValue(PLCamera.LineSource.Timer1Active);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/*Using Periodic Signal to Synchronize Image Acquisition*/

errRes = PylonDeviceSetFloatFeature(hdev, "BslPeriodicSignalPeriod", 20000.0);
CHECK(errRes);
/* Set the signal delay to 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslPeriodicSignalDelay", 0);
CHECK(errRes);
/* Configure the camera to be triggered by the periodic signal */
errRes = PylonDeviceFeatureFromString(hdev, "TriggerSelector", "FrameStart");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TriggerMode", "On");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TriggerSource", "PeriodicSignal1");
CHECK(errRes);

/*Using Periodic Signal to Synchronously Trigger External Devices*/

errRes = PylonDeviceSetFloatFeature(hdev, "BslPeriodicSignalPeriod", 50000.0);
CHECK(errRes);
/* Set the signal delay to 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslPeriodicSignalDelay", 0);
CHECK(errRes);
/* Configure the camera's Timer feature to be triggered by periodic signals */
errRes = PylonDeviceFeatureFromString(hdev, "TimerSelector", "Timer1");
CHECK(errRes);
errRes = PylonDeviceSetFloatFeature(hdev, "TimerDuration", 10.0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TimerTriggerSource", "PeriodicSignal1");
CHECK(errRes);
/* Configure the camera to output the timer signal on Line 2 */
errRes = PylonDeviceFeatureFromString(hdev, "LineSelector", "Line2");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "LineMode", "Output");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "LineSource", "Timer1Active");
CHECK(errRes);
# Using Periodic Signal to Synchronize Image Acquisition
camera.BslPeriodicSignalPeriod.Value = 20000.0
# Set the signal delay to 0
camera.BslPeriodicSignalDelay.Value = 0
# Configure the camera to be triggered by the periodic signal
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerMode.Value = "On"
camera.TriggerSource.Value = "PeriodicSignal1"

# Using Periodic Signal to Synchronously Trigger External Devices
camera.BslPeriodicSignalPeriod.Value = 50000.0
# Set the signal delay to 0
camera.BslPeriodicSignalDelay.Value = 0
# Configure the camera's Timer feature to be triggered by periodic signals
camera.TimerSelector.Value = "Timer1"
camera.TimerDuration.Value = 10.0
camera.TimerTriggerSource.Value = "PeriodicSignal1"
# Configure the camera to output the timer signal on Line 2
camera.LineSelector.Value = "Line2"
camera.LineMode.Value = "Output"
camera.LineSource.Value = "Timer1Active"

pylon Viewerを使用して、パラメーターを簡単に設定することもできます。