跳至內容
測試伺服器
開發伺服器

Sequencer (ace 2 and boost R)#

透過 Sequencer camera feature,您可以定義參數設定集,並將其套用於一系列的影像。

您可以定義最多 32 個參數設定集(稱為 Sequencer set)。當相機接收到觸發訊號時,會依序套用各個 Sequencer set。

例如,您可以使用 Sequencer 功能在預先設定的 Image ROI 或 Exposure Time 之間快速切換。

使用此功能#

Sequencer 模式#

  • 在 sequencer configuration mode 中,您可以設定 Sequencer,但無法運作它。
  • 在 sequencer mode 中,您可以運作 Sequencer,但無法進行設定。

Sequencer 配置模式#

若要啟用 sequencer configuration mode:

  1. 將 SequencerMode 參數設為 Off.
  2. 將 SequencerConfigurationMode 參數設為 On.

您現在可以 configure Sequencer。

Sequencer 模式#

若要啟用 sequencer mode,請將 SequencerMode 參數設為 On。這會自動停用 sequencer configuration mode。

Sequencer 現在已準備好接收觸發訊號並按設定進行 advance。

資訊

  • 根據預設,當啟用 sequencer mode 時,相機會立即載入 Sequencer set 0。若要變更此行為,請將 SequencerSetStart 參數設為所需的起始集合。
  • 在 sequencer mode 下,某些相機參數可能無法使用(即設為唯讀)。請檢查 pylon Viewer 中的 Features - All 窗格,以確認哪些參數可用。
  • 在 sequencer mode 下,某些相機參數值是根據所設定的 Sequencer set 計算得出的:
    • 影像 PayloadSize 參數值反映了所設定之最大 Sequencer set 的大小。
    • 單次連拍中的最大可能影像數量(即 AcquisitionBurstFrameCount 參數的最大值)是使用所設定的最大 Sequencer set 計算得出的。
  • 您可以使用 SequencerSetActive 參數以找出目前作用中的 Sequencer set。
  • 如果可用,您可以使用 Sequencer Set Active chunk 來追蹤所使用的 Sequencer set。啟用後,每個影像都會包含區塊資料,其中包含用於影像擷取的 Sequencer set 索引編號。
  • 在某些相機上,啟用 sequencer mode 會停用 overlapping image acquisition,因此會降低相機的最大影格率。這適用於 this table 中「Overlapping Image Acquisition Availability」指定為「Only when the camera is configured for free run image acquisition」的所有相機。

Sequencer Set 包含哪些內容?#

如果可用,Sequencer sets 包含以下參數:

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

  1. 不適用於 Basler ace 2 V 與 boost 相機。

  2. 僅儲存 FPGA binning 的設定。

  3. 在運作或設定 Sequencer 時,exposure time mode 會預設為 Standard 或 Common,且無法變更。

  4. 當操作或設定 Sequencer 時,Multiple ROI 功能將會停用。

所有其他相機參數均無法透過 Sequencer 功能來控制。

資訊

載入或儲存 Sequencer Set 時,一定會載入或儲存上述的所有參數,甚至是您未曾變更的參數。例如,如果您僅變更了 Exposure Time 並保持所有其他參數為預設值,則所有其他參數的值也會一併儲存,並在載入時遭到覆寫。

設定 Sequencer#

Basler 建議透過兩個步驟來設定 Sequencer:

  1. 填入 Sequencer Set 以及您所需的相機設定(例如 Exposure Time 或 Image ROI)。
  2. 設定 Sequencer Set Advance,也就是定義 Sequencer 應該如何以及何時從一個 Set 切換到下一個 Set。

填入 Sequencer 設定#

每個 Sequencer Set 都有一個唯一的索引編號,範圍從 0 到 31。您可以使用所需的相機設定(例如 Exposure Time 或 Image ROI)來填入這些 Set。

若要填入 Sequencer Set:

  1. 確保 Sequencer 處於組態模式。
  2. 設定您想要儲存在 Sequencer Set 中的相機參數。
  3. 將 SequencerSetSelector 將參數設為所需 Set 的索引編號。
  4. 執行 SequencerSetSave 命令。
  5. 針對要使用的所有 set 重複步驟 2 到 4。

範例:假設您想要在 Set 0 與 Set 1 中填入不同的 Image ROI 設定。請執行以下操作:

  1. 透過調整以下項目來建立第一個 Image ROI: Width, Height, OffsetX的狀態,以及 OffsetY parameter values,來決定最後擷取之影像的 payload 大小與壓縮比。
  2. 儲存 Set 0。
  3. 透過為以下項目選擇不同的值來建立第二個 Image ROI: Width, Height, OffsetX的狀態,以及 OffsetY 參數的狀態。
  4. 儲存 Set 1。

接著您可以設定 Sequencer Set Advance,讓相機能夠在兩個 Image ROI 之間快速切換。

配置 Sequencer 設定進階#

若要控制 Sequencer,您必須定義 Sequencer 應該如何以及何時從一個 Set 切換到下一個 Set。

對於每個 Sequencer Set,您必須定義下列項目:

條件 Property
下一個 Set 應該是什麼? SequencerSetNext
應該依據哪一個觸發訊號讓 Sequencer 切換到下一個 Set? SequencerTriggerSource
何時應將觸發訊號視為有效,例如在訊號的上升緣或下降緣? SequencerTriggerActivation

如有需要,您可以為每個 Set 設定所謂的路徑 (paths),藉此將上述項目定義兩次。例如,您可以定義當收到來自 Line 3 的觸發訊號時相機應切換至 Set 1(= 路徑 0),但當收到來自 Line 4 的觸發訊號時則切換至 Set 3(= 路徑 1)。

完成這些設定後,相機就會精確知道何時以及如何在 Sequencer Set 之間進行轉態,其運作方式基本上就像一個狀態機 (state machine)。

Sequencer Set Advance 獨立於影格觸發

Sequencer 可以獨立於影像擷取進行切換。影像一定會使用相機收到影格觸發訊號時處於作用中的 Set 進行擷取。

例如,您可以使用輸入線 3 來觸發 Sequencer Set Advance,但使用線 4 來觸發影像。

如果您想要 同步 Sequencer 隨著影像擷取進行推進,Basler 建議將 Sequencer Trigger Source 設定為 ExposureStart.

請不要將 Sequencer 和 Frame Start 的 Trigger Source 設定為相同的訊號來源。否則,相機可能會出現無法預期的行為。

若要設定 Sequencer Set Advance:

  1. 確保 Sequencer 處於組態模式。
  2. 將 SequencerSetSelector 參數設為 第一個 要設定的 Sequencer Set。
  3. 執行 SequencerSetLoad 命令。
  4. 為路徑 0 設定 Sequencer Set Advance:
    1. 將 SequencerPathSelector 參數設為 0。
    2. 將 SequencerSetNext 參數至下一個要設定的 Set。
    3. 將 SequencerTriggerSource 參數至應用於推進至下一個 Set 的來源訊號。
      您可以選擇任何可用的 觸發來源 訊號,例如 Line1 或 ExposureStart.
    4. 如果您選擇了可以為 High (1) 或 Low (0) 的 Trigger Source(也就是 I/O 訊號),請將 SequencerTriggerActivation 參數設為下列其中一個值:
      • RisingEdge (預設):當來源訊號 上升,亦即當信號狀態由低變高時。
      • FallingEdge:當來源訊號 下降,亦即當信號狀態由高變低時。
      • AnyEdge:當來源訊號 下降或上升.
      • LevelHigh:當來源訊號為 High。如果在載入 Sequencer Set 時訊號已經為 High,Sequencer 會立即推進至下一個 Set。這與影像擷取無關。
      • LevelLow:當來源訊號為 Low。如果在載入 Sequencer Set 時訊號已經為 Low,Sequencer 會立即推進至下一個 Set。這與影像擷取無關。
  5. 如果您想要定義第二個條件,以讓相機推進至不同的 Set,請使用以下參數重複步驟 4: SequencerPathSelector 參數設為 1。
  6. 執行 SequencerSetSave 命令。
  7. 將 SequencerSetSelector 參數設為 下一個 要設定的 Sequencer Set。
  8. 針對所有所需的 Set 重複步驟 3 到 7。

範例#

範例 1:循環切換集合#

假設您想要在影像擷取期間循環使用 Sequencer Set 0、1 和 2。每當相機擷取影像時,Sequencer 都應推進至下一個 Set。

範例 1 狀態圖

為此,請按照以下方式設定 Sequencer:

Sequencer Set Selector Sequencer Path Selector Sequencer Trigger Source Sequencer Trigger Activation Sequencer Set Next
0 0 ExposureStart - 1
1 0 ExposureStart - 2
2 0 ExposureStart - 0

以下概述了如果您如上所示設定 Sequencer 將會發生的情況:

  • 啟用後,Sequencer 會從 set 0(預設)開始,並等待第一張影像的曝光。
  • 發生這種情況時,相機將當前的 Sequencer set 0 應用於影像,然後前進到 set 1。
  • 當下一次曝光開始時,相機套用 set 1 並前進到 set 2。
  • 當下一次曝光開始時,相機套用 set 2 並前進到 set 0。
  • 此時,Sequencer 已回到 set 0,並且重複上述過程。

範例 2:使用 Counter 與多重路徑#

您可以將 Sequencer 設定為在每隔 nth 張影像擷取時前進到特定的 set。

這涉及使用 Counter 功能並設定多個路徑。

假設您希望在影像擷取期間在 Sequencer set 0 和 set 1 之間交替,但對於第一張以及每隔 10th 張影像,應使用 Sequencer set 2。

範例 2 狀態圖

若要達到此目的:

  1. 將 SequencerStartSet Property 設定為 2。
  2. 請按下述方式設定 counter 1:

    • CounterDuration = 10
    • CounterEventSource = ExposureStart
    • CounterResetSource = Counter1End
  3. 請按照下表所示設定 Sequencer。

Sequencer Set Selector Sequencer Path Selector Sequencer Trigger Source Sequencer Trigger Activation Sequencer Set Next
0 0 ExposureActive FallingEdge 1
0 1 Counter1End - 2
1 0 ExposureActive FallingEdge 0
1 1 Counter1End - 2
2 0 ExposureActive FallingEdge 0

資訊

  • 請確保在開始影像擷取之前將 counter reset。否則,它將無法計數。
  • 在上述設定中,請注意,counter 是使用 Exposure Start 訊號觸發的,而 Sequencer set 前進則是使用具有下降緣觸發 (falling edge activation) 的 Exposure Active 訊號觸發的。這有助於避免路徑 0 與路徑 1 之間發生時序衝突。

以下概述了如果您如上所示設定 Sequencer 將會發生的情況:

  • 啟用後,Sequencer 會從 set 2 開始,並等待第一張影像的曝光。
  • 當第一次曝光開始時,Counter 1 從 0 增加到 1,因為它被設定為對 Exposure Start 事件進行計數。
  • 當第一次曝光結束時(即當 Exposure Active 訊號下降時),Sequencer 會前進到 set 0。
  • 在接下來的 8 次影像擷取中,Sequencer 在 set 0 和 set 1 之間交替,並且 counter 繼續增加。每當曝光結束(即 Exposure Active 訊號下降)時,Sequencer 就會前進。
  • 當第 10 次曝光時個 影像開始時,Counter 會達到其最大值(CounterDuration = 10),並會自動重設,隨後相機將發送 Counter 1 End 訊號。這會使 Sequencer 前進至路徑 1 上的設定 2 在 路徑 0 的觸發條件(ExposureActive, FallingEdge)變為有效。
  • 此時,Sequencer 已返回設定 2,並且重複上述過程。

範例 3:在執行階段進行選擇#

您可以根據需要在執行階段設定 Sequencer 以選取 Sequencer Set。

這包括將多個 I/O 線路設定為 Trigger Source,並使用 LevelLow 和 LevelHigh 的選項 SequencerTriggerActivation 參數的值。

假設您希望使用輸入線路 2 和 3 的訊號狀態(0 = 低,1 = 高)來控制 Sequencer Set 的選取。根據線路的狀態,您希望 Sequencer 的運作方式如下:

線路 2 訊號狀態 線路 3 訊號狀態 選取的 Set
0 0 0
0 1 1
1 0 2
1 1 3

為此,請按照以下方式設定 Sequencer:

Sequencer Set Selector Sequencer Path Selector Sequencer Trigger Source Sequencer Trigger Activation Sequencer Set Next
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

以下概述了如果您如上所示設定 Sequencer 將會發生的情況:

  • 只要兩個訊號均為低電平,Line 2 和 Line 3 上的觸發器就會保持未啟動狀態,因為它們的 Trigger Activation 設定為 LineHigh。請參閱表中的第 1 行和第 2 行。因此,Sequencer 將停留在設定 0。
  • 當 Line 3 上的訊號上升時, LineHigh 啟動隨之發生,且 Sequencer 立即從設定 0 前進至設定 1。請參閱表中的第 1 行。然後,Sequencer 將停留在設定 1,因為 Line 2 仍然保持低電平。
  • 當 Line 2 上的訊號也上升時,Sequencer 從設定 1 前進至設定 3。請參閱表中的第 4 行。
  • 當 Line 2 上的訊號下降時,Sequencer 退回至設定 1。請參閱表中的第 8 行。
  • 當 Line 3 上的訊號也下降時,Sequencer 退回至設定 0。請參閱表中的第 3 行。

資訊

  • 如果您同時更改兩條線路上的 I/O 訊號(例如將兩條 I/O 線路的狀態從高切換為低),此功能同樣適用。
  • 影像擷取必須分開觸發。當 I/O Line Status 變更時,Sequencer 可能會在畫格之間推進多次。

範例程式碼#

// ** 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(0);
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(0);
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(0);
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", 0);
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);
# ** Populating the Sequencer Sets **
# Enable sequencer configuration mode
camera.SequencerMode.Value = "Off"
camera.SequencerConfigurationMode.Value = "On"
# Configure parameters to be stored in the first sequencer set
camera.Width.Value = 600
camera.Height.Value = 300
# Select sequencer set 0 and save the parameter values
camera.SequencerSetSelector.Value = 0
camera.SequencerSetSave.Execute()
# Configure parameters to be stored in the second sequencer set
camera.Width.Value = 800
camera.Height.Value = 600
# Select sequencer set 1 and save the parameter values
camera.SequencerSetSelector.Value = 1
camera.SequencerSetSave.Execute()
# Enable sequencer mode to operate the sequencer
camera.SequencerMode.Value = "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.Value = "Off"
camera.SequencerConfigurationMode.Value = "On"
# Set the start set to set 0
camera.SequencerSetStart.Value = 0
# Load and configure sequencer set 0
camera.SequencerSetSelector.Value = 0
camera.SequencerSetLoad.Execute()
camera.SequencerPathSelector.Value = 0
camera.SequencerSetNext.Value = 1
camera.SequencerTriggerSource.Value = "Line3"
camera.SequencerTriggerActivation.Value = "RisingEdge"
# Save the changes
camera.SequencerSetSave.Execute()
# Load and configure sequencer set 1
camera.SequencerSetSelector.Value = 1
camera.SequencerSetLoad.Execute()
camera.SequencerPathSelector.Value = 0
camera.SequencerSetNext.Value = 0
camera.SequencerTriggerSource.Value = "Line3"
camera.SequencerTriggerActivation.Value = "RisingEdge"
# Save the changes
camera.SequencerSetSave.Execute()
# Enable sequencer mode to operate the sequencer
camera.SequencerMode.Value = "On"

您也可以使用 pylon Viewer 來輕鬆設定參數。