我有一个带有两个无限循环的vi。左循环连续从设备读取数据并绘制它,右循环调用自定义DLL并使用输出驱动另一个设备。 DLL调用阻塞大约一秒钟,因此两个循环不同步*。现在我想使用第一个循环中的瞬时值作为第二个循环中DLL的输入。我试过连接它们 - LabVIEW在循环边界插入终端 - 但是第二个循环不运行。 (如果重要,数据类型是“动态数据” - 电压测量)。我该怎么做?
(*实际上,最初只有一个循环,图形只在DLL调用之间更新,这是不能令人满意的。)
答案 0 :(得分:6)
这是标准行为,因为第一个循环尚未完成,输出门的数据无法启动下一个循环。
从一个循环获取数据的最快方法是使用局部变量:
还有其他几种分发数据的方法,本地人现在可能会工作,但如果扩展到更大的应用程序,则需要继续。 其他选项是队列(无损或无损),或通知器或全局变量,如果您在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及其值。