我的LabVIEW程序似乎在Counter Buffer Read处等待



主要软件:
主要软件版本: 6.9.0
主要软件修正版本: N/A
次要软件: N/A

问题: 我修改了一下 Count Buffered Edges 例程,添加了一个并行的 while 循环。当我执行这个VI的时候,Counter Buffer Read VI 在等待读取缓冲数据的时候,似乎锁定了其它所有LabVIEW 函数。这个是正常的吗,有办法修正这个问题吗?

解答: 这种情况是正常的,它是由于Counter Buffer Read.vi 是一个同步的操作的原因导致的。有两种方法来修正这个问题,具体用哪种方法取决于你在并行的循环中做了什么。
  1. 这种方法较简单并且只有当并行循环没有做其它DAQ操作的时候才能用。Counter Buffer Read,默认是和调用它的VI在同一个线程中运行的。

    打开 Counter Buffer Read.vi, 右击 右上角的图标,选择VI 属性。选择类别中的"执行"在 "首选执行系统", 中选择"数据采集",点击应用,然后 确定。将这个VI保存为一个新的名字这样不会修改vi.lib中的VI。

    这样就可以设置 Counter Buffer Read (会锁定与之同步的线程) 运行在和其它代码不同的线程中,从而不会锁定你的并行循环。

  2. 如果你的并行循环是在进行其它的DAQ操作 (比如数字读写),上面的办法不行,因为即使你通过把Counter Buffer Read放在不同的线程中来允许DIO VI运行,在同步模式下,NI-DAQ驱动还是会被Counter Buffer Read 占用。

    解决这个问题的唯一办法就是周期性地释放Counter Buffer Read。最好的做法是减少Counter Buffer Read操作的时间限制。这会允许Counter Buffer Read操作周期性释放 NI-DAQ 驱动从而进行其它的DAQ操作。



相关链接: KnowledgeBase 2E9B1PEW: Why Do Parallel Loops with AI Read in My LabVIEW Program Seem to Wait?
Developer Zone Example Search: Counter/Timer

附件:





报告日期: 03/10/2003
最近更新: 07/30/2009
文档编号: 2V9E6Q2G