Sequencer (ace Classic/U/L GigE)#
최대 64개의 파라미터 세트(Sequencer 세트라고 함)를 정의할 수 있습니다. 카메라는 이미지를 획득하면서 하나의 Sequencer 세트를 차례대로 적용합니다. 이를 통해 최대 프레임 속도를 저하시키지 않고 카메라 파라미터를 빠르게 변경할 수 있습니다.
예를 들어 Sequencer 기능을 사용하여 사전 설정된 Image ROI 또는 Exposure Time 간에 빠르게 전환할 수 있습니다.
기능 사용#
Sequencer 활성화 또는 비활성화#
활성화된 경우 Sequencer가 이미지 획득을 제어합니다. 이 상태에서는 구성할 수 없습니다.
비활성화된 경우 Sequencer를 구성할 수는 있지만 이미지 획득을 제어하지는 않습니다.
Sequencer를 활성화하려면:
- 모든 설정 auto functions (예: Gain Auto, Exposure Auto) 대상
Off. - 파라미터를 원하는
SequenceEnable파라메터true.
Sequencer를 비활성화하려면:
- 파라미터를 원하는
SequenceEnable파라메터false. - 카메라 모델에서
SequenceConfigurationMode파라미터가 카메라 모델에서 지원되는 경우 다음으로 설정하세요:On.
시퀀스 세트 구성 요소#
Sequencer set에는 사용 가능한 경우 다음 파라미터가 포함됩니다.
AcquisitionFrameRateAcquisitionFrameRateEnableBalanceRatioBinningHorizontalBinningVerticalBlackLevelCenterXCenterYChunkEnableChunkModeActiveColorAdjustmentEnableColorAdjustmentHueColorAdjustmentSaturationColorTransformationMatrixFactorColorTransformationValueDecimationVerticalDigitalShiftExposureTimeGainHeightLUTEnableOffsetXOffsetXPixelFormataProcessedRawEnableReverseXReverseYbScalingHorizontalSequenceSetExecutionscStackedZoneImagingEnableStackedZoneImagingZoneEnableStackedZoneImagingZoneHeightStackedZoneImagingZoneOffsetYSubsamplingHorizontalSyncUserOutputTestImageSelectorTimerDelaydTimerDelayTimebasedTimerDurationdTimerDurationTimebasedWidth
-
다음 카메라 모델에서만 사용할 수 있습니다: acA640-300gm/gc, acA800-200gm/gc, acA1300-75gm/gc, acA1920-48gm/gc, acA2500-20gm/gc.
-
다음 카메라 모델에서는 사용할 수 없습니다: acA3088-16gm/gc, acA4024-8gm/gc, acA5472-5gm/gc.
-
auto sequence advance mode가 활성화된 경우에만 포함됩니다.
-
Timer 1에서 사용할 수 있습니다.
기타 모든 카메라 파라미터는 Sequencer 기능을 사용하여 제어할 수 없습니다.
정보
Sequencer 세트를 로드하거나 저장하면 변경하지 않은 항목을 포함하여 위의 모든 파라미터가 항상 함께 로드되거나 저장됩니다. 예를 들어 Exposure Time만 변경하고 다른 모든 파라미터를 기본값으로 둔 경우, 다른 모든 파라미터의 값도 함께 저장되며 로드 시 덮어쓰여집니다.
시퀀스 세트 구성#
정보
- Sequencer 세트를 구성하려면 Sequencer가 비활성화되어 있어야 합니다.
- 카메라의 전원이 차단되면 Sequencer 세트에 적용된 모든 변경 사항이 손실됩니다. 또한 Sequencer 설정은 user set에 저장할 수 없습니다. 설정을 유지하려면 카메라가 켜질 때마다 pylon API를 사용하여 Sequencer 세트를 다시 채우는 적절한 프로그램 코드를 작성하는 것을 Basler에서는 권장합니다.
Sequencer 기능을 사용하려면 먼저 원하는 설정으로 Sequencer 세트를 채워야 합니다. 각 Sequencer 세트에는 0부터 63까지의 고유한 Sequencer 세트 인덱스 번호가 있습니다.
Sequencer 세트를 채우려면:
- 파라미터를 원하는
SequenceSetTotalNumber파라미터를 사용하려는 Sequencer 세트의 총 개수로 설정합니다. - Sequencer 세트 0에 저장할 sequence set parameters를 구성합니다.
- Sequencer 세트 0을 저장합니다.
- 사용하려는 모든 Sequencer 세트에 대해 2단계와 3단계를 반복합니다. 인덱스 번호 0부터 시작하는 연속된 번호 시리즈(예: Sequencer 세트 0, 1, 2, 3)를 항상 사용해야 합니다.
예: 두 개의 Sequencer 세트가 필요하고 여기에 서로 다른 Image ROI 설정을 지정하려는 경우를 가정해 보겠습니다. 이 경우:
- 파라미터를 원하는
SequenceSetTotalNumber파라미터를 2로 설정합니다. - 다음 파라미터 값을 조정하여 첫 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY파라미터 값. - Sequencer 세트 0을 저장합니다.
- 다음 항목에 대해 다른 값을 선택하여 두 번째 Image ROI를 생성합니다.
Width,Height,OffsetX및OffsetY매개변수. - Sequencer 세트 1을 저장합니다.
이제 sequencer를 구성하여 두 개의 Image ROI 사이를 빠르게 전환할 수 있습니다.
시퀀스 세트 저장#
Sequencer 세트를 저장하려면:
- 파라미터를 원하는
SequenceSetIndex파라미터를 원하는 Sequencer 세트로 설정합니다. - 다음을 실행합니다.
SequenceSetStorecommand.
모든 sequence set parameters의 값이 선택한 Sequencer 세트에 저장됩니다.
시퀀스 세트 불러오기#
Sequencer 세트는 Sequencer 작동 중에 자동으로 로드됩니다. 그러나 테스트 목적이나 Sequencer를 구성할 때는 Sequencer 세트를 수동으로 로드하는 것이 유용할 수 있습니다.
시퀀스 세트를 수동으로 로드하려면:
- 파라미터를 원하는
SequenceSetIndex파라미터를 원하는 Sequencer 세트로 설정합니다. - 다음을 실행합니다.
SequenceSetLoadcommand.
모든 Sequencer parameter 값은 덮어쓰여지며 선택한 Sequencer에 저장된 값으로 대체됩니다.
Sequencer 구성#
Sequencer를 구성한 후에는 Sequencer를 설정해야 합니다.
정보
- Sequencer를 구성하려면 먼저 Sequencer를 비활성화해야 합니다.
- 카메라 전원이 차단되면 Sequencer 구성 변경 사항은 모두 손실됩니다. 또한 Sequencer 설정은 user set에 저장할 수 없습니다. Basler에서는 카메라가 켜질 때마다 카메라를 재구성하기 위해 pylon API를 사용하여 적절한 프로그램 코드를 작성할 것을 권장합니다.
- SequenceSetIndex 청크를 사용하여 사용된 Sequencer를 추적할 수 있습니다. 활성화되면 각 이미지에는 이미지 취득에 사용된 Sequencer의 인덱스 번호를 포함한 청크 데이터가 포함됩니다.
Sequencer는 "어드밴스 모드"라고 하는 세 가지 모드로 작동할 수 있습니다.
모든 모드에서 Sequencer는 Sequencer 인덱스 번호 0부터 시작하여 항상 오름차순으로 진행됩니다.
자동 시퀀스 진행 모드#
이 모드는 연속적으로 반복되는 고정된 시퀀스를 구성하려는 경우에 유용합니다.
다음을 설정하여 이 모드를 활성화할 수 있습니다. SequenceAdvanceMode 파라메터 Auto.
이 모드에서는 Frame Start trigger 신호가 수신되면 한 Sequencer에서 다음 Sequencer로 자동으로 진행됩니다.
The SequenceSetTotalNumber 파라미터는 사용할 총 Sequencer 수를 지정합니다. 가장 높은 인덱스 번호를 가진 Sequencer가 사용된 후, 사이클은 0에서 다시 시작됩니다.
예: 다음과 같은 시퀀스 사이클을 구성하려고 가정해 보겠습니다.
위의 시퀀스 사이클을 구성하려면:
- 파라미터를 원하는
SequenceAdvanceMode파라메터Auto. - 파라미터를 원하는
SequenceSetTotalNumber파라미터를 5로 설정합니다.
Sequencer를 여러 번 사용하기
선택적으로 각 Sequencer를 연속으로 여러 번 사용할 수 있습니다.
각 Sequencer를 사용할 횟수를 지정하려면:
- 원하는 Sequencer를 로드합니다.
- 설정하여
SequenceSetExecutions이 Sequencer의 파라미터입니다. 기본적으로 이 파라미터는 모든 세트에 대해 1로 설정되어 있어 각 Sequencer가 사이클당 한 번씩 사용됨을 의미합니다. - Sequencer를 저장합니다.
예: 다음과 같은 시퀀스 사이클을 구성하려고 가정해 보겠습니다.
위의 시퀀스 사이클을 구성하려면:
- 파라미터를 원하는
SequenceAdvanceMode파라메터Auto. - 파라미터를 원하는
SequenceSetTotalNumberparameter를 6으로 설정합니다. -
설정하여
SequenceSetExecutions각 Sequencer set의 parameter:- Sequencer set 0, 2, 3, 4는 각 주기마다 한 번만 사용해야 합니다. 따라서 이 set들은 건너뛰고 다음을 그대로 둘 수 있습니다.
SequenceSetExecutions매개변수를 기본값인 1로 둡니다. - Sequencer set 1은 연속으로 세 번 사용해야 합니다. 로드 Sequencer set 1의 경우, 다음을 설정합니다.
SequenceSetExecutions3으로 설정한 후 저장합니다 Sequencer set 1. - Sequencer set 5는 연속으로 두 번 사용해야 합니다. 로드 Sequencer set 5의 경우, 다음을 설정합니다.
SequenceSetExecutions2로 설정한 후 저장합니다 Sequencer set 5.
- Sequencer set 0, 2, 3, 4는 각 주기마다 한 번만 사용해야 합니다. 따라서 이 set들은 건너뛰고 다음을 그대로 둘 수 있습니다.
제어식 시퀀스 진행 모드#
이 모드는 line 1 또는 소프트웨어 명령을 통해 제어할 수 있는 동적(dynamic) Sequencer를 구성하려는 경우에 유용합니다.
정보
- 실시간 애플리케이션의 경우, Basler에서는 소프트웨어 명령을 통해 Sequencer를 제어하지 않는 것을 강력히 권장합니다. 소프트웨어 명령을 전송한 시점부터 해당 명령이 적용될 때까지의 지연 시간은 특정 설치 환경 및 네트워크의 현재 부하에 따라 달라집니다. 따라서 소프트웨어 명령 전송과 실제 적용 사이에 이미지 취득이 몇 번이나 발생할지 예측하는 것은 불가능합니다.
- line 1을 사용하여 Sequencer를 제어하는 경우, 라인 상태를 설정한 시점부터 Frame Start trigger signal이 상승할 때까지 1마이크로초가 소요된다는 점을 염두에 두어야 합니다. 또한 Frame Start trigger signal이 상승한 후에도 최소 1마이크로초 동안 라인 상태를 유지해야 합니다. 타이밍을 최적화하려면 Monitor the Frame Trigger Wait signal을 참조하십시오.
다음을 설정하여 이 모드를 활성화할 수 있습니다. SequenceAdvanceMode 파라메터 Controlled.
다른 모드와 마찬가지로, 진행은 항상 Sequencer set 인덱스 번호 0부터 시작하여 오름차순으로 이루어집니다.
그러나 다음 항목들을 제어할 수 있습니다.
- Sequence set advance: Sequencer가 다음 Sequencer set으로 진행하는 시점을 언제로 하시겠습니까?
- Sequence set restart: Sequence 주기가 Sequencer set 0부터 다시 시작되는 시점을 언제로 하시겠습니까?
The SequenceSetTotalNumber parameter는 사용할 Sequencer set의 총 개수를 지정합니다. 인덱스 번호가 가장 높은 Sequencer set이 사용된 후에는 주기가 0부터 다시 시작됩니다.
Sequence Set Advance 구성하기#
Sequence set advance를 구성하려면:
- 파라미터를 원하는
SequenceControlSelector파라메터Advance. - 파라미터를 원하는
SequenceControlSource파라미터를 다음 옵션 중 하나로 설정합니다.Line1: Sequence set advance는 line 1을 통해 제어됩니다. 신호가 수신되는 동안 line 1이 Low(0)이면 Sequencer가 진행하지 않고 현재 Sequencer set을 이미지 취득에 다시 사용합니다. Frame Start trigger signal이 수신되는 동안 line 1이 High(1)이면 Sequencer가 진행하고 주기의 다음 Sequencer set이 이미지 취득에 사용됩니다. Frame Start Trigger 신호가 수신되면 시퀀서는 다음 단계로 진행하지 않고, 현재 설정된 시퀀스를 다시 사용하여 이미지를 획득합니다. 프레임 시작 트리거 신호가 수신되는 동안 1번 라인이 로우(1) 상태라면, 시퀀서는 다음 단계로 진행하며 해당 사이클의 다음 시퀀스 세트를 사용하여 이미지를 획득합니다.Disabled: Sequence set advance는 다음을 사용하여 제어됩니다.SequenceAsyncAdvance소프트웨어 명령. 이 명령이 수신되면 Sequencer는 이미지를 취득하지 않고 진행합니다. 다음 신호가 수신되면 Frame Start Trigger parameter 값에 표시된 Sequencer set이 이미지 취득에 사용됩니다.SequenceCurrentSetAlwaysActive: Sequencer는 마치Line1가 선택되고 line 1이 항상 high(1) 상태인 것처럼 작동합니다. 결과적으로 Sequencer는 Frame Start Trigger 신호가 수신될 때마다 다음 단계로 진행합니다. 이 방식은 각 Sequence Set이 주기당 한 번씩만 사용될 때 auto sequence advance 모드로 작동하는 것과 유사합니다. 유일한 차이점은 sequence set 0 대신 sequence set 1이 첫 번째 Sequence Set으로 사용된다는 점입니다.
Sequence Set Restart 구성#
Sequence Set Restart를 구성하려면:
- 파라미터를 원하는
SequenceControlSelector파라메터Restart. - 파라미터를 원하는
SequenceControlSource파라미터를 다음 옵션 중 하나로 설정합니다.Line1: Sequence Set Restart는 line 1을 통해 제어됩니다. Frame Start 트리거 신호가 수신되는 동안 line 1이 low(0) 상태이면 Frame Start Trigger 다음 Sequence Set이 사용됩니다. Frame Start 트리거 신호가 수신되는 동안 line 1이 high(1) 상태이면 시퀀스 주기가 재시작되고 sequence set 0이 사용됩니다.Disabled: Sequence Set Restart는 다음을 사용하여 제어됩니다.SequenceAsyncRestart소프트웨어 명령어. 이 명령어가 수신되면 이미지를 획득하지 않고 시퀀스 주기가 재시작됩니다. 다음 Frame Start Trigger 신호가 수신되면 sequence set 0이 사용됩니다.
자유 선택 시퀀스 진행 모드#
이 모드는 특정 순서를 따를 필요 없이 자유롭게 선택 가능한 Sequence Set 간에 빠르게 전환하려는 경우에 유용합니다. 카메라의 입력 라인을 사용하여 시퀀스를 결정합니다.
정보
라인 상태를 설정한 후 Frame Start 트리거 신호가 상승할 때까지 1마이크로초가 소요된다는 점에 유의하세요. 또한 Frame Start 트리거 신호가 상승한 후 적어도 1마이크로초 동안 라인 상태를 유지해야 합니다. 타이밍을 최적화하려면 Frame Trigger Wait signal을 모니터링하세요.
자유 선택 진행 모드(free selection advance mode)를 구성하는 방법은 카메라에서 사용할 수 있는 입력 라인 수에 따라 다릅니다.
입력 라인이 하나인 카메라#
Sequence Set은 입력 line 1의 상태에 따라 선택됩니다.
- frame start trigger 신호가 수신되는 동안 line 1이 low(0) 상태이면 이미지 획득에 sequence set 0이 사용됩니다.
- Frame Start 트리거 신호가 수신되는 동안 line 1이 high(1) 상태이면 이미지 획득에 sequence set 1이 사용됩니다.
sequence set 0과 1만 사용할 수 있습니다.
자유 선택 진행 모드를 활성화하려면:
- 파라미터를 원하는
SequenceAdvanceMode파라메터FreeSelection. - 파라미터를 원하는
SequenceSetTotalNumber파라미터를 2로 설정합니다.
The SequenceAddressBitSelector 및 SequenceAddressBitSource 파라미터는 자유 선택 진행 모드의 작동도 제어합니다. 하지만 이러한 파라미터는 미리 설정되어 있으며 변경할 수 없습니다.
입력 라인이 두 개인 카메라#
Sequence Set은 line 1(광학 절연 입력 라인)과 line 3(GPIO 라인, 입력으로 구성되어야 함)의 상태에 따라 선택되며, 4가지 가능한 조합이 생성됩니다. 이를 통해 4개의 Sequence Set 중에서 선택할 수 있습니다. 결과적으로 sequence set 0, 1, 2, 3만 사용할 수 있습니다.
자유 선택 진행 모드를 구성하려면 각 라인에 "sequence set address bit"를 할당해야 합니다. 이러한 주소 비트의 조합에 따라 Sequence Set 인덱스 번호가 결정됩니다. 다음 표는 가능한 조합과 각각의 결과를 보여줍니다.
| Address Bit 1 | Address Bit 0 | Sequence Set That Will Be Selected |
|---|---|---|
| 0 | 0 | Sequence set 0 |
| 0 | 1 | Sequence set 1 |
| 1 | 0 | Sequence set 2 |
| 1 | 1 | Sequence set 3 |
예를 들어, line 1을 bit 1에 할당하고 line 3을 bit 0에 할당할 수 있습니다. 결과적으로 다음과 같은 예시 구성이 만들어집니다.
- 프레임 시작 트리거(frame start trigger) 신호가 수신될 때 line 1이 low(0)이고 line 3이 low(0)이면, 이미지 취득에 sequence set 0이 사용됩니다.
- 프레임 시작 트리거(frame start trigger) 신호가 수신될 때 line 1이 low(0)이고 line 3이 high(1)이면, 이미지 취득에 sequence set 1이 사용됩니다.
- 프레임 시작 트리거(frame start trigger) 신호가 수신될 때 line 1이 high(1)이고 line 3이 low(0)이면, 이미지 취득에 sequence set 2가 사용됩니다.
- 프레임 시작 트리거(frame start trigger) 신호가 수신될 때 line 1이 high(1)이고 line 3이 high(1)이면, 이미지 취득에 sequence set 3이 사용됩니다.
비트를 구성하고 자유 선택 고급 모드(free selection advance mode)를 활성화하려면 다음을 수행하십시오.
- 파라미터를 원하는
SequenceAdvanceMode파라메터FreeSelection. - 파라미터를 원하는
SequenceSetTotalNumber매개변수를 4로 설정합니다. - 파라미터를 원하는
SequenceAddressBitSelector파라메터Bit0. - 파라미터를 원하는
SequenceAddressBitSource매개변수를 bit 0에 할당할 라인으로 설정합니다(예:Line3. - 파라미터를 원하는
SequenceAddressBitSelector파라메터Bit1. - 파라미터를 원하는
SequenceAddressBitSource매개변수를 bit 1에 할당할 라인으로 설정합니다(예:Line1.
정보
자유 선택 고급 모드(free selection advance mode)에서 하나의 입력 라인만 사용할 수도 있습니다. 이렇게 하려면 SequenceSetTotalNumber 매개변수를 2로 설정합니다. 이제 bit 0만 사용하여 시퀀스 세트를 선택합니다. 자유 선택 고급 모드(free selection advance mode)는 "입력 라인이 하나인 카메라"에 설명된 대로 작동합니다.
타이밍 다이어그램#
예: 자동 시퀀스 진행 모드#
예: 제어식 시퀀스 진행 모드(Line 1을 통해 제어)#
예: 자유 선택 시퀀스 진행 모드#
샘플 코드#
// ** Configuring sequence sets **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
// Enable configuration mode (available on selected cameras only)
camera.SequenceConfigurationMode.SetValue(SequenceConfigurationMode_On);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Configure the parameters that you want to store in the first sequence set
camera.Width.SetValue(500);
camera.Height.SetValue(300);
// Select sequence set 0 and save the parameter values
camera.SequenceSetIndex.SetValue(0);
camera.SequenceSetStore.Execute();
// Configure the parameters that you want to store in the second sequence set
camera.Width.SetValue(800);
camera.Height.SetValue(600);
// Select sequence set 1 and save the parameter values
camera.SequenceSetIndex.SetValue(1);
camera.SequenceSetStore.Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_Auto);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
camera.SequenceSetIndex.SetValue(0);
camera.SequenceSetLoad.Execute();
camera.SequenceSetExecutions.SetValue(2);
camera.SequenceSetStore.Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
camera.SequenceSetIndex.SetValue(1);
camera.SequenceSetLoad.Execute();
camera.SequenceSetExecutions.SetValue(3);
camera.SequenceSetStore.Execute();
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_Controlled);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Specify that sequence set advance is controlled via line 1
camera.SequenceControlSelector.SetValue(SequenceControlSelector_Advance);
camera.SequenceControlSource.SetValue(SequenceControlSource_Line1);
// Specify that sequence set restart is controlled
// via software command
camera.SequenceControlSelector.SetValue(SequenceControlSelector_Restart);
camera.SequenceControlSource.SetValue(SequenceControlSource_Disabled);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// Restart the sequencer via software command (for testing purposes)
camera.SequenceAsyncRestart.Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_FreeSelection);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(2);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
camera.SequenceEnable.SetValue(false);
camera.SequenceAdvanceMode.SetValue(SequenceAdvanceMode_FreeSelection);
// Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.SetValue(4);
// Assign sequence address bit 0 to line 3
camera.SequenceAddressBitSelector.SetValue(SequenceAddressBitSelector_Bit0);
camera.SequenceAddressBitSource.SetValue(SequenceAddressBitSource_Line3);
// Assign sequence address bit 1 to line 1
camera.SequenceAddressBitSelector.SetValue(SequenceAddressBitSelector_Bit1);
camera.SequenceAddressBitSource.SetValue(SequenceAddressBitSource_Line1);
// Enable the sequencer
camera.SequenceEnable.SetValue(true);
INodeMap& nodemap = camera.GetNodeMap();
// ** Configuring sequence sets **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
// Enable configuration mode (available on selected cameras only)
CEnumParameter(nodemap, "SequenceConfigurationMode").SetValue("On");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Configure the parameters that you want to store in the first sequence set
CIntegerParameter(nodemap, "Width").SetValue(500);
CIntegerParameter(nodemap, "Height").SetValue(300);
// Select sequence set 0 and save the parameter values
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(0);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Configure the parameters that you want to store in the second sequence set
CIntegerParameter(nodemap, "Width").SetValue(800);
CIntegerParameter(nodemap, "Height").SetValue(600);
// Select sequence set 1 and save the parameter values
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(1);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("Auto");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(0);
CCommandParameter(nodemap, "SequenceSetLoad").Execute();
CIntegerParameter(nodemap, "SequenceSetExecutions").SetValue(2);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
CIntegerParameter(nodemap, "SequenceSetIndex").SetValue(1);
CCommandParameter(nodemap, "SequenceSetLoad").Execute();
CIntegerParameter(nodemap, "SequenceSetExecutions").SetValue(3);
CCommandParameter(nodemap, "SequenceSetStore").Execute();
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("Controlled");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Specify that sequence set advance is controlled via line 1
CEnumParameter(nodemap, "SequenceControlSelector").SetValue("Advance");
CEnumParameter(nodemap, "SequenceControlSource").SetValue("Line1");
// Specify that sequence set restart is controlled
// via software command
CEnumParameter(nodemap, "SequenceControlSelector").SetValue("Restart");
CEnumParameter(nodemap, "SequenceControlSource").SetValue("Disabled");
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// Restart the sequencer via software command (for testing purposes)
CCommandParameter(nodemap, "SequenceAsyncRestart").Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("FreeSelection");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(2);
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
CBooleanParameter(nodemap, "SequenceEnable").SetValue(false);
CEnumParameter(nodemap, "SequenceAdvanceMode").SetValue("FreeSelection");
// Set the total number of sequence sets to 2
CIntegerParameter(nodemap, "SequenceSetTotalNumber").SetValue(4);
// Assign sequence address bit 0 to line 3
CEnumParameter(nodemap, "SequenceAddressBitSelector").SetValue("Bit0");
CEnumParameter(nodemap, "SequenceAddressBitSource").SetValue("Line3");
// Assign sequence address bit 1 to line 1
CEnumParameter(nodemap, "SequenceAddressBitSelector").SetValue("Bit1");
CEnumParameter(nodemap, "SequenceAddressBitSource").SetValue("Line1");
// Enable the sequencer
CBooleanParameter(nodemap, "SequenceEnable").SetValue(true);
// ** Configuring sequence sets **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
// Enable configuration mode (available on selected cameras only)
camera.Parameters[PLCamera.SequenceConfigurationMode].SetValue(PLCamera.SequenceConfigurationMode.On);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Configure the parameters that you want to store in the first sequence set
camera.Parameters[PLCamera.Width].SetValue(500);
camera.Parameters[PLCamera.Height].SetValue(300);
// Select sequence set 0 and save the parameter values
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(0);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Configure the parameters that you want to store in the second sequence set
camera.Parameters[PLCamera.Width].SetValue(800);
camera.Parameters[PLCamera.Height].SetValue(600);
// Select sequence set 1 and save the parameter values
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(1);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// ** Configuring the sequencer for auto sequence advance mode
// Assuming you want to configure the following sequence cycle:
// 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.Auto);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Load sequence set 0 and specify that this set is to be used
// 2 times in a row
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(0);
camera.Parameters[PLCamera.SequenceSetLoad].Execute();
camera.Parameters[PLCamera.SequenceSetExecutions].SetValue(2);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Load sequence set 1 and specify that this set is to be used
// 3 times in a row
camera.Parameters[PLCamera.SequenceSetIndex].SetValue(1);
camera.Parameters[PLCamera.SequenceSetLoad].Execute();
camera.Parameters[PLCamera.SequenceSetExecutions].SetValue(3);
camera.Parameters[PLCamera.SequenceSetStore].Execute();
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// ** Configuring the sequencer for controlled sequence advance mode **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.Controlled);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Specify that sequence set advance is controlled via line 1
camera.Parameters[PLCamera.SequenceControlSelector].SetValue(PLCamera.SequenceControlSelector.Advance);
camera.Parameters[PLCamera.SequenceControlSource].SetValue(PLCamera.SequenceControlSource.Line1);
// Specify that sequence set restart is controlled
// via software command
camera.Parameters[PLCamera.SequenceControlSelector].SetValue(PLCamera.SequenceControlSelector.Restart);
camera.Parameters[PLCamera.SequenceControlSource].SetValue(PLCamera.SequenceControlSource.Disabled);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// Restart the sequencer via software command (for testing purposes)
camera.Parameters[PLCamera.SequenceAsyncRestart].Execute();
// ** Configuring the sequencer for free selection advance mode
// on cameras with ONE input line **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.FreeSelection);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(2);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
// ** Configuring the sequencer for free selection advance mode
// on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
// Disable the sequencer during configuration
camera.Parameters[PLCamera.SequenceEnable].SetValue(false);
camera.Parameters[PLCamera.SequenceAdvanceMode].SetValue(PLCamera.SequenceAdvanceMode.FreeSelection);
// Set the total number of sequence sets to 2
camera.Parameters[PLCamera.SequenceSetTotalNumber].SetValue(4);
// Assign sequence address bit 0 to line 3
camera.Parameters[PLCamera.SequenceAddressBitSelector].SetValue(PLCamera.SequenceAddressBitSelector.Bit0);
camera.Parameters[PLCamera.SequenceAddressBitSource].SetValue(PLCamera.SequenceAddressBitSource.Line3);
// Assign sequence address bit 1 to line 1
camera.Parameters[PLCamera.SequenceAddressBitSelector].SetValue(PLCamera.SequenceAddressBitSelector.Bit1);
camera.Parameters[PLCamera.SequenceAddressBitSource].SetValue(PLCamera.SequenceAddressBitSource.Line1);
// Enable the sequencer
camera.Parameters[PLCamera.SequenceEnable].SetValue(true);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK; /* Return value of pylon methods */
/* ** Configuring sequence sets ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
/* Enable configuration mode (available on selected cameras only) */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceConfigurationMode", "On");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Configure the parameters that you want to store in the first sequence set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 500);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 300);
CHECK(errRes);
/* Select sequence set 0 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Configure the parameters that you want to store in the second sequence set */
errRes = PylonDeviceSetIntegerFeature(hdev, "Width", 800);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "Height", 600);
CHECK(errRes);
/* Select sequence set 1 and save the parameter values */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* ** Configuring the sequencer for auto sequence advance mode */
/* Assuming you want to configure the following sequence cycle: */
/* 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "Auto");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Load sequence set 0 and specify that this set is to be used */
/* 2 times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 0);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetExecutions", 2);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Load sequence set 1 and specify that this set is to be used */
/* 3 times in a row */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetIndex", 1);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetLoad");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetExecutions", 3);
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceSetStore");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* ** Configuring the sequencer for controlled sequence advance mode ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "Controlled");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Specify that sequence set advance is controlled via line 1 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSelector", "Advance");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSource", "Line1");
CHECK(errRes);
/* Specify that sequence set restart is controlled */
/* via software command */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSelector", "Restart");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceControlSource", "Disabled");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* Restart the sequencer via software command (for testing purposes) */
errRes = PylonDeviceExecuteCommandFeature(hdev, "SequenceAsyncRestart");
CHECK(errRes);
/* ** Configuring the sequencer for free selection advance mode */
/* on cameras with ONE input line ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "FreeSelection");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 2);
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
/* ** Configuring the sequencer for free selection advance mode */
/* on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) ** */
/* Disable the sequencer during configuration */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAdvanceMode", "FreeSelection");
CHECK(errRes);
/* Set the total number of sequence sets to 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "SequenceSetTotalNumber", 4);
CHECK(errRes);
/* Assign sequence address bit 0 to line 3 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSelector", "Bit0");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSource", "Line3");
CHECK(errRes);
/* Assign sequence address bit 1 to line 1 */
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSelector", "Bit1");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "SequenceAddressBitSource", "Line1");
CHECK(errRes);
/* Enable the sequencer */
errRes = PylonDeviceSetBooleanFeature(hdev, "SequenceEnable", 1);
CHECK(errRes);
# ** Configuring sequence sets **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
# Enable configuration mode (available on selected cameras only)
camera.SequenceConfigurationMode.Value = "On"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Configure the parameters that you want to store in the first sequence set
camera.Width.Value = 500
camera.Height.Value = 300
# Select sequence set 0 and save the parameter values
camera.SequenceSetIndex.Value = 0
camera.SequenceSetStore.Execute()
# Configure the parameters that you want to store in the second sequence set
camera.Width.Value = 800
camera.Height.Value = 600
# Select sequence set 1 and save the parameter values
camera.SequenceSetIndex.Value = 1
camera.SequenceSetStore.Execute()
# ** Configuring the sequencer for auto sequence advance mode
# Assuming you want to configure the following sequence cycle:
# 0 - 0 - 1 - 1 - 1 (- 0 - 0 - ...) **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "Auto"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Load sequence set 0 and specify that this set is to be used
# 2 times in a row
camera.SequenceSetIndex.Value = 0
camera.SequenceSetLoad.Execute()
camera.SequenceSetExecutions.Value = 2
camera.SequenceSetStore.Execute()
# Load sequence set 1 and specify that this set is to be used
# 3 times in a row
camera.SequenceSetIndex.Value = 1
camera.SequenceSetLoad.Execute()
camera.SequenceSetExecutions.Value = 3
camera.SequenceSetStore.Execute()
# Enable the sequencer
camera.SequenceEnable.Value = True
# ** Configuring the sequencer for controlled sequence advance mode **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "Controlled"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Specify that sequence set advance is controlled via line 1
camera.SequenceControlSelector.Value = "Advance"
camera.SequenceControlSource.Value = "Line1"
# Specify that sequence set restart is controlled
# via software command
camera.SequenceControlSelector.Value = "Restart"
camera.SequenceControlSource.Value = "Disabled"
# Enable the sequencer
camera.SequenceEnable.Value = True
# Restart the sequencer via software command (for testing purposes)
camera.SequenceAsyncRestart.Execute()
# ** Configuring the sequencer for free selection advance mode
# on cameras with ONE input line **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "FreeSelection"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 2
# Enable the sequencer
camera.SequenceEnable.Value = True
# ** Configuring the sequencer for free selection advance mode
# on cameras with TWO input lines (1x opto-coupled, 1x GPIO set for input) **
# Disable the sequencer during configuration
camera.SequenceEnable.Value = False
camera.SequenceAdvanceMode.Value = "FreeSelection"
# Set the total number of sequence sets to 2
camera.SequenceSetTotalNumber.Value = 4
# Assign sequence address bit 0 to line 3
camera.SequenceAddressBitSelector.Value = "Bit0"
camera.SequenceAddressBitSource.Value = "Line3"
# Assign sequence address bit 1 to line 1
camera.SequenceAddressBitSelector.Value = "Bit1"
camera.SequenceAddressBitSource.Value = "Line1"
# Enable the sequencer
camera.SequenceEnable.Value = True
pylon Viewer를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.