コンテンツにスキップ

Sequencer(USBカメラ)#

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

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

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

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

機能を使用する#

Sequencerモード#

  • シーケンサーモードでは、シーケンサーが画像取得を制御します。この状態では設定できません。
  • シーケンサー設定モードで、シーケンサーは設定できますが、画像取得は制御しません。

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

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

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

  1. Sequencer ModeパラメーターをOffに設定します。
  2. Sequencer ConfigurationModeパラメーターをOnに設定します。

情報

On acA1920-25uc/um and acA2500-14uc/um cameras, when acquiring images using different sequencer sets, overlapping image acquisition is not possible. The camera must complete the entire exposure and readout process before a new sequence set can be loaded. As a consequence, the frame rate can be significantly reduced.

What's in a Sequencer Set?#

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

  • AcquisitionFrameRate
  • AcquisitionFrameRateEnable
  • BalanceRatio
  • BinningHorizontal
  • BinningVertical
  • BlackLevel
  • CenterX
  • CenterY
  • ChunkEnable
  • ChunkModeActive
  • ColorAdjustmentHue
  • ColorAdjustmentSaturation
  • ColorTransformationValue
  • CounterDuration (for Counter 2)
  • CounterEventSource
  • CounterResetSource
  • DigitalShift
  • ExposureTime
  • Gain
  • Height
  • LUTEnablea
  • OffsetX
  • OffsetY
  • PixelFormatb
  • ReverseX
  • ReverseYc
  • ScalingHorizontal
  • SequencerSetNext
  • SequencerSetPath
  • SequencerSetSelector
  • SequencerSetStart
  • SequencerTriggerActivation
  • SequencerTriggerSource
  • TestImageSelector
  • TimerDelay (for Timer 1)
  • TimerDuration (for Timer 1)
  • Width

  1. Gammaパラメーターが1.0に設定され、LightSourcePresetパラメーターがOffに設定されている場合にのみ含まれます。

  2. 次のカメラモデルでのみ使用可能:acA640-750um/UC、acA800-510um/UC、acA1300-200um/UC、acA1920-150um/UC、acA2500-60um/UC。

  3. 次のカメラモデルでは使用できません:acA3088-57um/UC、acA4024-29um/UC、acA5472-17um/UC。

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

情報

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

Configuring Sequencer Sets#

情報

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

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

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

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

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

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

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

Saving a Sequencer Set#

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

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

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

Loading a Sequencer Set#

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

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

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

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

Configuring the Sequencer#

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

情報

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

Path 0 and Path 1#

シーケンサーを制御するには、いわゆる「パス」を2つ設定する必要があります。

  • パス1を使用すると、使用可能なシーケンサーセット(シーケンサーセットアドバンス)を順番に切り替えることができます。シーケンサーが「パス1」トリガー信号を受信するたびに、シーケンサーは次のセットに進みます。例:

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

  • パス0を使用すると、サイクルをリセットできます(シーケンサーセットのリセット)。シーケンサーが「パス0」トリガー信号を受信するたびに、シーケンサーはシーケンサーセット0でサイクルを再開します。例:

    Sample Sequence Cycle for Path 0: 0-1-2-0-1-2-...

Setting Up Path 0#

パス0を設定するには、「パス0」トリガー信号として使用する、つまりシーケンサーセットリセット信号として使用するソース信号を指定する必要があります。

ハードウェア信号またはソフトウェア信号をパス0のソース信号として選択できます。ソース設定はシーケンサーセット0に保存する必要があります。

パス0のソース信号を指定するには、次の手順に従います。

  1. シーケンサーセット0をロードします。
  2. SequencerPathSelectorパラメーターを0に設定します。
  3. パラメーターを SequencerTriggerSource パラメーターを次のいずれかの値に設定します。
    • Line1Line3、またはLine4:Sequencerセットリセットは、入力ライン1、GPIOライン3、またはGPIOライン4を介して制御できます。
    • SoftwareSignal1SoftwareSignal2、またはSoftwareSignal3:Sequencerセットリセットは、Software Signal Pulse機能を使用して制御できます。
  4. シーケンサーセット0を保存します。

情報

  • リアルタイムアプリケーションでは、ソフトウェアコマンドを使用してシーケンサーセットのリセットを制御しないことをBaslerは強くお勧めします。信号処理と送信のため、ソフトウェアコマンドの発行とシーケンサーセットのリセットの間には、詳細不明な遅延が生じます。したがって、ソフトウェアコマンドが送信されてから有効になるまでの間に発生する可能性のある画像取得の数を予測することはできません。
  • パス0とパス1に同じトリガーソースを使用しないでください。

Setting Up Path 1#

Trigger Sourceの指定#

最初に、「パス1」トリガー信号として使用する、つまりシーケンサーセットのアドバンス信号として使用するソース信号を指定する必要があります。

パス1のソース信号として、Frame Startトリガー信号、ハードウェア信号、ソフトウェア信号、またはカウンターを選択できます。ソース設定は、シーケンサーセット0に保存する必要があります。

パス1のソース信号を指定するには、次の手順に従います。

  1. シーケンサーセット0をロードします。
  2. SequencerPathSelectorパラメーターを1に設定します。
  3. パラメーターを SequencerTriggerSource パラメーターを次のいずれかの値に設定します。
    • FrameStartFrame Startトリガー信号を受信すると、自動的にSequencerセットアドバンスが発生します。
    • Line1Line3、またはLine4:Sequencerセットアドバンスは、入力ライン1、GPIOライン3、またはGPIOライン4 で制御できます。いずれかのGPIOラインを使用するには、ラインを入力用に設定する必要があります。フレーム開始トリガー信号を受信しているときに、指定されたラインが低(0)の場合、シーケンサーは前進せず、現在のセットが画像取得に再度使用されます。フレーム開始トリガー信号を受信しているときにラインが高(1)の場合、シーケンサーは前進し、サイクル内の次のシーケンサーセットが画像取得に使用されます。
    • SoftwareSignal1SoftwareSignal2またはSoftwareSignal3Software Signal Pulse機能を使用してSequencerセットアドバンスを制御できます。
    • Counter2Endカウンターを使用してSequencerセットアドバンスを制御できます。
  4. シーケンサーセット0を保存します。
Specifying the Sequencer Sets Used#

次に、シーケンサー操作中に使用するシーケンサーセットを指定する必要があります。

デフォルトでは、32個のシーケンサーセットがすべて使用されます。「パス1」トリガー信号が受信されると、シーケンサーは、0から31までのシーケンサーセットインデックス番号の昇順で進めます。その後、サイクルは0で再開されます。

シーケンサーセットの数を減らすには、次の手順に従います。

  1. 使用するインデックス番号が最も大きいシーケンサーセットをロードします
    例:5つのシーケンサーセットを設定し、以下のサイクルを設定するとします。

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

    このサイクルでは、シーケンサーセットのインデックス番号の最大値は4です。したがって、シーケンサーセット4をロードします。2. SequencerPathSelectorパラメーターを1に設定します。3. SequencerSetNextパラメーターを0に設定します。4. シーケンサーセットを保存します。

操作中に、シーケンサーは、インデックス番号が最も大きいセットの後に、シーケンサーセット0に切り替わります。これにより「サークルが閉じます」。

情報

  • リアルタイムアプリケーションでは、ソフトウェアコマンドを使用してシーケンサーセットアドバンスを制御しないことをBaslerは強くお勧めします。信号処理と送信のため、ソフトウェアコマンドの発行とシーケンサーセットアドバンスの間には、詳細不明な遅延が生じます。したがって、ソフトウェアコマンドが送信されてから有効になるまでの間に発生する可能性のある画像取得の数を予測することはできません。
  • パス0とパス1に同じトリガーソースを使用しないでください。

Using a Counter to Control the Sequencer#

パス1のソース信号をCounter2Endに設定した場合、カウンターを使用してシーケンサーセットアドバンスを制御できます。

これは、シーケンサーセットを複数回連続して使用する固定シーケンスを設定する場合に便利です。

各シーケンサーセットに対して、CounterDurationパラメーターを設定して、セットを1行で使用する回数を指定できます。デフォルトでは、パラメーターはすべてのセットに対して1に設定されており、各シーケンスセットはサイクルごとに1回使用されます。

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

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

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

  1. シーケンサーセット0をロードします。
  2. SequencerPathSelectorパラメーターを1に設定します。
  3. SequencerTriggerSourceパラメーターをCounter2Endに設定します。
  4. シーケンサーセット0を保存します。
  5. CounterSelectorパラメーターをCounter2に設定します。
  6. 各シーケンサーセットのCounterDurationパラメーターを設定します。

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

追加パラメーター#

SequencerSetStartおよびSequencerTriggerActivationのパラメーターもシーケンサーの動作を制御します。ただし、これらのパラメーターはプリセットされており、変更できません。

サンプルコード#

// ** Configuring the sequencer sets **
// Enable sequencer configuration mode
camera.SequencerMode.SetValue(SequencerMode_Off);
camera.SequencerConfigurationMode.SetValue(SequencerConfigurationMode_On);
// Configure parameters to be stored in the first sequencer set
camera.Width.SetValue(600);
camera.Height.SetValue(300);
// Select sequencer set 0 and save the parameter values
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetSave.Execute();
// Configure parameters to be stored in the second sequencer set
camera.Width.SetValue(800);
camera.Height.SetValue(600);
// Select sequencer set 1 and save the parameter values
camera.SequencerSetSelector.SetValue(1);
camera.SequencerSetSave.Execute();
// Enable sequencer mode to operate the sequencer
camera.SequencerMode.SetValue(SequencerMode_On);
// ** Setting up path 0 **
// Enable sequencer configuration mode
camera.SequencerMode.SetValue(SequencerMode_Off);
camera.SequencerConfigurationMode.SetValue(SequencerConfigurationMode_On);
// Load sequencer set 0 and select path 0
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetLoad.Execute();
camera.SequencerPathSelector.SetValue(0);
// Set software signal 1 as "path 0" trigger signal
camera.SequencerTriggerSource.SetValue(SequencerTriggerSource_SoftwareSignal1);
// Save the changes
camera.SequencerSetSave.Execute();
// Enable sequencer mode to operate the sequencer
camera.SequencerMode.SetValue(SequencerMode_On);
// * Setting up path 1 **
// Enable sequencer configuration mode
camera.SequencerMode.SetValue(SequencerMode_Off);
camera.SequencerConfigurationMode.SetValue(SequencerConfigurationMode_On);
// Load sequencer set 0 and select path 1
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetLoad.Execute();
camera.SequencerPathSelector.SetValue(1);
// Set software signal 2 as "path 1" trigger signal
camera.SequencerTriggerSource.SetValue(SequencerTriggerSource_SoftwareSignal2);
// Save the changes
camera.SequencerSetSave.Execute();
// Assume you want to set up the following sequencer set cycle:
// 0 - 1 - 2 - 3 (- 0 - 1 - ...)
// Load the sequencer set with the highest index number to be used (here: 3)
camera.SequencerSetSelector.SetValue(3);
camera.SequencerSetLoad.Execute();
// Set the next sequencer set to 0 to "close the circle"
camera.SequencerPathSelector.SetValue(1);
camera.SequencerSetNext.SetValue(0);
// Save the changes
camera.SequencerSetSave.Execute();
// Enable sequencer mode to operate the sequencer
camera.SequencerMode.SetValue(SequencerMode_On);
// ** Advanced: Using a counter to control the sequencer **
// Enable sequencer configuration mode
camera.SequencerMode.SetValue(SequencerMode_Off);
camera.SequencerConfigurationMode.SetValue(SequencerConfigurationMode_On);
// Load sequencer set 0 and select path 1
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetLoad.Execute();
camera.SequencerPathSelector.SetValue(1);
// Set the Counter2 end event as "path 1" trigger signal
camera.SequencerTriggerSource.SetValue(SequencerTriggerSource_Counter2End);
// Save the changes
camera.SequencerSetSave.Execute();
// Select counter 2 to configure this counter
camera.CounterSelector.SetValue(CounterSelector_Counter2);
// Assume you want to set up the following sequencer set cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...)
// Load sequencer set 0 and specify that this set is to be used
// two times in a row
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetLoad.Execute();
camera.CounterDuration.SetValue(2);
camera.SequencerSetSave.Execute();
// Load sequencer set 1 and specify that this set is to be used
// three times in a row
camera.SequencerSetSelector.SetValue(1);
camera.SequencerSetLoad.Execute();
camera.CounterDuration.SetValue(3);
camera.SequencerSetSave.Execute();
// Enable sequencer mode to operate the sequencer
camera.SequencerMode.SetValue(SequencerMode_On);
INodeMap& nodemap = camera.GetNodeMap();
// ** Configuring the sequencer sets **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Configure parameters to be stored in the first sequencer set
CIntegerParameter(nodemap, "Width").SetValue(600);
CIntegerParameter(nodemap, "Height").SetValue(300);
// Select sequencer set 0 and save the parameter values
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Configure parameters to be stored in the second sequencer set
CIntegerParameter(nodemap, "Width").SetValue(800);
CIntegerParameter(nodemap, "Height").SetValue(600);
// Select sequencer set 1 and save the parameter values
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(1);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Setting up path 0 **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Load sequencer set 0 and select path 0
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(0);
// Set software signal 1 as "path 0" trigger signal
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("SoftwareSignal1");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// * Setting up path 1 **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Load sequencer set 0 and select path 1
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(1);
// Set software signal 2 as "path 1" trigger signal
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("SoftwareSignal2");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Assume you want to set up the following sequencer set cycle:
// 0 - 1 - 2 - 3 (- 0 - 1 - ...)
// Load the sequencer set with the highest index number to be used (here: 3)
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(3);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
// Set the next sequencer set to 0 to "close the circle"
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(1);
CIntegerParameter(nodemap, "SequencerSetNext").SetValue(0);
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Advanced: Using a counter to control the sequencer **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Load sequencer set 0 and select path 1
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(1);
// Set the Counter2 end event as "path 1" trigger signal
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("Counter2End");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Select counter 2 to configure this counter
CEnumParameter(nodemap, "CounterSelector").SetValue("Counter2");
// Assume you want to set up the following sequencer set cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...)
// Load sequencer set 0 and specify that this set is to be used
// two times in a row
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "CounterDuration").SetValue(2);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Load sequencer set 1 and specify that this set is to be used
// three times in a row
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(1);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "CounterDuration").SetValue(3);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Configuring the sequencer sets **
// Enable sequencer configuration mode
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.Off);
camera.Parameters[PLCamera.SequencerConfigurationMode].SetValue(PLCamera.SequencerConfigurationMode.On);
// Configure parameters to be stored in the first sequencer set
camera.Parameters[PLCamera.Width].SetValue(600);
camera.Parameters[PLCamera.Height].SetValue(300);
// Select sequencer set 0 and save the parameter values
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Configure parameters to be stored in the second sequencer set
camera.Parameters[PLCamera.Width].SetValue(800);
camera.Parameters[PLCamera.Height].SetValue(600);
// Select sequencer set 1 and save the parameter values
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(1);
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Enable sequencer mode to operate the sequencer
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.On);
// ** Setting up path 0 **
// Enable sequencer configuration mode
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.Off);
camera.Parameters[PLCamera.SequencerConfigurationMode].SetValue(PLCamera.SequencerConfigurationMode.On);
// Load sequencer set 0 and select path 0
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(0);
// Set software signal 1 as "path 0" trigger signal
camera.Parameters[PLCamera.SequencerTriggerSource].SetValue(PLCamera.SequencerTriggerSource.SoftwareSignal1);
// Save the changes
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Enable sequencer mode to operate the sequencer
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.On);
// * Setting up path 1 **
// Enable sequencer configuration mode
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.Off);
camera.Parameters[PLCamera.SequencerConfigurationMode].SetValue(PLCamera.SequencerConfigurationMode.On);
// Load sequencer set 0 and select path 1
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(1);
// Set software signal 2 as "path 1" trigger signal
camera.Parameters[PLCamera.SequencerTriggerSource].SetValue(PLCamera.SequencerTriggerSource.SoftwareSignal2);
// Save the changes
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Assume you want to set up the following sequencer set cycle:
// 0 - 1 - 2 - 3 (- 0 - 1 - ...)
// Load the sequencer set with the highest index number to be used (here: 3)
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(3);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
// Set the next sequencer set to 0 to "close the circle"
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(1);
camera.Parameters[PLCamera.SequencerSetNext].SetValue(0);
// Save the changes
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Enable sequencer mode to operate the sequencer
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.On);
// ** Advanced: Using a counter to control the sequencer **
// Enable sequencer configuration mode
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.Off);
camera.Parameters[PLCamera.SequencerConfigurationMode].SetValue(PLCamera.SequencerConfigurationMode.On);
// Load sequencer set 0 and select path 1
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(1);
// Set the Counter2 end event as "path 1" trigger signal
camera.Parameters[PLCamera.SequencerTriggerSource].SetValue(PLCamera.SequencerTriggerSource.Counter2End);
// Save the changes
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Select counter 2 to configure this counter
camera.Parameters[PLCamera.CounterSelector].SetValue(PLCamera.CounterSelector.Counter2);
// Assume you want to set up the following sequencer set cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...)
// Load sequencer set 0 and specify that this set is to be used
// two times in a row
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.CounterDuration].SetValue(2);
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Load sequencer set 1 and specify that this set is to be used
// three times in a row
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(1);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.CounterDuration].SetValue(3);
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Enable sequencer mode to operate the sequencer
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.On);
/* 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 the sequencer sets ** */
/* Enable sequencer configuration mode */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "Off");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
CHECK(errRes);
/* Configure parameters to be stored in the first sequencer set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 600);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 300);
CHECK(errRes);
/* Select sequencer set 0 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Configure parameters to be stored in the second sequencer set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 800);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 600);
CHECK(errRes);
/* Select sequencer set 1 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Enable sequencer mode to operate the sequencer */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "On");
CHECK(errRes);
/* ** Setting up path 0 ** */
/* Enable sequencer configuration mode */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "Off");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
CHECK(errRes);
/* Load sequencer set 0 and select path 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 0);
CHECK(errRes);
/* Set software signal 1 as "path 0" trigger signal */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerSource", "SoftwareSignal1");
CHECK(errRes);
/* Save the changes */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Enable sequencer mode to operate the sequencer */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "On");
CHECK(errRes);
/* * Setting up path 1 ** */
/* Enable sequencer configuration mode */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "Off");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
CHECK(errRes);
/* Load sequencer set 0 and select path 1 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 1);
CHECK(errRes);
/* Set software signal 2 as "path 1" trigger signal */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerSource", "SoftwareSignal2");
CHECK(errRes);
/* Save the changes */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Assume you want to set up the following sequencer set cycle: */
/* 0 - 1 - 2 - 3 (- 0 - 1 - ...) */
/* Load the sequencer set with the highest index number to be used (here: 3) */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 3);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
/* Set the next sequencer set to 0 to "close the circle" */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 1);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetNext", 0);
CHECK(errRes);
/* Save the changes */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Enable sequencer mode to operate the sequencer */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "On");
CHECK(errRes);
/* ** Advanced: Using a counter to control the sequencer ** */
/* Enable sequencer configuration mode */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "Off");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
CHECK(errRes);
/* Load sequencer set 0 and select path 1 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 1);
CHECK(errRes);
/* Set the Counter2 end event as "path 1" trigger signal */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerSource", "Counter2End");
CHECK(errRes);
/* Save the changes */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Select counter 2 to configure this counter */
errRes = PylonDeviceFeatureFromString(hdev, "CounterSelector", "Counter2");
CHECK(errRes);
/* Assume you want to set up the following sequencer set cycle: */
/* 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) */
/* Load sequencer set 0 and specify that this set is to be used */
/* two times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "CounterDuration", 2);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Load sequencer set 1 and specify that this set is to be used */
/* three times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "CounterDuration", 3);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Enable sequencer mode to operate the sequencer */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "On");
CHECK(errRes);

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

トップに戻る