Resolving NI-DAQmx Error -50103 in LabVIEW NXG

Updated Dec 20, 2017

Reported In

Software

  • LabVIEW NXG

Driver

  • NI-DAQmx

Issue Details

Why do I get the following error when I do not explicitly use the same resources when using NI-DAQmx in LabVIEW NXG?

Error -50103 The Specified Resource is Reserved

Solution

This error is the result of NI-DAQmx recognizing a physical resource conflict. Because the error can be observed in a variety of situations, several possible cases are described below:
  • Case 1: Continuously starting and clearing a DAQmx task (in a loop) for an extended period of time.
  • Case 2: Having counter tasks that need two counters and one of them is being used by another task on the same device.
  • Case 3: Using multiple SubVIs that run without any error independently, but generate an error when called from a top-level VI.
  • Case 4: Concurrently running two or more analog input or analog output tasks.
  • Case 5: Failing to properly clear a task and release its resources.

Case 1: Continuously creating, configuring, starting, and clearing a DAQmx task (in a loop) for an extended period of time.

To avoid this problem, configure and start your task once before the loop, then call the read/write function in the loop as needed, and clear the task after the loop. 

For examples on how to do this, reference examples for DAQmx by launching LabVIEW NXG and going to Help»Find Examples. Here you can browse by task and select Hardware Input and Output»DAQmx. The following images also illustrate best programming practices for DAQmx tasks.

Incorrect:

Correct:


Case 2: Using multiple counter tasks on the same device.

For any task that requires two counters, the second counter is reserved based on the counter that is wired to the Create Channel node. The counters are always paired with the counter next to it -- i.e., ctr 0 is paired with ctr 1 and ctr 2 is paired with ctr 3. How Many Counters Does Each Type of Counter Task Require lists counter tasks that use more than one counter. 

Case 3: Using multiple SubVIs that run without any error independently, but generate an error when called from a top-level VI.

Error -50103 is likely to occur when you have multiple NI-DAQmxVI's that call the same task again without clearing the previously opened task. If at any given time you try to open a task that already is being used, you might receive Error -50103: The specified resource is reserved.

To prevent this error from occurring, clear the task before you open it again in another SubVI, or just pass the DAQmx task from one SubVI to another to avoid having to open the task again.

Case 4: Concurrently running two or more analog input or analog output tasks.

This error can also be thrown when a program explicitly calls multiple tasks performing the same type of operation at the same time. As with the other two previous cases, this produces a situation where multiple independent tasks are concurrently attempting to access the same resource. Even though the tasks might be using different channels, this is still a conflict because they require use of the same analog to digital converter and sample clock. To resolve this issue, combine all operations of the same type into the same task. For DAQmx 7.3 and later, it is possible to do this even with multiple types of analog input if you use multiple DAQmx Create Channel nodes.

Note: Case 4 is common when trying to perform multiple tasks of the same type using a cDAQ-9172 chassis. Keep in mind that this chassis only has one timing engine. To avoid this problem, consolidate all of your analog acquisition into a single task to make proper use of the single timing engine. The cDAQ-9174 and 9178 chassis have three analog input timing engines and thus can support three concurrent analog input tasks if all tasks are on separate modules. 

Case 5: Failing to properly clear a task and release its resources.

When a DAQmx task starts or otherwise enters the Reserved or Committed states (see Task State Model for more details on states), resources associated with that task such as clocks, channels, trigger lines, or buffer memory are acquired exclusively by the task. Because the task has reserved these resources, any task that tries to access these resources will encounter Error -50103.

You can resolve this by doing one of the following:

  • Add a DAQmx Clear Task.gvi at the end of the task.
  • Add a DAQmx Control Task.gvi at the end of the task, and set its action to unreserve.
Note: Case 5 also includes the situation when you try to run an application a second time that failed to properly clear a task after its first execution.

WAS THIS ARTICLE HELPFUL?

Not Helpful