Sequencer (ace 2 및 boost R)#
sequencer set이라고 하는 파라미터 설정 세트를 최대 32개까지 정의할 수 있습니다. 카메라는 트리거 신호를 수신할 때마다 하나의 sequencer set을 차례대로 적용합니다.
예를 들어 Sequencer 기능을 사용하여 사전 설정된 Image ROI 또는 Exposure Time 간에 빠르게 전환할 수 있습니다.
기능 사용법#
Sequencer Modes#
- sequencer configuration mode에서는 Sequencer를 구성할 수 있지만 작동할 수는 없습니다.
- sequencer mode에서는 Sequencer를 작동할 수 있지만 구성할 수는 없습니다.
Sequencer Configuration Mode#
sequencer configuration mode를 활성화하려면:
- 다음 값 중 하나로
SequencerMode매개변수:Off. - 다음 값 중 하나로
SequencerConfigurationMode매개변수:On.
이제 Sequencer를 configure할 수 있습니다.
정보
- 구성 모드에서는 일부 카메라 파라미터를 사용하지 못할 수 있습니다(즉, 읽기 전용으로 설정됨). 어떤 파라미터를 사용할 수 있는지 확인하려면 pylon Viewer의 Features - All 창을 확인하십시오.
Sequencer Mode#
sequencer mode를 활성화하려면 다음을 설정하십시오. SequencerMode 매개변수: On. 이렇게 하면 sequencer configuration mode가 자동으로 비활성화됩니다.
이제 Sequencer가 트리거 신호를 수신하고 구성된 대로 advance할 준비가 되었습니다.
정보
- 기본적으로 sequencer mode를 활성화하면 카메라는 즉시 sequencer set 0을 로드합니다. 이 동작을 변경하려면 다음을 설정하십시오.
SequencerSetStart파라미터를 원하는 시작 세트로 설정합니다. - sequencer mode에서는 일부 카메라 파라미터를 사용하지 못할 수 있습니다(즉, 읽기 전용으로 설정됨). 어떤 파라미터를 사용할 수 있는지 확인하려면 pylon Viewer의 Features - All 창을 확인하십시오.
- 시퀀서 모드에서는 일부 카메라 매개변수 값이 구성된 시퀀서 세트를 기반으로 계산됩니다:
- 이
PayloadSize파라미터 값은 구성된 가장 큰 sequencer set의 크기를 반영합니다. - 이미지 버스트의 최대 가능 이미지 수, 즉
AcquisitionBurstFrameCount파라미터의 최대값은 구성된 가장 큰 sequencer set을 사용하여 계산됩니다.
- 이
- 이 값 및 기타 특정 구성 설정에 기반하여 카메라에서 달성할 수 있는 프레임 레이트를 평가하기 위해
SequencerSetActive현재 활성화된 시퀀서 세트를 확인하기 위한 매개변수. - 가능한 경우, ‘Sequencer ’의 ‘Set Active’ 청크를 사용하여 사용된 시퀀서 세트를 추적할 수 있습니다. 이 기능이 활성화되면 각 이미지에는 이미지 획득에 사용된 시퀀서 세트의 인덱스 번호를 포함한 청크 데이터가 포함됩니다.
- 일부 카메라의 경우, 시퀀서 모드를 활성화하면 중첩 이미지 획득 기능이 비활성화되어 카메라의 최대 프레임 속도가 낮아집니다. 이는 이 표에 수록된 모든 카메라 중 “중첩 이미지 획득 가능 여부”가 “카메라가 자유 실행 이미지 획득 모드로 설정된 경우에만”으로 명시된 모델에 해당합니다.
Sequencer Set 구성 요소#
시퀀스 세트에는 사용 가능한 경우 다음 매개변수가 포함됩니다:
AutoFunctionROIWidthaAutoFunctionROIHeightaAutoFunctionROIOffsetXaAutoFunctionROIOffsetYaBinningHorizontalabBinningVerticalabBinningHorizontalModeabBinningVerticalModeabBslFlatFieldCorrectionModeBslFlatFieldCorrectionSetIndexExposureTimecGainHeightadOffsetXadOffsetYadPixelFormataSequencerSetNextSequencerTriggerActivationSequencerTriggerSourceWidthad
-
Basler ace 2 V 및 boost 카메라에서는 사용할 수 없습니다.
-
FPGA binning에 대한 설정만 저장됩니다.
-
Sequencer를 작동하거나 구성할 때 exposure time mode는 Standard 또는 Common으로 사전 설정되며 변경할 수 없습니다.
-
Sequencer를 작동하거나 구성할 때 Multiple ROI 기능은 비활성화됩니다.
기타 모든 카메라 매개변수는 Sequencer 기능을 사용하여 제어할 수 없습니다.
정보
Sequencer 세트를 로드하거나 저장하면 변경하지 않은 항목을 포함하여 항상 위 파라미터 전부가 로드되거나 저장됩니다. 예를 들어 Exposure Time만 변경하고 다른 모든 파라미터를 기본값으로 둔 경우, 다른 모든 파라미터의 값도 함께 저장되며 로드 시 덮어쓰여집니다.
Sequencer 구성#
Basler는 두 단계로 Sequencer를 구성할 것을 권장합니다.
- 원하는 카메라 설정(예: Exposure Time 또는 Image ROI)으로 Populate the sequencer sets을 수행합니다.
- 즉, Sequencer가 한 세트에서 다음 세트로 진행하는 방법과 시기를 정의하는 Configure sequencer set advance를 수행합니다.
Sequencer Sets 채우기#
각 Sequencer 세트에는 0에서 31 사이의 고유한 인덱스 번호가 있습니다. 원하는 카메라 설정(예: Exposure Time 또는 Image ROI)으로 세트를 채울 수 있습니다.
Sequencer 세트를 채우려면:
- Sequencer가 Configuration Mode에 있는지 확인합니다.
- Sequencer 세트에 저장하려는 camera parameters를 구성합니다.
- 다음 값 중 하나로
SequencerSetSelector파라미터를 원하는 세트의 인덱스 번호로 설정합니다. - 다음을 실행합니다.
SequencerSetSave명령입니다. - 사용하려는 모든 set에 대해 2~4단계를 반복합니다.
예시: 세트 0과 세트 1을 서로 다른 Image ROI 설정으로 채우려고 한다고 가정해 보겠습니다. 방법은 다음과 같습니다.
- 다음을 조정하여 첫 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY파라미터 값입니다. - 세트 0을 저장합니다.
- 다음 항목에 다른 값을 선택하여 두 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY파라미터의 상태를 업데이트합니다. - 세트 1을 저장합니다.
그런 다음 Configure sequencer set advance를 수행하여 카메라가 두 Image ROI 사이를 빠르게 전환하도록 할 수 있습니다.
Sequencer Set Advance 구성#
Sequencer를 제어하려면 Sequencer가 한 세트에서 다음 세트로 진행하는 방법과 시기를 정의해야 합니다.
각 Sequencer 세트에 대해 다음 사항을 정의해야 합니다.
| 기준 | Parameter |
|---|---|
| 다음 세트는 무엇이어야 하는가? | SequencerSetNext |
| 어떤 트리거 신호에서 Sequencer가 다음 세트로 진행해야 하는가? | SequencerTriggerSource |
| 트리거 신호가 유효하다고 간주되는 시점은 언제인가(예: 신호의 상승 에지 또는 하강 에지)? | SequencerTriggerActivation |
필요한 경우 소위 path를 구성하여 각 세트에 대해 위 내용을 두 번 정의할 수 있습니다. 예를 들어, Line 3의 트리거 신호가 수신되면 세트 1로 진행(= path 0)하고, Line 4의 트리거 신호가 수신되면 세트 3으로 진행(= path 1)하도록 정의할 수 있습니다.
이 모든 설정이 완료되면 카메라는 Sequencer 세트 간에 전환해야 하는 시기와 방법을 정확히 알 수 있으며, 기본적으로 state machine처럼 작동합니다.
Sequencer Set Advance는 프레임 트리거와 무관합니다.
Sequencer는 이미지 취득과 무관하게 진행될 수 있습니다. 카메라도 프레임 트리거 신호를 수신할 때 활성 세트인 세트를 사용하여 항상 이미지를 취득합니다.
예를 들어, input line 3을 사용하여 Sequencer Set Advance를 트리거하고 line 4를 사용하여 이미지 촬영을 트리거할 수 있습니다.
원하는 경우 동기화 Sequencer Advance를 이미지 취득과 동기화하려면 Sequencer Trigger Source를 다음으로 설정하는 것이 좋습니다. ExposureStart.
Sequencer와 Frame Start Trigger Source를 동일한 신호 소스로 설정하지 마십시오. 그렇지 않으면 카메라가 예상치 못한 동작을 보일 수 있습니다.
Sequencer Set Advance를 구성하려면:
- Sequencer가 Configuration Mode에 있는지 확인합니다.
- 다음 값 중 하나로
SequencerSetSelector파라미터를 first 구성할 Sequencer Set으로 설정합니다. - 다음을 실행합니다.
SequencerSetLoad명령입니다. - 경로 0에 대한 Sequencer Set Advance 구성:
- 다음 값 중 하나로
SequencerPathSelector파라미터를 0으로 설정하십시오. - 다음 값 중 하나로
SequencerSetNext파라미터를 다음에 구성할 세트로 설정합니다. - 다음 값 중 하나로
SequencerTriggerSource파라미터를 다음 세트로 진행하는 데 사용할 소스 신호로 설정합니다.
사용 가능한 트리거 소스 신호 중 하나를 선택할 수 있습니다(예:Line1또는ExposureStart. - High(1) 또는 Low(0) 상태가 될 수 있는 Trigger Source, 즉 I/O 신호를 선택한 경우 다음을 설정하십시오.
SequencerTriggerActivation매개변수를 다음 값 중 하나로 설정합니다:RisingEdge(기본값): 소스 신호가 상승할 때, 즉 신호 상태가 low에서 high로 바뀔 때 Timer가 시작됩니다.FallingEdge: 소스 신호가 하강할 때, 즉 신호 상태가 high에서 low로 바뀔 때 Timer가 시작됩니다.AnyEdge: 소스 신호가 하강 또는 상승할 때.LevelHigh: 소스 신호가 다음과 같을 때 Sequencer가 진행됩니다. high. Sequencer Set이 로드될 때 이미 신호가 High 상태인 경우, Sequencer는 즉시 다음 세트로 진행됩니다. 이는 이미지 취득과 관계없이 발생합니다.LevelLow: 소스 신호가 다음과 같을 때 Sequencer가 진행됩니다. low. Sequencer Set이 로드될 때 이미 신호가 Low 상태인 경우, Sequencer는 즉시 다음 세트로 진행됩니다. 이는 이미지 취득과 관계없이 발생합니다.
- 다음 값 중 하나로
- 카메라가 다른 세트로 진행되도록 하는 두 번째 조건을 정의하려면
SequencerPathSelector파라미터를 1로 설정하여 4단계를 반복합니다. - 다음을 실행합니다.
SequencerSetSave명령입니다. - 다음 값 중 하나로
SequencerSetSelector파라미터를 다음 구성할 Sequencer Set으로 설정합니다. - 원하는 모든 세트에 대해 3단계부터 7단계까지 반복합니다.
예제#
예제 1: 세트 순환#
이미지 취득 중에 Sequencer Set 0, 1, 2를 순환하려 한다고 가정해 보겠습니다. 카메라가 이미지를 취득할 때마다 Sequencer는 다음 세트로 진행되어야 합니다.
이를 달성하려면 Sequencer를 다음과 같이 설정합니다.
| Sequencer Set Selector | Sequencer Path Selector | Sequencer Trigger Source | Sequencer Trigger Activation | Sequencer Set Next |
|---|---|---|---|---|
| 0 | 0 | ExposureStart | - | 1 |
| 1 | 0 | ExposureStart | - | 2 |
| 2 | 0 | ExposureStart | - | 0 |
위와 같이 Sequencer를 설정할 때 작동하는 방식은 다음과 같습니다.
- 활성화되면 Sequencer는 셋 0(기본값)으로 시작하여 첫 번째 이미지의 노출을 대기합니다.
- 그 시점에서 카메라는 현재 Sequencer 셋 0을 이미지에 적용한 후 셋 1로 이동합니다.
- 다음 노출이 시작되면 카메라는 셋 1을 적용하고 셋 2로 이동합니다.
- 다음 노출이 시작되면 카메라는 셋 2를 적용하고 셋 0으로 이동합니다.
- 이제 Sequencer가 셋 0으로 돌아갔으며, 위에서 설명한 프로세스가 반복됩니다.
예제 2: Counter 및 여러 경로 사용#
매 n번째 이미지 취득마다 특정 셋으로 이동하도록 Sequencer를 설정할 수 있습니다.
여기에는 Counter 기능을 사용하고 여러 경로를 구성하는 작업이 포함됩니다.
이미지 취득 중 Sequencer 셋 0과 1 사이를 번갈아 가며 사용하되, 첫 번째 이미지와 매 10번째 이미지에는 Sequencer 셋 2를 사용한다고 가정해 보겠습니다.
이를 달성하려면:
- 다음 값 중 하나로
SequencerStartSet파라미터를 2로 설정합니다. -
counter 1을 다음과 같이 구성합니다.
CounterDuration= 10CounterEventSource=ExposureStartCounterResetSource=Counter1End
-
아래 표에 표시된 대로 Sequencer를 설정합니다.
| Sequencer Set Selector | Sequencer Path Selector | Sequencer Trigger Source | Sequencer Trigger Activation | Sequencer Set Next |
|---|---|---|---|---|
| 0 | 0 | ExposureActive | FallingEdge | 1 |
| 0 | 1 | Counter1End | - | 2 |
| 1 | 0 | ExposureActive | FallingEdge | 0 |
| 1 | 1 | Counter1End | - | 2 |
| 2 | 0 | ExposureActive | FallingEdge | 0 |
정보
- 이미지 취득을 시작하기 전에 counter가 재설정(reset)되었는지 확인하십시오. 그렇지 않으면 카운트되지 않습니다.
- 위 구성에서 counter는 Exposure Start 신호를 사용하여 트리거되는 반면, Sequencer 셋 이동은 하강 에지 활성화가 적용된 Exposure Active 신호를 사용하여 트리거된다는 점에 유의하십시오. 이는 경로 0과 경로 1 간의 타이밍 충돌을 방지하는 데 도움이 됩니다.
위와 같이 Sequencer를 설정할 때 작동하는 방식은 다음과 같습니다.
- 활성화되면 Sequencer는 셋 2로 시작하여 첫 번째 이미지의 노출을 대기합니다.
- 첫 번째 노출이 시작되면 Exposure Start 이벤트를 카운트하도록 설정되어 있기 때문에 Counter 1이 0에서 1로 증가합니다.
- 첫 번째 노출이 종료될 때, 즉 Exposure Active 신호가 하강할 때 Sequencer는 set 0으로 진행합니다.
- 다음 8회의 이미지 취득 동안 Sequencer는 set 0과 set 1 사이를 번갈아 전환하며 Counter는 계속 증가합니다. Sequencer는 노출이 끝날 때마다, 즉 Exposure Active 신호가 하강할 때 진행됩니다.
- 10번째번째 이미지의 노출이 시작되면 Counter가 최대값(,
CounterDuration= 10)에 도달하여 스스로를 리셋하고, 카메라는 Counter 1 End 신호를 보냅니다. 이를 통해 Sequencer는 path 1에서 set 2로 진행하며, 이전 path 0 Trigger Source 조건(,ExposureActive,FallingEdge)이 유효해집니다. - 이제 Sequencer가 set 2로 돌아왔으며 위에서 설명한 프로세스가 반복됩니다.
예제 3: 런타임 시 선택#
필요에 따라 런타임에 Sequencer set을 선택하도록 Sequencer를 설정할 수 있습니다.
여기에는 여러 I/O 라인을 Trigger Source로 설정하고 LevelLow 및 LevelHigh 옵션을 사용하는 것이 SequencerTriggerActivation 파라미터.
포함됩니다. 입력 라인 2와 3의 신호 상태(0 = low, 1 = high)를 사용하여 Sequencer set 선택을 제어하려고 한다고 가정해 보겠습니다. 라인 상태에 따라 Sequencer가 다음과 같이 작동하도록 하려고 합니다:
| 신호 상태 라인 2 | 신호 상태 라인 3 | 선택된 Set |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 2 |
| 1 | 1 | 3 |
이를 달성하려면 Sequencer를 다음과 같이 설정합니다.
| Sequencer Set Selector | Sequencer Path Selector | Sequencer Trigger Source | Sequencer Trigger Activation | Sequencer Set Next |
|---|---|---|---|---|
| 0 | 0 | Line3 | LineHigh | 1 |
| 0 | 1 | Line2 | LineHigh | 2 |
| 1 | 0 | Line3 | LineLow | 0 |
| 1 | 1 | Line2 | LineHigh | 3 |
| 2 | 0 | Line3 | LineHigh | 3 |
| 2 | 1 | Line2 | LineLow | 0 |
| 3 | 0 | Line3 | LineLow | 2 |
| 3 | 1 | Line2 | LineLow | 1 |
위와 같이 Sequencer를 설정할 때 작동하는 방식은 다음과 같습니다.
- 두 신호가 모두 low인 동안에는 Line 2와 Line 3의 Trigger Source가 비활성 상태로 유지됩니다. 이는 Trigger Activation이
LineHigh(으)로 설정되어 있기 때문입니다. 표의 1행과 2행을 참조하십시오. 따라서 Sequencer는 set 0에 유지됩니다. - Line 3의 신호가 상승하면
LineHighactivation이 발생하고 Sequencer는 set 0에서 set 1로 즉시 진행합니다. 표의 1행을 참조하십시오. Line 2가 여전히 low 상태이므로 Sequencer는 set 1에 유지됩니다. - Line 2의 신호도 상승하면 Sequencer는 Set 1에서 Set 3으로 진행합니다. 표의 4번째 행을 참조하십시오.
- Line 2의 신호가 하강하면 Sequencer는 다시 Set 1로 돌아갑니다. 표의 8번째 행을 참조하십시오.
- Line 3의 신호도 하강하면 Sequencer는 다시 Set 0으로 돌아갑니다. 표의 3번째 행을 참조하십시오.
정보
- 이는 예를 들어 두 I/O 라인의 status를 High에서 Low로 동시에 전환하는 등 양쪽 라인의 I/O 신호를 동시에 변경할 때도 작동합니다.
- 이미지 획득은 별도로 트리거되어야 합니다. I/O Line Status가 변경되면 프레임 사이에 Sequencer가 여러 번 진행될 수 있습니다.
샘플 코드#
// ** Populating the Sequencer Sets **
// Enable sequencer configuration mode
camera.SequencerMode.SetValue(SequencerMode_Off);
camera.SequencerConfigurationMode.SetValue(SequencerConfigurationMode_On);
// Configure parameters to be stored in the first sequencer set
camera.Width.SetValue(600);
camera.Height.SetValue(300);
// Select sequencer set 0 and save the parameter values
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetSave.Execute();
// Configure parameters to be stored in the second sequencer set
camera.Width.SetValue(800);
camera.Height.SetValue(600);
// Select sequencer set 1 and save the parameter values
camera.SequencerSetSelector.SetValue(1);
camera.SequencerSetSave.Execute();
// Enable sequencer mode to operate the sequencer
camera.SequencerMode.SetValue(SequencerMode_On);
// ** Configuring sequencer set advance **
// Assume you want to alternate between sequencer sets 0 and 1 using input line 3
// Enable sequencer configuration mode
camera.SequencerMode.SetValue(SequencerMode_Off);
camera.SequencerConfigurationMode.SetValue(SequencerConfigurationMode_On);
// Set the start set to set 0
camera.SequencerSetStart.SetValue(0);
// Load and configure sequencer set 0
camera.SequencerSetSelector.SetValue(0);
camera.SequencerSetLoad.Execute();
camera.SequencerPathSelector.SetValue(0);
camera.SequencerSetNext.SetValue(1);
camera.SequencerTriggerSource.SetValue(SequencerTriggerSource_Line3);
camera.SequencerTriggerActivation.SetValue(SequencerTriggerActivation_RisingEdge);
// Save the changes
camera.SequencerSetSave.Execute();
// Load and configure sequencer set 1
camera.SequencerSetSelector.SetValue(1);
camera.SequencerSetLoad.Execute();
camera.SequencerPathSelector.SetValue(0);
camera.SequencerSetNext.SetValue(0);
camera.SequencerTriggerSource.SetValue(SequencerTriggerSource_Line3);
camera.SequencerTriggerActivation.SetValue(SequencerTriggerActivation_RisingEdge);
// Save the changes
camera.SequencerSetSave.Execute();
// Enable sequencer mode to operate the sequencer
camera.SequencerMode.SetValue(SequencerMode_On);
INodeMap& nodemap = camera.GetNodeMap();
// ** Populating the Sequencer Sets **
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Configure parameters to be stored in the first sequencer set
CIntegerParameter(nodemap, "Width").SetValue(600);
CIntegerParameter(nodemap, "Height").SetValue(300);
// Select sequencer set 0 and save the parameter values
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Configure parameters to be stored in the second sequencer set
CIntegerParameter(nodemap, "Width").SetValue(800);
CIntegerParameter(nodemap, "Height").SetValue(600);
// Select sequencer set 1 and save the parameter values
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(1);
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Configuring sequencer set advance **
// Assume you want to alternate between sequencer sets 0 and 1 using input line 3
// Enable sequencer configuration mode
CEnumParameter(nodemap, "SequencerMode").SetValue("Off");
CEnumParameter(nodemap, "SequencerConfigurationMode").SetValue("On");
// Set the start set to set 0
CIntegerParameter(nodemap, "SequencerSetStart").SetValue(0);
// Load and configure sequencer set 0
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(0);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(0);
CIntegerParameter(nodemap, "SequencerSetNext").SetValue(1);
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("Line3");
CEnumParameter(nodemap, "SequencerTriggerActivation").SetValue("RisingEdge");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Load and configure sequencer set 1
CIntegerParameter(nodemap, "SequencerSetSelector").SetValue(1);
CCommandParameter(nodemap, "SequencerSetLoad").Execute();
CIntegerParameter(nodemap, "SequencerPathSelector").SetValue(0);
CIntegerParameter(nodemap, "SequencerSetNext").SetValue(0);
CEnumParameter(nodemap, "SequencerTriggerSource").SetValue("Line3");
CEnumParameter(nodemap, "SequencerTriggerActivation").SetValue("RisingEdge");
// Save the changes
CCommandParameter(nodemap, "SequencerSetSave").Execute();
// Enable sequencer mode to operate the sequencer
CEnumParameter(nodemap, "SequencerMode").SetValue("On");
// ** Populating the Sequencer Sets **
// Enable sequencer configuration mode
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.Off);
camera.Parameters[PLCamera.SequencerConfigurationMode].SetValue(PLCamera.SequencerConfigurationMode.On);
// Configure parameters to be stored in the first sequencer set
camera.Parameters[PLCamera.Width].SetValue(600);
camera.Parameters[PLCamera.Height].SetValue(300);
// Select sequencer set 0 and save the parameter values
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Configure parameters to be stored in the second sequencer set
camera.Parameters[PLCamera.Width].SetValue(800);
camera.Parameters[PLCamera.Height].SetValue(600);
// Select sequencer set 1 and save the parameter values
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(1);
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Enable sequencer mode to operate the sequencer
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.On);
// ** Configuring sequencer set advance **
// Assume you want to alternate between sequencer sets 0 and 1 using input line 3
// Enable sequencer configuration mode
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.Off);
camera.Parameters[PLCamera.SequencerConfigurationMode].SetValue(PLCamera.SequencerConfigurationMode.On);
// Set the start set to set 0
camera.Parameters[PLCamera.SequencerSetStart].SetValue(0);
// Load and configure sequencer set 0
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetNext].SetValue(1);
camera.Parameters[PLCamera.SequencerTriggerSource].SetValue(PLCamera.SequencerTriggerSource.Line3);
camera.Parameters[PLCamera.SequencerTriggerActivation].SetValue(PLCamera.SequencerTriggerActivation.RisingEdge);
// Save the changes
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Load and configure sequencer set 1
camera.Parameters[PLCamera.SequencerSetSelector].SetValue(1);
camera.Parameters[PLCamera.SequencerSetLoad].Execute();
camera.Parameters[PLCamera.SequencerPathSelector].SetValue(0);
camera.Parameters[PLCamera.SequencerSetNext].SetValue(0);
camera.Parameters[PLCamera.SequencerTriggerSource].SetValue(PLCamera.SequencerTriggerSource.Line3);
camera.Parameters[PLCamera.SequencerTriggerActivation].SetValue(PLCamera.SequencerTriggerActivation.RisingEdge);
// Save the changes
camera.Parameters[PLCamera.SequencerSetSave].Execute();
// Enable sequencer mode to operate the sequencer
camera.Parameters[PLCamera.SequencerMode].SetValue(PLCamera.SequencerMode.On);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK; /* Return value of pylon methods */
/* ** Populating the Sequencer Sets ** */
/* Enable sequencer configuration mode */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "Off");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
CHECK(errRes);
/* Configure parameters to be stored in the first sequencer set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 600);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 300);
CHECK(errRes);
/* Select sequencer set 0 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Configure parameters to be stored in the second sequencer set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 800);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 600);
CHECK(errRes);
/* Select sequencer set 1 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Enable sequencer mode to operate the sequencer */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "On");
CHECK(errRes);
/* ** Configuring sequencer set advance ** */
/* Assume you want to alternate between sequencer sets 0 and 1 using input line 3 */
/* Enable sequencer configuration mode */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "Off");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerConfigurationMode", "On");
CHECK(errRes);
/* Set the start set to set 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetStart", 0);
CHECK(errRes);
/* Load and configure sequencer set 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 0);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetNext", 1);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerSource", "Line3");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerActivation", "RisingEdge");
CHECK(errRes);
/* Save the changes */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Load and configure sequencer set 1 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetSelector", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerPathSelector", 0);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequencerSetNext", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerSource", "Line3");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequencerTriggerActivation", "RisingEdge");
CHECK(errRes);
/* Save the changes */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequencerSetSave");
CHECK(errRes);
/* Enable sequencer mode to operate the sequencer */
errRes = PylonDeviceFeatureFromString(hdev, "SequencerMode", "On");
CHECK(errRes);
# ** Populating the Sequencer Sets **
# Enable sequencer configuration mode
camera.SequencerMode.Value = "Off"
camera.SequencerConfigurationMode.Value = "On"
# Configure parameters to be stored in the first sequencer set
camera.Width.Value = 600
camera.Height.Value = 300
# Select sequencer set 0 and save the parameter values
camera.SequencerSetSelector.Value = 0
camera.SequencerSetSave.Execute()
# Configure parameters to be stored in the second sequencer set
camera.Width.Value = 800
camera.Height.Value = 600
# Select sequencer set 1 and save the parameter values
camera.SequencerSetSelector.Value = 1
camera.SequencerSetSave.Execute()
# Enable sequencer mode to operate the sequencer
camera.SequencerMode.Value = "On"
# ** Configuring sequencer set advance **
# Assume you want to alternate between sequencer sets 0 and 1 using input line 3
# Enable sequencer configuration mode
camera.SequencerMode.Value = "Off"
camera.SequencerConfigurationMode.Value = "On"
# Set the start set to set 0
camera.SequencerSetStart.Value = 0
# Load and configure sequencer set 0
camera.SequencerSetSelector.Value = 0
camera.SequencerSetLoad.Execute()
camera.SequencerPathSelector.Value = 0
camera.SequencerSetNext.Value = 1
camera.SequencerTriggerSource.Value = "Line3"
camera.SequencerTriggerActivation.Value = "RisingEdge"
# Save the changes
camera.SequencerSetSave.Execute()
# Load and configure sequencer set 1
camera.SequencerSetSelector.Value = 1
camera.SequencerSetLoad.Execute()
camera.SequencerPathSelector.Value = 0
camera.SequencerSetNext.Value = 0
camera.SequencerTriggerSource.Value = "Line3"
camera.SequencerTriggerActivation.Value = "RisingEdge"
# Save the changes
camera.SequencerSetSave.Execute()
# Enable sequencer mode to operate the sequencer
camera.SequencerMode.Value = "On"
또한 pylon Viewer를 사용하여 파라미터를 손쉽게 설정할 수 있습니다.