解决方案
此错误是NI-DAQmx识别物理资源冲突的结果。由于这种错误可以在各种情况下发生,我们将在下面描述几种可能的情况:
- 情况1:一段时间中持续启动和清除DAQmx任务(在循环中)。
- 情况2:具有需要两个计数器的计数器任务,其中一个计数器正由同一设备上的另一个任务使用。
- 情况3:使用多个DAQ Assistant Express VI访问同一数据采集板上的通道。
- 情况4:使用多个独立运行且没有任何错误的子VI,但在从顶层VI调用时会产生错误。
- 情况5:同时运行比DAQ设备允许的更多模拟输入或模拟输出任务。
- 情况6:未能正确清除任务并释放其资源。
情况1:在较长时间内连续创建,配置,启动和清除DAQmx任务(在循环中)。要避免此问题,请在循环之前配置并启动任务一次,然后根据需要调用循环中的读/写函数,并在循环后清除任务。
有关如何执行此操作的示例,请查看DAQmx的范例和NI社区页面的示例。要查找示例,请启动LabVIEW并转到
帮助»查找示例 。按任务浏览并选择
硬件输入和输出»DAQmx 。
不正确:
正确:
情况2:在同一设备上使用多个计数器任务。对于任何需要两个计数器的任务,第二个计数器是根据连接到创建通道vi的计数器保留的。计数器总是与其旁边的计数器配对,因此ctr 0与ctr 1配对,ctr 2与ctr 3配对。某些计数器任务需要
多个计数器 。
情况3:使用多个DAQ Assistant Express VI访问同一数据采集板上的通道。尝试访问同一物理设备的多个DAQmx任务是不能实现的。因此,有必要在数据采集完成后清除每个任务。当Express VI完成执行时,DAQ Assistant Express VI的停止输入将停止任务并释放设备资源。
- 对于单点或有限的数据采集,所以你并不需要连接一个真布尔常量到这个输入,停止输入的默认值是true。
首先防止在同一循环中使用多个Express VI的错误:
- 将一个DAQ助手的错误输出端子连接到第二个DAQ助手的错误输入端子。
- 如果执行相同测量的多个实例,您只需使用为多个通道配置的单个DAQ助手。
情况4:使用多个独立运行且没有任何错误的子VI,但在从顶层VI调用时会产生错误。当您有多个NI-DAQmx VI同时再次调用相同任务而不清除先前打开的任务时,可能会发生错误-50103。要防止发生此错误:
- 在另一个SubVI中再次打开任务之前清除任务,或者只是将DAQmx任务从一个SubVI传递到另一个SubVI以避免再次打开任务。
情况5:同时运行比DAQ设备允许的更多模拟输入或模拟输出任务 。
当程序显式调用同时执行相同类型操作的多个任务时,也会出现此错误。与前两种情况一样,这会产生多个独立任务同时尝试访问同一资源的情况。在使用
PCI / PCIe卡和
cDAQ机箱时,可以运行的并发硬件定时任务数量是有限的。即使任务可能使用不同的通道,这仍然是一个冲突,因为它们需要使用相同的模数转换器和采样时钟。
- 要解决此问题,请将同一类型的所有操作合并到同一任务中。对于DAQmx 7.3及更高版本,如果使用多个DAQmx创建通道VI,即使使用多种类型的模拟输入,也可以执行此操作。
情况6:未能正确清除任务并释放其资源。当DAQmx任务启动或以其他方式进入保留或提交状态时,与该任务相关联的资源(例如时钟,通道,触发线或缓冲存储器)仅由任务获取。
您可以通过执行以下操作之一来解决此问题:
- 在任务结束时添加
DAQmx Clear Task.vi
- 在任务结束时添加
DAQmx Control Task.vi
,并将其操作设置为unreserve
如果使用while循环进行读取或写入,则不要使用中止按钮中止执行,并且在循环后执行清除任务。请改用Loop的条件终端附带的停止按钮。