禁用结构含有多个子程序框图,每次只编译和执行一个子程序框图。要执行的子程序框图在编译时决定。非活动子程序框图中的代码在运行时不执行也不编译。禁用结构可以用来禁用部分程序框图上的代码。

条件禁用结构

条件禁用结构有一个或多个子程序框图,LabVIEW在执行时根据子程序框图的条件配置只使用其中的一个子程序框图,如下图所示。编译时,LabVIEW不包括条件禁用结构非活动子程序框图中的任何代码。

使用条件禁用结构定义具体代码编译和执行的条件。例如,如果VI的某段代码用于某个特定终端,可将这段代码放在条件禁用结构中,并将其配置为在某个特定终端上运行。条件禁用结构中可配置代码的终端包括Windows、Mac、Unix系统和FPGA终端。

将一个条件禁用结构转换为程序框图禁用结构或类型专用结构,条件禁用结构中的条件不会转移至“程序框图禁用”或“类型专用”结构。

关于使用条件禁用结构的范例,见labview\examples\Structures\Disable Structures目录下的Conditional Disable Structure VI。

程序框图禁用结构

程序框图禁用结构中,LabVIEW的编译不包括禁用子程序框图中的任何代码。

如要禁用程序框图上的部分代码,使这部分代码在运行时不编译,可使用程序框图禁用结构。例如,程序框图禁用结构可作为调试工具,注释代码,替换代码,然后编译VI,无需删除结构中禁用子程序框图中的代码。

注: 如要在满足某条件的情况下启用部分代码,使用条件禁用结构。

关于使用程序框图禁用结构的范例,见labview\examples\Structures\Disable Structures目录下的Diagram Disable Structure VI。

类型专用结构

类型专用结构(如下所示)有一个或多个子程序框图,LabVIEW根据子程序框图的顺序和编译结果,只编译和执行其中一个子程序框图。编译和执行时,LabVIEW不包括类型专用结构非活动子程序框图中的任何代码。

使用类型专用结构可针对特定数据类型自定义自适应VI (.vim)中的代码或强制自适应VI只接受所支持数据类型的一个子集。例如,可使用类型专用结构来配置自适应VI,使其在输入数据是一个整数而不是整数数组时执行不同的操作,从而让自适应VI以所需的方式操作两种数据类型。

关于使用类型专用结构的范例,见labview\examples\Malleable VIs\Type Specialization Structure\Malleable VIs - Type Specialization Structure.lvproj

禁用结构中的用户定义对象

LabVIEW在程序框图的禁用子程序框图中,或在条件禁用结构或类型专用结构的非活动子程序框图中加载含有用户定义对象(如子VI和自定义类型)的VI时,不将上述对象加载到内存中。然而,显示VI的程序框图时,如LabVIEW无法找到对象,则该丢失的对象将显示为一个问号图标。VI并不断开,因为LabVIEW在编译和执行VI时未包括这部分代码。另外,如启用包含这些子VI的子程序框图,LabVIEW不自动搜索丢失的对象。

启用自程序框图时,保存调用子VI的VI,可强制LabVIEW搜索丢失的子VI。下次打开调用方VI,LabVIEW将搜索子VI。可再次禁用包含子VI的程序框图。

注:LabVIEW会检查非活动子程序框图中的代码语法。但是,非活动窗口断开的代码不会妨碍VI的编译和执行。
注:条件结构一样,禁用结构也支持隧道。但是,默认情况下不必连接禁用结构每个分支的输出隧道。所有未连线的隧道都将使用隧道数据类型的默认值。可配置隧道,在未连线的情况下自动连接输入和输出隧道。

禁用结构在生成应用程序中的行为

禁用结构决定了生成应用程序包含哪些代码部分。如某VI只在禁用框图中被调用,则将不包括于生成应用程序内。应用程序生成后,LabVIEW将不再重新判断条件禁用结构中的条件或类型专用结构的编译结果。