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

Sequencer (ace 2 和 boost R)#

「Sequencer 」相機功能可讓您定義一組參數設定,並將其套用至一連串影像。

您可以定義最多 32 組參數設定,稱為「序列器組」。當相機接收到觸發訊號時,便會依序套用各組序列器組。

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

使用功能#

Sequencer 模式#

  • 在音序器設定模式下,您可以設定音序器,但無法操作它。
  • 在音序器模式下,您可以操作音序器,但無法進行設定。

Sequencer 設定模式#

要啟用音序器設定模式:

  1. 將相機中的 SequencerMode 參數設為 Off.
  2. 將相機中的 SequencerConfigurationMode 參數設為 On.

現在您可以開始設定音序器了。

資訊

  • 在設定模式下,某些攝影機參數可能無法使用,也就是說,這些參數被設定為唯讀。請檢查 pylon Viewer 中的「功能 - 全部」窗格,以確認哪些參數可供使用。

Sequencer 模式#

若要啟用音序器模式,請將 SequencerMode 參數設為 On. 這會自動停用音序器設定模式。

序列器現已準備就緒,可接收觸發訊號並依照設定進行進程。

資訊

  • 預設情況下,啟用序列器模式時,相機會立即載入序列器組 0。若要變更此行為,請設定 SequencerSetStart 將參數設定為所需的起始集。
  • 在序列器模式下,某些相機參數可能無法使用,也就是說,這些參數已被設為唯讀。請查看 pylon Viewer 中的「功能 - 全部」窗格,以確認哪些參數可用。
  • 在序列器模式下,某些相機參數值會根據所設定的序列器組進行計算:
    • 當 PayloadSize 此參數值反映所配置的最大序列器集的大小。
    • 連拍中可能包含的圖片最大數量,亦即 AcquisitionBurstFrameCount 該參數是根據所配置的最大序列器集來計算的。
  • 您可以使用 SequencerSetActive 此參數用於查明目前哪組音序器處於活躍狀態。
  • 若功能可用,您可以使用「Sequencer 」的「Set Active」區塊來追蹤所使用的序列器集。啟用此功能後,每張影像將包含區塊資料,其中包含用於影像擷取的序列器集索引號碼。
  • 在某些攝影機上,啟用序列器模式會停用重疊式影像擷取功能,從而降低攝影機的最大幀率。此情況適用於本表中所有在「重疊式影像擷取可用性」欄位中標示為「僅當攝影機設定為自由運行影像擷取模式時」的攝影機。

Sequencer 套組裡有哪些內容?#

如果可用,Sequencer set 包含下列參數:

  • 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 像素合併的設定。

  3. 在操作或設定序列器時,曝光時間模式預設為「標準」或「一般」,且無法變更。

  4. 在操作或設定音序器時, Multiple ROI 此功能將被停用。

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

資訊

載入或儲存序列器設定時,系統會一併載入或儲存上述所有參數,即使是您未曾變更的參數亦然。例如,若您僅變更了曝光時間,而將其他所有參數維持預設值,系統仍會儲存所有其他參數的值——並在載入時將其覆寫。

設定 Sequencer#

Basler 建議分兩個步驟來設定序列器:

  1. 請在序列器組中填入您所需的相機設定(例如:曝光時間或影像感測區域)。
  2. 設定序列器組的切換方式,也就是定義序列器應如何以及何時從一個組切換至下一個組。

填入「Sequencer 」集合#

每個序列器組都有一個唯一的索引號,範圍從 0 到 31。您可以將您所需的相機設定(例如:曝光時間或影像 ROI)填入這些組中。

要填入音序器套組:

  1. 確保 Sequencer 處於 configuration mode。
  2. 設定您要儲存至序列器組中的攝影機參數。
  3. 將相機中的 SequencerSetSelector 參數,其值為所需集合的索引號。
  4. 執行 SequencerSetSave 指令。
  5. 對您想要使用的所有集重複步驟 2 到 4。

範例:假設您想為資料集 0 和 1 設定不同的影像 ROI參數。操作步驟如下:

  1. 透過調整以下項目來建立第一個 Image ROI: Width, Height, OffsetX以及 OffsetY 參數數值。
  2. 儲存設定集 0。
  3. 透過為以下項目選擇不同的數值來建立第二個 Image ROI: Width, Height, OffsetX以及 OffsetY 參數。
  4. 儲存組 1。

接著,您可以設定序列器設定的切換速度,讓相機能在兩個影像 ROI 之間快速切換。

設定「Sequencer 」的「Set Advance」功能#

要控制音序器,您必須定義音序器應如何以及何時從一個音序集切換到下一個音序集。

對於每個序列器組,您必須定義以下內容:

標準 參數
下一組應該是什麼呢? SequencerSetNext
序列器應在收到哪個觸發訊號時,才前進到下一組? SequencerTriggerSource
何時應將觸發訊號視為有效?例如,是在訊號的上升沿還是下降沿? SequencerTriggerActivation

如有需要,您可以透過設定所謂的「路徑」,針對每組設定分別定義上述內容兩次。例如,您可以設定當接收到第 3 線的觸發訊號時(= 路徑 0),攝影機應切換至第 1 組設定;但當接收到第 4 線的觸發訊號時(= 路徑 1),則應切換至第 3 組設定。

當所有設定都完成後,攝影機便能精確地知道何時以及如何在各組序列器之間切換,其運作方式本質上就像一台狀態機。

Sequencer 「設定進度」與「幀觸發」互不相關

序列器可獨立於影像擷取而進行進程。影像總是透過在相機接收到幀觸發訊號時所處的「活躍集」來擷取。

舉例來說,您可以使用輸入線 3 觸發音序器組的進度,但使用輸入線 4 觸發影像。

如果您想要 同步 若要讓序列器配合影像擷取而前進,Basler 建議將序列器的觸發來源設定為 ExposureStart.

請勿將序列器與幀起始觸發來源設定為同一訊號來源。否則,攝影機可能會出現無法預期的行為。

要設定音序器步進進度:

  1. 確保 Sequencer 處於 configuration mode。
  2. 將相機中的 SequencerSetSelector 參數設定為 first 待設定的序列器。
  3. 執行 SequencerSetLoad 指令。
  4. 設定路徑 0 的序列器組進給:
    1. 將相機中的 SequencerPathSelector 參數設為 0。
    2. 將相機中的 SequencerSetNext 將此參數套用至下一組待設定的參數。
    3. 將相機中的 SequencerTriggerSource 源訊號的參數,該參數應用於跳至下一組。
      您可以選擇任何可用的 觸發來源 訊號,例如: Line1 或 ExposureStart.
    4. 若您選取的觸發來源可呈現高電平 (1) 或低電平 (0),即 I/O 訊號,請設定 SequencerTriggerActivation 參數設定為以下值之一:
      • RisingEdge (預設):當來源訊號 上升時 Timer 即會啟動,亦即信號狀態從低電位變為高電位時。
      • FallingEdge: 當來源訊號 下降時 Timer 即會啟動,亦即信號狀態從高電位變為低電位時。
      • 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 曝光開始 - 1
1 0 曝光開始 - 2
2 0 曝光開始 - 0

以下概述了若您依照上圖所示設定音序器,將會發生什麼情況:

  • 啟用此功能後,序列器將從組 0(預設)開始,並等待第一張影像的曝光完成。
  • 當這種情況發生時,相機會將當前的序列器設定 0 套用至影像,然後切換至設定 1。
  • 當下一張曝光開始時,相機將套用「組 1」的設定,並切換至「組 2」。
  • 當下一張曝光開始時,相機將套用「組別 2」的設定,並切換至「組別 0」。
  • 現在,序列器已回到第 0 組,上述過程將重複進行。

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

您可以將序列器設定為每擷取第 n 張影像時,便跳轉至特定組別。

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

假設您希望在影像擷取過程中交替使用序列器組 0 和 1,但對於第一張影像以及每第10 張影像,應使用序列器組 2。

範例 2 狀態圖

為達成此目的:

  1. 將相機中的 SequencerStartSet 參數設為 2。
  2. 請依照以下方式設定計數器 1:

    • CounterDuration = 10
    • CounterEventSource = ExposureStart
    • CounterResetSource = Counter1End
  3. 請依照下表所示設定音序器。

Sequencer 集合選擇器 Sequencer 路徑選擇器 Sequencer Trigger Source Sequencer Trigger Activation Sequencer 設定下一項
0 0 ExposureActive FallingEdge 1
0 1 計數器1結束 - 2
1 0 ExposureActive FallingEdge 0
1 1 計數器1結束 - 2
2 0 ExposureActive FallingEdge 0

資訊

  • 在開始進行影像擷取之前,請務必將計數器重置。否則,計數器將無法進行計數。
  • 請注意,在上述配置中,計數器是透過「曝光開始」訊號觸發,而序列器設定進階則透過「曝光有效」訊號(以落沿觸發)來觸發。此設計有助於避免路徑 0 與路徑 1 之間的時序衝突。

以下概述了若您依照上圖所示設定音序器,將會發生什麼情況:

  • 啟用此功能後,序列器將從第 2 組開始運作,並等待第一張影像曝光完成。
  • 當首次曝光開始時,Counter 1 會從 0 增加到 1,因為它已設定為計數「曝光開始」事件。
  • 當第一次曝光結束時,也就是當「曝光有效」訊號下降時,序列器會向前推進至設定值 0。
  • 在接下來的 8 次影像擷取中,序列控制器會在組 0 和組 1 之間交替切換,而計數器則持續遞增。每當一次曝光結束時,也就是當「曝光有效」訊號變為低電平時,序列控制器便會向前推進。
  • 當那 10 項內幕被揭露時th 影像開始播放時,計數器達到最大值(CounterDuration = 10),便會重置自身,而攝影機則會發出「Counter 1 End」訊號。這會使序列器跳轉至路徑 1 的設定 2 之前 路徑 0 的觸發條件 (ExposureActive, FallingEdge) 即告生效。
  • 現在,序列器已返回至第 2 組,上述流程將重複進行。

範例 3:執行時選擇#

您可以設定音序器,使其能在執行時根據需要選取音序器組。

這涉及將多條 I/O 線配置為觸發源,並使用 LevelLow 進行明確的生命週期管理即呼叫 LevelHigh 的選項 SequencerTriggerActivation 參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。

假設您希望透過輸入線 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 第3行 LineHigh 1
0 1 第2行 LineHigh 2
1 0 第3行 LineLow 0
1 1 第2行 LineHigh 3
2 0 第3行 LineHigh 3
2 1 第2行 LineLow 0
3 0 第3行 LineLow 2
3 1 第2行 LineLow 1

以下概述了若您依照上圖所示設定音序器,將會發生什麼情況:

  • 只要這兩組訊號均為低電平,第 2 線和第 3 線上的觸發器便保持非活躍狀態,因為其觸發設定為 LineHigh. 請參閱表格的第 1 行和第 2 行。因此,序列器仍維持在設定 0。
  • 當第 3 線的訊號上升時,該 LineHigh 觸發發生後,序列器會立即從設定 0 切換至設定 1。請參閱表格第 1 行。接著,由於第 2 行仍為低電平,序列器便維持在設定 1。
  • 當第 2 線的訊號也上升時,序列器便會從組 1 進到組 3。請參閱表格第 4 行。
  • 當第 2 線的訊號變為低電平時,序列器將回退至第 1 組。請參閱表格第 8 行。
  • 當第 3 線路上的訊號也下降時,序列器會回退至設定 0。請參閱表格第 3 行。

資訊

  • 若您同時變更兩條線路上的 I/O 訊號,例如將兩條 I/O 線路的狀態從高電平切換為低電平,此方法同樣有效。
  • 影像擷取必須另行觸發。當 I/O 線狀態發生變化時,序列器可能會在相鄰幀之間前進多次。

範例程式碼#

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

您也可以 use the pylon Viewer 來輕鬆設定參數。