Periodic Signal#
例如,借助该功能,您能同时在多台相机上以相同的帧速率采集图像。
此功能类似于 Synchronous Free Run 功能,但除了图像采集外,它还可以用于其他用途。
该功能的使用#
运作原理#
支持 Periodic Signal 功能的 Basler 相机提供了附加的相机信号源 PeriodicSignal1
。相机通过此信号源传输具有以下特性的信号:
- 信号是重复的。
- 信号可以通过 Precision Time Protocol 在各设备间同步。
- 可以配置信号的周期。
- 可以配置第一个周期之前的延迟。
PeriodicSignal1
信号源可用于许多不同用途,例如,跨设备同步 counter 或图像采集。
使用 Periodic Signal 同步图像采集#
要在多台相机上同步图像采集,请执行以下操作:
- 打开要使用 Periodic Signal 进行同步的其中一台相机。
- 确保将相机上的
BslPeriodicSignalSource
参数设置为PtpClock
。
这表示相机是通过 Precision Time Protocol 功能同步的。 - 将
BslPeriodicSignalPeriod
参数设置为所需帧速率的倒数,转换为微秒。例如,如果要以每秒 50 帧的速度同步相机,请将该参数设置为 20000(1/50 = 0.02 秒 = 20000 微秒)。您必须在所有相机上指定相同的参数值。 - 配置 periodic signal 延迟:
- 如果希望所有相机同时采集图像,请将所有相机的
BslPeriodicSignalDelay
参数设置为 0。 - 如果希望所有相机按顺序(即以固定间隔)采集图像,请在第一个相机上将
BslPeriodicSignalDelay
参数设置为 0,并在其他相机上将其设置为所需间隔的倍数。
例如,假设您要按 10000 µs 的间隔采集相机之间的图像。为此,在第一台相机上将延迟设置为 0,在第二台相机上将延迟设置为 10000,在第三台相机上将延迟设置为 20000,依此类推。
- 如果希望所有相机同时采集图像,请将所有相机的
- 将相机配置为由 periodic signal 触发:
- 将
TriggerSelector
参数设置为FrameStart
。 - 将
TriggerMode
参数设置为On
。 - 将
TriggerSource
参数设置为PeriodicSignal1
。
- 将
- 对所有相机重复步骤 1 至 5。
使用 Periodic Signal 同步触发外部设备#
您可以使用 Periodic Signal 功能同步触发外部设备。这样您可以将非 PTP 设备设为支持 PTP 功能。
相机的内部 periodic signal 不能用作 I/O 信号。但是,您可以使用 periodic signal 触发相机的 Timer 功能,然后将 timer 信号用作 I/O 信号。
为此:
- 打开要用于触发外部设备的相机。
- 确保将相机上的
BslPeriodicSignalSource
参数设置为PtpClock
。
这表示相机是通过 Precision Time Protocol 功能同步的。 - 将
BslPeriodicSignalPeriod
参数设置为所需触发器速率的倒数,转换为微秒。例如,如果要每秒生成 20 个触发器,请将该参数设置为 50000(1/20 = 0.05 秒 = 50000 微秒)。 - 如果要延迟触发外部设备,请将
BslPeriodicSignalDelay
参数设置为所需的延迟。 - 配置相机的 Timer 功能以由 periodic signal 触发:
- 将
TimerSelector
参数设置为Timer1
。 - 将
TimerDuration
参数设置为所需的 timer 持续时间(以微秒为单位)。
相机将发送 width 等于该值的 I/O 信号。因此,请将参数值设置得足够高,以使外部设备能够接收信号。在大多数情况下,默认值 10 µs 应该足够了。 - 将
TimerTriggerSource
参数设置为PeriodicSignal1
。
- 将
- 配置相机以输出 timer 信号:
- 将
LineSelector
参数设置为所需的 I/O 线路,例如Line2
。该线路必须配置为输出。 - 将
LineSource
参数设置为Timer1Active
。
- 将
- 将外部设备连接到在步骤 6 中选择的输出线路。
设备现已在此线路上接收同步的触发信号。 - 如果要触发另一个外部设备,使用步骤 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 轻松设置参数。