Periodic Signal#
這可讓您例如同時在多台相機上以相同的影格率擷取影像。
此功能類似於 Synchronous Free Run 功能,但除了影像擷取之外,它還可用於其他目的。
使用此功能#
運作原理#
支援 Periodic Signal 功能的 Basler 相機提供額外的相機訊號來源, PeriodicSignal1透過此來源,相機會傳輸具有以下特性的訊號:
- 該訊號是重複的。
- 可以透過 Precision Time Protocol 在各裝置之間同步訊號。
- 可以設定訊號的週期。
- 可以設定第一個週期之前的延遲。
影像 PeriodicSignal1 訊號來源可用於許多不同的目的,例如同步各裝置的 Counter 或影像擷取。
使用 Periodic Signal 來同步影像擷取#
若要在多台相機上同步影像擷取:
- 開啟您想要使用 Periodic Signal 進行同步其中一台相機。
- 請確保
BslPeriodicSignalSource相機上的參數設定為PtpClock.
這表示相機是透過 Precision Time Protocol feature 定義的設定。 - 將
BslPeriodicSignalPeriod參數設定為所需影格率的倒數,並轉換為微秒。例如,如果您想要以每秒 50 個影格同步相機,請將參數設定為 20000(1 / 50 = 0.02 秒 = 20000 微秒)。您必須在所有相機上指定相同的參數值。 - 設定週期性訊號延遲:
- 如果您希望所有相機擷取影像 同時,請將
BslPeriodicSignalDelay在所有相機上將參數設為 0。 - 如果您希望所有相機擷取影像 依序亦即以固定間隔,將
BslPeriodicSignalDelay參數在第一台相機上設為 0,並在其他相機上設為所需間隔的倍數。
例如,假設您想要以相機之間 10000 µs 的間隔擷取影像。若要這麼做,請將第一台相機的延遲設為 0,第二台相機設為 10000,第三台相機設為 20000,依此類推。
- 如果您希望所有相機擷取影像 同時,請將
- 將相機設定為由週期訊號觸發:
- 將
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 feature 定義的設定。 - 將
BslPeriodicSignalPeriod參數設為所需觸發頻率的倒數,並轉換為微秒。例如,如果您想每秒產生 20 個觸發信號,請將參數設為 50000(1/20 = 0.05 秒 = 50000 微秒)。 - 如果您想透過時間延遲來觸發外部裝置,請將
BslPeriodicSignalDelay參數設為所需的延遲時間。 - 將相機的 Timer 功能設定為由 Periodic Signal 觸發:
- 將
TimerSelector參數設為Timer1. - 將
TimerDuration參數設為所需的 Timer 持續時間 (以微秒為單位)。
相機將會發送一個脈衝寬度等於此數值的 I/O 信號。因此,請將參數值設得足夠大,以便外部裝置能夠接收信號。在大多數情況下,預設值 10 µs 應該就足夠了。 - 將
TimerTriggerSource參數設為PeriodicSignal1.
- 將
- 設定相機以輸出 Timer 信號:
- 將
LineSelector參數至所需的 I/O 線路,例如:Line2。該線路必須 設定為輸出. - 將
LineSource參數設為Timer1Active.
- 將
- 將外部裝置連接到步驟 6 中選定的輸出線。
現在,該裝置會在此線上接收到同步的觸發信號。 - 如果您想觸發另一個外部裝置,請重複步驟 1 至 6,並在步驟 5 和 6 中使用
Timer2和Timer2Active。
資訊
您也可以使用同一個 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 來輕鬆設定參數。