在LabVIEW或NI-MAX中使用NI-DAQmx時出現Error -50103

更新 Oct 21, 2022

產品資訊

軟體

  • LabVIEW

驅動程式

  • NI-DAQmx

問題敘述

為什麼我會收到以下錯誤?

Error -50103 occurred at DAQmx Start Task.vi: 7220001
Possible Reason(s): The specified resource is reserved. The operation could not be completed as specified.
 

解決方案

此錯誤是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 FunctionE SeriesM SeriesX Series
Counter / Timers2, 24-bit2, 32-bit4, 32-bit
Counter Timebase20 MHz80 MHz100 MHz
Quadrature Encoder InputsNoYesYes
Digital Debouncing FilterNoneUsable 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?NoNoYes
情況3:使用多個task訪問資料擷取設備上的相同的通道

每個實體通道只能分配給一個task。您可能沒有意識到這種情況正在發生,因此請確保檢查在NI MAX中創建的任何task,並且沒有其他包含相同資源的task/SubVI正在運行。

情況4:使用多個獨立運行且沒有任何錯誤的SubVI,但在從top-level VI使用時會產生錯誤。

當您有多個NI-DAQmx VI再次使用同一task而不清除先前打開的task時,可能會發生Error -50103。為防止發生此錯誤:
  • 選項 1:在另一個SubVI中再次打開之前清除task,或者只是將DAQmx task從一個SubVI傳遞到另一個,以避免再次打開該task。
  • 選項 2:如果您在多個通道上執行相同的操作,請使用Select More Than One NI-DAQmx Channel in LabVIEW進行操作。

情況5:同時運行的類比輸入或類比輸出task超過了DAQ設備允許的數量

每種類型的硬體 (PCI/PCIecDAQ) 都有有限數量的硬體資源可用。這限制了應用程式可以同時使用的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)。

相關資訊

Traditional NI-DAQ案例:在Traditional NI-DAQ (Legacy)應用程式之後運行DAQmx應用程式,而無先重置Traditional NI-DAQ (Legacy)驅動程式。按照以下步驟重置Traditional NI-DAQ (Legacy)驅動程式:
  1. 到Measurement & Automation Explorer
  2. 展開Devices and Interfaces
  3. 右鍵單擊Traditional NI-DAQ (Legacy) Devices
  4. 選擇Reset driver for Traditional NI-DAQ (Legacy)
這釋放了之前為Traditional NI-DAQ (Legacy)保留的資源,並允許您使用DAQmx驅動程式進行資料擷取。
 

另請注意:
NI 672X設備不支持同時執行硬體時脈task和一個或多個軟體時脈task。