Sequencer (ace Classic/U/L USB)#
sequencer set이라고 하는 파라미터 설정 세트를 최대 32개까지 정의할 수 있습니다. 카메라는 이미지를 취득할 때 하나의 sequencer set을 차례대로 적용합니다. 이를 통해 최대 프레임 속도를 저하시키지 않고 카메라 파라미터를 빠르게 변경할 수 있습니다.
예를 들어 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 set을 사용하여 이미지를 취득할 때 overlapping image acquisition이 지원되지 않습니다. 새로운 sequence set을 로드하려면 카메라가 전체 노출 및 판독 프로세스를 완료해야 합니다. 결과적으로 프레임 속도가 크게 저하될 수 있습니다.
Sequencer 세트의 구성 요소#
Sequencer set에는 사용 가능한 경우 다음 파라미터가 포함됩니다.
AcquisitionFrameRateAcquisitionFrameRateEnableBalanceRatioBinningHorizontalBinningVerticalBlackLevelCenterXCenterYChunkEnableChunkModeActiveColorAdjustmentHueColorAdjustmentSaturationColorTransformationValueCounterDuration(Counter 2용)CounterEventSourceCounterResetSourceDigitalShiftExposureTimeGainHeightLUTEnableaOffsetXOffsetYPixelFormatbReverseXReverseYcScalingHorizontalSequencerSetNextSequencerSetPathSequencerSetSelectorSequencerSetStartSequencerTriggerActivationSequencerTriggerSourceTestImageSelectorTimerDelay(Timer 1용)TimerDuration(Timer 1용)Width
기타 모든 카메라 파라미터는 Sequencer 기능을 사용하여 제어할 수 없습니다.
-
파라미터가
Gamma로 설정되고 다음 항목인LightSourcePreset파라미터가 다음으로 설정된 경우에만 Light Control 기능과 함께 사용할 수 있음을 명시했습니다.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 세트 구성#
정보
- sequencer set을 설정하려면 sequencer가 configuration mode에 있어야 합니다.
- 카메라 전원이 차단되면 sequencer set에 대한 모든 변경 사항이 손실됩니다. 또한 sequencer 설정은 user set에 저장할 수 없습니다. 설정을 유지하려면 카메라가 켜질 때마다 pylon API를 사용하여 적절한 프로그램 코드를 작성하여 sequence set을 다시 채우는 것이 Basler에서 권장됩니다.
Sequencer 기능을 사용하려면 먼저 원하는 설정으로 sequencer set을 채워야 합니다. 각 sequencer set에는 0부터 31까지의 고유한 sequencer set 인덱스 번호가 있습니다.
Sequencer set을 입력하려면:
- Sequencer set 0에 저장하려는 sequencer set parameter를 구성합니다.
- Sequencer set 0을 저장합니다.
- 사용하려는 모든 sequencer set에 대해 1단계와 2단계를 반복합니다. 예를 들어 sequencer set 0, 1, 2, 3을 사용하는 경우와 같이 항상 인덱스 번호 0부터 시작하는 연속된 인덱스 번호 시리즈를 사용해야 합니다.
예: 두 개의 sequencer set이 필요하고 여기에 서로 다른 Image ROI 설정을 지정하려는 경우를 가정해 보겠습니다. 이 경우 다음을 수행합니다.
- 다음 파라미터 값을 조정하여 첫 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY파라미터 값. - Sequencer set 0을 저장합니다.
- 다음 항목에 대해 다른 값을 선택하여 두 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY매개변수. - Sequencer set 1을 저장합니다.
이제 sequencer를 구성하여 두 개의 Image ROI 사이를 빠르게 전환할 수 있습니다.
Sequencer 세트 저장#
Sequencer set을 저장하려면:
- 파라미터를 원하는
SequencerSetSelector파라미터를 원하는 sequencer set으로 설정합니다. - 다음을 실행합니다.
SequencerSetSavecommand.
모든 sequencer set parameter의 값이 선택한 sequencer set에 저장됩니다.
Sequencer 세트 불러오기#
Sequencer set은 Sequencer 작동 중에 자동으로 로드됩니다. 그러나 Sequencer set을 수동으로 로드하는 것은 테스트 목적이나 Sequencer를 설정하는 데 유용할 수 있습니다.
Sequencer set을 수동으로 로드하려면:
- 파라미터를 원하는
SequencerSetSelector파라미터를 원하는 sequencer set으로 설정합니다. - 다음을 실행합니다.
SequencerSetLoadcommand.
모든 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 데이터가 포함됩니다.
Path 0 및 Path 1#
Sequencer를 제어하려면 "경로(path)"라고 하는 두 가지 요소를 설정해야 합니다.
-
Path 1을 사용하면 사용 가능한 sequencer set을 순환할 수 있습니다(sequencer set advance). Sequencer가 "path 1" 트리거 신호를 수신할 때마다 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 신호로 사용할 소스 신호를 지정해야 합니다.
Path 0의 소스 신호로 하드웨어 신호 또는 소프트웨어 신호를 선택할 수 있습니다. 소스 설정은 Sequencer set 0에 저장되어야 합니다.
Path 0의 소스 신호를 지정하려면:
- 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 set 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 신호로 사용할 소스 신호를 지정해야 합니다.
Path 1의 소스 신호로 Frame Start Trigger Source, 하드웨어 신호, 소프트웨어 신호 또는 Counter를 선택할 수 있습니다. 소스 설정은 Sequencer set 0에 저장되어야 합니다.
Path 1의 소스 신호를 지정하려면:
- Sequencer set 0을 Load합니다.
- 파라미터를 원하는
SequencerPathSelector매개변수를 1로 설정합니다. - 파라미터를 원하는
SequencerTriggerSource파라미터를 설정하십시오:FrameStart: Sequencer set Advance는 다음과 같이 자동으로 발생합니다. Frame Start Trigger 신호가 수신됩니다.Line1,Line3, 또는Line4: Sequencer set Advance는 입력 라인 1, GPIO 라인 3 또는 GPIO 라인 4를 통해 제어할 수 있습니다. GPIO 라인 중 하나를 사용하려면 해당 라인이 입력용으로 구성되어야 합니다. 지정된 라인이 낮음(0) 상태인 동안 Frame Start Trigger 신호가 수신되면 Sequencer가 진전되지 않으며 이미지 취득에 현재 세트가 다시 사용됩니다. 지정된 라인이 높음(1) 상태인 동안 Frame Start Trigger 신호가 수신되면 Sequencer가 진전되며 이미지 취득에 사이클의 다음 Sequencer set이 사용됩니다.SoftwareSignal1,SoftwareSignal2, 또는SoftwareSignal3: Sequencer set Advance는 다음을 사용하여 제어할 수 있습니다. Software Signal Pulse feature.Counter2End: Sequencer set Advance는 Counter를 사용하여 제어할 수 있습니다..
- Sequencer set 0을 저장합니다.
사용할 Sequencer Sets 지정#
둘째, Sequencer 작동 중에 사용할 sequencer sets를 지정해야 합니다.
기본적으로 32개의 모든 sequencer sets가 사용됩니다. "path 1" 트리거 신호가 수신되면 sequencer는 sequencer set 인덱스 번호를 0에서 31까지 오름차순으로 진행합니다. 그 후 주기는 0에서 다시 시작됩니다.
더 적은 수의 sequencer sets를 사용하려면:
-
Load 사용할 가장 높은 인덱스 번호의 sequencer set.
예시: 5개의 sequencer sets를 configured했으며 다음 주기를 설정하려고 가정해 보겠습니다.이 주기에서 가장 높은 sequencer set 인덱스 번호는 4입니다. 따라서 sequencer set 4를 로드합니다. 2. 설정
SequencerPathSelector매개변수를 1로 설정합니다. 3. 설정SequencerSetNext매개변수를 0으로 설정합니다. 4. Save sequencer set입니다.
작동 중에 sequencer는 이제 가장 높은 인덱스 번호를 가진 세트 다음에 sequencer set 0으로 전환됩니다. 이것이 "루프를 닫습니다".
정보
- 실시간 애플리케이션의 경우 Basler는 소프트웨어 명령을 통해 sequencer set 진행을 제어하지 않는 것을 강력히 권장합니다. 신호 처리 및 전송으로 인해 소프트웨어 명령 발행과 sequencer set 진행 사이에 지정되지 않은 지연이 발생합니다. 따라서 소프트웨어 명령 전송과 그것이 적용되는 사이에 발생할 수 있는 이미지 취득 횟수는 예측할 수 없습니다.
- Path 0과 Path 1에 동일한 Trigger Source를 사용하지 마십시오.
Counter를 사용하여 Sequencer 제어#
만약 당신이 path 1의 소스 신호를 설정하는 경우 에서 Counter2End, Counter를 사용하여 sequencer set 진행을 제어할 수 있습니다.
이는 sequencer sets를 연속으로 여러 번 사용하는 고정된 시퀀스를 설정하려는 경우에 유용합니다.
각 sequencer set에 대해 다음을 설정할 수 있습니다. CounterDuration 매개변수를 사용하여 해당 세트를 연속으로 몇 번 사용할지 지정할 수 있습니다. 기본적으로 이 매개변수는 모든 세트에 대해 1로 설정되며, 각 sequence set는 주기당 한 번씩 사용됩니다.
예시: 다음과 같은 sequencer set 주기를 설정하려고 가정해 보겠습니다.
위의 sequencer set 주기를 설정하려면:
- Sequencer set 0을 Load합니다.
- 파라미터를 원하는
SequencerPathSelector매개변수를 1로 설정합니다. - 파라미터를 원하는
SequencerTriggerSource파라메터Counter2End. - Sequencer set 0을 저장합니다.
- 파라미터를 원하는
CounterSelector파라메터Counter2. -
파라미터를 원하는
CounterDuration각 sequencer set에 대한 매개변수:- Sequencer sets 0, 2, 3 및 4는 주기당 한 번만 사용됩니다. 따라서 이러한 세트는 건너뛰고 다음을 유지할 수 있습니다.
CounterDuration매개변수를 기본값인 1로 둡니다. - Sequencer set 1은 연속으로 세 번 사용됩니다. 로드 Sequencer set 1의 매개변수를
CounterDuration3으로 설정한 후 저장합니다 Sequencer set 1. - Sequencer set 5는 연속으로 두 번 사용됩니다. 로드 Sequencer set 5의 매개변수를
CounterDuration2로 설정한 후 저장합니다 Sequencer set 5.
- Sequencer sets 0, 2, 3 및 4는 주기당 한 번만 사용됩니다. 따라서 이러한 세트는 건너뛰고 다음을 유지할 수 있습니다.
추가 파라미터#
The SequencerSetStart 및 SequencerTriggerActivation 매개변수는 Sequencer의 작동도 제어합니다. 단, 이 매개변수들은 사전 설정되어 있어 변경할 수 없습니다.
샘플 코드#
// ** 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를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.