跳转到内容

Periodic Signal (dart E)#

The Periodic Signal camera feature on dart E cameras allows you to synchronize image acquisition on multiple cameras.

该功能的使用#

运作原理#

Basler dart E cameras that support the Periodic Signal feature provide an additional camera signal source, PeriodicSignal1. The signal is synchronized to electrical signals applied via the camera's input line 1.

例如,如果您将周期为 0.3 秒的电信号施加到输入线 1,则相机的内部周期信号会进行调整,进而使相机每隔 0.3 秒捕获一次图像。

当您延长或缩短电信号的周期时,相机的内部周期信号需要一段时间才能调整到新的周期。相机的帧速率会相应增加或减少。当您停止施加电信号时,图像采集将停止。

与标准的硬件触发相比,它具有以下优点:

  • 它允许边沿触发(上升沿或下降沿,通过 BslPeriodicSignalActivation 参数进行配置)。Standard 硬件触发仅允许电平触发。
  • 因为相机“知道”信号是周期性的,所以它可以预测下一个信号并使相机准备好进行图像采集。这缩短了从检测到触发信号到实际开始曝光之间的时间。
  • 您可以指定一个负触发延迟(通过 BslPeriodicSignalDelay 参数进行配置),这意味着相机在实际施加电信号之前采集图像。

信息

Basler 建议以稳定的速率施加电信号。采集期间缩短或延长周期会导致不稳定的相机行为,并可能导致丢帧。

配置 Periodic Signal#

要将相机配置为进行同步图像采集:

  1. 将相机配置为由 periodic signal 触发:
    1. TriggerMode 参数设置为 On
    2. TriggerSource 参数设置为 PeriodicSignal1
  2. 配置信号过渡类型:
    • 如果您希望相机在输入信号的下降沿捕捉图像,则将 BslPeriodicSignalActivation 参数设置为 FallingEdge
    • 如果您希望相机在输入信号的上升沿捕捉图像,则将 BslPeriodicSignalActivation 参数设置为 RisingEdge
  3. 配置信号延迟:
    • 如果您希望相机在输入信号到达时立即捕捉图像,则将 BslPeriodicSignalDelay 参数设置为 0。
    • 如果您希望相机在输入信号到达之前或之后捕捉图像,则将 BslPeriodicSignalDelay 参数设置为任何其他值(以纳秒为单位)。例如,如果您将该参数设置为 -500000,则相机会在预期下一个信号到达前 0.5 秒采集图像。
  4. 通过相机的输入线 1 施加周期性的电信号。

示例代码#

// Configure the camera to be triggered by the periodic signal
// Note: You must set the trigger source first and then the trigger mode
camera.TriggerSource.SetValue(TriggerSource_PeriodicSignal1);
camera.TriggerMode.SetValue(TriggerMode_On);
// Set the transition type to falling edge
camera.BslPeriodicSignalActivation.SetValue(BslPeriodicSignalActivation_FallingEdge);
// Set the signal delay to 0
camera.BslPeriodicSignalDelay.SetValue(0);
INodeMap& nodemap = camera.GetNodeMap();
// Configure the camera to be triggered by the periodic signal
// Note: You must set the trigger source first and then the trigger mode
CEnumParameter(nodemap, "TriggerSource").SetValue("PeriodicSignal1");
CEnumParameter(nodemap, "TriggerMode").SetValue("On");
// Set the transition type to falling edge
CEnumParameter(nodemap, "BslPeriodicSignalActivation").SetValue("FallingEdge");
// Set the signal delay to 0
CIntegerParameter(nodemap, "BslPeriodicSignalDelay").SetValue(0);
// Configure the camera to be triggered by the periodic signal
// Note: You must set the trigger source first and then the trigger mode
camera.Parameters[PLCamera.TriggerSource].SetValue(PLCamera.TriggerSource.PeriodicSignal1);
camera.Parameters[PLCamera.TriggerMode].SetValue(PLCamera.TriggerMode.On);
// Set the transition type to falling edge
camera.Parameters[PLCamera.BslPeriodicSignalActivation].SetValue(PLCamera.BslPeriodicSignalActivation.FallingEdge);
// Set the signal delay to 0
camera.Parameters[PLCamera.BslPeriodicSignalDelay].SetValue(0);
/* 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 */
/* Configure the camera to be triggered by the periodic signal */
/* Note: You must set the trigger source first and then the trigger mode */
errRes = PylonDeviceFeatureFromString(hdev, "TriggerSource", "PeriodicSignal1");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TriggerMode", "On");
CHECK(errRes);
/* Set the transition type to falling edge */
errRes = PylonDeviceFeatureFromString(hdev, "BslPeriodicSignalActivation", "FallingEdge");
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
# Note: You must set the trigger source first and then the trigger mode
camera.TriggerSource.Value = "PeriodicSignal1"
camera.TriggerMode.Value = "On"
# Set the transition type to falling edge
camera.BslPeriodicSignalActivation.Value = "FallingEdge"
# Set the signal delay to 0
camera.BslPeriodicSignalDelay.Value = 0
/* 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 */
/* Configure the camera to be triggered by the periodic signal */
errRes = PylonDeviceFeatureFromString(hdev, "TriggerMode", "On");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "TriggerSource", "PeriodicSignal1");
CHECK(errRes);
/* Set the transition type to falling edge */
errRes = PylonDeviceFeatureFromString(hdev, "BslPeriodicSignalActivation", "FallingEdge");
CHECK(errRes);
/* Set the signal delay to 0 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslPeriodicSignalDelay", 0);
CHECK(errRes);

You can also use the pylon Viewer to easily set the parameters.