我有两个循环:
在这两个循环之间需要传递许多不同的变量 - 大约50个变量。我需要第二个循环才能访问数据的最新值。它需要能够在需要可视化的任何时候读取这些变量。
在两个循环之间共享此类向量的最佳方法是什么?
答案 0 :(得分:2)
有多种方式共享数据。
最快最简单的是局部变量,但是这是相当不受控制的,你需要确保在一个的地方写下它们(加上你需要一个指示器)。
最高级的选项之一是为您的数据创建一个类,并使用一个实例(如果您创建一个by-ref类,否则无关紧要),并创建一个公共'GET'方法。
在你之间你有其他选择:
简而言之,没有最好的办法,这一切都取决于你的技能和应用。
答案 1 :(得分:2)
只要您在SAME应用程序中考虑循环,就会有好的和坏的想法:
queues (OK, has most features)
notifiers (OK)
events (OK)
FGVs (OK, but keep an eye on massively parallel access hindering exec)
semaphores (that's not data comms)
property nodes (very inefficient, prone to race cond.)
global variables (prone to race cond.)
shared variables (badly implemented by NI, prone to race cond.)
TCP-IP (slow, awkward, affected by firewall config)
答案 2 :(得分:1)
快速而肮脏的方法是将每个值写入生产者循环中的指示器 - 如果您不想看到这些指示器可以在屏幕外隐藏,或者在选项卡控件的页面中隐藏它们 - 并在消费者循环中读取每个变量。但是,如果您有50个不同的值,如果您需要更改或扩展它,可能很难维护此代码。
Ton说有许多不同的选择,但我的建议是:
使用群集意味着您可以轻松地将其传递给不同的子VI以根据需要处理不同的元素,并将其另存为typedef意味着您可以添加,重命名或更改元素,并且您的代码将更新以匹配。在您的消费者循环中,您可以使用通知程序读取的超时设置来控制循环计时,如果需要。您还可以使用通知程序通过强制销毁并捕获错误来告诉循环何时退出。
答案 3 :(得分:1)
两种方式:
使用带有案例结构和变体的枚举将数据转换为预期类型。
(Notifier对流数据不可靠,因为它是一个有损方案。只留下这个以触发小动作)
答案 4 :(得分:1)
如果所有变量可以在一个集群中捆绑在一起发送,那么您应该使用单个元素队列。如果您的要求稍后改变,使得传输不会有损,则需要将输入更改为获取队列VI(使用通知程序,您必须更换所有VI)。设置单个指标和局部变量将非常乏味。而且,风格不好。
答案 5 :(得分:0)
如果循环在同一VI内,则:
最简单的解决方案是局部变量 使用共享变量要好一点 更好的是使用功能全局变量(FGV) 最好的解决方案是使用SEQ(单元素队列)。
无论如何为了更好地理解,请通过this paper。