使用NI-DAQmx為LabVIEW設置Stop Trigger

更新 Nov 15, 2019

產品資訊

Driver

  • NI-DAQmx

問題敘述

我有一個NI DAQ設備,我想在LabVIEW裡使用NI-DAQmx的函式向設備發送訊號,告訴它何時啟動和停止擷取資料。我該怎樣做呢?

解決方案

DAQmx不直接提供生成停止觸發器(stop trigger) 的方法;但是,透過使用參考觸發器(reference trigger)並修改讀取位置,您一樣可以在LabVIEW中創建等效的stop trigger。

要實現此目的,您必須在reference trigger之前設置一個有限擷取(finite acquisition),目的是在reference trigger觸發之前與之後各採集幾個samples。這是個很有用的方法,因為為了提供觸發前(pre-trigger)的samples給reference trigger,DAQmx將在等待reference trigger時不斷擷取資料。同時間,DAQmx Read仍然可以讀這些沒有明確定義在擷取設定裡的連續資料。
請參閱下面的程式碼,如何實現將reference trigger設置為等效stop triggger:

圖1:LabVIEW範例程式使用了DAQmx的Start與Stop Trigger功能

在上圖的範例中,使用DAQmx創建類比輸入任務,並為其配置為了兩個Trigger:一個Start Digital Edge Trigger,以及一個Reference Digital Edge Trigger。

Start Trigger決定何時擷取樣本(samples)並為之後的reference trigger做好準備,而reference trigger則是決定何時發送有限的pre-trigger和post-trigger的樣本(samples)來停止資料擷取任務。

注意:您可以將start和reference trigger設置在相同的PFI line,因為DAQmx驅動程式在start trigger觸發之前是不會等待reference trigger的。


設置Reference Trigger

Reference trigger需要一個名為pretrigger samples per channel的額外輸入參數:

圖2:DAQmx Reference Triiger中的Pretrigger Samples Parameter 

pretrigger sample的數量定義了在 finite acquisition期間採集的總樣本中有多少是在reference trigger發生之前。之後其餘的樣本被認為是 post-trigger samples.。

所以說,post-trigger的樣本數量可以透過下方等式表達:

Post-Trigger Samples = samples per channel (DAQmx Timing input) - pretrigger samples per channel (DAQmx Trigger input)

舉例來說,要設定獲得最少數量的pretrigger samples(2),並且40個post-trigger樣本的任務。您將DAQmx Timing上的samples per channel數值設定為42,並將DAQmx Reference Trigger上的pretrigger samples per channe設置為2。Finite acquisition的最終輸出看起來如下:



圖3:使用Reference Trigger後DAQmx Read輸出的最終概念圖

注意:設置任務的Timing時,Reference Trigger必須至少有2個pre-trigger和2個post-trigger樣本。因此,即使使用reference trigger作為stop trigger,在reference trigger發生後仍然會收到至少兩個樣本。但是,如果不需要,這些樣本可以在後續的資料處理中丟棄。

相關資訊

使用Reference Trigger來持續擷取
默認情況下,DAQmx將創造一個足夠大的緩衝區(buffer),大小會恰巧可容納要讀取的樣本總數(number of samples to read)(例如,上述範例中的緩衝區就大小會是42)。

為了使DAQmx應用程式能夠在等待reference trigger的同時從緩衝區中提取連續樣本,還需要進行另外兩項修改:
  1. 在設定Timimg屬性後,使用DAQmx Configure Input Buffer手動更改DAQmx應用程式的緩衝區大小。
  2. DAQmx Read屬性節點(property node)中修改Relative To的屬性。默認情況下,使用reference trigger時,此屬性設置為First Pretrigger Sample 。通過將其設置為Current Read Position,DAQmx Read將讀取在start trigger發生後放入buffer的sample。如果未更改,則DAQmx Read將等待直到接收到Reference Trigger的訊號,才會從buffer中讀取樣本。