Sequencer (ace Classic/U/L USB)#
Sequencer 세트라고 하는 최대 32개의 파라미터 설정 세트를 정의할 수 있습니다. 카메라가 이미지를 획득함에 따라 하나의 Sequencer 세트를 차례로 적용합니다. 이를 통해 최대 프레임 속도를 저하시키지 않고 카메라 파라미터를 빠르게 변경할 수 있습니다.
예를 들어 Sequencer 기능을 사용하여 사전 설정된 Image ROI 또는 Exposure Time 간에 빠르게 전환할 수 있습니다.
기능 사용법#
Sequencer Modes#
- Sequencer 모드에서는 Sequencer가 이미지 획득을 제어합니다. 이 상태에서는 설정할 수 없습니다.
- Sequencer 구성 모드에서는 Sequencer를 구성할 수 있지만 이미지 획득을 제어하고 있지는 않습니다.
Sequencer 모드를 활성화하려면:
- 모두 설정 자동 기능 (예: Gain Auto, Exposure Auto) 로
Off. - 다음 값 중 하나로
SequencerMode매개변수:On.
sequencer configuration mode를 활성화하려면:
- 다음 값 중 하나로
SequencerMode매개변수:Off. - 다음 값 중 하나로
SequencerConfigurationMode매개변수:On.
정보
acA1920-25uc/um 및 acA2500-14uc/um 카메라에서는 서로 다른 Sequencer 세트를 사용하여 이미지를 획득할 때 중첩 이미지 획득이 불가능합니다. 새 시퀀스 세트를 로드하려면 카메라가 전체 노출 및 읽기 프로세스를 완료해야 합니다. 결과적으로 프레임 속도가 크게 저하될 수 있습니다.
Sequencer Set 구성 요소#
시퀀스 세트에는 사용 가능한 경우 다음 매개변수가 포함됩니다:
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 세트를 로드 또는 저장하면 변경하지 않은 항목을 포함하여 항상 위의 파라미터 모두가 로드 또는 저장됩니다. 예를 들어 Exposure Time만 변경하고 다른 모든 파라미터를 기본값으로 둔 경우, 다른 모든 파라미터의 값도 함께 저장되며 로드 시 덮어쓰여집니다.
Sequencer Set 구성#
정보
Sequencer 기능을 사용하기 전에 원하는 설정으로 Sequencer 세트를 채워야 합니다. 각 Sequencer 세트에는 0부터 31까지의 고유한 Sequencer 세트 인덱스 번호가 있습니다.
Sequencer 세트를 채우려면:
- Sequencer 세트 0에 저장할 sequencer set parameters를 구성합니다.
- Sequencer 세트 0을 저장합니다.
- 사용하려는 모든 Sequencer 세트에 대해 1단계와 2단계를 반복합니다. 인덱스 번호 0부터 시작하는 연속된 일련의 인덱스 번호(예: Sequencer 세트 0, 1, 2, 3 사용)를 항상 사용해야 합니다.
예: 두 개의 Sequencer 세트가 필요하고 서로 다른 Image ROI 설정으로 채우려고 한다고 가정해 보겠습니다. 이 작업을 수행하려면:
- 다음을 조정하여 첫 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY파라미터 값입니다. - Sequencer 세트 0을 저장합니다.
- 다음 항목에 다른 값을 선택하여 두 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY파라미터의 상태를 업데이트합니다. - Sequencer 세트 1을 저장합니다.
이제 configure the sequencer를 통해 두 Image ROI 간에 빠르게 전환할 수 있습니다.
Sequencer Set 저장#
Sequencer 세트를 저장하려면:
- 다음 값 중 하나로
SequencerSetSelector파라미터를 원하는 Sequencer 세트로 설정합니다. - 다음을 실행합니다.
SequencerSetSave명령입니다.
모든 Sequencer set parameter의 값은 선택된 Sequencer set에 저장됩니다.
Sequencer Set 로드#
Sequencer set은 Sequencer 동작 중에 자동으로 로드됩니다. 그러나 테스트 목적이나 Sequencer 설정 목적을 위해 Sequencer set을 수동으로 로드하는 것도 유용할 수 있습니다.
Sequencer set을 수동으로 로드하는 방법:
- 다음 값 중 하나로
SequencerSetSelector파라미터를 원하는 Sequencer 세트로 설정합니다. - 다음을 실행합니다.
SequencerSetLoad명령입니다.
모든 Sequencer set parameter의 값은 덮어쓰여지며 선택된 Sequencer set에 저장된 값으로 대체됩니다.
Sequencer 구성#
Sequencer set을 구성한 후에는 Sequencer를 설정해야 합니다.
정보
- Sequencer를 구성하려면 Sequencer가 configuration mode에 있어야 합니다.
- Sequencer 구성에 변경된 모든 사항은 카메라 전원이 차단될 때 손실됩니다. 또한 Sequencer 설정은 user set에 저장할 수 없습니다. Basler에서는 카메라에 전원이 켜질 때마다 카메라를 재구성하기 위해 pylon API를 사용하여 적절한 프로그램 코드를 작성할 것을 권장합니다.
- SequencerSetActive chunk를 사용하면 사용된 Sequencer set을 추적할 수 있습니다. 활성화되면 각 이미지에는 이미지 취득에 사용된 Sequencer set의 인덱스 번호를 포함한 Chunk data가 포함됩니다.
Path 0 및 Path 1#
Sequencer를 제어하려면 소위 "경로(path)"라고 하는 두 가지를 설정해야 합니다.
-
Path 1을 사용하면 사용 가능한 Sequencer set을 순환할 수 있습니다(Sequencer set advance). Sequencer가 "path 1" Trigger Source 신호를 받을 때마다 Sequencer는 다음 세트로 이동합니다. 예시:
-
Path 0을 사용하면 주기를 재설정할 수 있습니다(Sequencer set reset). Sequencer가 "path 0" Trigger Source 신호를 받을 때마다 Sequencer는 Sequencer set 0에서 주기를 다시 시작합니다. 예시:
Path 0 설정#
Path 0을 설정하려면 "path 0" Trigger Source 신호, 즉 Sequencer set Reset 신호로 사용할 source signal을 지정해야 합니다.
Path 0의 Source signal로 하드웨어 신호 또는 소프트웨어 신호를 선택할 수 있습니다. Source 설정은 Sequencer set 0에 저장되어야 합니다.
Path 0의 Source signal을 지정하는 방법:
- Sequencer set 0을 Load합니다.
- 다음 값 중 하나로
SequencerPathSelector파라미터를 0으로 설정하십시오. - 다음 값 중 하나로
SequencerTriggerSource매개변수를 다음 값 중 하나로 설정합니다:Line1,Line3, 또는Line4: Sequencer set reset은 입력 라인 1, GPIO 라인 3 또는 GPIO 라인 4를 통해 제어할 수 있습니다.SoftwareSignal1,SoftwareSignal2, 또는SoftwareSignal3: Sequencer set reset은 다음을 사용하여 제어할 수 있습니다. Software Signal Pulse feature.
- Sequencer 세트 0을 저장합니다.
정보
- 실시간 애플리케이션의 경우, Basler에서는 소프트웨어 명령을 통해 Sequencer set reset을 제어하지 않는 것을 강력히 권장합니다. 신호 처리 및 전송으로 인해 소프트웨어 명령 발행과 Sequencer set reset 사이에 지정되지 않은 지연이 발생합니다. 따라서 소프트웨어 명령 전송과 해당 명령 적용 사이에 발생할 수 있는 이미지 취득 횟수는 예측할 수 없습니다.
- Path 0과 path 1에 동일한 Trigger Source를 사용하지 마십시오.
Path 1 설정#
Trigger Source 지정#
먼저 "path 1" Trigger Source 신호, 즉 Sequencer set Advance 신호로 사용할 source signal을 지정해야 합니다.
Path 1의 Source signal로 Frame Start Trigger Source 신호, 하드웨어 신호, 소프트웨어 신호 또는 Counter를 선택할 수 있습니다. Source 설정은 Sequencer set 0에 저장되어야 합니다.
Path 1의 Source signal을 지정하는 방법:
- Sequencer set 0을 Load합니다.
- 다음 값 중 하나로
SequencerPathSelector파라미터를 1로 설정합니다. - 다음 값 중 하나로
SequencerTriggerSource매개변수를 다음 값 중 하나로 설정합니다:FrameStart: Sequencer set advance는 다음과 같이 자동으로 발생합니다. Frame Start Trigger 신호가 수신됩니다.Line1,Line3, 또는Line4: Sequencer set advance는 input line 1, GPIO line 3 또는 GPIO line 4를 통해 제어할 수 있습니다. GPIO 라인 중 하나를 사용하려면 해당 라인이 입력용으로 설정되어 있어야 합니다. 지정된 라인이 Low(0) 상태인 동안 frame start trigger 신호가 수신되면 Sequencer가 진행되지 않고 현재 세트가 이미지 획득에 다시 사용됩니다. Frame Start 트리거 신호가 수신되는 동안 라인이 High(1) 상태이면 Sequencer가 진행되며 사이클의 다음 Sequencer set이 이미지 획득에 사용됩니다.SoftwareSignal1,SoftwareSignal2, 또는SoftwareSignal3: Sequencer set advance는 다음을 사용하여 제어할 수 있습니다. Software Signal Pulse feature.Counter2End: Sequencer set advance는 Counter를 사용하여 제어할 수 있습니다..
- Sequencer 세트 0을 저장합니다.
사용할 Sequencer Sets 지정#
둘째, Sequencer 동작 중에 사용할 sequencer sets를 지정해야 합니다.
기본적으로 32개의 모든 Sequencer set이 사용됩니다. "path 1" 트리거 신호가 수신됨에 따라 Sequencer는 Sequencer set 인덱스 번호를 0부터 31까지 오름차순으로 진행합니다. 그 후 사이클이 0에서 다시 시작됩니다.
더 적은 수의 Sequencer set을 사용하려면:
-
사용할 가장 높은 인덱스 번호의 Sequencer set을 Load합니다.
예시: 다섯 개의 Sequencer set을 구성했으며 다음과 같은 사이클을 설정하려고 한다고 가정해 보겠습니다.이 사이클에서 가장 높은 Sequencer set 인덱스 번호는 4입니다. 따라서 Sequencer set 4를 Load합니다. 2. 다음 파라미터를
SequencerPathSelector1로 설정합니다. 3. 다음 파라미터를SequencerSetNext0으로 설정합니다. 4. Sequencer set을 Save 합니다.
이제 작동 중에 Sequencer는 가장 높은 인덱스 번호를 가진 세트 이후에 Sequencer set 0으로 전환됩니다. 이것으로 "원형이 완성"됩니다.
정보
- 실시간 애플리케이션의 경우 Basler에서는 소프트웨어 명령을 통해 Sequencer set advance를 제어하지 않는 것을 적극 권장합니다. 신호 처리 및 전송으로 인해 소프트웨어 명령 발행과 Sequencer set advance 사이에 지정되지 않은 지연이 발생합니다. 따라서 소프트웨어 명령을 보낸 시점과 실제로 적용되는 시점 사이에 발생할 수 있는 이미지 획득 횟수는 예측할 수 없습니다.
- Path 0과 path 1에 동일한 Trigger Source를 사용하지 마십시오.
Counter를 사용하여 Sequencer 제어하기#
만약 path 1의 소스 신호 설정 (으)로 Counter2End, Counter를 사용하여 Sequencer set advance를 제어할 수 있습니다.
이는 Sequencer set을 연속으로 여러 번 사용하는 고정된 시퀀스를 설정하려는 경우에 유용합니다.
각 Sequencer set에 대해 해당 세트를 연속으로 몇 번 사용할지 지정하는 파라미터를 CounterDuration 설정할 수 있습니다. 기본적으로 이 파라미터는 모든 세트에 대해 1로 설정되며 각 시퀀스 세트는 사이클당 한 번씩 사용됩니다.
예시: 다음과 같은 Sequencer set 사이클을 설정하려고 한다고 가정해 보겠습니다.
위의 Sequencer set 사이클을 설정하려면:
- Sequencer set 0을 Load합니다.
- 다음 값 중 하나로
SequencerPathSelector파라미터를 1로 설정합니다. - 다음 값 중 하나로
SequencerTriggerSource매개변수:Counter2End. - Sequencer 세트 0을 저장합니다.
- 다음 값 중 하나로
CounterSelector매개변수:Counter2. -
다음 값 중 하나로
CounterDuration각 Sequencer set에 대한 parameter:- Sequencer set 0, 2, 3, 4는 주기당 한 번만 사용해야 합니다. 따라서 이 세트들을 건너뛰고
CounterDuration파라미터를 기본값인 1로 유지할 수 있습니다. - Sequencer set 1은 연속으로 세 번 사용해야 합니다. 불러오기 Sequencer set 1의 경우,
CounterDurationparameter를 3으로 설정하고, save Sequencer set 1입니다. - Sequencer set 5는 연속으로 두 번 사용해야 합니다. 불러오기 Sequencer set 5의 경우,
CounterDurationparameter를 2로 설정하고, save Sequencer set 5입니다.
- Sequencer set 0, 2, 3, 4는 주기당 한 번만 사용해야 합니다. 따라서 이 세트들을 건너뛰고
추가 Parameters#
이 SequencerSetStart 및 SequencerTriggerActivation parameter들은 Sequencer의 작동도 제어합니다. 그러나 이 parameter들은 사전 설정되어 있어 변경할 수 없습니다.
샘플 코드#
// ** 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를 사용하여 파라미터를 손쉽게 설정할 수 있습니다.