为什么我的布尔值属性节点是一个变体?

更新 Aug 18, 2023

适用于

软件

  • LabVIEW Base
  • LabVIEW Full

问题详述

我有一个布尔控件。当我创建值或值(信号)属性节点时,它显示为variant(变体)类型。为什么是这样?

解决方案

这是因为您试图从设为Latching(触发)机械动作的布尔控件创建属性节点。您无法读取或写入通过触发机械动作设置的布尔值,因为可能会发生race condition(竞争状态)。当布尔值设置为触发机械动作时,这意味着在您更改布尔值后,一旦 VI 读取其值,它将恢复为默认值。因此,根据 VI 或属性节点读取布尔值的时间,您可能会错过值的更改。

请尝试将布尔控件的机械动作更改为Switching(转换)。这将允许您同时使用 Value 和 Value (Signaling) 属性节点,设置为转换类机械动作时,您会注意到现在属性节点将是布尔类型而不是变体类型,如下所示:
布尔属性节点
在仅按一次时,具有转换机械动作的布尔值不会恢复为默认值。

相关信息

尝试将布尔值分配给被引用为 Control 类型的前面板控件时,也会发生此行为,即使使用To More Specific Class函数将其类型转换为布尔值也是如此。这是因为控件参考没有被转换为具有特定机械动作的布尔值。

因为属性节点无法判断控件是否被键入为触发或转换布尔值,所以属性节点不确定提供的确切属性集/期望的确切类型的数据,并且默认强制传递给它的数据变体。