LabView:在while循环之间传递值

时间:2012-03-14 16:37:54

标签: parallel-processing labview

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

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

3 个答案:

答案 0 :(得分:6)

这是标准行为,因为第一个循环尚未完成,输出门的数据无法启动下一个循环。

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

  1. 为您的数据创建指标
  2. 右键单击指标的终端,然后选择“创建\本地变量”
  3. 将局部变量移动到右循环
  4. 也许您需要将循环从书写更改为阅读(使用上下文菜单)
  5. 还有其他几种分发数据的方法,本地人现在可能会工作,但如果扩展到更大的应用程序,则需要继续。 其他选项是队列(无损或无损),或通知器或全局变量,如果您在LabVIEW中进步,您将提出自己的方案。

答案 1 :(得分: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 - 第二个循环不运行的原因是因为一个名为“数据流”的概念。一个节点(您的第二个循环)在收到所有输入之前无法运行,包括来自第一个循环的数据。一个节点(第一个循环)不会输出任何内容,直到它完成执行,即直到循环结束。

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

答案 2 :(得分:0)

实际上,您可能不喜欢前面板上的额外指示器,只能通过局部变量使用其值。然后,您可以使用全局变量。您可以在“结构”下找到它。这将创建一个新的VI,您可以在其中删除不同的指示符或控件,仅用于向/从中写入和读取数据。您可以将此全局变量VI放入程序框图中以访问数据。然后,如果需要,您也可以在其他VI中使用相同的全局变量VI及其值。