Sequencer (ace Classic/U/L USB)#
您可以定義最多 32 組參數設定,稱為 sequencer sets。當相機擷取影像時會依序套用這些 sequencer sets。這可讓您在不影響最大影格率的情況下快速變更相機參數。
例如,您可以使用 Sequencer 功能在預先設定的 Image ROI 或 Exposure Time 之間快速切換。
使用此功能#
Sequencer 模式#
- 在 sequencer mode 下,由 sequencer 控制影像擷取。在此狀態下無法進行設定。
- 在 sequencer configuration mode 下,可以對 sequencer 進行設定,但此時它不會控制影像擷取。
若要啟用 sequencer mode:
- 設定所有 auto functions (例如: Gain Auto, Exposure Auto) 至
Off. - 將
SequencerMode參數設為On.
若要啟用 sequencer configuration mode:
- 將
SequencerMode參數設為Off. - 將
SequencerConfigurationMode參數設為On.
資訊
在 acA1920-25uc/um 和 acA2500-14uc/um 相機上,當使用不同的 sequencer sets 擷取影像時,無法進行 overlapping image acquisition。相機必須完成整個曝光與讀取程序,才能載入新的 sequence set。因此,影格率可能會大幅降低。
Sequencer Set 包含哪些內容?#
如果可用,Sequencer sets 包含以下參數:
AcquisitionFrameRateAcquisitionFrameRateEnableBalanceRatioBinningHorizontalBinningVerticalBlackLevelCenterXCenterYChunkEnableChunkModeActiveColorAdjustmentHueColorAdjustmentSaturationColorTransformationValueCounterDuration(適用於 Counter 2)CounterEventSourceCounterResetSourceDigitalShiftExposureTimeGainHeightLUTEnableaOffsetXOffsetYPixelFormatbReverseXReverseYcScalingHorizontalSequencerSetNextSequencerSetPathSequencerSetSelectorSequencerSetStartSequencerTriggerActivationSequencerTriggerSourceTestImageSelectorTimerDelay(適用於 Timer 1)TimerDuration(適用於 Timer 1)Width
所有其他相機參數均無法透過 Sequencer 功能來控制。
-
只有在
Gamma參數設為 1.0 且LightSourcePreset參數已設定為Off. -
僅適用於下列相機型號:acA640-750um/uc、acA800-510um/uc、acA1300-200um/uc、acA1920-150um/uc、acA2500-60um/uc。
-
不適用於下列相機型號:acA3088-57um/uc、acA4024-29um/uc、acA5472-17um/uc。
資訊
載入或儲存 sequencer set 時,將一律載入或儲存上述所有參數,甚至是您未曾變更的參數。例如,如果您僅變更了 exposure time,並將所有其他參數保留為預設值,則所有其他參數的值也會一併儲存,並在載入時遭到覆寫。
設定 Sequencer Set#
資訊
- 若要設定 sequencer sets,sequencer 必須處於 configuration mode。
- 當相機斷電時,對 sequencer sets 所做的所有變更將會遺失。此外,sequencer 設定無法儲存於 user set 中。為了保留您的設定,Basler 建議您使用 pylon API 編寫適當的程式碼,以便在每次相機通電時重新填入 sequence sets。
在使用「Sequencer 」功能之前,您必須先將您所需的設定填入各序列器組中。每個序列器組都有一個唯一的序列器組索引號,範圍從 0 到 31。
若要填入 sequencer sets:
- 設定您要儲存在 sequencer set 0 中的 sequencer set parameters。
- 儲存 Sequencer 集 0。
- 對所有您想要使用的 Sequencer 集重複步驟 1 和 2。請務必使用從索引編號 0 開始的連續索引編號系列,例如使用 Sequencer 集 0、1、2 和 3。
範例:假設您需要兩個 Sequencer 集,並想為其填入不同的 Image ROI 設定。請按照以下步驟操作:
- 透過調整以下項目來建立第一個 Image ROI:
Width,Height,OffsetX的狀態,以及OffsetYparameter values,來決定最後擷取之影像的 payload 大小與壓縮比。 - 儲存 Sequencer 集 0。
- 透過為以下項目選擇不同的值來建立第二個 Image ROI:
Width,Height,OffsetX的狀態,以及OffsetY參數的狀態。 - 儲存 Sequencer 集 1。
您現在可以 設定 Sequencer 以在兩個 Image ROI 之間快速切換。
儲存 Sequencer Set#
若要儲存 Sequencer 集:
- 將
SequencerSetSelector將參數設為所需的 Sequencer 集。 - 執行
SequencerSetSave命令。
所有 Sequencer 集參數的值都會儲存在所選的 Sequencer 集中。
載入 Sequencer Set#
Sequencer 集會在 Sequencer 運作期間自動載入。不過,手動載入 Sequencer 集對於測試目的或設定 Sequencer 可能很有用。
若要手動載入 Sequencer 集:
- 將
SequencerSetSelector將參數設為所需的 Sequencer 集。 - 執行
SequencerSetLoad命令。
所有 Sequencer 集參數的值都會被覆寫,並由所選 Sequencer 集中所儲存的值取代。
設定 Sequencer#
在 設定 Sequencer 集之後,您必須設定 Sequencer。
資訊
- 若要設定 Sequencer,Sequencer 必須處於 組態模式。
- 當相機斷電時,對 Sequencer 組態所做的所有變更都會遺失。此外,Sequencer 設定無法儲存在 user set 中。Basler 建議您編寫合適的程式碼,使用 pylon API 在每次相機上電時重新設定相機。
- 您可以使用 SequencerSetActive chunk 來追蹤所使用的 Sequencer 集。啟用後,每個影像都會包含 chunk 資料,其中包含用於影像擷取的 Sequencer 集的索引編號。
路徑 0 與路徑 1#
若要控制 Sequencer,您必須設定兩個所謂的「路徑 (paths)」:
-
路徑 1 允許您循環瀏覽可用的 Sequencer 集(Sequencer 集進階 (advance))。每當 Sequencer 收到「路徑 1」觸發訊號時,Sequencer 就會前進到下一個集。範例:
-
路徑 0 允許您重設循環(Sequencer 集重設 (reset))。每當 Sequencer 收到「路徑 0」觸發訊號時,Sequencer 就會從 Sequencer 集 0 重新開始循環。範例:
設定路徑 0#
若要設定路徑 0,您必須指定要用作「路徑 0」觸發訊號(即 Sequencer 集重設訊號)的來源訊號。
您可以選擇硬體訊號或軟體訊號作為路徑 0 的來源訊號。來源設定必須儲存在 Sequencer 集 0 中。
若要指定路徑 0 的來源訊號:
- 載入 Sequencer 設定 0。
- 將
SequencerPathSelector參數設為 0。 - 將
SequencerTriggerSource參數設為下列其中一個值:Line1,Line3或Line4:可透過輸入線 1、GPIO 線 3 或 GPIO 線 4 來控制 Sequencer 設定重設。SoftwareSignal1,SoftwareSignal2或SoftwareSignal3:可使用下列方式控制 Sequencer 設定重設: Software Signal Pulse feature 定義的設定。
- 儲存 Sequencer 集 0。
資訊
- 對於即時應用,Basler 強烈建議不要透過軟體指令來控制 Sequencer 設定重設。由於訊號處理與傳輸的關係,發出軟體指令與 Sequencer 設定重設之間會存在未指定的延遲。因此,無法預測在傳送軟體指令與其實際生效之間可能發生的影像擷取次數。
- 請勿對路徑 0 與路徑 1 使用相同的 Trigger Source。
設定路徑 1#
指定 Trigger Source#
首先,您必須指定要作為「路徑 1」觸發訊號(也就是作為 Sequencer 設定推進訊號)的來源訊號。
您可以選擇 Frame Start 觸發訊號、硬體訊號、軟體訊號或 Counter 作為路徑 1 的來源訊號。來源設定必須儲存在 Sequencer 設定 0 中。
若要指定路徑 1 的來源訊號:
- 載入 Sequencer 設定 0。
- 將
SequencerPathSelectorProperty 設定為 1。 - 將
SequencerTriggerSource參數設為下列其中一個值:FrameStart:Sequencer 設定推進會隨著收到 Frame Start 觸發 訊號而自動發生。Line1,Line3或Line4:可透過輸入線 1、GPIO 線 3 或 GPIO 線 4 來控制 Sequencer 設定推進。若要使用其中一條 GPIO 線,該線必須設定為輸入。如果在接收到 frame start 觸發 訊號時,指定的線為低電位 (0),則 Sequencer 不會推進,且會再次使用目前的設定進行影像擷取。如果在接收到 Frame Start 觸發訊號時,該線為高電位 (1),則 Sequencer 會推進,並使用循環中的下一個 Sequencer 設定進行影像擷取。SoftwareSignal1,SoftwareSignal2或SoftwareSignal3:可使用下列方式控制 Sequencer 設定推進: Software Signal Pulse feature 定義的設定。Counter2End:可 使用 Counter.
- 儲存 Sequencer 集 0。
指定所使用的 Sequencer 設定#
其次,您必須指定在 Sequencer 運作期間要使用哪些 Sequencer 設定。
預設會使用所有 32 個 Sequencer 設定。當接收到「路徑 1」觸發訊號時,Sequencer 會以遞增的 Sequencer 設定索引編號從 0 推進到 31。之後,循環會從 0 重新開始。
若要使用較少數量的 Sequencer 設定:
-
載入要使用的最高索引編號之 Sequencer 設定。
範例:假設您已設定五個 Sequencer 設定,且您想要設定下列循環:在此循環中,最高的 Sequencer 設定索引編號為 4。因此,請載入 Sequencer 設定 4。2. 設定
SequencerPathSelectorparameter 設為 1。3. 設定SequencerSetNextparameter 設為 0。4. Save sequencer set。
在運作期間,Sequencer 現在會在具有最高索引號的 set 之後切換回 sequencer set 0。這會「形成循環」。
資訊
- 對於即時應用,Basler 強烈建議不要透過軟體指令來控制 sequencer set 的推進。由於訊號處理和傳輸的關係,發出軟體指令與 sequencer set 推進之間會存在未確定的延遲。因此,無法預測在發送軟體指令與其實際生效之間可能會發生多少次影像擷取。
- 請勿對路徑 0 與路徑 1 使用相同的 Trigger Source。
使用 Counter 控制 Sequencer#
如果您 將 path 1 的來源訊號設為 設定為 Counter2End,您可以使用 Counter 來控制 sequencer set 的推進。
如果您想要設定一個固定序列,且該序列會連續多次使用相同的 sequencer set,這將非常有用。
針對每個 sequencer set,您可以設定 CounterDuration parameter,以指定該 set 要連續使用的次數。根據預設,所有 set 的此 parameter 都會設為 1,且每個 sequence set 在每個循環中會使用一次。
範例:假設您想要設定下列 sequencer set 循環:
若要設定上述的 sequencer set 循環:
- 載入 Sequencer 設定 0。
- 將
SequencerPathSelectorProperty 設定為 1。 - 將
SequencerTriggerSource參數設為Counter2End. - 儲存 Sequencer 集 0。
- 將
CounterSelector參數設為Counter2. -
將
CounterDuration針對每個 sequencer set 的 parameter:
其他參數#
影像 SequencerSetStart 和 SequencerTriggerActivation parameters 也可用於控制 Sequencer 的運作。不過,這些 parameters 是預先設定的,無法更改。
範例程式碼#
// ** 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 **
// 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");
// ** Setting up path 0 **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Load sequencer set 0 and select path 0
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(0);
// Set software signal 1 as "path 0" trigger signal
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("SoftwareSignal1");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// * Setting up path 1 **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Load sequencer set 0 and select path 1
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(1);
// Set software signal 2 as "path 1" trigger signal
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("SoftwareSignal2");
// Save the changes
CCommandParameter(nodemap, "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)
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(3);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
// Set the next sequencer set to 0 to "close the circle"
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(1);
CIntegerParameter(nodemap, "SequencerSetNext").SetValue(0);
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Advanced: Using a counter to control the sequencer **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Load sequencer set 0 and select path 1
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(1);
// Set the Counter2 end event as "path 1" trigger signal
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("Counter2End");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Select counter 2 to configure this counter
CEnumParameter(nodemap, "CounterSelector").SetValue("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
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "CounterDuration").SetValue(2);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Load sequencer set 1 and specify that this set is to be used
// three times in a row
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(1);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "CounterDuration").SetValue(3);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Configuring 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);
// ** Setting up path 0 **
// Enable sequencer configuration mode
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 **
// Enable sequencer configuration mode
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 **
// Enable sequencer configuration mode
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);
/* 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 ** */
/* 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);
/* ** Setting up path 0 ** */
/* Enable sequencer configuration mode */
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 ** */
/* Enable sequencer configuration mode */
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 ** */
/* Enable sequencer configuration mode */
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);
# ** Configuring 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"
# ** Setting up path 0 **
# Enable sequencer configuration mode
camera.SequencerMode.Value = "Off"
camera.SequencerConfigurationMode.Value = "On"
# Load sequencer set 0 and select path 0
camera.SequencerSetSelector.Value = 0
camera.SequencerSetLoad.Execute()
camera.SequencerPathSelector.Value = 0
# Set software signal 1 as "path 0" trigger signal
camera.SequencerTriggerSource.Value = "SoftwareSignal1"
# Save the changes
camera.SequencerSetSave.Execute()
# Enable sequencer mode to operate the sequencer
camera.SequencerMode.Value = "On"
# * Setting up path 1 **
# Enable sequencer configuration mode
camera.SequencerMode.Value = "Off"
camera.SequencerConfigurationMode.Value = "On"
# Load sequencer set 0 and select path 1
camera.SequencerSetSelector.Value = 0
camera.SequencerSetLoad.Execute()
camera.SequencerPathSelector.Value = 1
# Set software signal 2 as "path 1" trigger signal
camera.SequencerTriggerSource.Value = "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.Value = 3
camera.SequencerSetLoad.Execute()
# Set the next sequencer set to 0 to "close the circle"
camera.SequencerPathSelector.Value = 1
camera.SequencerSetNext.Value = 0
# Save the changes
camera.SequencerSetSave.Execute()
# Enable sequencer mode to operate the sequencer
camera.SequencerMode.Value = "On"
# ** Advanced: Using a counter to control the sequencer **
# Enable sequencer configuration mode
camera.SequencerMode.Value = "Off"
camera.SequencerConfigurationMode.Value = "On"
# Load sequencer set 0 and select path 1
camera.SequencerSetSelector.Value = 0
camera.SequencerSetLoad.Execute()
camera.SequencerPathSelector.Value = 1
# Set the Counter2 end event as "path 1" trigger signal
camera.SequencerTriggerSource.Value = "Counter2End"
# Save the changes
camera.SequencerSetSave.Execute()
# Select counter 2 to configure this counter
camera.CounterSelector.Value = "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.Value = 0
camera.SequencerSetLoad.Execute()
camera.CounterDuration.Value = 2
camera.SequencerSetSave.Execute()
# Load sequencer set 1 and specify that this set is to be used
# three times in a row
camera.SequencerSetSelector.Value = 1
camera.SequencerSetLoad.Execute()
camera.CounterDuration.Value = 3
camera.SequencerSetSave.Execute()
# Enable sequencer mode to operate the sequencer
camera.SequencerMode.Value = "On"
您也可以使用 pylon Viewer 來輕鬆設定參數。