LabView:在while循环之间传递值

jdm*_*jdm 1 parallel-processing labview

我有一个带有两个无限循环的vi.左循环连续从设备读取数据并绘制它,右循环调用自定义DLL并使用输出来驱动另一个设备.DLL调用阻塞大约一秒钟,因此两个循环不同步*.现在我想使用第一个循环中的瞬时值作为第二个循环中DLL的输入.我试过连接它们 - LabVIEW在循环边界插入终端 - 但是第二个循环不运行.(如果重要,数据类型是"动态数据" - 电压测量).我该怎么做?

(*实际上,最初只有一个循环,图形只在DLL调用之间更新,这是不令人满意的.)

Ton*_*omp 6

这是标准行为,因为第一个循环尚未完成,输出门处的数据不可用于下一个循环启动.

从一个循环获取数据的最快方法是使用局部变量:

  1. 为您的数据创建指标
  2. 右键单击指标的终端,然后选择"创建\局部变量"
  3. 将局部变量移动到右侧循环
  4. 也许你需要改变从写入到阅读的循环(使用上下文菜单)

还有其他几种分发数据的方法,本地人可能现在可以使用,但如果扩展到更大的应用程序,则需要继续.其他选项是队列(无损或无损),或通知器或全局变量,如果您在LabVIEW中进步,您将提出自己的方案.


J J*_*J J 6

您正在寻找的是"生产者消费者"循环.

LabVIEW(文件>>新建...... >> VI >>来自模板>>设计模式)附带了一个模板,这是一个很好的起点.

此外,更多信息:

http://zone.ni.com/devzone/cda/tut/p/id/3023

http://zone.ni.com/wv/app/doc/p/id/wv-1295

PS - 第二个循环不运行的原因是因为一个名为"数据流"的概念.一个节点(您的第二个循环)在收到所有输入之前无法运行,包括来自第一个循环的数据.一个节点(第一个循环)不会输出任何内容,直到它完成执行,即直到循环结束.

基本上,第二个循环在第一个循环运行并完成循环之前不会运行.