我有一个(桌面)LabVIEW程序运行几个大的While循环。每个循环对应于myRIO DAQ系统中IO卡上的功能。每张卡都以不同的速度运行,因此我的代码中的每个循环和子VI也以不同的速度运行。
但是,我现在发现我需要将数据从低速循环传递到高速循环,而且我不确定如何最好地进行此操作。
低速环实际上通过TCP连接到Yokogowa功率分析仪,环路速度为50ms(20Hz)。高速环路以50kHz运行,并使用来自高速ADC的输入执行数学运算以计算电机转矩,并需要来自低速环路(功率分析仪)的信息继续进行。这是一个816:1的数据流差异。
在运行时,它似乎工作正常,直到我旋转电机,然后过转矩程序开始并关闭我。
所以我接下来试图对数据进行排队,这只会显着减慢高速循环。
话虽这么说,我的想法是把输入的数据放在低速循环上,然后用数据填充一个数组(816深)并将其排队到高速循环,但我并不完全确定如何去做。
我应该如何以更有效和正确的方式完成我想要做的事情?
答案 0 :(得分:2)
查看Real-Time FIFO调色板。这里的函数创建并操作一个无锁FIFO系统,该系统明确地设计用于在循环之间以确定的方式传递数据。如果使用得当,它们可以保证较慢的循环(尝试写入数据)不会以一种方式锁定FFO,从而使得更快的循环脱离其计划。
您可以找到RT FIFO代码here的简单示例。您可以在LabVIEW运输示例中找到更多信息。
答案 1 :(得分:2)
如果高速循环运行得更快,那么它只需要最新的值,因此您需要进行变量/标签类型的通信。
根据您的意识,有几个选项:
我会选择一个你觉得舒服的人并尝试一下。