コンテンツにスキップ

Sequencer(GigEカメラ)#

Sequencerカメラ機能を使用すると、シーケンスセットと呼ばれる最大64セットのパラメーター設定を定義し、それらを一連の画像取得に適用できます。

カメラが画像を取得すると、シーケンスセットが次々に適用されます。これにより、最大フレームレートを損なうことなく、カメラのパラメーターをすばやく変更できます。

例えば、Sequencer機能を使用して、設定済みの画像ROIまたは露光時間をすばやく変更できます。

USB 3.0カメラのSequencer機能の説明については、ここをクリックしてください。

機能を使用する#

Enabling or Disabling the Sequencer#

有効にすると、シーケンサーが画像取得を制御します。この状態では設定できません。

無効にすると、シーケンサーを設定できますが、画像取得は制御されません。

シーケンサーを有効にするには、次の手順に従います。

  1. すべてのオートファンクションGain AutoExposure Autoなど)をOffに設定します。
  2. SequenceEnableパラメーターをtrueに設定します。

シーケンサーを無効にするには:

  1. SequenceEnableパラメーターをfalseに設定します。
  2. SequenceConfigurationModeパラメーターがお使いのカメラモデルで使用可能な場合は、それをOnに設定します。

What's in a Sequence Set?#

Sequencerセットには、次のパラメーターが含まれます(使用可能な場合)。

  • AcquisitionFrameRate
  • AcquisitionFrameRateEnable
  • BalanceRatio
  • BinningHorizontal
  • BinningVertical
  • BlackLevel
  • CenterX
  • CenterY
  • ChunkEnable
  • ChunkModeActive
  • ColorAdjustmentEnable
  • ColorAdjustmentHue
  • ColorAdjustmentSaturation
  • ColorTransformationMatrixFactor
  • ColorTransformationValue
  • DecimationVertical
  • DigitalShift
  • ExposureTime
  • Gain
  • Height
  • LUTEnable
  • OffsetX
  • OffsetX
  • PixelFormata
  • ProcessedRawEnable
  • ReverseX
  • ReverseYb
  • ScalingHorizontal
  • SequenceSetExecutionsc
  • StackedZoneImagingEnable
  • StackedZoneImagingZoneEnable
  • StackedZoneImagingZoneHeight
  • StackedZoneImagingZoneOffsetY
  • SubsamplingHorizontal
  • SyncUserOutput
  • TestImageSelector
  • TimerDelayd
  • TimerDelayTimebased
  • TimerDurationd
  • TimerDurationTimebased
  • Width

  1. カメラモデルacA640-300gm/gc、acA800-200gm/gc、acA1300-75gm/gc、acA1920-48gm/gc、acA2500-20gm/gcでのみ使用できます。

  2. 次のカメラモデルでは使用できません:acA3088-16gm/gc、acA4024-8gm/gc、acA5472-5gm/gc。

  3. 自動シーケンスアドバンスモードが有効な場合にのみ含まれます。

  4. Timer1で使用できます。

他のすべてのカメラパラメーターは、Sequencer機能を使用して制御できません

情報

シーケンスセットをロードまたは保存すると、変更していないパラメーターも含めて、常に上記のすべてのパラメーターがロードまたは保存されます。例えば、露光時間のみを変更し、他のすべてのパラメーターはデフォルト値のままの場合、他のすべてのパラメーターの値も保存(ロード時には上書き)されます。

Configuring Sequence Sets#

情報

  • シーケンスセットを設定するには、シーケンサーを無効にする必要があります。
  • カメラの電源を切ると、シーケンスセットに加えられたすべての変更が失われます。また、シーケンサーの設定をユーザーセットに保存することもできません。設定を保持するために、Baslerでは、pylon APIを使用して適切なプログラムコードを記述し、カメラの電源がオンになるたびにシーケンスセットを再取得することをお勧めします。

Sequencer機能を使用する前に、シーケンスセットに必要な設定を入力する必要があります。各シーケンスセットには、0~63の範囲の一意のシーケンスセットインデックス番号が付いています。

シーケンスセットを設定するには、次の手順に従います。

  1. SequenceSetTotalNumberパラメーターに、使用するシーケンスセットの総数を設定します。
  2. 格納するシーケンスセットパラメーターをシーケンスセット0に設定します。
  3. シーケンスセット0を保存します。
  4. 使用するすべてのシーケンスセットについて、手順2と3を繰り返します。インデックス番号0から始まる連続した一連のインデックス番号を必ず使用するようにしてください。例えば、シーケンスセット0、1、2、3を使用します。

例:2つのシーケンスセットが必要で、それらに異なる画像ROI設定を入力するとします。これを行うには、次の手順に従います。

  1. SequenceSetTotalNumberパラメーターを2に設定します。
  2. WidthHeightOffsetXおよびOffsetYのパラメーター値を調整して、最初の画像ROIを作成します。
  3. シーケンスセット0を保存します。
  4. WidthHeightOffsetXおよびOffsetYのパラメーターに異なる値を選択して、2番目の画像ROIを作成します。
  5. シーケンスセット1を保存します。

これでシーケンサーを設定して、2つの画像ROIをすばやく切り替えられるようになりました。

Saving a Sequence Set#

シーケンスセットを保存するには、次の手順に従います。

  1. SequenceSetIndexパラメーターを目的のシーケンスセットに設定します。
  2. SequenceSetStoreコマンドを実行します。

すべてのシーケンスセットパラメーターの値は、選択したシーケンスセットに保存されます。

Loading a Sequence Set#

シーケンスセットは、シーケンサーの操作中に自動的にロードされます。ただし、シーケンスセットを手動でロードすると、テストやシーケンサーの設定時に役立ちます。

シーケンスセットを手動でロードするには、次の手順に従います。

  1. SequenceSetIndexパラメーターを目的のシーケンスセットに設定します。
  2. SequenceSetLoadコマンドを実行します。

すべてのシーケンスセットパラメーターの値が上書きされ、選択したシーケンスセットに保存されている値に置き換えられます。

Configuring the Sequencer#

シーケンスセットを設定したら、シーケンサーを設定する必要があります。

情報

  • シーケンサーを設定するには、シーケンサーを無効にする必要があります。
  • カメラの電源を切ると、シーケンサーの設定に加えられたすべての変更が失われます。また、シーケンサーの設定をユーザーセットに保存することもできません。Baslerでは、pylon APIを使用して適切なプログラムコードを記述し、カメラの電源をオンにするたびに再取得することをお勧めします。
  • SequenceSetIndexチャンクを使用して、使用されているシーケンスセットを追跡できます。有効にすると、各画像には、画像取得に使用されるシーケンスセットのインデックス番号を含むチャンクデータが含まれます。

シーケンサーは、「アドバンスモード」と呼ばれる3つのモードで操作できます。

すべてのモードで、シーケンスセットは常にシーケンスセットインデックス番号0から昇順に進みます。

Auto Sequence Advance Mode#

このモードは、連続的に繰り返される固定シーケンスを設定する場合に便利です。

このモードを有効にするには、SequenceAdvanceModeパラメーターをAutoに設定します。

このモードでは、Frame Startトリガー信号を受信すると、シーケンスセットから次のシーケンスへの進行が自動的に行われます。

SequenceSetTotalNumberパラメーターは、使用するシーケンスセットの合計数を指定します。インデックス番号が最も大きいシーケンスセットが使用されると、サイクルは0から再開されます。

例:次のシーケンスサイクルを設定するとします。

Sample Sequence Cycle: 0-1-2-3-4-0-1-...

上記のシーケンスサイクルを設定するには、次の手順に従います。

  1. SequenceAdvanceModeパラメーターをAutoに設定します。
  2. SequenceSetTotalNumberパラメーターを5に設定します。

シーケンスセットを複数回使用する

必要に応じて、各シーケンスセットを複数回連続して使用できます。

各シーケンスセットを使用する回数を指定するには、次の手順に従います。

  1. 目的のシーケンスセットをロードします。
  2. このシーケンスセットのSequenceSetExecutionsパラメーターを設定します。デフォルトでは、パラメーターはすべてのセットに対して1に設定されています。つまり、各シーケンスセットはサイクルごとに1回使用されます。
  3. シーケンスセットを保存します。

例:次のシーケンスサイクルを設定するとします。

Sample Sequence Cycle: 0-1-1-1-2-3-4-5-5-0-1-...

上記のシーケンスサイクルを設定するには、次の手順に従います。

  1. SequenceAdvanceModeパラメーターをAutoに設定します。
  2. SequenceSetTotalNumberパラメーターを6に設定します。
  3. 次のようにシーケンスセットごとにSequenceSetExecutionsパラメーターを設定します。

    • シーケンスセット0、2、3、4は、サイクルごとに1回だけ使用されます。したがって、これらのセットをスキップして、SequenceSetExecutionsパラメーターをデフォルト値の1のままにしておくことができます。
    • シーケンスセット1は、連続して3回使用されます。シーケンスセット1をロードし、SequenceSetExecutionsパラメーターを3に設定して、シーケンスセット1を保存します。
    • シーケンスセット5は、連続して2回使用されます。シーケンスセット5をロードし、SequenceSetExecutionsパラメーターを2に設定し、シーケンスセット5を保存します。

Controlled Sequence Advance Mode#

このモードは、ライン1またはソフトウェアコマンドで制御できるダイナミックシーケンスを設定する場合に便利です。

情報

  • リアルタイムアプリケーションの場合、Baslerは、ソフトウェアコマンドを使用してシーケンサーを制御しないことを強く推奨します。ソフトウェアコマンドを送信してから有効になるまでの遅延は、特定のインストールとネットワーク上の現在の負荷によって異なります。そのため、ソフトウェアコマンドの送信から有効になるまでの間に発生する画像取得の数を予測することはできません。
  • ライン1を使用してシーケンサーを制御する場合は、ラインのステータスの設定とフレーム開始トリガー信号の上昇の間に1マイクロ秒かかることに注意してください。また、Frame Startトリガー信号が上昇した後、少なくとも1マイクロ秒はラインのステータスを維持する必要があります。Frame Trigger Wait 信号を監視して、タイミングを最適化します。

このモードを有効にするには、SequenceAdvanceModeパラメーターをControlledに設定します。

他のモードと同様に、アドバンスは常にシーケンスセットインデックス番号0から昇順に進みます。

ただし、次の項目は制御できます。

  • シーケンスセットアドバンス:シーケンサーを次のシーケンスセットに進めるタイミングは?
  • シーケンスセットの再起動:シーケンスサイクルをシーケンスセット0からいつ再開?

SequenceSetTotalNumberパラメーターは、使用するシーケンスセットの合計数を指定します。インデックス番号が最も大きいシーケンスセットが使用されると、サイクルは0から再開されます。

Configuring Sequence Set Advance#

シーケンスセットアドバンスを設定するには、次の手順に従います。

  1. SequenceControlSelectorパラメーターをAdvanceに設定します。
  2. パラメーターを SequenceControlSource パラメーターを次のいずれかのオプションに設定します。
    • Line1:シーケンスセットアドバンスはライン1で制御されます。フレーム開始トリガー信号を受信しているときにライン1が低(0)の場合、シーケンサーは前進せず、現在のシーケンスセットが画像取得に再度使用されます。Frame Startトリガー信号を受信しているときにライン1が高(1)の場合、シーケンサーは前進し、サイクル内の次のシーケンスセットが画像取得に使用されます。
    • Disabledシーケンスセットアドバンスは、SequenceAsyncAdvanceソフトウェアコマンドを使用して制御されます。このコマンドを受信すると、シーケンサーは画像を取得せずに進みます。次のFrame Startトリガー信号を受信すると、SequenceCurrentSetパラメーター値で指定されたシーケンスが画像取得に使用されます。
    • AlwayActive:シーケンサーは、Line1が選択され、ライン1が常に高(1)であるかのように動作します。その結果、シーケンサーはフレーム開始トリガー信号を受信するたびに進みます。このシーケンサーの操作方法は、各シーケンスセットがサイクルごとに1回だけ使用される場合に、自動シーケンスアドバンスモードでシーケンサーを操作する方法と似ています。唯一の違いは、シーケンスセット0ではなくシーケンスセット1が、最初のシーケンスセットとして使用されることです。
Configuring Sequence Set Restart#

シーケンスセットの再起動を設定するには、次の手順に従います。

  1. SequenceControlSelectorパラメーターをRestartに設定します。
  2. パラメーターを SequenceControlSource パラメーターを次のいずれかのオプションに設定します。
    • Line1:シーケンスセットの再起動は、ライン1を介して制御されます。Frame Startトリガー信号を受信しているときに、ライン1が低(0)の場合は、次のシーケンスセットが使用されます。Frame Startトリガー信号を受信しているときに、ライン1が高(1)の場合は、シーケンスサイクルが再開され、シーケンスセット0が使用されます。
    • Disabled:シーケンスセットの再起動は、SequenceAsyncRestartソフトウェアコマンドを使用して制御されます。このコマンドを受信すると、画像を取得せずにシーケンスサイクルが再開されます。次のFrame Startトリガー信号を受信すると、シーケンスセット0が使用されます。

Free Selection Advance Mode#

このモードは、特定の順序に従わないで、自由に選択可能なシーケンスセットをすばやく切り替える場合に便利です。カメラの入力ラインを使用して、シーケンスを決定します。

情報

ラインのステータスの設定とFrame Startトリガー信号の上昇の間には1マイクロ秒かかることに注意してください。また、Frame Startトリガー信号が上昇した後、少なくとも1マイクロ秒はラインのステータスを維持する必要があります。Frame Trigger Wait信号を監視して、タイミングを最適化します。

自由選択アドバンスモードの設定方法は、カメラで使用できる入力ラインの数によって異なります。

Cameras with One Input Line#

シーケンスセットは、入力ライン1のステータスに従って選択されます。

  • フレーム開始トリガー信号を受信しているときにライン1が低(0)の場合は、シーケンスセット0が画像取得に使用されます。
  • Frame Startトリガー信号を受信しているときにライン1が高(1)の場合は、シーケンスセット1が画像取得に使用されます。

シーケンスセット0と1のみ使用できます。

自由選択アドバンスモードを有効にするには、次の手順に従います。

  1. SequenceAdvanceModeパラメーターをFreeSelectionに設定します。
  2. SequenceSetTotalNumberパラメーターを2に設定します。

SequenceAddressBitSelectorSequenceAddressBitSourceのパラメーターも、自由選択アドバンスモードの操作を制御します。ただし、これらのパラメーターはプリセットされており、変更できません。

Cameras with Two Input Lines#

シーケンスセットは、ライン1(光結合入力ライン)とライン3(GPIOライン、入力として設定する必要があります)のステータスに応じて選択され、4つの可能な組み合わせができます。これにより、4つのシーケンスセットから選択できます。したがって、シーケンスセット0、1、2、3のみが使用可能です。

自由選択アドバンスモードを設定するには、各行に「シーケンスセットアドレスビット」を割り当てる必要があります。これらのアドレスビットの組み合わせによって、シーケンスセットインデックス番号が決まります。次の表に、考えられる組み合わせとそれぞれの結果を示します。

Address Bit 1 Address Bit 0 選択されるシーケンスセット
0 0 Sequence set 0
0 1 Sequence set 1
1 0 Sequence set 2
1 1 Sequence set 3

例えば、ライン1をビット1に、ライン3をビット0に割り当てることができます。これにより、次の設定例が得られます。

  • フレーム開始トリガー信号を受信しているときに、ライン1低(0)でライン3が低(0)の場合、シーケンスセット0が画像取得に使用されます。
  • フレーム開始トリガー信号を受信しているときに、ライン1が低(0)でライン3が高(1)の場合、シーケンスセット1が画像取得に使用されます。
  • フレーム開始トリガー信号を受信しているときに、ライン1が高(1)でライン3が低(0)の場合、シーケンスセット2が画像取得に使用されます。
  • フレーム開始トリガー信号を受信しているときに、ライン1が高(1)でライン3が高(1)の場合、シーケンスセット3が画像取得に使用されます。

ビットを設定し、自由選択アドバンスモードを有効にするには、次の手順に従います。

  1. SequenceAdvanceModeパラメーターをFreeSelectionに設定します。
  2. SequenceSetTotalNumberパラメーターを4に設定します。
  3. SequenceAddressBitSelectorパラメーターをBit0に設定します。
  4. SequenceAddressBitSourceパラメーターにビット0に割り当てるライン(Line3など)を設定します。
  5. SequenceAddressBitSelectorパラメーターをBit1に設定します。
  6. SequenceAddressBitSourceパラメーターにビット1に割り当てるライン(Line1など)を設定します。

情報

自由選択アドバンスモードでは、入力ラインを1つだけ使用することもできます これを行うには、SequenceSetTotalNumberパラメーターを2に設定します。現在は、シーケンスセットの選択にビット0のみが使用されています。自由選択アドバンスモードは、「Cameras with One Input Line」で説明されているように動作します。

Timing Diagrams#

Example: Auto Sequence Advance Mode#

Auto Sequence Advance Mode Timing Diagram (Example)

Example: Controlled Sequence Advance Mode (Controlled via Line 1)#

Controlled Sequence Advance Mode Timing Diagram (Example)

Example: Free Selection Advance Mode#

Free Selection Advance Mode Timing Diagram (Example)

サンプルコード#

// ** Configuring sequence sets **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
// Enable configuration mode (available on selected cameras only)
camera.SequenceConfigurationMode.SetValue(SequenceConfigurationMode_On);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Configure the parameters that you want to store in the first sequence set
camera.Width.SetValue(500);
camera.Height.SetValue(300);
// Select sequence set 0 and save the parameter values
camera.SequenceSetIndex.SetValue(0);
camera.SequenceSetStore.Execute();
// Configure the parameters that you want to store in the second sequence set
camera.Width.SetValue(800);
camera.Height.SetValue(600);
// Select sequence set 1 and save the parameter values
camera.SequenceSetIndex.SetValue(1);
camera.SequenceSetStore.Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_Auto);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
camera.SequenceSetIndex.SetValue(0);
camera.SequenceSetLoad.Execute();
camera.SequenceSetExecutions.SetValue(2);
camera.SequenceSetStore.Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
camera.SequenceSetIndex.SetValue(1);
camera.SequenceSetLoad.Execute();
camera.SequenceSetExecutions.SetValue(3);
camera.SequenceSetStore.Execute();
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_Controlled);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Specify that sequence set advance is controlled via line 1
camera.SequenceControlSelector.SetValue(SequenceControlSelector_Advance);
camera.SequenceControlSource.SetValue(SequenceControlSource_Line1);
// Specify that sequence set restart is controlled
// via software command
camera.SequenceControlSelector.SetValue(SequenceControlSelector_Restart);
camera.SequenceControlSource.SetValue(SequenceControlSource_Disabled);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// Restart the sequencer via software command (for testing purposes)
camera.SequenceAsyncRestart.Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_FreeSelection);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_FreeSelection);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(4);
// Assign sequence address bit 0 to line 3
camera.SequenceAddressBitSelector.SetValue(SequenceAddressBitSelector_Bit0);
camera.SequenceAddressBitSource.SetValue(SequenceAddressBitSource_Line3);
// Assign sequence address bit 1 to line 1
camera.SequenceAddressBitSelector.SetValue(SequenceAddressBitSelector_Bit1);
camera.SequenceAddressBitSource.SetValue(SequenceAddressBitSource_Line1);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
INodeMap& nodemap = camera.GetNodeMap();
// ** Configuring sequence sets **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
// Enable configuration mode (available on selected cameras only)
CEnumParameter(nodemap, "SequenceConfigurationMode").SetValue("On");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Configure the parameters that you want to store in the first sequence set
CIntegerParameter(nodemap, "Width").SetValue(500);
CIntegerParameter(nodemap, "Height").SetValue(300);
// Select sequence set 0 and save the parameter values
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(0);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Configure the parameters that you want to store in the second sequence set
CIntegerParameter(nodemap, "Width").SetValue(800);
CIntegerParameter(nodemap, "Height").SetValue(600);
// Select sequence set 1 and save the parameter values
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(1);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("Auto");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(0);
CCommandParameter(nodemap, "SequenceSetLoad").Execute();
CIntegerParameter(nodemap, "SequenceSetExecutions").SetValue(2);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(1);
CCommandParameter(nodemap, "SequenceSetLoad").Execute();
CIntegerParameter(nodemap, "SequenceSetExecutions").SetValue(3);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("Controlled");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Specify that sequence set advance is controlled via line 1
CEnumParameter(nodemap, "SequenceControlSelector").SetValue("Advance");
CEnumParameter(nodemap, "SequenceControlSource").SetValue("Line1");
// Specify that sequence set restart is controlled
// via software command
CEnumParameter(nodemap, "SequenceControlSelector").SetValue("Restart");
CEnumParameter(nodemap, "SequenceControlSource").SetValue("Disabled");
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// Restart the sequencer via software command (for testing purposes)
CCommandParameter(nodemap, "SequenceAsyncRestart").Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("FreeSelection");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("FreeSelection");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(4);
// Assign sequence address bit 0 to line 3
CEnumParameter(nodemap, "SequenceAddressBitSelector").SetValue("Bit0");
CEnumParameter(nodemap, "SequenceAddressBitSource").SetValue("Line3");
// Assign sequence address bit 1 to line 1
CEnumParameter(nodemap, "SequenceAddressBitSelector").SetValue("Bit1");
CEnumParameter(nodemap, "SequenceAddressBitSource").SetValue("Line1");
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring sequence sets **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
// Enable configuration mode (available on selected cameras only)
camera.Parameters[PLCamera.SequenceConfigurationMode].SetValue(PLCamera.SequenceConfigurationMode.On);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Configure the parameters that you want to store in the first sequence set
camera.Parameters[PLCamera.Width].SetValue(500);
camera.Parameters[PLCamera.Height].SetValue(300);
// Select sequence set 0 and save the parameter values
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(0);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Configure the parameters that you want to store in the second sequence set
camera.Parameters[PLCamera.Width].SetValue(800);
camera.Parameters[PLCamera.Height].SetValue(600);
// Select sequence set 1 and save the parameter values
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(1);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.Auto);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(0);
camera.Parameters[PLCamera.SequenceSetLoad].Execute();
camera.Parameters[PLCamera.SequenceSetExecutions].SetValue(2);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(1);
camera.Parameters[PLCamera.SequenceSetLoad].Execute();
camera.Parameters[PLCamera.SequenceSetExecutions].SetValue(3);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.Controlled);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Specify that sequence set advance is controlled via line 1
camera.Parameters[PLCamera.SequenceControlSelector].SetValue(PLCamera.SequenceControlSelector.Advance);
camera.Parameters[PLCamera.SequenceControlSource].SetValue(PLCamera.SequenceControlSource.Line1);
// Specify that sequence set restart is controlled
// via software command
camera.Parameters[PLCamera.SequenceControlSelector].SetValue(PLCamera.SequenceControlSelector.Restart);
camera.Parameters[PLCamera.SequenceControlSource].SetValue(PLCamera.SequenceControlSource.Disabled);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// Restart the sequencer via software command (for testing purposes)
camera.Parameters[PLCamera.SequenceAsyncRestart].Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.FreeSelection);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.FreeSelection);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(4);
// Assign sequence address bit 0 to line 3
camera.Parameters[PLCamera.SequenceAddressBitSelector].SetValue(PLCamera.SequenceAddressBitSelector.Bit0);
camera.Parameters[PLCamera.SequenceAddressBitSource].SetValue(PLCamera.SequenceAddressBitSource.Line3);
// Assign sequence address bit 1 to line 1
camera.Parameters[PLCamera.SequenceAddressBitSelector].SetValue(PLCamera.SequenceAddressBitSelector.Bit1);
camera.Parameters[PLCamera.SequenceAddressBitSource].SetValue(PLCamera.SequenceAddressBitSource.Line1);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
/* 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 */
/* ** Configuring sequence sets ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
/* Enable configuration mode (available on selected cameras only) */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceConfigurationMode", "On");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Configure the parameters that you want to store in the first sequence set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 500);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 300);
CHECK(errRes);
/* Select sequence set 0 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Configure the parameters that you want to store in the second sequence set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 800);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 600);
CHECK(errRes);
/* Select sequence set 1 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* ** Configuring the sequencer for auto sequence advance mode */
/* Assuming you want to configure the following sequence cycle: */
/* 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "Auto");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Load sequence set 0 and specify that this set is to be used */
/* 2 times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetExecutions", 2);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Load sequence set 1 and specify that this set is to be used */
/* 3 times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetExecutions", 3);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* ** Configuring the sequencer for controlled sequence advance mode ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "Controlled");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Specify that sequence set advance is controlled via line 1 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSelector", "Advance");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSource", "Line1");
CHECK(errRes);
/* Specify that sequence set restart is controlled */
/* via software command */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSelector", "Restart");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSource", "Disabled");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* Restart the sequencer via software command (for testing purposes) */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceAsyncRestart");
CHECK(errRes);
/* ** Configuring the sequencer for free selection advance mode */
/* on cameras with ONE input line ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "FreeSelection");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* ** Configuring the sequencer for free selection advance mode */
/* on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "FreeSelection");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 4);
CHECK(errRes);
/* Assign sequence address bit 0 to line 3 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSelector", "Bit0");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSource", "Line3");
CHECK(errRes);
/* Assign sequence address bit 1 to line 1 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSelector", "Bit1");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSource", "Line1");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);

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