Sequencer (ace 2 및 boost R)#
Sequencer set이라고 하는 매개변수 설정 그룹을 최대 32개까지 정의할 수 있습니다. 카메라는 트리거 신호를 수신할 때마다 Sequencer set을 차례대로 적용합니다.
예를 들어 Sequencer 기능을 사용하여 사전 설정된 Image ROI 또는 Exposure Time 간에 빠르게 전환할 수 있습니다.
기능 사용#
Sequencer 모드#
- Sequencer configuration mode에서는 Sequencer를 구성할 수 있지만 작동할 수는 없습니다.
- Sequencer mode에서는 Sequencer를 작동할 수 있지만 구성할 수는 없습니다.
Sequencer 구성 모드#
sequencer configuration mode를 활성화하려면:
- 파라미터를 원하는
SequencerMode파라메터Off. - 파라미터를 원하는
SequencerConfigurationMode파라메터On.
이제 Sequencer를 구성할 수 있습니다.
정보
- 구성 모드에서는 일부 카메라 매개변수를 사용하지 못할 수 있으며, 즉 읽기 전용으로 설정됩니다. 어떤 매개변수를 사용할 수 있는지 확인하려면 pylon Viewer의 Features - All 창을 확인하세요.
Sequencer 모드#
Sequencer mode을 활성화하려면, SequencerMode 파라메터 On설정하세요. 그러면 Sequencer configuration mode이 자동으로 비활성화됩니다.
이제 Sequencer가 트리거 신호를 수신하고 구성된 대로 진행할 준비가 되었습니다.
정보
- 기본적으로 Sequencer mode을 활성화하면 카메라는 즉시 Sequencer set 0을 로드합니다. 이 동작을 변경하려면,
SequencerSetStart매개변수를 원하는 시작 세트로 설정하세요. - Sequencer mode에서는 일부 카메라 매개변수를 사용하지 못할 수 있으며, 즉 읽기 전용으로 설정됩니다. 어떤 매개변수를 사용할 수 있는지 확인하려면 pylon Viewer의 Features - All 창을 확인하세요.
- Sequencer mode에서는 구성된 Sequencer set을 기반으로 일부 카메라 매개변수 값이 계산됩니다.
- The
PayloadSize매개변수 값은 구성된 가장 큰 Sequencer set의 크기를 반영합니다. - 버스트 이미지의 최대 가능 이미지 수, 즉
AcquisitionBurstFrameCount매개변수의 최댓값은 구성된 가장 큰 Sequencer set을 사용하여 계산됩니다.
- The
- 다음 항목을 사용할 수 있습니다.
SequencerSetActive매개변수를 사용하여 현재 활성화된 Sequencer set을 확인하세요. - 사용 가능한 경우 Sequencer Set Active chunk를 사용하여 사용된 Sequencer set을 추적할 수 있습니다. 활성화되면 각 이미지에는 이미지 수집에 사용된 Sequencer set의 색인 번호가 포함된 청크 데이터가 포함됩니다.
- 일부 카메라에서는 Sequencer mode을 활성화하면 오버랩 이미지 수집이 비활성화되므로 카메라의 최대 프레임 속도가 낮아집니다. 이는 "오버랩 이미지 수집 가용성"이 "카메라도 프리런 이미지 수집으로 구성된 경우에만"으로 지정된 이 표의 모든 카메라에 적용됩니다.
Sequencer 세트의 구성 요소#
Sequencer set에는 사용 가능한 경우 다음 파라미터가 포함됩니다.
AutoFunctionROIWidthaAutoFunctionROIHeightaAutoFunctionROIOffsetXaAutoFunctionROIOffsetYaBinningHorizontalabBinningVerticalabBinningHorizontalModeabBinningVerticalModeabBslFlatFieldCorrectionModeBslFlatFieldCorrectionSetIndexExposureTimecGainHeightadOffsetXadOffsetYadPixelFormataSequencerSetNextSequencerTriggerActivationSequencerTriggerSourceWidthad
-
Basler ace 2 V 및 boost 카메라에서는 사용할 수 없습니다.
-
FPGA binning에 대한 설정만 저장됩니다.
-
Sequencer를 작동하거나 구성할 때 Exposure Time 모드는 Standard 또는 Common으로 사전 설정되며 변경할 수 없습니다.
-
Sequencer를 작동하거나 구성할 때 Multiple ROI 기능이 비활성화됩니다.
기타 모든 카메라 파라미터는 Sequencer 기능을 사용하여 제어할 수 없습니다.
정보
Sequencer set을 로드하거나 저장하면 변경하지 않은 항목을 포함하여 항상 위 매개변수 모두가 로드되거나 저장됩니다. 예를 들어 Exposure Time만 변경하고 다른 모든 매개변수를 기본값으로 둔 경우, 다른 모든 매개변수의 값도 저장되며 로드할 때 덮어씌워집니다.
Sequencer 구성#
Basler에서는 두 단계로 Sequencer를 구성할 것을 권장합니다.
- Sequencer set에 원하는 카메라 설정(예: Exposure Time 또는 Image ROI)을 입력합니다.
- Sequencer set advance를 구성합니다. 즉, Sequencer가 한 세트에서 다음 세트로 진행하는 방식과 시점을 정의합니다.
Sequencer Set 채우기#
각 Sequencer set에는 0부터 31까지의 고유한 인덱스 번호가 있습니다. 원하는 카메라 설정(예: Exposure Time 또는 Image ROI)을 세트에 채울 수 있습니다.
Sequencer set을 채우려면:
- Sequencer가 Configuration Mode에 있는지 확인합니다.
- Sequencer set에 저장하려는 camera parameter를 구성합니다.
- 파라미터를 원하는
SequencerSetSelectorparameter를 원하는 세트의 인덱스 번호로 설정합니다. - 다음을 실행합니다.
SequencerSetSavecommand. - 사용하려는 모든 set에 대해 2~4단계를 반복합니다.
예시: 세트 0과 1에 서로 다른 Image ROI 설정을 지정한다고 가정해 보겠습니다. 방법은 다음과 같습니다:
- 다음 파라미터 값을 조정하여 첫 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY파라미터 값. - 세트 0을 저장합니다.
- 다음 항목에 대해 다른 값을 선택하여 두 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY매개변수. - 세트 1을 저장합니다.
그런 다음 Sequencer set advance를 구성하여 카메라가 두 Image ROI 사이를 빠르게 전환하도록 할 수 있습니다.
Sequencer Set 전환(Advance) 구성#
Sequencer를 제어하려면 Sequencer가 한 세트에서 다음 세트로 진행하는 방식과 시점을 정의해야 합니다.
각 Sequencer set에 대해 다음 사항을 정의해야 합니다:
| 기준(Criterion) | Parameter |
|---|---|
| 다음 세트는 무엇이 되어야 하는가? | SequencerSetNext |
| 어떤 Trigger Source에서 Sequencer가 다음 세트로 진행해야 하는가? | SequencerTriggerSource |
| Trigger signal을 유효한 것으로 간주해야 하는 시점은 언제인가(예: 신호의 상승 에지 또는 하강 에지)? | SequencerTriggerActivation |
필요한 경우 path라고 하는 항목을 구성하여 각 세트에 대해 위 내용을 두 번 정의할 수 있습니다. 예를 들어, Line 3의 trigger signal이 수신되면 카메라가 세트 1로 진행하고(= path 0), Line 4의 trigger signal이 수신되면 세트 3으로 진행하도록(= path 1) 정의할 수 있습니다.
이 모든 설정이 완료되면 카메라는 Sequencer set 간에 전환되는 시점과 방식을 정확히 알 수 있으며, 본질적으로 state machine처럼 작동합니다.
Sequencer Set Advance는 프레임 트리거와 무관하게 작동합니다
Sequencer는 image acquisition과 관계없이 독립적으로 진행될 수 있습니다. 이미지는 카메가가 frame trigger signal을 수신할 당시 활성 상태인 세트를 사용하여 항상 획득됩니다.
예를 들어, 입력 라인 3을 사용하여 Sequencer set advance를 트리거하고, 라인 4를 사용하여 이미지 트리거를 수행할 수 있습니다.
원하는 경우 동기화하려면 image acquisition과 Sequencer advance를 동기화하려면 Basler는 Sequencer Trigger Source를 다음과 같이 설정할 것을 권장합니다: ExposureStart.
Sequencer와 frame start trigger source를 동일한 신호 소스로 설정하지 마십시오. 그렇지 않으면 카메라가 예측할 수 없는 동작을 보일 수 있습니다.
Sequencer set advance를 구성하려면:
- Sequencer가 Configuration Mode에 있는지 확인합니다.
- 파라미터를 원하는
SequencerSetSelector파라미터를 다음으로 설정: 첫 번째 구성할 Sequencer set입니다. - 다음을 실행합니다.
SequencerSetLoadcommand. - 경로 0에 대한 Sequencer set 전환을 구성합니다.
- 파라미터를 원하는
SequencerPathSelector매개변수를 0으로 설정합니다. - 파라미터를 원하는
SequencerSetNext다음에 구성할 set에 대한 파라미터입니다. - 파라미터를 원하는
SequencerTriggerSource다음 set으로 진행하는 데 사용할 소스 신호에 대한 파라미터입니다.
사용 가능한 트리거 소스 신호(예:Line1또는ExposureStart. - High(1) 또는 Low(0) 상태를 가질 수 있는 Trigger Source(즉, I/O 신호)를 선택한 경우, 파라미터를
SequencerTriggerActivation파라미터를 설정하십시오:RisingEdge(기본값): 소스 신호가 상승, 즉 신호 상태가 Low에서 High로 변경될 때.FallingEdge: 소스 신호가 하강, 즉 신호 상태가 High에서 Low로 변경될 때.AnyEdge: 소스 신호가 하강 또는 상승.LevelHigh: 소스 신호가 High. Sequencer set이 로드될 때 신호가 이미 High 상태이면, Sequencer는 즉시 다음 set으로 진행합니다. 이는 이미지 취득과 무관하게 발생합니다.LevelLow: 소스 신호가 Low. Sequencer set이 로드될 때 신호가 이미 Low 상태이면, Sequencer는 즉시 다음 set으로 진행합니다. 이는 이미지 취득과 무관하게 발생합니다.
- 파라미터를 원하는
- 카메라가 다른 set으로 전환되도록 하는 두 번째 조건을 정의하려면, 파라미터를
SequencerPathSelector(으)로 설정하여 4단계를 반복합니다. - 다음을 실행합니다.
SequencerSetSavecommand. - 파라미터를 원하는
SequencerSetSelector파라미터를 다음으로 설정: 다음 구성할 Sequencer set입니다. - 원하는 모든 set에 대해 3단계부터 7단계까지 반복합니다.
예제#
예제 1: Set 순환#
이미지 취득 중에 Sequencer set 0, 1, 2를 순환하려고 한다고 가정해 보겠습니다. 카메가가 이미지를 취득할 때마다 Sequencer는 다음 set으로 전환되어야 합니다.
이를 달성하려면 다음과 같이 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가 활성화되면 set 0(기본값)에서 시작하여 첫 번째 이미지의 노출을 대기합니다.
- 이벤트가 발생하면 카메라가 현재 Sequencer set 0을 이미지에 적용한 후 set 1로 이동합니다.
- 다음 노출이 시작되면 카메라가 set 1을 적용하고 set 2로 이동합니다.
- 다음 노출이 시작되면 카메라가 set 2를 적용하고 set 0으로 이동합니다.
- 이제 Sequencer가 set 0으로 돌아갔으며, 위에서 설명한 프로세스가 반복됩니다.
예제 2: Counter 및 여러 경로 사용#
매 nth 이미지 취득 시 특정 set으로 이동하도록 Sequencer를 설정할 수 있습니다.
여기에는 Counter 기능을 사용하고 여러 경로를 구성하는 작업이 포함됩니다.
이미지 취득 중 Sequencer set 0과 set 1 사이를 번갈아 사용하되, 첫 번째 이미지와 매 10th 이미지마다 Sequencer set 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 | 위의 구성에서 counter는 Exposure Start 신호를 사용하여 트리거되는 반면, Sequencer set 이동은 하강 에지 활성화가 있는 Exposure Active 신호를 사용하여 트리거된다는 점에 유의하십시오. 이는 경로 0과 경로 1 간의 타이밍 충돌을 방지하는 데 도움이 됩니다. | FallingEdge | 1 |
| 0 | 1 | Counter1End | - | 2 |
| 1 | 0 | 위의 구성에서 counter는 Exposure Start 신호를 사용하여 트리거되는 반면, Sequencer set 이동은 하강 에지 활성화가 있는 Exposure Active 신호를 사용하여 트리거된다는 점에 유의하십시오. 이는 경로 0과 경로 1 간의 타이밍 충돌을 방지하는 데 도움이 됩니다. | FallingEdge | 0 |
| 1 | 1 | Counter1End | - | 2 |
| 2 | 0 | 위의 구성에서 counter는 Exposure Start 신호를 사용하여 트리거되는 반면, Sequencer set 이동은 하강 에지 활성화가 있는 Exposure Active 신호를 사용하여 트리거된다는 점에 유의하십시오. 이는 경로 0과 경로 1 간의 타이밍 충돌을 방지하는 데 도움이 됩니다. | FallingEdge | 0 |
정보
- 이미지 취득을 시작하기 전에 counter가 reset되었는지 확인하십시오. 그렇지 않으면 카운트되지 않습니다.
- 위의 구성에서, 카운터는 ‘Exposure Start’ 신호를 사용하여 트리거되는 반면, 시퀀서 세트 진행은 하강 에지 활성화 방식의 ‘Exposure Active’ 신호를 사용하여 트리거된다는 점에 유의하십시오. 이는 경로 0과 경로 1 간의 타이밍 충돌을 방지하는 데 도움이 됩니다.
위와 같이 Sequencer를 설정할 때 발생하는 상황은 다음과 같습니다.
- Sequencer가 활성화되면 set 2에서 시작하여 첫 번째 이미지의 노출을 대기합니다.
- 첫 번째 노출이 시작되면 Counter 1이 0에서 1로 증가합니다. 이는 Exposure Start 이벤트를 카운트하도록 구성되어 있기 때문입니다.
- 첫 번째 노출이 종료될 때, 즉 Exposure Active 신호가 하강할 때 Sequencer가 set 0으로 이동합니다.
- 다음 8번의 이미지 취득 동안 Sequencer는 set 0과 set 1 사이를 번갈아 가며 작동하고 counter는 계속 증가합니다. 노출이 종료될 때, 즉 Exposure Active 신호가 하강할 때마다 Sequencer가 이동합니다.
- 10th 이미지의 노출이 시작되면 counter가 최댓값(
CounterDuration= 10)에 도달하여 자체적으로 리셋되고 카메라는 Counter 1 End 신호를 보냅니다. 이를 통해 Sequencer가 경로 1에서 set 2로 이동합니다. 전 경로 0 트리거 조건(ExposureActive,FallingEdge)이 유효해집니다. - 이제 Sequencer가 set 2로 돌아왔으며, 위에서 설명한 프로세스가 반복됩니다.
예제 3: 런타임 시 선택#
필요에 따라 런타임에 Sequencer set을 선택하도록 Sequencer를 설정할 수 있습니다.
이를 위해 여러 I/O 라인을 Trigger Source로 설정하고 LevelLow 및 LevelHigh 옵션을 사용합니다. SequencerTriggerActivation 파라미터에 HTML 로그 파일(*.html)의 경로와 이름을 지정할 수 있습니다.
입력 라인 2와 3의 신호 상태(0 = low, 1 = high)를 사용하여 Sequencer set 선택을 제어하려고 한다고 가정해 보겠습니다. 라인 상태에 따라 Sequencer가 다음과 같이 작동하도록 하려고 합니다.
| Line 2 신호 상태 | Line 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 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 라인의 신호를 동시에 변경하는 경우(예: 두 I/O 라인의 상태를 high에서 low로 전환)에도 작동합니다.
- 이미지 취득은 별도로 트리거되어야 합니다. I/O 라인 상태가 변경될 때 프레임 사이에서 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를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.