Periodic Signal#
이를 통해 예를 들어 여러 카메라에서 동시에 동일한 프레임 레이트로 이미지를 캡처할 수 있습니다.
이 기능은 Synchronous Free Run 기능과 유사하지만, 이미지 취득 외에도 다른 용도로 사용할 수 있습니다.
기능 사용#
작동 방식#
Periodic Signal 기능을 지원하는 Basler 카메라는 추가적인 카메라 신호 소스를 제공하며, PeriodicSignal1. 이 소스를 통해 카메라는 다음과 같은 특성을 가진 신호를 전송합니다.
- 신호가 반복됩니다.
- 신호는 Precision Time Protocol을 통해 장치 간에 동기화될 수 있습니다.
- 신호의 주기를 구성할 수 있습니다.
- 첫 번째 주기 전의 지연 시간을 구성할 수 있습니다.
The PeriodicSignal1 신호 소스는 Counter 동기화 또는 장치 간 이미지 취득 등 다양한 용도로 사용할 수 있습니다.
Periodic Signal을 사용하여 이미지 취득 동기화하기#
여러 카메라에서 이미지 취득을 동기화하려면:
- Periodic Signal을 사용하여 동기화하려는 카메라 중 하나를 엽니다.
- 다음 사항을 확인하십시오:
BslPeriodicSignalSource카메라의 파라미터가 다음으로 설정됩니다.PtpClock.
이는 카메라가 다음을 통해 동기화됨을 나타냅니다. Precision Time Protocol feature. - 파라미터를 원하는
BslPeriodicSignalPeriod원하는 프레임 레이트의 역수에 해당하는 파라미터를 마이크로초 단위로 변환하여 설정합니다. 예를 들어, 50 fps(frames per second)로 카메라를 동기화하려면 파라미터를 20000으로 설정합니다(1 / 50 = 0.02초 = 20000마이크로초). 모든 카메라에 동일한 파라미터 값을 지정해야 합니다. - Periodic Signal 지연 시간 구성:
- 모든 카메라가 이미지를 취득하도록 하려면 동시에,
BslPeriodicSignalDelay모든 카메라에서 파라미터를 0으로 설정합니다. - 모든 카메라가 이미지를 취득하도록 하려면 순차적으로, 즉 일정한 간격으로 설정하려면
BslPeriodicSignalDelay첫 번째 카메라의 파라미터는 0으로, 다른 카메라들은 원하는 간격의 배수로 설정합니다.
예를 들어, 카메라 간에 10000 µs의 간격으로 이미지를 취득하려 한다고 가정해 보겠습니다. 이렇게 하려면 첫 번째 카메라는 지연 시간을 0으로, 두 번째 카메라는 10000으로, 세 번째 카메라는 20000으로 설정하는 식입니다.
- 모든 카메라가 이미지를 취득하도록 하려면 동시에,
- Periodic Signal에 의해 트리거되도록 카메라 구성:
- 파라미터를 원하는
TriggerSelector파라메터FrameStart. - 파라미터를 원하는
TriggerMode파라메터On. - 파라미터를 원하는
TriggerSource파라메터PeriodicSignal1.
- 파라미터를 원하는
- 모든 카메라에 대해 1~5단계를 반복합니다.
Periodic Signal을 사용하여 외부 장치를 동기식으로 트리거하기#
Periodic Signal 기능을 사용하여 외부 장치를 동기화 방식으로 트리거할 수 있습니다. 이를 통해 PTP를 지원하지 않는 장치에서도 PTP를 사용할 수 있습니다.
카메라의 내부 periodic signal은 I/O 신호로 직접 사용할 수 없습니다. 그러나 periodic signal을 사용하여 카메라의 Timer 기능을 트리거한 다음 타이머 신호를 I/O 신호로 사용할 수 있습니다.
방법:
- 외부 장치를 트리거하는 데 사용할 카메라를 엽니다.
- 다음 사항을 확인하십시오:
BslPeriodicSignalSource카메라의 파라미터가 다음으로 설정됩니다.PtpClock.
이는 카메라가 다음을 통해 동기화됨을 나타냅니다. Precision Time Protocol feature. - 파라미터를 원하는
BslPeriodicSignalPeriod매개변수를 원하는 트리거 레이트의 역수(마이크로초 단위로 변환)로 설정합니다. 예를 들어 초당 20개의 트리거 신호를 생성하려면 매개변수를 50000으로 설정합니다(1/20 = 0.05초 = 50000마이크로초). - 시간 지연을 두고 외부 장치를 트리거하려면
BslPeriodicSignalDelay매개변수를 원하는 지연 시간으로 설정합니다. - 카메라의 Timer 기능이 periodic signal에 의해 트리거되도록 설정합니다.
- 파라미터를 원하는
TimerSelector파라메터Timer1. - 파라미터를 원하는
TimerDuration매개변수를 원하는 timer duration 마이크로초 단위.
카메라는 이 값과 같은 폭의 I/O 신호를 전송합니다. 따라서 외부 장치가 신호를 수신할 수 있도록 충분히 높은 매개변수 값을 설정하십시오. 대부분의 경우 기본값인 10 µs 면 충분합니다. - 파라미터를 원하는
TimerTriggerSource파라메터PeriodicSignal1.
- 파라미터를 원하는
- 타이머 신호를 출력하도록 카메라를 설정합니다.
- 파라미터를 원하는
LineSelector매개변수를 원하는 I/O 라인(예: )으로 설정합니다.Line2. 해당 라인은 출력으로 구성되어야 합니다.. - 파라미터를 원하는
LineSource파라메터Timer1Active.
- 파라미터를 원하는
- 6단계에서 선택한 출력 라인에 외부 장치를 연결합니다.
이제 장치가 이 라인에서 동기화된 트리거 신호를 수신합니다. - 다른 외부 장치를 트리거하려면 5단계와 6단계에서
Timer2및Timer2Active을(를) 사용하여 1~6단계를 반복합니다.
정보
또한 동일한 periodic signal을 사용하여 카메라 간의 이미지 취득을 동기화하고 외부 장치를 동기화 방식으로 트리거할 수 있습니다. 이렇게 하려면 위에 설명된 두 절차를 모두 수행하십시오.
추가 파라미터#
BslPeriodicSignalSelector: 설정할 periodic signal 채널을 지정합니다. 현재 모든 Basler 카메라는 하나의 채널만 제공하므로 이 매개변수는 다음으로 사전 설정되어 있습니다.PeriodicSignal1변경할 수 없습니다.
샘플 코드#
/* Using Periodic Signal to Synchronize Image Acquisition */
// Set the signal period to 20000 µs
camera.BslPeriodicSignalPeriod.SetValue(20000.0);
// Set the signal delay to 0
camera.BslPeriodicSignalDelay.SetValue(0);
// Configure the camera to be triggered by the periodic signal
camera.TriggerSelector.SetValue(TriggerSelector_FrameStart);
camera.TriggerMode.SetValue(TriggerMode_On);
camera.TriggerSource.SetValue(TriggerSource_PeriodicSignal1);
/* Using Periodic Signal to Synchronously Trigger External Devices */
// Set the signal period to 50000 µs
camera.BslPeriodicSignalPeriod.SetValue(50000.0);
// Set the signal delay to 0
camera.BslPeriodicSignalDelay.SetValue(0);
// Configure the camera's Timer feature to be triggered by periodic signals
camera.TimerSelector.SetValue(TimerSelector_Timer1);
camera.TimerDuration.SetValue(10.0);
camera.TimerTriggerSource.SetValue(TimerTriggerSource_PeriodicSignal1);
// Configure the camera to output the timer signal on Line 2
camera.LineSelector.SetValue(LineSelector_Line2);
camera.LineMode.SetValue(LineMode_Output);
camera.LineSource.SetValue(LineSource_Timer1Active);
INodeMap& nodemap = camera.GetNodeMap();
/*Using Periodic Signal to Synchronize Image Acquisition*/
CFloatParameter(nodemap, "BslPeriodicSignalPeriod").SetValue(20000.0);
// Set the signal delay to 0
CIntegerParameter(nodemap, "BslPeriodicSignalDelay").SetValue(0);
// Configure the camera to be triggered by the periodic signal
CEnumParameter(nodemap, "TriggerSelector").SetValue("FrameStart");
CEnumParameter(nodemap, "TriggerMode").SetValue("On");
CEnumParameter(nodemap, "TriggerSource").SetValue("PeriodicSignal1");
/*Using Periodic Signal to Synchronously Trigger External Devices*/
CFloatParameter(nodemap, "BslPeriodicSignalPeriod").SetValue(50000.0);
// Set the signal delay to 0
CIntegerParameter(nodemap, "BslPeriodicSignalDelay").SetValue(0);
// Configure the camera's Timer feature to be triggered by periodic signals
CEnumParameter(nodemap, "TimerSelector").SetValue("Timer1");
CFloatParameter(nodemap, "TimerDuration").SetValue(10.0);
CEnumParameter(nodemap, "TimerTriggerSource").SetValue("PeriodicSignal1");
// Configure the camera to output the timer signal on Line 2
CEnumParameter(nodemap, "LineSelector").SetValue("Line2");
CEnumParameter(nodemap, "LineMode").SetValue("Output");
CEnumParameter(nodemap, "LineSource").SetValue("Timer1Active");
/*Using Periodic Signal to Synchronize Image Acquisition*/
camera.Parameters[PLCamera.BslPeriodicSignalPeriod].SetValue(20000.0);
// Set the signal delay to 0
camera.Parameters[PLCamera.BslPeriodicSignalDelay].SetValue(0);
// Configure the camera to be triggered by the periodic signal
camera.Parameters[PLCamera.TriggerSelector].SetValue(PLCamera.TriggerSelector.FrameStart);
camera.Parameters[PLCamera.TriggerMode].SetValue(PLCamera.TriggerMode.On);
camera.Parameters[PLCamera.TriggerSource].SetValue(PLCamera.TriggerSource.PeriodicSignal1);
/*Using Periodic Signal to Synchronously Trigger External Devices*/
camera.Parameters[PLCamera.BslPeriodicSignalPeriod].SetValue(50000.0);
// Set the signal delay to 0
camera.Parameters[PLCamera.BslPeriodicSignalDelay].SetValue(0);
// Configure the camera's Timer feature to be triggered by periodic signals
camera.Parameters[PLCamera.TimerSelector].SetValue(PLCamera.TimerSelector.Timer1);
camera.Parameters[PLCamera.TimerDuration].SetValue(10.0);
camera.Parameters[PLCamera.TimerTriggerSource].SetValue(PLCamera.TimerTriggerSource.PeriodicSignal1);
// Configure the camera to output the timer signal on Line 2
camera.Parameters[PLCamera.LineSelector].SetValue(PLCamera.LineSelector.Line2);
camera.Parameters[PLCamera.LineMode].SetValue(PLCamera.LineMode.Output);
camera.Parameters[PLCamera.LineSource].SetValue(PLCamera.LineSource.Timer1Active);
/* 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 */
/*Using Periodic Signal to Synchronize Image Acquisition*/
errRes = PylonDeviceSetFloatFeature(hdev, "BslPeriodicSignalPeriod", 20000.0);
CHECK(errRes);
/* Set the signal delay to 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslPeriodicSignalDelay", 0);
CHECK(errRes);
/* Configure the camera to be triggered by the periodic signal */
errRes = PylonDeviceFeatureFromString(hdev, "TriggerSelector", "FrameStart");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TriggerMode", "On");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TriggerSource", "PeriodicSignal1");
CHECK(errRes);
/*Using Periodic Signal to Synchronously Trigger External Devices*/
errRes = PylonDeviceSetFloatFeature(hdev, "BslPeriodicSignalPeriod", 50000.0);
CHECK(errRes);
/* Set the signal delay to 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslPeriodicSignalDelay", 0);
CHECK(errRes);
/* Configure the camera's Timer feature to be triggered by periodic signals */
errRes = PylonDeviceFeatureFromString(hdev, "TimerSelector", "Timer1");
CHECK(errRes);
errRes = PylonDeviceSetFloatFeature(hdev, "TimerDuration", 10.0);
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TimerTriggerSource", "PeriodicSignal1");
CHECK(errRes);
/* Configure the camera to output the timer signal on Line 2 */
errRes = PylonDeviceFeatureFromString(hdev, "LineSelector", "Line2");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "LineMode", "Output");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "LineSource", "Timer1Active");
CHECK(errRes);
# Using Periodic Signal to Synchronize Image Acquisition
camera.BslPeriodicSignalPeriod.Value = 20000.0
# Set the signal delay to 0
camera.BslPeriodicSignalDelay.Value = 0
# Configure the camera to be triggered by the periodic signal
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerMode.Value = "On"
camera.TriggerSource.Value = "PeriodicSignal1"
# Using Periodic Signal to Synchronously Trigger External Devices
camera.BslPeriodicSignalPeriod.Value = 50000.0
# Set the signal delay to 0
camera.BslPeriodicSignalDelay.Value = 0
# Configure the camera's Timer feature to be triggered by periodic signals
camera.TimerSelector.Value = "Timer1"
camera.TimerDuration.Value = 10.0
camera.TimerTriggerSource.Value = "PeriodicSignal1"
# Configure the camera to output the timer signal on Line 2
camera.LineSelector.Value = "Line2"
camera.LineMode.Value = "Output"
camera.LineSource.Value = "Timer1Active"
pylon Viewer를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.