Skip to content

Periodic Signal (dart E)#

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

Using the Feature#

How It Works#

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.

For example, if you apply an electrical signal with a period of 0.3 seconds to input line 1, the camera's internal periodic signal adapts, which in turn lets the camera capture an image every 0.3 seconds.

When you increase or decrease the period of the electrical signal, the camera's internal periodic signal takes a while to adapt to the new period. The camera's frame rate increases or decreases accordingly. When you stop applying electrical signals, image acquisition stops.

This has the following advantages over standard hardware triggering:

  • It allows edge triggering (rising or falling edge, configured via the BslPeriodicSignalActivation parameter). Standard hardware triggering only allows level triggering.
  • Because the camera "knows" that the signal is periodic, it can predict the next signal and prepare the camera for image acquisition. This reduces the time between the detection of the trigger signal and the actual start of the exposure.
  • You can specify a negative trigger delay (configured via the BslPeriodicSignalDelay parameter), which means that the camera acquires images before the electrical signal is actually applied.

Info

Basler recommends applying electrical signals at a steady rate. Decreasing or increasing the period during acquisition may cause unstable camera behavior and may lead to dropped frames.

Configuring Periodic Signal#

To configure the camera for synchronized image acquisition:

  1. Configure the camera to be triggered by the periodic signal:
    1. Set the TriggerMode parameter to On.
    2. Set the TriggerSource parameter to PeriodicSignal1.
  2. Configure the signal transition type:
    • If you want the camera to capture images on the falling edges of the input signal, set the BslPeriodicSignalActivation parameter to FallingEdge.
    • If you want the camera to capture images on the rising edges of the input signal, set the BslPeriodicSignalActivation parameter to RisingEdge.
  3. Configure the signal delay:
    • If you want the camera to capture images immediately when the input signal arrives, set the BslPeriodicSignalDelay parameter to 0.
    • If you want the camera to capture images before or after the input signal arrives, set the BslPeriodicSignalDelay parameter to any other value in nanoseconds. For example, if you set the parameter to -500000, the camera acquires an image 0.5 seconds before the next signal is expected to arrive.
  4. Apply periodic electrical signals via the camera's input line 1.

Sample Code#

// 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.