在 Labview 中创建全局控件

Creating global controls in Labview

我有一个复杂的 GUI,其中包含许多控件和子 VI。我将控件的值传递给子 VI,当我需要更改某些 属性 控件(即禁用它们)时,我传递引用。

我的框图太大了。所以我想使用全局变量。然后我可以将子 VI 显示为图标并在图表上保存很多 space(我的子 VI 有很多输入)。

但是我应该如何处理我想更改其属性的控件(现在我传递对它们的引用而不仅仅是值)?当我使用全局变量时,我只能获取它的值,仅此而已。

我可以创建对我所有控件的全局引用并在我的子 VI 中使用它们,但是这样子 VI 会很不清楚,我想避免它。

那么如何在 Labview 中创建全局控件?

编辑:我的主 VI 中有一个名为 "Motor ID" 的控件。当我想连接到子 VI 中的电机时,我将引用传递给该控件。在子 VI 中,如果连接已建立,我使用 属性 "disabled" 禁用控件。

当我使用全局变量来保存电机ID时,我所能做的就是获取电机ID并与电机连接。但是我无法在我的主 VI 中禁用该控件。

根据您的评论,我会说您不能使用全局变量更改 controls/indicators 的属性。

请记住,全局变量仅传输控件的 VALUE,而不会传输与其关联的属性。您必须将控件引用传递给子 VI,才能在 FP 上更改控件的属性。

我可以建议您将所有控件分组到一个集群中,创建该集群的引用并将一个引用传递给您的子 VI,以避免代码复杂化。或者您可以将控件的所有引用分组到集群中,然后将一根连线传递到您的子 VI。

希望这会有所帮助。

您可能只想调查子面板。顶层 VI 的子面板是承载子 VI 面板的单个控件。您可以打开对子 VI 的 VI 引用,并将其面板放在子面板控件中。然后子 VI 只需更新其面板上的控件...不涉及控件引用。

我会说您有多种选择,不幸的是,所有这些都可能需要对您的代码进行重大重组,因此需要很多时间。其中有两个已经被其他人说过,但我会在这里重申。

  1. 使用全局引用
  2. 将相关数据组织成簇
  3. 利用子面板
  4. 调查X-Controls
  5. 使用多个 windows 和子 VI 而不是选项卡。
  6. 使用 CVT API 来存储你的全局变量

并深入探讨每个选项...

  1. 使用全局引用只是意味着将对所有控件的引用存储到它们自己的全局变量中,然后在 VI 中调用该变量。使用全局引用,您可以修改任何 属性、获取或设置值,从根本上控制 VI,就像您可以从该 VI 访问前面板一样,而无需通过输入节点传递引用。这可能会造成初始化混乱,并且需要您为每个控件创建引用,但为了功能和可读性,这可能是值得的。

  2. 将数据组织成簇总是在框图上看起来更好,我鼓励尽可能多地这样做。始终寻找机会将数据放入集群。不过要小心,因为如果你将一个簇传递到一个子 vi 中,你会将簇中的所有数据传递到子 vi 中,如果你有占用大量内存的项目,这会减慢程序的速度。它们对于组织和清理图表很有用,但要注意如何在程序中传递它们。

  3. 子面板基本上允许您拥有一个中央前面板,并在您需要时随时更换 VI。您可以通过调用节点控制 VI 的执行,并通过将其引用传递给图表上的子面板块来选择在子面板中显示哪个 VI。如果您有几个不需要同时显示的独立操作,这将非常有用。

  4. X-Controls 类似于子面板,除了更酷。 X-Control 本质上是一个集群和一个子面板的组合,它们卷成一个 class,您可以将其放在前面板上。它在框图上表示为普通控件,但数据操作和处理在内部事件结构中独立处理。 X-Controls 可能会有点混乱,如果使用不当实际上会使您的代码复杂化,而不是清理它。在尝试将它们集成到您的代码中之前,请确保您完全了解它们的行为方式。

  5. 如果您可以将代码划分为多个 windows,那么您就可以拥有一个控制 VI,其中 运行 是一个状态机,用于确定显示哪个 window用户。此方法与子面板方法密切相关。所有 VI 使用的任何数据都可以存储到全局变量中,并且可能与接下来提到的 CVT API 一起工作。

  6. 我对 CVT(当前值 Table)API 没有太多经验,但我知道如果使用得当,它会相当强大。本质上,CVT 允许您将所有值存储到全局变量中,但您可以使用键访问它们,而不是通过将全局变量拖放到您的图表中。键是您在创建时分配给全局的字符串。 (它们可以在 运行 时创建,不必事先分配!)

除上述建议外,最快的实施方式是使用事件循环,根据需要响应前面板 activity。创建表示数据所需的所有全局变量,并根据需要在 VI 中使用它们来删除输入。如果用户更新具有关联全局的前面板项,则更新全局。小心避免竞争条件,并尽可能尝试只从一个位置写入全局变量(CVT 库有助于避免竞争条件,因为它使用功能性全局变量)。在并行循环中,从相关的全局变量更新您的指标。

总而言之,有很多方法可以清理您的框图和前面板,但一般来说,最好考虑从一开始就以一种避免混乱的方式来构建您的代码!