解決方案
此錯誤是NI-DAQmx在識別資源衝突時所產生的。一些常見的資源包括timing engines/channels/trigger lines/tasks/sample clocks等。由於可以在多種情況下觀察到錯誤,因此我們在下面描述了幾種可能的情況:
- 情況1:未能正確清除task並釋放其資源。
- 情況2:使用已從被其他task預留的計數器。
- 情況3:使用多個task訪問資料擷取設備上的相同的通道。
- 情況4:使用多個獨立運行且沒有任何錯誤的SubVI,但在從top-level VI呼叫時會產生錯誤。或者,當您在Teststand中使用多個獨立運行且沒有任何錯誤的VI時,但在從sequence中使用時會產生錯誤。
- 情況5:同時運行的類比輸入或類比輸出task超過了DAQ設備允許的數量。
- 情況6:使用不共享sample clock的多個硬體時脈task進行類比輸出。
- 情況7:嘗試在NI-MAX中使用正在運行的 LabVIEW 程序中的task。
- 情況8:使用錯誤的資源來進行counter操作。
情況1:未能正確清除task並釋放其資源當DAQmx任務啟動或以其他方式進入保留或已提交狀態時,與該任務相關的資源 (例如clocks/channels/trigger lines/buffer memory) 由該任務獨占。
您可以通過執行以下操作之一解決此問題:
- 在task尾添加一個
DAQmx Clear Task.vi
- 在task尾添加一個
DAQmx Control Task.vi
,並將其action設置為unreserve
如果您正在使用while loop進行讀取或寫入並且Clear Task在while loop後執行,請不要使用abort按鈕中止執行。改用連接到conditional terminal的停止按鈕。
情況2:使用已從被其他task預留的計數器對於需要兩個計數器的任何task,第二個計數器是根據連接到create channel vi的計數器保留的。計數器總是與相鄰的計數器配對,因此ctr 0與ctr 1配對,ctr 2與ctr 3配對。某些計數器任務需要
多個計數器。
出現此問題的原因是實際使用的計數器數量因計數器任務類型而異。特別是在下面附加程式的情況下,請參閱下面的片段。
對於基於STC II晶片的M Series DAQ,使用兩個計數器來生成有限脈衝序列。請參閱下表按系列對DAQ設備的計數器進行比較。
從表中可以看出,在本文所涉及的錯誤情況下,M Series DAQ設備有兩個計數器,而發生資源錯誤是因為有限脈衝任務需要兩個計數器。
Counter Function | E Series | M Series | X Series |
---|
Counter / Timers | 2, 24-bit | 2, 32-bit | 4, 32-bit |
---|
Counter Timebase | 20 MHz | 80 MHz | 100 MHz |
---|
Quadrature Encoder Inputs | No | Yes | Yes |
---|
Digital Debouncing Filter | None | Usable with Counter Tasks Only | Available on All Digital Lines |
---|
Max Rate Benchmark for Buffered Counter Input Tasks | 150 kHz on a single Counter (PCI) | 380 kHz (PCI) 1194 kHz - 621x single counter | 10 MHz on all four counters (PCIe) |
---|
Buffered Counter Outputs? | No | No | Yes |
---|
情況3:使用多個task訪問資料擷取設備上的相同的通道每個實體通道只能分配給一個task。您可能沒有意識到這種情況正在發生,因此請確保檢查在NI MAX中創建的任何task,並且沒有其他包含相同資源的task/SubVI正在運行。
情況4:使用多個獨立運行且沒有任何錯誤的SubVI,但在從top-level VI使用時會產生錯誤。當您有多個NI-DAQmx VI再次使用同一task而不清除先前打開的task時,可能會發生Error -50103。為防止發生此錯誤:
情況5:同時運行的類比輸入或類比輸出task超過了DAQ設備允許的數量
每種類型的硬體 (PCI/PCIe和cDAQ) 都有有限數量的硬體資源可用。這限制了應用程式可以同時使用的task的數量。
使用E、M、S、X 或 AO Series DAQ設備時,您可以執行一項硬體時脈類比輸出task。但是,大多數設備還支持同時執行一項或多項軟體時脈task和一項硬體時脈task。此功能允許在同一設備上同時生成具有不同時脈的信號。
- 如果您在一個輸出task上有多個通道,這些通道將共享相同的時脈,因為它們將共享AO sample clock。但是,可以在每個通道上輸出不同的信號。 這是一個例子。
情況6:使用不共享sample clock的多個硬體時脈task進行類比輸出
您應該能夠通過在LabVIEW中的範例來實現此行為。通過選擇Help>>Find Examples... 在Example Finder中選擇Browse tab,然後選擇Hardware Input and Output>>DAQmx>>Analog Output>>Voltage - Continuous Output vi.。這將允許您在front panel上選擇任意數量的通道並將相同的波形輸出到這些通道。
要在這些通道上實現phase shift,您可以按照與下面的截圖的方式編輯現有範例程式。
保存並關閉Waveform Buffer Generation (multi) VI。在Cont Gen Voltage Wfm-Int Clk VI的 front panel上,選擇兩個通道輸出同步波形。例如,要在Dev1的channel 0和1上輸出波形,物理通道應為Dev1/ao0:1 。請參閱以下有關如何在LabVIEW中選擇多個通道的文章:Select More Than One NI-DAQmx Channel in LabVIEW。程式運行時,波形應類似於下圖 (phase shift 180°)。
其他解決方法包括:
多個軟體時脈task與一個硬體時脈task同時進行
使用E、M、S、X或AO Series DAQ 設備時,您可以執行一項硬體時脈類比輸出task。但是,大多數設備還支持同時執行一項或多項軟體時脈task和一項硬體時脈task。此功能允許設備在同一設備上同時生成具有不同時脈的信號。
一個硬體時脈task上的多個AO通道
在硬體時脈task中,您可以包含多個AO通道。這些通道將共享相同的時脈,因為它們將共享AO sample clock。但是,可以在每個通道上輸出不同的信號。 這是一個例子。
注意:在NI PXIe-4461/3等設備上,兩個類比輸出都有專用的timing engine,因此可以在每個通道上運行兩個獨立時脈的類比輸出task。
情況7:嘗試在NI-MAX中使用正在運行的 LabVIEW 程序中的task
如果LabVIEW程式當前正在運行您的DAQmx task以擷取資料,那麼它將保留與該task對應的硬體資源。這意味著NI-MAX將無法同時使用該硬體資源或設備。
為了防止這種衝突,您可以在運行LabVIEW程式之前或之後執行任何NI-MAX操作,或者當您的程序在使用DAQmx Start Task之前或使用DAQmx Clear Task之後的狀態下時,這些函數分別保留和釋放硬體資源。
情況8:使用錯誤的資源來進行counter操作
確保您嘗試運行的task支持您選擇的資源。 (例如,使用內部計數器做為數位信號的邊緣而不是使用onboard clock)。