Periodic Signal (dart E)#
该功能的使用#
运作原理#
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#
要将相机配置为进行同步图像采集:
- 将相机配置为由 periodic signal 触发:
- 将
TriggerMode
参数设置为On
。 - 将
TriggerSource
参数设置为PeriodicSignal1
。
- 将
- 配置信号过渡类型:
- 如果您希望相机在输入信号的下降沿捕捉图像,则将
BslPeriodicSignalActivation
参数设置为FallingEdge
。 - 如果您希望相机在输入信号的上升沿捕捉图像,则将
BslPeriodicSignalActivation
参数设置为RisingEdge
。
- 如果您希望相机在输入信号的下降沿捕捉图像,则将
- 配置信号延迟:
- 如果您希望相机在输入信号到达时立即捕捉图像,则将
BslPeriodicSignalDelay
参数设置为 0。 - 如果您希望相机在输入信号到达之前或之后捕捉图像,则将
BslPeriodicSignalDelay
参数设置为任何其他值(以纳秒为单位)。例如,如果您将该参数设置为 -500000,则相机会在预期下一个信号到达前 0.5 秒采集图像。
- 如果您希望相机在输入信号到达时立即捕捉图像,则将
- 通过相机的输入线 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.