Sequencer (ace Classic/U/L GigE)#
您可以定義最多 64 組參數設定,稱為 sequence set。當相機擷取影像時,它會依序套用各個 sequence set。這可讓您快速變更相機參數,同時不影響最大幀率。
例如,您可以使用 Sequencer 功能在預先設定的 Image ROI 或 Exposure Time 之間快速切換。
使用此功能#
啟用或停用 Sequencer#
當 啟用 時,Sequencer 會控制影像擷取。在此狀態下無法進行設定。
當 停用 時,可以設定 Sequencer,但它不會控制影像擷取。
若要啟用 Sequencer:
- 設定所有 auto functions (例如: Gain Auto, Exposure Auto) 至
Off. - 將
SequenceEnable參數設為true.
若要停用 Sequencer:
- 將
SequenceEnable參數設為false. - 如果已啟用
SequenceConfigurationMode參數適用於您的相機型號,請將其設為On.
Sequence Set 包含什麼?#
如果可用,Sequencer sets 包含以下參數:
AcquisitionFrameRateAcquisitionFrameRateEnableBalanceRatioBinningHorizontalBinningVerticalBlackLevelCenterXCenterYChunkEnableChunkModeActiveColorAdjustmentEnableColorAdjustmentHueColorAdjustmentSaturationColorTransformationMatrixFactorColorTransformationValueDecimationVerticalDigitalShiftExposureTimeGainHeightLUTEnableOffsetXOffsetXPixelFormataProcessedRawEnableReverseXReverseYbScalingHorizontalSequenceSetExecutionscStackedZoneImagingEnableStackedZoneImagingZoneEnableStackedZoneImagingZoneHeightStackedZoneImagingZoneOffsetYSubsamplingHorizontalSyncUserOutputTestImageSelectorTimerDelaydTimerDelayTimebasedTimerDurationdTimerDurationTimebasedWidth
-
僅適用於以下相機型號:acA640-300gm/gc、acA800-200gm/gc、acA1300-75gm/gc、acA1920-48gm/gc、acA2500-20gm/gc。
-
不適用於以下相機型號:acA3088-16gm/gc、acA4024-8gm/gc、acA5472-5gm/gc。
-
僅在啟用 auto sequence advance mode 時包含。
-
適用於 Timer 1。
所有其他相機參數均無法透過 Sequencer 功能來控制。
資訊
載入或儲存 sequence set 時,一定會載入或儲存上述所有參數,甚至是您未曾變更的參數。例如,如果您只變更了 Exposure Time 並讓所有其他參數保持預設值,則所有其他參數的值也會被儲存 — 並且會在載入時遭到覆寫。
設定 Sequence Set#
資訊
在您使用 Sequencer 功能之前,必須先為 sequence set 填入所需的設定。每個 sequence set 都有一個唯一的 sequence set 索引編號,範圍從 0 到 63。
若要填入 sequence set:
- 將
SequenceSetTotalNumber參數設為您要使用的 sequence set 總數。 - 設定您想要儲存在 sequence set 0 中的sequence set 參數。
- 儲存 sequence set 0。
- 對您想要使用的所有 sequence set 重複步驟 2 和 3。請確保一律使用從索引編號 0 開始的連續索引編號系列,例如使用 sequence set 0、1、2 和 3。
範例:假設您需要兩個 sequence set,並希望為其填入不同的 Image ROI 設定。若要這樣做:
- 將
SequenceSetTotalNumberProperty 設定為 2。 - 透過調整以下項目來建立第一個 Image ROI:
Width,Height,OffsetX的狀態,以及OffsetYparameter values,來決定最後擷取之影像的 payload 大小與壓縮比。 - 儲存 sequence set 0。
- 透過為以下項目選擇不同的值來建立第二個 Image ROI:
Width,Height,OffsetX的狀態,以及OffsetY參數的狀態。 - 儲存 sequence set 1。
您現在可以 設定 Sequencer 以在兩個 Image ROI 之間快速切換。
儲存 Sequence Set#
若要儲存 Sequencer 設定集:
- 將
SequenceSetIndex參數設為所需的 Sequencer 設定集。 - 執行
SequenceSetStore命令。
所有 Sequencer 設定集參數的值都會儲存在所選的 Sequencer 設定集中。
載入 Sequence Set#
Sequencer 設定集會在 Sequencer 運作期間自動載入。不過,手動載入 Sequencer 設定集可用於測試目的或在設定 Sequencer 時派上用場。
若要手動載入 Sequencer 設定集:
- 將
SequenceSetIndex參數設為所需的 Sequencer 設定集。 - 執行
SequenceSetLoad命令。
所有 Sequencer 設定集參數的值都會被覆寫,並替換為所選 Sequencer 設定集中儲存的值。
設定 Sequencer#
在您設定完 Sequencer 設定集後,必須設定 Sequencer。
資訊
- 若要設定 Sequencer,必須先將 Sequencer 停用 (disabled)。
- 當相機斷電時,對 Sequencer 組態所做的所有變更都會遺失。此外,Sequencer 設定無法儲存在 user set 中。Basler 建議您編寫合適的程式碼,使用 pylon API 在每次相機上電時重新設定相機。
- 您可以使用 SequenceSetIndex chunk 來追蹤所使用的 Sequencer 設定集。啟用後,每個影像都會包含 chunk 資料,其中包含用於影像擷取的 Sequencer 設定集索引編號。
Sequencer 可在三種稱為「進階模式 (advance modes)」的模式下運作:
在所有模式中,Sequencer 設定集一律會以遞增順序推進,從 Sequencer 設定集索引編號 0 開始。
自動 Sequence Advance 模式#
如果您想要設定要持續重複的固定序列,這個模式會非常有用。
您可以透過將以下設定為來啟用此模式: SequenceAdvanceMode 參數設為 Auto.
在此模式中,當接收到 Frame Start trigger 訊號時,就會自動從一個 Sequencer 設定集推進至下一個。
影像 SequenceSetTotalNumber 參數指定要使用的 Sequencer 設定集總數。在使用具有最高索引編號的 Sequencer 設定集之後,循環會從 0 重新開始。
範例:假設您想要設定下列 Sequencer 循環:
若要設定上述 Sequencer 循環:
- 將
SequenceAdvanceMode參數設為Auto. - 將
SequenceSetTotalNumber參數設為 5。
多次使用 Sequencer 設定集
選擇性地,每個 Sequencer 設定集可以連續使用多次。
若要指定您想要使用每個 Sequencer 設定集多少次:
- 載入所需的 Sequencer 設定集。
- 設定
SequenceSetExecutions此 Sequencer 設定集的參數。依預設,所有設定集的此參數皆設為 1,這表示每個 Sequencer 設定集每個循環會使用一次。 - 儲存Sequencer 設定集。
範例:假設您想要設定下列 Sequencer 循環:
若要設定上述 Sequencer 循環:
- 將
SequenceAdvanceMode參數設為Auto. - 將
SequenceSetTotalNumber參數設為 6。 -
設定
SequenceSetExecutions每個 Sequencer 設定集的參數:- Sequencer 設定集 0、2、3 和 4 每個循環僅使用一次。因此,您可以略過這些設定集並將
SequenceSetExecutionsparameter 保留為預設值 1。 - Sequencer 設定集 1 將連續使用三次。 載入 Sequencer 設定集 1,將
SequenceSetExecutionsparameter 設為 3,然後 儲存 Sequencer 設定集 1。 - Sequencer 設定集 5 將連續使用兩次。 載入 Sequencer 設定集 5,將
SequenceSetExecutionsparameter 設為 2,然後 儲存 Sequencer 設定集 5。
- Sequencer 設定集 0、2、3 和 4 每個循環僅使用一次。因此,您可以略過這些設定集並將
控制型 Sequence Advance 模式#
如果您想要設定可透過 Line 1 或軟體指令控制的動態 Sequencer,此模式非常有用。
資訊
- 針對即時應用,Basler 強烈建議不要透過軟體指令控制 Sequencer。發送軟體指令與其實際生效之間的延遲取決於特定安裝與網路目前的負載。因此,無法預測在發送軟體指令與其實際生效之間會發生多少次影像擷取。
- 當您使用 Line 1 控制 Sequencer 時,必須牢記設定 Line 1 狀態與 Frame Start 觸發訊號上升之間需要一微秒的時間。在 Frame Start 觸發訊號上升後,您也必須維持 Line 1 的狀態至少一微秒。監控 Frame Trigger Wait 訊號以最佳化時序。
您可以透過將以下設定為來啟用此模式: SequenceAdvanceMode 參數設為 Controlled.
如同其他模式,進階永遠以遞增順序進行,從 Sequencer 設定集索引編號 0 開始。
不過,您可以控制以下項目:
- Sequencer 設定集進階:您希望何時讓 Sequencer 前進至下一個 Sequencer 設定集?
- Sequencer 設定集重新啟動:您希望 Sequencer 循環從 Sequencer 設定集 0 再次開始的時機?
影像 SequenceSetTotalNumber 參數指定您要使用的 Sequencer 設定集總數。在使用具有最高索引編號的 Sequencer 設定集之後,循環將從 0 再次開始。
設定 Sequencer 設定集進階#
若要設定 Sequencer 設定集進階:
- 將
SequenceControlSelector參數設為Advance. - 將
SequenceControlSource參數設定為下列選項之一:Line1:Sequencer 設定集進階將透過 Line 1 進行控制。如果在接收到 frame start 觸發 訊號時 Line 1 為低電位 (0),則 Sequencer 不會進階,且會再次使用目前的 Sequencer 設定集進行影像擷取。如果在接收到 Frame Start 觸發訊號時 Line 1 為高電位 (1),則 Sequencer 會進階,並使用循環中的下一個 Sequencer 設定集進行影像擷取。Disabled: Sequence set 的前進將透過SequenceAsyncAdvance軟體指令進行控制。當收到此指令時,Sequencer 會在未擷取影像的情況下前進。當收到下一個 Frame Start 觸發 訊號時,系統會使用SequenceCurrentSet參數值所指示的 sequence set 來進行影像擷取。AlwaysActive: Sequencer 的運作方式就如同選定了Line1且 Line 1 始終保持高電位 (1) 一樣。因此,每當收到 frame start 觸發 訊號時,Sequencer 就會前進。這種 Sequencer 操作方式類似於在自動 sequence set 前進模式下運作,此時每個 sequence set 在每個循環中僅使用一次。唯一的差別在於,系統會使用 sequence set 1 作為第一個 sequence set,而不是 sequence set 0。
設定 Sequence Set 重新啟動#
若要設定 sequence set 重新啟動:
- 將
SequenceControlSelector參數設為Restart. - 將
SequenceControlSource參數設定為下列選項之一:Line1: Sequence set 重新啟動將透過 Line 1 進行控制。如果在收到 frame start 觸發 訊號時計數器的 Line 1 為低電位 (0),則會使用下一個 sequence set。如果在收到 Frame Start 觸發訊號時計數器的 Line 1 為高電位 (1),則序列循環將會重新啟動,並使用 sequence set 0。Disabled: Sequence set 重新啟動將透過SequenceAsyncRestart軟體指令進行控制。當收到此指令時,序列循環將會在未擷取影像的情況下重新啟動。當收到下一個 Frame Start 觸發 訊號時,將會使用 sequence set 0。
自由選擇 Sequence Advance 模式#
如果您想要在可自由選擇的 sequence set 之間快速切換,而不需要遵守任何特定的順序,此模式將非常有用。您可以使用相機的輸入線來決定序列。
資訊
請記住,從設定輸入線狀態到 Frame Start 觸發訊號上升需要一微秒的時間。在 Frame Start 觸發訊號上升後,您也必須維持該輸入線的狀態至少一微秒。監控 Frame Trigger Wait signal 以最佳化時序。
如何設定自由選擇前進模式取決於相機上可用的輸入線數量:
具備一條輸入線的相機#
Sequence set 是根據輸入線 1 的狀態來選擇:
- 如果在收到 frame start trigger 訊號時計數器的 Line 1 為低電位 (0),則會使用 sequence set 0 進行影像擷取。
- 如果在收到 Frame Start 觸發訊號時計數器的 Line 1 為高電位 (1),則會使用 sequence set 1 進行影像擷取。
僅可使用 sequence set 0 和 1。
若要啟用自由選擇前進模式:
- 將
SequenceAdvanceMode參數設為FreeSelection. - 將
SequenceSetTotalNumberProperty 設定為 2。
影像 SequenceAddressBitSelector 和 SequenceAddressBitSource 參數也會控制自由選擇前進模式的運作。不過,這些參數是預先設定的,無法變更。
具有兩個輸入線路的相機#
序列集會根據 line 1(光學耦合輸入線路)和 line 3(GPIO 線路,必須設定為輸入)的狀態來選擇,從而產生四種可能的組合。這允許您在四個序列集之間進行選擇。因此,只有序列集 0、1、2 和 3 可用。
為了設定自由選擇前進模式,您必須為每條線路指定一個「序列集位址位元」(sequence set address bit)。這些位址位元的組合決定了序列集索引編號。下表顯示了可能的組合及其各自的結果。
| 位址位元 1 | 位址位元 0 | 將被選取的序列集 |
|---|---|---|
| 0 | 0 | 序列集 0 |
| 0 | 1 | 序列集 1 |
| 1 | 0 | 序列集 2 |
| 1 | 1 | 序列集 3 |
例如,您可以將 line 1 指定給位元 1,並將 line 3 指定給位元 0。這會產生以下範例設定:
- 如果在接收到 frame start trigger 訊號時,line 1 為低電位 (0) 且 line 3 為低電位 (0),則會使用序列集 0 進行影像擷取。
- 如果在接收到 frame start trigger 訊號時,line 1 為低電位 (0) 且 line 3 為高電位 (1),則會使用序列集 1 進行影像擷取。
- 如果在接收到 frame start trigger 訊號時,line 1 為高電位 (1) 且 line 3 為低電位 (0),則會使用序列集 2 進行影像擷取。
- 如果在接收到 frame start trigger 訊號時,line 1 為高電位 (1) 且 line 3 為高電位 (1),則會使用序列集 3 進行影像擷取。
若要設定位元並啟用自由選擇前進模式:
- 將
SequenceAdvanceMode參數設為FreeSelection. - 將
SequenceSetTotalNumber參數設為 4。 - 將
SequenceAddressBitSelector參數設為Bit0. - 將
SequenceAddressBitSource參數設為您要指定給位元 0 的線路,例如:Line3. - 將
SequenceAddressBitSelector參數設為Bit1. - 將
SequenceAddressBitSource參數設為您要指定給位元 1 的線路,例如:Line1.
資訊
您也可以在自由選擇前進模式中只使用一個輸入線路。若要這樣做,請將 SequenceSetTotalNumber 參數設為 2。現在,只有位元 0 用於選擇序列集。自由選擇前進模式的運作方式將如「具備一條輸入線的相機」中所述。
時序圖#
範例:Auto Sequence Advance Mode#
範例:Controlled Sequence Advance Mode(透過 Line 1 控制)#
範例:Free Selection Advance Mode#
範例程式碼#
// ** Configuring sequence sets **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
// Enable configuration mode (available on selected cameras only)
camera.SequenceConfigurationMode.SetValue(SequenceConfigurationMode_On);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Configure the parameters that you want to store in the first sequence set
camera.Width.SetValue(500);
camera.Height.SetValue(300);
// Select sequence set 0 and save the parameter values
camera.SequenceSetIndex.SetValue(0);
camera.SequenceSetStore.Execute();
// Configure the parameters that you want to store in the second sequence set
camera.Width.SetValue(800);
camera.Height.SetValue(600);
// Select sequence set 1 and save the parameter values
camera.SequenceSetIndex.SetValue(1);
camera.SequenceSetStore.Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_Auto);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
camera.SequenceSetIndex.SetValue(0);
camera.SequenceSetLoad.Execute();
camera.SequenceSetExecutions.SetValue(2);
camera.SequenceSetStore.Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
camera.SequenceSetIndex.SetValue(1);
camera.SequenceSetLoad.Execute();
camera.SequenceSetExecutions.SetValue(3);
camera.SequenceSetStore.Execute();
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_Controlled);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Specify that sequence set advance is controlled via line 1
camera.SequenceControlSelector.SetValue(SequenceControlSelector_Advance);
camera.SequenceControlSource.SetValue(SequenceControlSource_Line1);
// Specify that sequence set restart is controlled
// via software command
camera.SequenceControlSelector.SetValue(SequenceControlSelector_Restart);
camera.SequenceControlSource.SetValue(SequenceControlSource_Disabled);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// Restart the sequencer via software command (for testing purposes)
camera.SequenceAsyncRestart.Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_FreeSelection);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_FreeSelection);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(4);
// Assign sequence address bit 0 to line 3
camera.SequenceAddressBitSelector.SetValue(SequenceAddressBitSelector_Bit0);
camera.SequenceAddressBitSource.SetValue(SequenceAddressBitSource_Line3);
// Assign sequence address bit 1 to line 1
camera.SequenceAddressBitSelector.SetValue(SequenceAddressBitSelector_Bit1);
camera.SequenceAddressBitSource.SetValue(SequenceAddressBitSource_Line1);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
INodeMap& nodemap = camera.GetNodeMap();
// ** Configuring sequence sets **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
// Enable configuration mode (available on selected cameras only)
CEnumParameter(nodemap, "SequenceConfigurationMode").SetValue("On");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Configure the parameters that you want to store in the first sequence set
CIntegerParameter(nodemap, "Width").SetValue(500);
CIntegerParameter(nodemap, "Height").SetValue(300);
// Select sequence set 0 and save the parameter values
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(0);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Configure the parameters that you want to store in the second sequence set
CIntegerParameter(nodemap, "Width").SetValue(800);
CIntegerParameter(nodemap, "Height").SetValue(600);
// Select sequence set 1 and save the parameter values
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(1);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("Auto");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(0);
CCommandParameter(nodemap, "SequenceSetLoad").Execute();
CIntegerParameter(nodemap, "SequenceSetExecutions").SetValue(2);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(1);
CCommandParameter(nodemap, "SequenceSetLoad").Execute();
CIntegerParameter(nodemap, "SequenceSetExecutions").SetValue(3);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("Controlled");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Specify that sequence set advance is controlled via line 1
CEnumParameter(nodemap, "SequenceControlSelector").SetValue("Advance");
CEnumParameter(nodemap, "SequenceControlSource").SetValue("Line1");
// Specify that sequence set restart is controlled
// via software command
CEnumParameter(nodemap, "SequenceControlSelector").SetValue("Restart");
CEnumParameter(nodemap, "SequenceControlSource").SetValue("Disabled");
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// Restart the sequencer via software command (for testing purposes)
CCommandParameter(nodemap, "SequenceAsyncRestart").Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("FreeSelection");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("FreeSelection");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(4);
// Assign sequence address bit 0 to line 3
CEnumParameter(nodemap, "SequenceAddressBitSelector").SetValue("Bit0");
CEnumParameter(nodemap, "SequenceAddressBitSource").SetValue("Line3");
// Assign sequence address bit 1 to line 1
CEnumParameter(nodemap, "SequenceAddressBitSelector").SetValue("Bit1");
CEnumParameter(nodemap, "SequenceAddressBitSource").SetValue("Line1");
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring sequence sets **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
// Enable configuration mode (available on selected cameras only)
camera.Parameters[PLCamera.SequenceConfigurationMode].SetValue(PLCamera.SequenceConfigurationMode.On);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Configure the parameters that you want to store in the first sequence set
camera.Parameters[PLCamera.Width].SetValue(500);
camera.Parameters[PLCamera.Height].SetValue(300);
// Select sequence set 0 and save the parameter values
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(0);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Configure the parameters that you want to store in the second sequence set
camera.Parameters[PLCamera.Width].SetValue(800);
camera.Parameters[PLCamera.Height].SetValue(600);
// Select sequence set 1 and save the parameter values
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(1);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.Auto);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(0);
camera.Parameters[PLCamera.SequenceSetLoad].Execute();
camera.Parameters[PLCamera.SequenceSetExecutions].SetValue(2);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(1);
camera.Parameters[PLCamera.SequenceSetLoad].Execute();
camera.Parameters[PLCamera.SequenceSetExecutions].SetValue(3);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.Controlled);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Specify that sequence set advance is controlled via line 1
camera.Parameters[PLCamera.SequenceControlSelector].SetValue(PLCamera.SequenceControlSelector.Advance);
camera.Parameters[PLCamera.SequenceControlSource].SetValue(PLCamera.SequenceControlSource.Line1);
// Specify that sequence set restart is controlled
// via software command
camera.Parameters[PLCamera.SequenceControlSelector].SetValue(PLCamera.SequenceControlSelector.Restart);
camera.Parameters[PLCamera.SequenceControlSource].SetValue(PLCamera.SequenceControlSource.Disabled);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// Restart the sequencer via software command (for testing purposes)
camera.Parameters[PLCamera.SequenceAsyncRestart].Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.FreeSelection);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.FreeSelection);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(4);
// Assign sequence address bit 0 to line 3
camera.Parameters[PLCamera.SequenceAddressBitSelector].SetValue(PLCamera.SequenceAddressBitSelector.Bit0);
camera.Parameters[PLCamera.SequenceAddressBitSource].SetValue(PLCamera.SequenceAddressBitSource.Line3);
// Assign sequence address bit 1 to line 1
camera.Parameters[PLCamera.SequenceAddressBitSelector].SetValue(PLCamera.SequenceAddressBitSelector.Bit1);
camera.Parameters[PLCamera.SequenceAddressBitSource].SetValue(PLCamera.SequenceAddressBitSource.Line1);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
/* 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 sequence sets ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
/* Enable configuration mode (available on selected cameras only) */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceConfigurationMode", "On");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Configure the parameters that you want to store in the first sequence set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 500);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 300);
CHECK(errRes);
/* Select sequence set 0 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Configure the parameters that you want to store in the second sequence set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 800);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 600);
CHECK(errRes);
/* Select sequence set 1 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* ** Configuring the sequencer for auto sequence advance mode */
/* Assuming you want to configure the following sequence cycle: */
/* 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "Auto");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Load sequence set 0 and specify that this set is to be used */
/* 2 times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetExecutions", 2);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Load sequence set 1 and specify that this set is to be used */
/* 3 times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetExecutions", 3);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* ** Configuring the sequencer for controlled sequence advance mode ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "Controlled");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Specify that sequence set advance is controlled via line 1 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSelector", "Advance");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSource", "Line1");
CHECK(errRes);
/* Specify that sequence set restart is controlled */
/* via software command */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSelector", "Restart");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSource", "Disabled");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* Restart the sequencer via software command (for testing purposes) */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceAsyncRestart");
CHECK(errRes);
/* ** Configuring the sequencer for free selection advance mode */
/* on cameras with ONE input line ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "FreeSelection");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* ** Configuring the sequencer for free selection advance mode */
/* on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "FreeSelection");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 4);
CHECK(errRes);
/* Assign sequence address bit 0 to line 3 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSelector", "Bit0");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSource", "Line3");
CHECK(errRes);
/* Assign sequence address bit 1 to line 1 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSelector", "Bit1");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSource", "Line1");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
# ** Configuring sequence sets **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
# Enable configuration mode (available on selected cameras only)
camera.SequenceConfigurationMode.Value = "On"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Configure the parameters that you want to store in the first sequence set
camera.Width.Value = 500
camera.Height.Value = 300
# Select sequence set 0 and save the parameter values
camera.SequenceSetIndex.Value = 0
camera.SequenceSetStore.Execute()
# Configure the parameters that you want to store in the second sequence set
camera.Width.Value = 800
camera.Height.Value = 600
# Select sequence set 1 and save the parameter values
camera.SequenceSetIndex.Value = 1
camera.SequenceSetStore.Execute()
# ** Configuring the sequencer for auto sequence advance mode
# Assuming you want to configure the following sequence cycle:
# 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "Auto"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Load sequence set 0 and specify that this set is to be used
# 2 times in a row
camera.SequenceSetIndex.Value = 0
camera.SequenceSetLoad.Execute()
camera.SequenceSetExecutions.Value = 2
camera.SequenceSetStore.Execute()
# Load sequence set 1 and specify that this set is to be used
# 3 times in a row
camera.SequenceSetIndex.Value = 1
camera.SequenceSetLoad.Execute()
camera.SequenceSetExecutions.Value = 3
camera.SequenceSetStore.Execute()
# Enable the sequencer
camera.SequenceEnable.Value = True
# ** Configuring the sequencer for controlled sequence advance mode **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "Controlled"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Specify that sequence set advance is controlled via line 1
camera.SequenceControlSelector.Value = "Advance"
camera.SequenceControlSource.Value = "Line1"
# Specify that sequence set restart is controlled
# via software command
camera.SequenceControlSelector.Value = "Restart"
camera.SequenceControlSource.Value = "Disabled"
# Enable the sequencer
camera.SequenceEnable.Value = True
# Restart the sequencer via software command (for testing purposes)
camera.SequenceAsyncRestart.Execute()
# ** Configuring the sequencer for free selection advance mode
# on cameras with ONE input line **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "FreeSelection"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Enable the sequencer
camera.SequenceEnable.Value = True
# ** Configuring the sequencer for free selection advance mode
# on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "FreeSelection"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 4
# Assign sequence address bit 0 to line 3
camera.SequenceAddressBitSelector.Value = "Bit0"
camera.SequenceAddressBitSource.Value = "Line3"
# Assign sequence address bit 1 to line 1
camera.SequenceAddressBitSelector.Value = "Bit1"
camera.SequenceAddressBitSource.Value = "Line1"
# Enable the sequencer
camera.SequenceEnable.Value = True
您也可以使用 pylon Viewer 來輕鬆設定參數。