錯誤-200279:無法跟上DAQmx中的採集

更新 Nov 14, 2023

產品資訊

軟體

  • LabVIEW

驅動程式

  • NI-DAQmx

問題敘述

當我使用DAQmx Read或DAQ Assistant Express VI在LabVIEW中運行DAQmx應用程式以連續獲取數據時,出現以下錯誤:
 

Error -200279 occurred at DAQmx Read (Analog 1D Wfm NChan NSamp).vi

Possible reason(s):
The application is not able to keep up with the hardware acquisition.
Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem.

解決方案

此錯誤是由PC緩衝區溢出引起的。 PC緩衝區是電腦上存在於DAQ硬體和LabVIEW應用程式內存之間的緩衝區。它由硬體連續寫入,但只能由LabVIEW定期讀取。這通常會導致讀取速率不匹配。通常,由於讀取速率比採樣速率慢,或者DAQmx PC緩衝區太小而無法容納DAQmx任務所需的數據,因此數據會在DAQmx PC緩衝區中被覆蓋。


情況1:讀取速率低於採樣速率

此錯誤通常是由於連續採樣的DAQmx應用程式的讀取速率比DAQmx任務的採樣速率慢導致的,導致採樣在DAQmx PC緩衝區中累積,直到出現覆蓋錯誤為止。採樣速率是通過下面的DAQmx Timing VI屬性指定的速率:

解決此錯誤時,第一步應該是確保應用程式的讀取率和採樣率相同。

由於您的應用程式的讀取速率取決於您每次DAQmx讀取請求的樣本數量以及每秒呼叫DAQmx讀取功能的次數,因此您可以通過顯式控制讀取數量來調整讀取速率DAQmx讀取所需的樣本數量,或者通過使用timing節點(例如,Wait(ms))顯式控制包含您的DAQmx讀取的while迴圈在一秒鐘內執行的次數:

請注意: DAQmx讀取將自動等待,直到請求的樣本數量可用為止,因此通常僅需在特定應用中控制這些因素之一。

如果while迴圈的執行速度比預期的慢,則可能需要實現Producer / Consumer結構 以將其他過程(例如日誌記錄,post-processing,分析和用戶界面功能)移到Acquisition迴圈之外。

如果不能提高while迴圈性能,則可能需要降低應用程式的採樣率。

請注意:請勿對包含DAQmx讀取的程式碼使用Highlight Execution執行,因為這會減慢執行速度並導致緩衝區溢出。


情況2:PC緩衝區太小,無法保存任務數據

導致此錯誤的另一個原因是DAQmx PC緩衝區太小而無法容納DAQmx任務所需的數據量,從而導致DAQmx PC Buffer在完全獲取數據之前被覆蓋。

有時,可以通過簡單地手動增加主機端數據緩衝區的大小來解決此錯誤。但是,如果由於未足夠快地從DAQmx緩衝區中讀取數據而發生錯誤(上述情況1),則增加緩衝區大小只會延遲錯誤的發生,而不能完全消除錯誤。

情況3:使用一個採集迴圈讀取以不同速率運行的兩個任務

如果共享一個採集迴圈的兩個任務具有不同的採樣率,則會發生此錯誤。出現此錯誤的原因是,讀取的DAQmx是阻止呼叫。一次DAQmx讀取將花費更長的時間來讀取相同數量的樣本,而另一次任務的緩衝區正在填滿時,將進行更長的讀取。

請注意:DSA模組可以強制使用特定的採樣率

相關資訊

DAQmx任務的讀取速率取決於兩個因素-每次讀取獲取的樣本數量和每秒讀取的數量:


可以使用DAQmx Read VI配置每個DAQmx Read讀取的樣本數。考慮應該讀取1個樣本還是N個樣本。使用DAQmx Read VI不同polymorphic instances選擇正確的選項。

將採樣率和讀取率設置為相同並不能保證它們將以預期的速度運行。當while迴圈中存在多個操作時,可能會發生這種不一致,這可能會延遲執行時間。這將導致DAQmx讀取操作的速度慢於指定的速度,這將導致溢出。要驗證循環的運行速度,可以使用下圖所示的迴圈基準測試技術:

其他疑難解答注意事項:

有限採樣與連續採樣
一些應用可能不需要連續採樣,並且可能只需要有限數量的樣本即可讀取。有關更多訊息,請參考DAQmx Timing(VI)幫助

使用DAQmx屬性節點進行緩衝區監視
在連續的緩衝採集期間,可以監視緩衝區以獲取有關當前配置如何影響緩衝區的更多訊息。如果在採集過程中可用元素的數量持續增加,請採取上述操作之一,以免最終導致緩衝區溢出。要監視緩衝區中可用的數據量,請使用DAQmx讀取屬性節點讀取“Status: Available Samples Per Channel屬性。

控制LabVIEW數據流以避免覆蓋錯誤
LabVIEW是一種數據流語言,函數將在收到所有輸入後立即執行,而與block diagram上的位置無關。為了避免函數執行順序的不確定性,可以使用錯誤線強制執行數據流。

在連續的DAQmx任務中,數據被寫入緩衝區,直到執行DAQmx停止任務VI。當DAQmx啟動執行時,PC緩衝區開始填充數據。沒有強制數據流的程式碼可能會在獲取和讀取數據之間產生延遲。這可能會導致緩衝區溢出和初始數據被覆蓋,從而導致錯誤-200279。

下面的程式碼段是不包含強制數據流的程式碼範例,其結果是,與打開/創建/替換文件VI相比,我們無法確定DAQmx Start VI何時執行。選擇文件時,量測可能會填滿緩衝區,這意味著存在PC緩衝區被覆蓋的危險。

下面的程式碼段顯示了一個理想的例子,錯誤線迫使DAQmx Start Task VI 在Open/Create/Replace File VI之後執行。