跳转到内容

Sequencer(ace 2 和 boost R)#

相机功能 Sequencer 允许您定义参数设置集,并将其应用于图像序列。

您可以定义多达 32 组参数设置(称为定序器集)。当相机接收到触发信号时,会逐个应用定序器集。

例如,您可以使用 Sequencer 功能,在预配置的图像 ROI曝光时间之间快速切换。

该功能的使用#

定序器模式#

  • 定序器配置模式下,您可以配置定序器,但不能操作。
  • 定序器模式下,您可以操作定序器,但无法配置。

Sequencer 配置模式#

要启用定序器配置模式:

  1. SequencerMode 参数设置为 Off
  2. SequencerConfigurationMode 参数设置为 On

您现在可以配置定序器。

信息

  • 在配置模式下,某些相机参数可能不可用,即已设为只读。请检查 pylon Viewer 中的特征 - 全部窗格,以了解哪些参数可用。

Sequencer 模式#

要启用定序器模式,请将 SequencerMode 参数设置为 On。这将自动禁用定序器配置模式。

定序器现在已准备好接收触发信号并按配置推进

信息

  • 默认情况下,启用定序器模式时,相机会立即加载定序器集 0。要更改此行为,请将 SequencerSetStart 参数设置为所需的开始定序器集。
  • 在定序器模式下,某些相机参数可能不可用,即已设为只读。请检查 pylon Viewer 中的特征 - 全部窗格,以了解哪些参数可用。
  • 在定序器模式下,根据所配置的定序器集计算某些相机参数值:
    • PayloadSize 参数值反映了所配置的最大定序器集的大小。
    • 高速连拍图像中可能出现的最大图像数量,即 AcquisitionBurstFrameCount 参数的最大值,是使用所配置的最大定序器集进行计算。
  • 您可以使用 SequencerSetActive 参数找出当前处于活动状态的定序器集。
  • 如果可用,您可以使用 Sequencer 集激活块来跟踪所使用的定序器集。启用后,每个图像都包含块数据,该数据包括用于图像采集的定序器集的索引号。

定序器集中包含什么?#

定序器集包含以下参数(如果可用):

  • AutoFunctionROIWidtha
  • AutoFunctionROIHeighta
  • AutoFunctionROIOffsetXa
  • AutoFunctionROIOffsetYa
  • BinningHorizontalab
  • BinningVerticalab
  • BinningHorizontalModeab
  • BinningVerticalModeab
  • ExposureTimec
  • Gain
  • Heightad
  • OffsetXad
  • OffsetYad
  • PixelFormata
  • SequencerSetNext
  • SequencerTriggerActivation
  • SequencerTriggerSource
  • Widthad

  1. 不适用于 Basler boost 相机。

  2. 仅存储 FPGA Binning 的设置。

  3. 操作或配置定序器时,Exposure Time 模式预设为 Standard 且无法更改。

  4. 在操作或配置定序器时,Multiple ROI 功能会被禁用。

其他所有相机参数均无法使用 Sequencer 功能控制。

信息

加载或保存定序器集将始终加载或保存以上所有参数,包括您未更改的参数在内。例如,如果仅更改 Exposure Time 并保留所有其他参数的默认值,则所有其他参数的值也将被存储,并在加载时被覆盖

配置 Sequencer#

Basler 建议分两步配置定序器:

  1. 使用所需的相机设置(例如,Exposure Time 或 Image ROI)填充定序器集
  2. 配置定序器集推进,即,定义定序器应如何以及何时从一个定序器集推进到下一个定序器集。

填充 Sequencer 集#

每个定序器集都有一个唯一的索引号,范围从 0 到 31。您可以使用所需的相机设置(例如,Exposure Time 或 Image ROI)填充这些定序器集。

若要填充定序器集:

  1. 确保定序器处于配置模式
  2. 配置要存储在定序器集中的相机参数
  3. SequencerSetSelector 参数设置为所需定序器集的索引号。
  4. 执行 SequencerSetSave 命令。
  5. 对要使用的所有定序器集重复步骤 2 至 4。

示例:假设您想要使用不同的 Image ROI 设置来填充定序器集 0 和 1。为此:

  1. 通过调整宽度高度OffsetXOffsetY参数值创建第一个图像 ROI。
  2. 保存定序器集 0。
  3. 通过选择不同的宽度高度OffsetXOffsetY参数值创建第二个图像 ROI。
  4. 保存定序器集 1。

您随后可以配置定序器集推进,以便相机在两个 Image ROI 之间快速切换。

配置 Sequencer 集推进#

要控制定序器,您必须定义定序器应如何以及何时从一个定序器集推进到下一个定序器集。

对于每个定序器集,您必须定义以下内容:

标准 参数
下一个定序器集应该是什么? SequencerSetNext
定序器应根据哪个触发信号推进到下一个定序器集? SequencerTriggerSource
触发信号何时应被视为有效,例如,在信号的上升沿还是下降沿? SequencerTriggerActivation

如果需要,您可以通过配置所谓的路径,为每个定序器集定义上述内容两次。例如,您可以定义当接收到第 3 行上的触发信号时(= 路径 0),相机应推进到定序器集 1,而当接收到第 4 行上的触发器信号时(= 路径 1),相机推进到定序器集 3。

当所有这些都设置好后,相机就知道何时以及如何在定序器集之间转换,本质上就像一个状态机

Sequencer 集推进独立于帧触发

定序器可以独立于图像采集推进。始终使用在相机接收到帧触发信号时处于活动状态的定序器集来获取图像。

例如,您可以使用输入线路 3 触发定序器集推进,但使用线路 4 触发图像。

如果您想要将定序器推荐与图像采集同步,Basler 建议将定序器 Trigger Source 设置为 ExposureStart

不要将定序器和帧开始 Trigger Source 设置为同一信号源。否则,相机可能会显示不可预测的行为。

若要配置定序器集推进:

  1. 确保定序器处于配置模式
  2. SequencerSetSelector 参数设置为第一个要配置的定序器集。
  3. 执行 SequencerSetLoad 命令。
  4. 为路径 0 配置定序器集推进:
    1. SequencerPathSelector 参数设置为 0。
    2. SequencerSetNext 参数设置为下一个要配置的定序器集。
    3. SequencerTriggerSource 参数设置为应该用来推进到下一个定序器集的源信号。
      您可以选择任何可用的 Trigger Source 信号,例如,Line1ExposureStart
    4. 如果您选择的 Trigger Source 可能是高电平 (1) 或低电平 (0),即 I/O 信号,请设置 SequencerTriggerActivation 参数设置为以下值:
      • RisingEdge(默认值):当源信号上升时,即信号状态从低变高时,定序器会推进。
      • FallingEdge:当源信号下降时,即信号状态从高变低时,定序器会推进。
      • AnyEdge:当源信号下降或上升时,定序器会推进。
      • LevelHigh:如果源信号为电平,定序器会推进。如果加载定序器组时信号电平已经很高,则定序器会立即推进到下一个定序器集。此操作独立于图像采集而执行。
      • LevelLow:如果源信号为电平,定序器会推进。如果加载定序器组时信号电平已经很低,则定序器会立即推进到下一个定序器集。此操作独立于图像采集而执行。
  5. 如果要定义第二个条件,使相机推进到不同的定序器集,则重复步骤 4 并将 SequencerPathSelector 参数设置为 1。
  6. 执行 SequencerSetSave 命令。
  7. SequencerSetSelector 参数设置为下一个要配置的定序器集。
  8. 对所有需要的定序器集重复步骤 3 至 7。

示例#

示例 1:循环遍历定序器集#

假设您想要在图像采集期间循环遍历定序器集 0、1 和 2。每当相机获取图像时,定序器应推进到下一个定序器集。

示例 1 状态图

为此,按如下方式设置定序器:

Sequencer 集选择器 Sequencer 路径选择器 Sequencer Trigger Source Sequencer Trigger Activation 下一个 Sequencer 集
0 0 ExposureStart - 1
1 0 ExposureStart - 2
2 0 ExposureStart - 0

下面概述了如上所示设置定序器会发生什么情况:

  • 启用后,定序器从序列器集 0(默认)开始并等待第一张图像的曝光。
  • 当发生这种情况时,相机会将当前序列器集 0 应用于图像,然后推进到序列器集 1。
  • 当下一次曝光开始时,相机会应用定序器集 1 并推进到定序器集 2。
  • 当下一次曝光开始时,相机会应用定序器集 2 并推进到定序器集 0。
  • 现在,定序器已返回定序器集 0,并重复上述过程。

示例 2:使用一个 Counter 和多条路径#

您可以将定序器设置为每采集第 n 张图像时推进到特定的定序器集。

这涉及使用 Counter 功能和配置多条路径。

假设您想要在图像采集期间在定序器集 0 和 1 之间交替,但在采集第一张图像及每采集第 10 张图像时,应该使用定序器集 2。

示例 2 状态图

为此:

  1. SequencerStartSet 参数设置为 2。
  2. Configure counter 1 as follows:

    • CounterDuration = 10
    • CounterEventSource = ExposureStart
    • CounterResetSource = Counter1End
  3. 如下表所示设置定序器。

Sequencer 集选择器 Sequencer 路径选择器 Sequencer Trigger Source Sequencer Trigger Activation 下一个 Sequencer 集
0 0 ExposureActive FallingEdge 1
0 1 Counter1End - 2
1 0 ExposureActive FallingEdge 0
1 1 Counter1End - 2
2 0 ExposureActive FallingEdge 0

信息

  • 在开始图像采集之前,确保计数器已复位。否则就不算数。
  • 在上面的配置中,请注意计数器是使用曝光开始信号进行触发,而定序器集推进是使用具有下降沿激活的曝光激活信号进行触发。这有助于避免路径 0 和路径 1 之间的时序冲突。

下面概述了如上所示设置定序器会发生什么情况:

  • 启用后,定序器从序列器集 2 开始并等待第一张图像的曝光。
  • 当第一次曝光开始时,Counter 1 从 0 增加到 1,因为它被配置为进行曝光开始事件计数。
  • 当第一次曝光结束时,即,当曝光激活信号下降时,定序器会推进到定序器集 0。
  • 对于接下来的 8 次图像采集,定序器在定序器集 0 和定序器集 1 之间交替,计数器值继续增加。每当曝光结束时,即当曝光激活信号下降时,定序器就会推进。
  • 当第 10 张图像开始曝光时,计数器达到最大值 (CounterDuration = 10),自行复位,然后相机发送 Counter 1 结束信号。这使得定序器在路径 0 触发条件(ExposureActiveFallingEdge)生效之前推进到路径 1 上的定序器集 2。
  • 现在,定序器已返回定序器集 2,并重复上述过程。

示例 3:运行时选择#

您可以设置定序器以根据需要在运行时选择定序器集。

这涉及将多个 I/O 线路配置为 Trigger Source 并使用 SequencerTriggerActivation 参数的 LevelLowLevelHigh 选项。

假设您想要使用输入线路 2 和 3 的信号状态(0 = 低电平,1 = 高电平)来控制定序器集选择。根据线路的状态,您希望定序器按如下方式操作:

信号状态线路 2 信号状态线路 3 精选集
0 0 0
0 1 1
1 0 2
1 1 3

为此,按如下方式设置定序器:

Sequencer 集选择器 Sequencer 路径选择器 Sequencer Trigger Source Sequencer Trigger Activation 下一个 Sequencer 集
0 0 Line3 LineHigh 1
0 1 Line2 LineHigh 2
1 0 Line3 LineLow 0
1 1 Line2 LineHigh 3
2 0 Line3 LineHigh 3
2 1 Line2 LineLow 0
3 0 Line3 LineLow 2
3 1 Line2 LineLow 1

下面概述了如上所示设置定序器会发生什么情况:

  • 只要两个信号都为低电平,线路 2 和线路 3 上的触发器就会保持不活动状态,因为它们的 Trigger Activation 都设置为 LineHigh。请参阅表的第 1 行和第 2 行。因此,定序器会停留于定序器集 0。
  • 当线路 3 上的信号上升时,LineHigh 会激活,定序器立即从定序器集 0 推进到定序器集 1。请参阅表的第 1 行。然后,定序器会停留于定序器集 1,因为线路 2 电平仍然很低。
  • 当线路 2 上的信号也上升时,定序器会从定序器集 1 推进到定序器集 3。请参阅表的第 4 行。
  • 当线路 2 上的信号下降时,定序器会推进回到定序器集 1。请参阅表的第 8 行。
  • 当线路 3 上的信号也下降时,定序器会推进回到定序器集 0。请参阅表的第 3 行。

信息

  • 如果您同时更改两条线路上的 I/O 信号,这也有效,比方说,将两条 I/O 线路的状态从高切换到低。
  • 图像采集必须单独触发。当 I/O Line Status 改变时,定序器可能在帧之间推进多次。

示例代码#

// ** Populating 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);
// ** Configuring sequencer set advance **
// Assume you want to alternate between sequencer sets 0 and 1 using input line 3
// Enable sequencer configuration mode
camera.SequencerMode.SetValue(SequencerMode_Off);
camera.SequencerConfigurationMode.SetValue(SequencerConfigurationMode_On);
// Set the start set to set 0
camera.SequencerSetStart.SetValue(0);
// Load and configure sequencer set 0
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetLoad.Execute();
camera.SequencerPathSelector.SetValue(0);
camera.SequencerSetNext.SetValue(1);
camera.SequencerTriggerSource.SetValue(SequencerTriggerSource_Line3);
camera.SequencerTriggerActivation.SetValue(SequencerTriggerActivation_RisingEdge);
// Save the changes
camera.SequencerSetSave.Execute();
// Load and configure sequencer set 1
camera.SequencerSetSelector.SetValue(1);
camera.SequencerSetLoad.Execute();
camera.SequencerPathSelector.SetValue(0);
camera.SequencerSetNext.SetValue(2);
camera.SequencerTriggerSource.SetValue(SequencerTriggerSource_Line3);
camera.SequencerTriggerActivation.SetValue(SequencerTriggerActivation_RisingEdge);
// Save the changes
camera.SequencerSetSave.Execute();
// Enable sequencer mode to operate the sequencer
camera.SequencerMode.SetValue(SequencerMode_On);
INodeMap& nodemap = camera.GetNodeMap();
// ** Populating 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");
// ** Configuring sequencer set advance **
// Assume you want to alternate between sequencer sets 0 and 1 using input line 3
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Set the start set to set 0
CIntegerParameter(nodemap, "SequencerSetStart").SetValue(0);
// Load and configure sequencer set 0
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(0);
CIntegerParameter(nodemap, "SequencerSetNext").SetValue(1);
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("Line3");
CEnumParameter(nodemap, "SequencerTriggerActivation").SetValue("RisingEdge");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Load and configure sequencer set 1
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(1);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(0);
CIntegerParameter(nodemap, "SequencerSetNext").SetValue(2);
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("Line3");
CEnumParameter(nodemap, "SequencerTriggerActivation").SetValue("RisingEdge");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Populating 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);
// ** Configuring sequencer set advance **
// Assume you want to alternate between sequencer sets 0 and 1 using input line 3
// Enable sequencer configuration mode
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.Off);
camera.Parameters[PLCamera.SequencerConfigurationMode].SetValue(PLCamera.SequencerConfigurationMode.On);
// Set the start set to set 0
camera.Parameters[PLCamera.SequencerSetStart].SetValue(0);
// Load and configure sequencer set 0
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetNext].SetValue(1);
camera.Parameters[PLCamera.SequencerTriggerSource].SetValue(PLCamera.SequencerTriggerSource.Line3);
camera.Parameters[PLCamera.SequencerTriggerActivation].SetValue(PLCamera.SequencerTriggerActivation.RisingEdge);
// Save the changes
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Load and configure sequencer set 1
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(1);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetNext].SetValue(2);
camera.Parameters[PLCamera.SequencerTriggerSource].SetValue(PLCamera.SequencerTriggerSource.Line3);
camera.Parameters[PLCamera.SequencerTriggerActivation].SetValue(PLCamera.SequencerTriggerActivation.RisingEdge);
// Save the changes
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 */
/* ** Populating 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);
/* ** Configuring sequencer set advance ** */
/* Assume you want to alternate between sequencer sets 0 and 1 using input line 3 */
/* Enable sequencer configuration mode */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "Off");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
CHECK(errRes);
/* Set the start set to set 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetStart", 0);
CHECK(errRes);
/* Load and configure sequencer set 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 0);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetNext", 1);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerSource", "Line3");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerActivation", "RisingEdge");
CHECK(errRes);
/* Save the changes */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Load and configure sequencer set 1 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 0);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetNext", 2);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerSource", "Line3");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerActivation", "RisingEdge");
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);

您也可以使用 pylon Viewer 轻松设置参数。