Periodic Signal (dart E)#
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:
- Configure the camera to be triggered by the periodic signal:
- Set the
TriggerMode
parameter toOn
. - Set the
TriggerSource
parameter toPeriodicSignal1
.
- Set the
- 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 toFallingEdge
. - If you want the camera to capture images on the rising edges of the input signal, set the
BslPeriodicSignalActivation
parameter toRisingEdge
.
- If you want the camera to capture images on the falling edges of the input signal, set the
- 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.
- If you want the camera to capture images immediately when the input signal arrives, set the
- 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.