Sequencer (ace 2 and boost R)#
您可以定義最多 32 個參數設定集(稱為 Sequencer set)。當相機接收到觸發訊號時,會依序套用各個 Sequencer set。
例如,您可以使用 Sequencer 功能在預先設定的 Image ROI 或 Exposure Time 之間快速切換。
使用此功能#
Sequencer 模式#
- 在 sequencer configuration mode 中,您可以設定 Sequencer,但無法運作它。
- 在 sequencer mode 中,您可以運作 Sequencer,但無法進行設定。
Sequencer 配置模式#
若要啟用 sequencer configuration mode:
- 將
SequencerMode參數設為Off. - 將
SequencerConfigurationMode參數設為On.
您現在可以 configure Sequencer。
資訊
- 在設定模式下,某些相機參數可能無法使用(即設為唯讀)。請檢查 pylon Viewer 中的 Features - All 窗格,以確認哪些參數可用。
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 包含以下參數:
AutoFunctionROIWidthaAutoFunctionROIHeightaAutoFunctionROIOffsetXaAutoFunctionROIOffsetYaBinningHorizontalabBinningVerticalabBinningHorizontalModeabBinningVerticalModeabBslFlatFieldCorrectionModeBslFlatFieldCorrectionSetIndexExposureTimecGainHeightadOffsetXadOffsetYadPixelFormataSequencerSetNextSequencerTriggerActivationSequencerTriggerSourceWidthad
-
不適用於 Basler ace 2 V 與 boost 相機。
-
僅儲存 FPGA binning 的設定。
-
在運作或設定 Sequencer 時,exposure time mode 會預設為 Standard 或 Common,且無法變更。
-
當操作或設定 Sequencer 時,Multiple ROI 功能將會停用。
所有其他相機參數均無法透過 Sequencer 功能來控制。
資訊
載入或儲存 Sequencer Set 時,一定會載入或儲存上述的所有參數,甚至是您未曾變更的參數。例如,如果您僅變更了 Exposure Time 並保持所有其他參數為預設值,則所有其他參數的值也會一併儲存,並在載入時遭到覆寫。
設定 Sequencer#
Basler 建議透過兩個步驟來設定 Sequencer:
- 填入 Sequencer Set 以及您所需的相機設定(例如 Exposure Time 或 Image ROI)。
- 設定 Sequencer Set Advance,也就是定義 Sequencer 應該如何以及何時從一個 Set 切換到下一個 Set。
填入 Sequencer 設定#
每個 Sequencer Set 都有一個唯一的索引編號,範圍從 0 到 31。您可以使用所需的相機設定(例如 Exposure Time 或 Image ROI)來填入這些 Set。
若要填入 Sequencer Set:
- 確保 Sequencer 處於組態模式。
- 設定您想要儲存在 Sequencer Set 中的相機參數。
- 將
SequencerSetSelector將參數設為所需 Set 的索引編號。 - 執行
SequencerSetSave命令。 - 針對要使用的所有 set 重複步驟 2 到 4。
範例:假設您想要在 Set 0 與 Set 1 中填入不同的 Image ROI 設定。請執行以下操作:
- 透過調整以下項目來建立第一個 Image ROI:
Width,Height,OffsetX的狀態,以及OffsetYparameter values,來決定最後擷取之影像的 payload 大小與壓縮比。 - 儲存 Set 0。
- 透過為以下項目選擇不同的值來建立第二個 Image ROI:
Width,Height,OffsetX的狀態,以及OffsetY參數的狀態。 - 儲存 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:
- 確保 Sequencer 處於組態模式。
- 將
SequencerSetSelector參數設為 第一個 要設定的 Sequencer Set。 - 執行
SequencerSetLoad命令。 - 為路徑 0 設定 Sequencer Set Advance:
- 將
SequencerPathSelector參數設為 0。 - 將
SequencerSetNext參數至下一個要設定的 Set。 - 將
SequencerTriggerSource參數至應用於推進至下一個 Set 的來源訊號。
您可以選擇任何可用的 觸發來源 訊號,例如Line1或ExposureStart. - 如果您選擇了可以為 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。這與影像擷取無關。
- 將
- 如果您想要定義第二個條件,以讓相機推進至不同的 Set,請使用以下參數重複步驟 4:
SequencerPathSelector參數設為 1。 - 執行
SequencerSetSave命令。 - 將
SequencerSetSelector參數設為 下一個 要設定的 Sequencer Set。 - 針對所有所需的 Set 重複步驟 3 到 7。
範例#
範例 1:循環切換集合#
假設您想要在影像擷取期間循環使用 Sequencer Set 0、1 和 2。每當相機擷取影像時,Sequencer 都應推進至下一個 Set。
為此,請按照以下方式設定 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。
若要達到此目的:
- 將
SequencerStartSetProperty 設定為 2。 -
請按下述方式設定 counter 1:
CounterDuration= 10CounterEventSource=ExposureStartCounterResetSource=Counter1End
-
請按照下表所示設定 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 來輕鬆設定參數。