在LabVIEW

时间:2018-03-23 23:10:32

标签: labview

我有一个(桌面)LabVIEW程序运行几个大的While循环。每个循环对应于myRIO DAQ系统中IO卡上的功能。每张卡都以不同的速度运行,因此我的代码中的每个循环和子VI也以不同的速度运行。

但是,我现在发现我需要将数据从低速循环传递到高速循环,而且我不确定如何最好地进行此操作。

低速环实际上通过TCP连接到Yokogowa功率分析仪,环路速度为50ms(20Hz)。高速环路以50kHz运行,并使用来自高速ADC的输入执行数学运算以计算电机转矩,并需要来自低速环路(功率分析仪)的信息继续进行。这是一个816:1的数据流差异。

在运行时,它似乎工作正常,直到我旋转电机,然后过转矩程序开始并关闭我。

所以我接下来试图对数据进行排队,这只会显着减慢高速循环。

话虽这么说,我的想法是把输入的数据放在低速循环上,然后用数据填充一个数组(816深)并将其排队到高速循环,但我并不完全确定如何去做。

我应该如何以更有效和正确的方式完成我想要做的事情?

2 个答案:

答案 0 :(得分:2)

查看Real-Time FIFO调色板。这里的函数创建并操作一个无锁FIFO系统,该系统明确地设计用于在循环之间以确定的方式传递数据。如果使用得当,它们可以保证较慢的循环(尝试写入数据)不会以一种方式锁定FFO,从而使得更快的循环脱离其计划。

您可以找到RT FIFO代码here的简单示例。您可以在LabVIEW运输示例中找到更多信息。

答案 1 :(得分:2)

如果高速循环运行得更快,那么它只需要最新的值,因此您需要进行变量/标签类型的通信。

根据您的意识,有几个选项:

  • 本地/全局变量
  • 功能全局变量(但全局变速更快)
  • 通知程序(如果你使用get staus,你可以像变量一样阅读。

我会选择一个你觉得舒服的人并尝试一下。