|
最近编labview程序遇到一个错误,在此于大家分享一下。 NI-DAQmx运行出错,代码为50103,错误原因是指定的资源被预留了
主要软件: Driver Software>>NI-DAQmx
主要软件版本: 7.0
主要软件修正版本:
次要软件: N/A
问题: 为什么在运行过程中会出现NI-DAQmx Error 50103,并提示:指定的资源已经被预留?
解答: 出现这个错误是因为当两个DAQmx任务都试图去执行同一个操作时造成了资源冲突。对于多路复用的数据采集板卡(E系列和M系列)来说,在同一时间只能有一个模拟输入和一个模拟输出同时工作。这是因为所有的模拟输入通道都是共享一个多路复用器和采样时钟,这样一来,为了完成多通道数据采集,所有的通道必须包含在一个任务当中。因为所描述的这个错误在很多场合会出现,下面我们给出了几个可能的情况,可供您参考。
情况1: 对不同的模拟输入使用多个DAQ助手Express VI。
一个可能的原因是在使用同一块数据采集板卡时使用了多个DAQ助手Express VI’s。由于每一个Express VI都会创建各自独立的任务,那么这些DAQmx任务很有可能在同一时间访问同一个物理设备。如果是这样的话,就必须在采集的数据返回时清除该任务。当执行单个或者有限个的数据采集时,我们不需要将‘真’常量与Express VI的停止输入端相连,在一般情况下,这样的连线是一种默认的选择。这样当Express VI执行完毕时,任务自动停止并释放硬件资源。对于单点的输入/输出(I/O),将‘假’常量与Express VI的停止输入端相连能够优化程序性能,但是执行完了之后并不释放设备资源。当使用DAQ助手在循环中进行单点或者有限点的数据采集,并将‘假’常量连接至Express VI的停止输入端时,也可以发现这个问题。 对于连续采样,默认值是‘假’。为了避免这个错误,一定要传递 ‘真’常量给停止输入。
请注意,如果两个Express VI’s运行在同一个循环中,那么合理设置它们的执行顺序是很关键的。设置的合理,就能防止两个DAQmx任务同步运行产生错误。 通过将其中一个DAQ助手的"错误输出" 连接至另一个的"错误输入" 就能够建立执行顺序。然而,在同一个while循环中执行多个同类型的测量时,没有必要使用多个DAQ助手。相反的,你只要使用一个DAQ助手,为其配置多个通道就可以了。
情况2:单个子VI运行正常,但当顶层VI调用多个子VI时,程序报错。
当一个VI调用多个DAQmx,而这个VI在未清除前一个打开的任务又调用同样的任务时,就很有可能报错。如果在任意时刻去打开一个已经被使用的任务,就有可能得到错误提示“所需资源被预留”。
避免这个错误的发生,你可以在打开另一个调用该任务的VI之前,先在一个VI中清除该任务,或者将这个DAQmx任务从一个子VI传递给另一个子VI以避免再次打开该任务。
情况3: 同时运行两个模拟输入或者两个模拟输出任务。
造成这个错误的最后一个可能的原因是:应用程序在同一时刻显式调用多个任务来执行同一种操作。与前面两种情形不同,这种情形同时运行多个独立的任务,而这些任务试图获取同一个资源。尽管这些任务可能是使用了不同的通道,但是这样还是会造成资源冲突,因为这些任务使用的是同一个多路复用器和采样时钟。为了解决这个问题,可以将同类型的操作捆绑至同一个任务。对于DAQmx7.3和更高的版本,甚至可以将多种类型的模拟输入捆绑至一个任务。
|
|