跳至內容
測試伺服器
開發伺服器

Periodic Signal#

Periodic Signal 相機功能可讓您產生在各裝置間同步的週期性觸發訊號。

這讓您可以,例如,同時以相同的幀率從多台攝影機擷取影像。

此功能與 Synchronous Free Run 功能,但除了影像擷取之外,它還可用於其他用途。

使用功能#

運作原理#

支援「Periodic Signal 」功能的 Basler 攝影機可提供額外的攝影機訊號來源, PeriodicSignal1. 透過此信源,攝影機傳輸的訊號具有以下特徵:

  • 該訊號具有重複性。
  • 該訊號可透過 Precision Time Protocol。
  • 訊號的週期可進行設定。
  • 第一節開始前的延遲時間可進行設定。

當 PeriodicSignal1 訊號源可應用於多種不同用途,例如用於在各裝置間同步計數器或影像擷取。

使用Periodic Signal 來同步影像擷取#

若要同步多台相機的影像擷取:

  1. 請透過Periodic Signal 開啟您想要同步的其中一台攝影機。
  2. 請確保 BslPeriodicSignalSource 相機上的參數設定為 PtpClock.
    這表示相機是透過 Precision Time Protocol 功能。
  3. 將相機中的 BslPeriodicSignalPeriod 將此參數設定為目標幀率的倒數,並轉換為微秒。例如,若要將攝影機同步至每秒 50 幀,請將此參數設定為 20000(1 / 50 = 0.02 秒 = 20000 微秒)。您必須在所有攝影機上指定相同的參數值。
  4. 設定週期性訊號延遲:
    • 若您希望所有攝影機皆能擷取影像 同時)之間時,請將該記憶體 operator 上的 BslPeriodicSignalDelay 將所有攝影機的該參數設為 0。
    • 若您希望所有攝影機皆能擷取影像 依序地,也就是說,以固定間隔設定該 BslPeriodicSignalDelay 將第一台攝影機的參數設為 0,其餘攝影機則設為目標間隔的倍數。
      舉例來說,假設您希望各台攝影機之間的影像擷取間隔為 10000 µs。要達成此目標,請將第一台攝影機的延遲設定為 0,第二台攝影機設定為 10000,第三台攝影機設定為 20000,依此類推。
  5. 設定相機由 periodic signal 觸發:
    1. 將相機中的 TriggerSelector 參數設為 FrameStart.
    2. 將相機中的 TriggerMode 參數設為 On.
    3. 將相機中的 TriggerSource 參數設為 PeriodicSignal1.
  6. 請針對所有攝影機重複步驟 1 至 5。

使用Periodic Signal 同步觸發外部裝置#

您可以使用「Periodic Signal 」功能來同步觸發外部裝置。這讓您能夠使非PTP 裝置具備PTP 功能。

相機的內部週期性訊號無法用作 I/O 訊號。不過,您可以利用週期性訊號觸發相機的 Timer 功能,然後將計時器訊號用作 I/O 訊號。

若要這樣做:

  1. 開啟您要用来觸發外部裝置的相機。
  2. 請確保 BslPeriodicSignalSource 相機上的參數設定為 PtpClock.
    這表示相機是透過 Precision Time Protocol 功能。
  3. 將相機中的 BslPeriodicSignalPeriod 將此參數設定為所需觸發頻率的倒數,並轉換為微秒。例如,若要每秒產生 20 個觸發訊號,請將此參數設定為 50000(1/20 = 0.05 秒 = 50000 微秒)。
  4. 若要帶有延遲地觸發外部裝置,請設定 BslPeriodicSignalDelay 將參數設定為所需的延遲時間。
  5. 設定相機的 Timer 由週期性訊號觸發的功能:
    1. 將相機中的 TimerSelector 參數設為 Timer1.
    2. 將相機中的 TimerDuration 參數設為所需的 timer duration (以微秒為單位)。
      攝影機將傳送一個寬度等於此值的 I/O 訊號。因此,請將參數值設定得足夠高,以確保外部裝置能夠接收該訊號。在大多數情況下,預設值 10 µs 應已足夠。
    3. 將相機中的 TimerTriggerSource 參數設為 PeriodicSignal1.
  6. 設定攝影機以輸出計時器訊號:
    1. 將相機中的 LineSelector 參數設為所需的 I/O 線路,例如: Line2。該線路必須 設定為輸出.
    2. 將相機中的 LineSource 參數設為 Timer1Active.
  7. 將外部裝置連接至步驟 6 中選定的輸出線。
    該裝置現在會透過此線路接收同步觸發訊號。
  8. 若要觸發另一台外部裝置,請重複步驟 1 至 6,並使用 Timer2 進行明確的生命週期管理即呼叫 Timer2Active 在步驟 5 和 6 中。

資訊

您也可以利用相同的週期性訊號,讓各台相機的影像擷取動作保持同步,並同步觸發外部裝置。要做到這一點,請依序執行上述兩項程序。

其他參數#

  • BslPeriodicSignalSelector: 設定待配置的週期性訊號通道。由於目前所有 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"

您也可以 use the pylon Viewer 來輕鬆設定參數。