Sequencer (USB Cameras)

The Sequencer camera feature allows you to define up to 32 sets of parameter settings, called sequencer sets, and apply them to a sequence of image acquisitions.

As the camera acquires images, it applies one sequencer set after the other. This enables you to quickly change camera parameters without compromising the maximum frame rate.

For example, you can use the Sequencer feature to quickly change between preconfigured image ROIs or exposure times.

For a description of the Sequencer feature for GigE cameras, click here.

In this topic Hide

Using the Feature

Prerequisites

All auto functions (e.g., Gain Auto, Exposure Auto) must be set to Off.

Sequencer Modes

To enable the sequencer mode, set the SequencerMode parameter to On.

To enable the sequencer configuration mode, set the SequencerMode parameter to Off and the SequenceConfigurationModeSequencerConfigurationMode parameter to OnOn.

What's in a Sequencer Set?

Sequencer sets contain the following parameters, if available:

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

PixelFormat

ReverseX

ReverseY

ScalingHorizontal

SequencerSetNext

SequencerSetPath

SequencerSetSelector

SequencerSetStart

SequencerTriggerActivation

SequencerTriggerSource

TestImageSelector

TimerDelay (for Timer 1)

TimerDuration (for Timer 1)

Width

aOnly contained if the Gamma parameter is set to 1.0 and the LightSourcePreset parameter is set to Off.

All other camera parameters can't be controlled using the Sequencer feature.

Loading or saving a sequencer set will always load or save all of the above parameters, even those you haven't changed. For example, if you only changed the exposure time and left all other parameters at their default values, the values of all other parameters will also be stored (and overwritten on load).

Configuring Sequencer Sets

Before you can use the Sequencer feature, you must populate the sequencer sets with your desired settings. Each sequencer set has a unique sequencer set index number, ranging from 0 to 31.

To populate the sequencer sets:

  1. Configure the sequencer set parameters that you want to store in sequencer set 0.
  2. Save sequencer set 0.
  3. Repeat steps 1 and 2 for all sequencer sets you want to use.
    Make sure to always use a continuous series of index numbers starting with index number 0, e.g., use sequencer sets 0, 1, 2, and 3.

Example: Assume you need two sequencer sets and want to populate them with different image ROI settings. To do so:

  1. Create the first image ROI by adjusting the Width, Height, OffsetX, and OffsetY parameter values.
  2. Save sequencer set 0.
  3. Create the second image ROI by choosing different values for the Width, Height, OffsetX, and OffsetY parameters.
  4. Save sequencer set 1.

You can now configure the sequencer to quickly change between the two image ROIs.

Saving a Sequencer Set

To save a sequencer set:

  1. Set the SequencerSetSelector parameter to the desired sequencer set.
  2. Execute the SequencerSetSave command.

The values of all sequencer set parameters are stored in the selected sequencer set.

Loading a Sequencer Set

Sequencer sets are loaded automatically during sequencer operation. However, loading a sequencer set manually can be useful for testing purposes or to set up the sequencer.

To manually load a sequencer set:

  1. Set the SequencerSetSelector parameter to the desired sequencer set.
  2. Execute the SequencerSetLoad command.

The values of all sequencer set parameters are overwritten and replaced by the values stored in the selected sequencer set.

Configuring the Sequencer

After you have configured the sequencer sets, you must set up the sequencer.

Path 0 and Path 1

To control the sequencer, you must set up two so-called "paths":

Setting up Path 0

To set up path 0, you must specify the source signal that you want to use as the "path 0" trigger signal, i.e., as a sequencer set reset signal.

You can select hardware signals or software signals as source signals for path 0. The source setting must be stored in sequencer set 0.

To specify the source signal for path 0:

  1. Load sequencer set 0.
  2. Set the SequencerPathSelector parameter to 0.
  3. Set the SequencerTriggerSource parameter to one of the following values:
  4. Save sequencer set 0.

Setting up Path 1

Specifying the Trigger Source

First, you must specify the source signal that you want to use as the "path 1" trigger signal, i.e., as a sequencer set advance signal.

You can select the Frame Start trigger signal, hardware signals, software signals, or a counter as source signals for path 1. The source setting must be stored in sequencer set 0.

To specify the source signal for path 1:

  1. Load sequencer set 0.
  2. Set the SequencerPathSelector parameter to 1.
  3. Set the SequencerTriggerSource parameter to one of the following values:
  4. Save sequencer set 0.

Specifying the Sequencer Sets Used

Second, you must specify which sequencer sets are to be used during sequencer operation.

By default, all 32 sequencer sets are used. As "path 1" trigger signals are received, the sequencer advances in ascending sequencer set index numbers from 0 to 31. After that, the cycle restarts at 0.

To use a lower number of sequencer sets:

  1. Load the sequencer set with the highest index number to be used.
    Example: Assume you have configured five sequencer sets, and you want to set up the following cycle:
    Sample Sequence Cycle for Path 1: 0-1-2-3-4-0-1-...
    In this cycle, the highest sequencer set index number is 4. Therefore, load sequencer set 4.
  2. Set the SequencerPathSelector parameter to 1.
  3. Set the SequencerSetNext parameter to 0.
  4. Save the sequencer set.

During operation, the sequencer will now switch to sequencer set 0 after the set with the highest index number. This "closes the circle".

Using a Counter to Control the Sequencer

If you set the source signal for path 1 to Counter2End, you can use a counter to control sequencer set advance.

This is useful if you want to set up a fixed sequence that uses sequencer sets multiple times in a row.

For each sequencer set, you can set the CounterDuration parameter to specify how many times the set is to be used in a row. By default, the parameter is set to 1 for all sets, and each sequence set is used once per cycle.

Example: Assume you want to set up the following sequencer set cycle:

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

To set up the above sequencer set cycle:

  1. Load sequencer set 0.
  2. Set the SequencerPathSelector parameter to 1.
  3. Set the SequencerTriggerSource parameter to Counter2End.
  4. Save sequencer set 0.
  5. Set the CounterSelector parameter to Counter2.
  6. Set the CounterDuration parameter for each sequencer set:

Additional Parameters

The SequencerSetStart and SequencerTriggerActivation parameters also control the operation of the sequencer. However, these parameters are preset and can’t be changed.

Specifics

Camera Model Notes
All ace 2 GigE camera models See Sequencer (GigE Cameras).
All ace 2 USB 3.0 camera models Sequencer feature not supported
All ace GigE camera models See Sequencer (GigE Cameras).
acA640-750um No specific information for your camera model.
acA640-750uc No specific information for your camera model.
acA640-90um No specific information for your camera model.
acA640-90uc No specific information for your camera model.
acA640-120um No specific information for your camera model.
acA640-120uc No specific information for your camera model.
acA720-520um No specific information for your camera model.
acA720-520uc No specific information for your camera model.
acA800-510um No specific information for your camera model.
acA800-510uc No specific information for your camera model.
acA1300-200um No specific information for your camera model.
acA1300-200uc No specific information for your camera model.
acA1300-30um No specific information for your camera model.
acA1300-30uc No specific information for your camera model.
acA1440-220um No specific information for your camera model.
acA1440-220uc No specific information for your camera model.
acA1600-20um No specific information for your camera model.
acA1600-20uc No specific information for your camera model.
acA1920-25um If you use the camera with overlapping image acquisition, enabling the sequencer may affect the frame rate:
  • When acquiring multiple images using the same sequencer set, overlapping image acquisition is possible and the Sequencer feature has no effect on the camera’s frame rate.

  • When acquiring multiple images using different sequencer sets, overlapping image acquisition is not possible. The camera must complete the entire exposure/readout process before a new sequence set can be loaded. As a consequence, the frame rate can be significantly reduced.

acA1920-25uc If you use the camera with overlapping image acquisition, enabling the sequencer may affect the frame rate:
  • When acquiring multiple images using the same sequencer set, overlapping image acquisition is possible and the Sequencer feature has no effect on the camera’s frame rate.

  • When acquiring multiple images using different sequencer sets, overlapping image acquisition is not possible. The camera must complete the entire exposure/readout process before a new sequence set can be loaded. As a consequence, the frame rate can be significantly reduced.

acA1920-40um No specific information for your camera model.
acA1920-40uc No specific information for your camera model.
acA1920-40umMED No specific information for your camera model.
acA1920-40ucMED No specific information for your camera model.
acA1920-150um No specific information for your camera model.
acA1920-150uc No specific information for your camera model.
acA1920-155um No specific information for your camera model.
acA1920-155uc No specific information for your camera model.
acA1920-155umMED No specific information for your camera model.
acA1920-155ucMED No specific information for your camera model.
acA2040-90um No specific information for your camera model.
acA2040-90umNIR No specific information for your camera model.
acA2040-90uc No specific information for your camera model.
acA2000-165um No specific information for your camera model.
acA2000-165umNIR No specific information for your camera model.
acA2000-165uc No specific information for your camera model.
acA2040-55um No specific information for your camera model.
acA2040-55uc No specific information for your camera model.
acA2040-120um No specific information for your camera model.
acA2040-120uc No specific information for your camera model.
acA2440-35um No specific information for your camera model.
acA2440-35uc No specific information for your camera model.
acA2440-35umMED No specific information for your camera model.
acA2440-35ucMED No specific information for your camera model.
acA2440-75um No specific information for your camera model.
acA2440-75uc No specific information for your camera model.
acA2440-75umMED No specific information for your camera model.
acA2440-75ucMED No specific information for your camera model.
acA2500-14um If you use the camera with overlapping image acquisition, enabling the sequencer may affect the frame rate:
  • When acquiring multiple images using the same sequencer set, overlapping image acquisition is possible and the Sequencer feature has no effect on the camera’s frame rate.

  • When acquiring multiple images using different sequencer sets, overlapping image acquisition is not possible. The camera must complete the entire exposure/readout process before a new sequence set can be loaded. As a consequence, the frame rate can be significantly reduced.

acA2500-14uc If you use the camera with overlapping image acquisition, enabling the sequencer may affect the frame rate:
  • When acquiring multiple images using the same sequencer set, overlapping image acquisition is possible and the Sequencer feature has no effect on the camera’s frame rate.

  • When acquiring multiple images using different sequencer sets, overlapping image acquisition is not possible. The camera must complete the entire exposure/readout process before a new sequence set can be loaded. As a consequence, the frame rate can be significantly reduced.

acA2500-60um No specific information for your camera model.
acA2500-60uc No specific information for your camera model.
acA3088-57um No specific information for your camera model.
acA3088-57uc No specific information for your camera model.
acA3800-14um No specific information for your camera model.
acA3800-14uc No specific information for your camera model.
acA4024-29um No specific information for your camera model.
acA4024-29uc No specific information for your camera model.
acA4096-30um No specific information for your camera model.
acA4096-30uc No specific information for your camera model.
acA4096-30umMED No specific information for your camera model.
acA4096-30ucMED No specific information for your camera model.
acA4096-40um No specific information for your camera model.
acA4096-40uc No specific information for your camera model.
acA4096-40umMED No specific information for your camera model.
acA4096-40ucMED No specific information for your camera model.
acA4112-20um No specific information for your camera model.
acA4112-20uc No specific information for your camera model.
acA4112-20umMED No specific information for your camera model.
acA4112-20ucMED No specific information for your camera model.
acA4112-30um No specific information for your camera model.
acA4112-30uc No specific information for your camera model.
acA4112-30umMED No specific information for your camera model.
acA4112-30ucMED No specific information for your camera model.
acA4600-10uc No specific information for your camera model.
acA5472-17um No specific information for your camera model.
acA5472-17uc No specific information for your camera model.
All boost CXP-12 camera models Sequencer feature not supported
All dart BCON for LVDS camera models Sequencer feature not supported
All dart BCON for MIPI camera models Sequencer feature not supported
All dart USB 3.0 camera models Sequencer feature not supported
All pulse USB 3.0 camera models Sequencer feature not supported

Sample Code

/* 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*/

CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("Off");
CEnumerationPtr(nodemap.GetNode("SequencerConfigurationMode"))->FromString("On");
// Configure parameters to be stored in the first sequencer set
CIntegerPtr(nodemap.GetNode("Width"))->SetValue(600);
CIntegerPtr(nodemap.GetNode("Height"))->SetValue(300);
// Select sequencer set 0 and save the parameter values
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(0);
CCommandPtr(nodemap.GetNode("SequencerSetSave"))->Execute();
// Configure parameters to be stored in the second sequencer set
CIntegerPtr(nodemap.GetNode("Width"))->SetValue(800);
CIntegerPtr(nodemap.GetNode("Height"))->SetValue(600);
// Select sequencer set 1 and save the parameter values
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(1);
CCommandPtr(nodemap.GetNode("SequencerSetSave"))->Execute();
// Enable sequencer mode to operate the sequencer
CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("On");
/*Setting up path 0*/

CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("Off");
CEnumerationPtr(nodemap.GetNode("SequencerConfigurationMode"))->FromString("On");
// Load sequencer set 0 and select path 0
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(0);
CCommandPtr(nodemap.GetNode("SequencerSetLoad"))->Execute();
CIntegerPtr(nodemap.GetNode("SequencerPathSelector"))->SetValue(0);
// Set software signal 1 as "path 0" trigger signal
CEnumerationPtr(nodemap.GetNode("SequencerTriggerSource"))->FromString("SoftwareSignal1");
// Save the changes
CCommandPtr(nodemap.GetNode("SequencerSetSave"))->Execute();
// Enable sequencer mode to operate the sequencer
CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("On");
/*Setting up path 1*/

CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("Off");
CEnumerationPtr(nodemap.GetNode("SequencerConfigurationMode"))->FromString("On");
// Load sequencer set 0 and select path 1
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(0);
CCommandPtr(nodemap.GetNode("SequencerSetLoad"))->Execute();
CIntegerPtr(nodemap.GetNode("SequencerPathSelector"))->SetValue(1);
// Set software signal 2 as "path 1" trigger signal
CEnumerationPtr(nodemap.GetNode("SequencerTriggerSource"))->FromString("SoftwareSignal2");
// Save the changes
CCommandPtr(nodemap.GetNode("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)
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(3);
CCommandPtr(nodemap.GetNode("SequencerSetLoad"))->Execute();
// Set the next sequencer set to 0 to "close the circle"
CIntegerPtr(nodemap.GetNode("SequencerPathSelector"))->SetValue(1);
CIntegerPtr(nodemap.GetNode("SequencerSetNext"))->SetValue(0);
// Save the changes
CCommandPtr(nodemap.GetNode("SequencerSetSave"))->Execute();
// Enable sequencer mode to operate the sequencer
CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("On");
/*Advanced: Using a counter to control the sequencer*/

CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("Off");
CEnumerationPtr(nodemap.GetNode("SequencerConfigurationMode"))->FromString("On");
// Load sequencer set 0 and select path 1
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(0);
CCommandPtr(nodemap.GetNode("SequencerSetLoad"))->Execute();
CIntegerPtr(nodemap.GetNode("SequencerPathSelector"))->SetValue(1);
// Set the Counter2 end event as "path 1" trigger signal
CEnumerationPtr(nodemap.GetNode("SequencerTriggerSource"))->FromString("Counter2End");
// Save the changes
CCommandPtr(nodemap.GetNode("SequencerSetSave"))->Execute();
// Select counter 2 to configure this counter
CEnumerationPtr(nodemap.GetNode("CounterSelector"))->FromString("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
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(0);
CCommandPtr(nodemap.GetNode("SequencerSetLoad"))->Execute();
CIntegerPtr(nodemap.GetNode("CounterDuration"))->SetValue(2);
CCommandPtr(nodemap.GetNode("SequencerSetSave"))->Execute();
// Load sequencer set 1 and specify that this set is to be used
// three times in a row
CIntegerPtr(nodemap.GetNode("SequencerSetSelector"))->SetValue(1);
CCommandPtr(nodemap.GetNode("SequencerSetLoad"))->Execute();
CIntegerPtr(nodemap.GetNode("CounterDuration"))->SetValue(3);
CCommandPtr(nodemap.GetNode("SequencerSetSave"))->Execute();
// Enable sequencer mode to operate the sequencer
CEnumerationPtr(nodemap.GetNode("SequencerMode"))->FromString("On");
/*Configuring the sequencer sets*/

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*/

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*/

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*/

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);
/*Configuring the sequencer sets*/

Pylon.DeviceFeatureFromString(hdev, "SequencerMode", "Off");
Pylon.DeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
// Configure parameters to be stored in the first sequencer set
Pylon.DeviceSetIntegerFeature(hdev, "Width", 600);
Pylon.DeviceSetIntegerFeature(hdev, "Height", 300);
// Select sequencer set 0 and save the parameter values
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// Configure parameters to be stored in the second sequencer set
Pylon.DeviceSetIntegerFeature(hdev, "Width", 800);
Pylon.DeviceSetIntegerFeature(hdev, "Height", 600);
// Select sequencer set 1 and save the parameter values
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 1);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// Enable sequencer mode to operate the sequencer
Pylon.DeviceFeatureFromString(hdev, "SequencerMode", "On");
/*Setting up path 0*/

Pylon.DeviceFeatureFromString(hdev, "SequencerMode", "Off");
Pylon.DeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
// Load sequencer set 0 and select path 0
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
Pylon.DeviceSetIntegerFeature(hdev, "SequencerPathSelector", 0);
// Set software signal 1 as "path 0" trigger signal
Pylon.DeviceFeatureFromString(hdev, "SequencerTriggerSource", "SoftwareSignal1");
// Save the changes
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// Enable sequencer mode to operate the sequencer
Pylon.DeviceFeatureFromString(hdev, "SequencerMode", "On");
/*Setting up path 1*/

Pylon.DeviceFeatureFromString(hdev, "SequencerMode", "Off");
Pylon.DeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
// Load sequencer set 0 and select path 1
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
Pylon.DeviceSetIntegerFeature(hdev, "SequencerPathSelector", 1);
// Set software signal 2 as "path 1" trigger signal
Pylon.DeviceFeatureFromString(hdev, "SequencerTriggerSource", "SoftwareSignal2");
// Save the changes
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// 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)
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 3);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
// Set the next sequencer set to 0 to "close the circle"
Pylon.DeviceSetIntegerFeature(hdev, "SequencerPathSelector", 1);
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetNext", 0);
// Save the changes
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// Enable sequencer mode to operate the sequencer
Pylon.DeviceFeatureFromString(hdev, "SequencerMode", "On");
/*Advanced: Using a counter to control the sequencer*/

Pylon.DeviceFeatureFromString(hdev, "SequencerMode", "Off");
Pylon.DeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
// Load sequencer set 0 and select path 1
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
Pylon.DeviceSetIntegerFeature(hdev, "SequencerPathSelector", 1);
// Set the Counter2 end event as "path 1" trigger signal
Pylon.DeviceFeatureFromString(hdev, "SequencerTriggerSource", "Counter2End");
// Save the changes
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// Select counter 2 to configure this counter
Pylon.DeviceFeatureFromString(hdev, "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
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
Pylon.DeviceSetIntegerFeature(hdev, "CounterDuration", 2);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// Load sequencer set 1 and specify that this set is to be used
// three times in a row
Pylon.DeviceSetIntegerFeature(hdev, "SequencerSetSelector", 1);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
Pylon.DeviceSetIntegerFeature(hdev, "CounterDuration", 3);
Pylon.DeviceExecuteCommandFeature(hdev, "SequencerSetSave");
// Enable sequencer mode to operate the sequencer
Pylon.DeviceFeatureFromString(hdev, "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*/

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*/

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*/

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*/

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);

You can also use the pylon Viewer to easily set the parameters.