콘텐츠로 바로 가기
STAGING SERVER
DEVELOPMENT SERVER

Periodic Signal#

Periodic Signal 카메라 기능을 사용하면 장치 간에 동기화되는 주기적인 트리거 신호를 생성할 수 있습니다.

이를 통해 예를 들어 여러 카메라에서 동시에 동일한 프레임 레이트로 이미지를 캡처할 수 있습니다.

이 기능은 Synchronous Free Run 기능과 유사하지만, 이미지 취득 외에도 다른 용도로 사용할 수 있습니다.

기능 사용#

작동 방식#

Periodic Signal 기능을 지원하는 Basler 카메라는 추가적인 카메라 신호 소스를 제공하며, PeriodicSignal1. 이 소스를 통해 카메라는 다음과 같은 특성을 가진 신호를 전송합니다.

  • 신호가 반복됩니다.
  • 신호는 Precision Time Protocol을 통해 장치 간에 동기화될 수 있습니다.
  • 신호의 주기를 구성할 수 있습니다.
  • 첫 번째 주기 전의 지연 시간을 구성할 수 있습니다.

The PeriodicSignal1 신호 소스는 Counter 동기화 또는 장치 간 이미지 취득 등 다양한 용도로 사용할 수 있습니다.

Periodic Signal을 사용하여 이미지 취득 동기화하기#

여러 카메라에서 이미지 취득을 동기화하려면:

  1. Periodic Signal을 사용하여 동기화하려는 카메라 중 하나를 엽니다.
  2. 다음 사항을 확인하십시오: BslPeriodicSignalSource 카메라의 파라미터가 다음으로 설정됩니다. PtpClock.
    이는 카메라가 다음을 통해 동기화됨을 나타냅니다. Precision Time Protocol feature.
  3. 파라미터를 원하는 BslPeriodicSignalPeriod 원하는 프레임 레이트의 역수에 해당하는 파라미터를 마이크로초 단위로 변환하여 설정합니다. 예를 들어, 50 fps(frames per second)로 카메라를 동기화하려면 파라미터를 20000으로 설정합니다(1 / 50 = 0.02초 = 20000마이크로초). 모든 카메라에 동일한 파라미터 값을 지정해야 합니다.
  4. Periodic Signal 지연 시간 구성:
    • 모든 카메라가 이미지를 취득하도록 하려면 동시에, BslPeriodicSignalDelay 모든 카메라에서 파라미터를 0으로 설정합니다.
    • 모든 카메라가 이미지를 취득하도록 하려면 순차적으로, 즉 일정한 간격으로 설정하려면 BslPeriodicSignalDelay 첫 번째 카메라의 파라미터는 0으로, 다른 카메라들은 원하는 간격의 배수로 설정합니다.
      예를 들어, 카메라 간에 10000 µs의 간격으로 이미지를 취득하려 한다고 가정해 보겠습니다. 이렇게 하려면 첫 번째 카메라는 지연 시간을 0으로, 두 번째 카메라는 10000으로, 세 번째 카메라는 20000으로 설정하는 식입니다.
  5. Periodic Signal에 의해 트리거되도록 카메라 구성:
    1. 파라미터를 원하는 TriggerSelector 파라메터 FrameStart.
    2. 파라미터를 원하는 TriggerMode 파라메터 On.
    3. 파라미터를 원하는 TriggerSource 파라메터 PeriodicSignal1.
  6. 모든 카메라에 대해 1~5단계를 반복합니다.

Periodic Signal을 사용하여 외부 장치를 동기식으로 트리거하기#

Periodic Signal 기능을 사용하여 외부 장치를 동기화 방식으로 트리거할 수 있습니다. 이를 통해 PTP를 지원하지 않는 장치에서도 PTP를 사용할 수 있습니다.

카메라의 내부 periodic signal은 I/O 신호로 직접 사용할 수 없습니다. 그러나 periodic signal을 사용하여 카메라의 Timer 기능을 트리거한 다음 타이머 신호를 I/O 신호로 사용할 수 있습니다.

방법:

  1. 외부 장치를 트리거하는 데 사용할 카메라를 엽니다.
  2. 다음 사항을 확인하십시오: BslPeriodicSignalSource 카메라의 파라미터가 다음으로 설정됩니다. PtpClock.
    이는 카메라가 다음을 통해 동기화됨을 나타냅니다. Precision Time Protocol feature.
  3. 파라미터를 원하는 BslPeriodicSignalPeriod 매개변수를 원하는 트리거 레이트의 역수(마이크로초 단위로 변환)로 설정합니다. 예를 들어 초당 20개의 트리거 신호를 생성하려면 매개변수를 50000으로 설정합니다(1/20 = 0.05초 = 50000마이크로초).
  4. 시간 지연을 두고 외부 장치를 트리거하려면 BslPeriodicSignalDelay 매개변수를 원하는 지연 시간으로 설정합니다.
  5. 카메라의 Timer 기능이 periodic signal에 의해 트리거되도록 설정합니다.
    1. 파라미터를 원하는 TimerSelector 파라메터 Timer1.
    2. 파라미터를 원하는 TimerDuration 매개변수를 원하는 timer duration 마이크로초 단위.
      카메라는 이 값과 같은 폭의 I/O 신호를 전송합니다. 따라서 외부 장치가 신호를 수신할 수 있도록 충분히 높은 매개변수 값을 설정하십시오. 대부분의 경우 기본값인 10 µs 면 충분합니다.
    3. 파라미터를 원하는 TimerTriggerSource 파라메터 PeriodicSignal1.
  6. 타이머 신호를 출력하도록 카메라를 설정합니다.
    1. 파라미터를 원하는 LineSelector 매개변수를 원하는 I/O 라인(예: )으로 설정합니다. Line2. 해당 라인은 출력으로 구성되어야 합니다..
    2. 파라미터를 원하는 LineSource 파라메터 Timer1Active.
  7. 6단계에서 선택한 출력 라인에 외부 장치를 연결합니다.
    이제 장치가 이 라인에서 동기화된 트리거 신호를 수신합니다.
  8. 다른 외부 장치를 트리거하려면 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를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.