代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何在LabVIEW中显示控件中的数据

  •  2
  • Thorin Oakenshield  · 技术社区  · 14 年前

    我有一个数字控制(不是指标)和for循环(限制5)

    5 回复  |  直到 13 年前
        1
  •  3
  •   nekomatic    14 年前

    要将值写入控件,需要从中创建一个局部变量(右键单击方框图上控件的终端并选择“创建”>“局部变量”)。要让它更新For循环的每次迭代,请将局部变量terminal放在For循环中,并将要显示的任何内容连接到该端子。我不确定这是否是一个好的用户界面设计,但它是你的问题的答案。

    您还可以使用局部变量从方框图中的多个位置写入指示器,并从指示器或控件中读取。对于任何给定的控件或指示器,可以有多个局部变量终端。每个局部变量终端都是用于读取或写入的—右键单击局部变量,然后选择“更改为读取”或“更改为写入”。

        2
  •  3
  •   Ton Plomp    14 年前

    是否有任何特定的原因需要经常更新控件?

        3
  •  2
  •   dFlat    14 年前

    如前所述,您可以使用局部变量和proerty节点来设置控件或指示器的值。如果您试图持久化数据,有一种更好的方法。

    三个主要好处是数据流的保存、线程安全和性能。您可以通过向VI添加错误IO来获得数据流。由于VI的执行是原子的,因此线程安全得到了保证。性能得到了改善,因为LV数据想要在一条线上生存。每次将数据写入控件的proerty节点时,LV运行时都会将该数据写入UI线程。我认为本地也有类似的基于线程的性能冲击,但我不确定。


    根据第一条评论。。。

    为了您的利益,从链接复制到这里(是的,您是读者先生)。 问题: 我正在考虑使用局部或全局变量;变量在什么线程中执行?

    解决方案: 一个常见的误解是,局部和全局变量操作在UI线程中执行,或者需要将线程交换到UI线程-这是不正确的。以下描述了局部和全局变量的写入和读取操作的行为:

    写:

    当您从局部或全局变量读取时,操作将在VI执行的线程中发生,因此,您可以通过将VI属性中的执行系统设置为standard来确保它不会在UI线程中发生。有一种线程保护机制,可以确保在您读取数据时,没有全局的写入程序正在更改数据,但这是通过互斥锁完成的,而不是通过转到UI线程。但是,如果打开了全局变量面板,则会发布一条消息来重画全局控件,重画将在UI线程中进行。


    nekomatic是正确的。当您写入局部变量时,不会发生线程交换。

        4
  •  1
  •   Adnan Z    14 年前

    我同意你的看法。如果您正在以编程方式更改控件的值,那么您应该考虑它是否应该是一个指示符,或者可能有一个控件的伪指示符。

    这将是一个好主意,张贴一个孤立的版本,你的代码,这样我们就可以了解到底是怎么回事。

        5
  •  1
  •   J J    14 年前

    如果您想维护dataflow来控制程序流,可以使用控件的属性节点并设置“Value”属性。

    要创建属性节点,请在方框图上的控件终端上单击鼠标右键,然后选择“创建属性节点值”。现在,您可以通过使用错误连接来控制程序流,从而坚持数据流编程。