



与传统的文本设计语言类似,设计人员在LabVIEW中通过各种程序结构(如分支、循环等)控制程序的运行,并使用各种数据结构及其对应的操作来实现用户的需求。早在20世纪70年代,BohM和Jacopini的研究就表明,所有程序都可以由三种基本控制结构,即顺序结构(Sequence Structure)、分支结构(Selection Structure)和循环结构(Repetition Structure)的组合来描述,它们的流程图如图4-1所示。图中矩形框(又称为执行框)表示各种操作,包括计算、输入和输出操作,箭头表示进行操作的顺序,菱形框(也称判断框)表示条件判断。
 
    图4-1 顺序、分支、循环结构的流程图
LabVIEW中的程序控制结构是传统文本编程语言程序控制语句的图形化表示(图4-2),使用它们可像文本代码一样控制代码按条件、按特定顺序或控制代码块重复执行。与其他节点类似,程序框图中的程序控制结构也具有可与其他程序框图节点进行连线的接线端。输入数据存在时结构会自动执行,执行结束后将数据提供给输出端。每种结构都含有一个可调整大小的清晰边框,用于包围根据结构规则执行的程序框图部分。结构边框中的程序框图部分称为子程序框图。从结构外接收数据和将数据输出结构的接线端称为隧道(Tunnel)。
 
    图4-2 LabVIEW中的顺序、分支、循环结构
为了程序控制方便,LabVIEW将三种基本程序结构演化为多种表现形式(图4-3)。主要包括顺序结构、分支结构、循环结构、事件结构(Event Structure)、公式(Formula)、脚本(Scripts)、禁用结构(Disable Structure)和装饰组件(Decoration)等。虽然种类繁多,但从根本上均能归类到三种最基本的程序结构之一,或看作是基本程序结构的组合。
表4-1给出了LabVIEW中程序控制结构的分类和说明,表中顺序结构被扩展为平铺式顺序结构(Flat Sequence Structure)和层叠式顺序结构(Stack Sequence Structure)两种形式,它们从功能上没有本质区别,只是在后面板上,一种以类似电影胶片的形式显示,另一种以翻页的形式显示。前者相对后者在后面板上占用较多空间,但可以不用翻页,一次性显示所有子程序框图。分支结构类似C/C++中的If或Switch语句,可按照各种给定条件选择性地执行子程序框图。循环结构包括For循环和While循环两种。和C/C++等文本编程语言不同,LabVIEW中仅保留了For循环和Do-While循环,这是因为任何其他形式的循环都可以变形为这两种形式,仅使用这两种循环结构可以极大地增强程序的可读性。
 
    图4-3 LabVIEW中的基本程序控制结构
除了顺序、分支和循环三种基本程序控制结构外,LabVIEW还额外提供事件结构(Event Structure)、定时结构(Time Structure)和禁用结构(Disable Structure)等,用于快速开发高级应用,解决更复杂的问题,这些内容将在本书的后续章节详细介绍。
表4-1 LabVIEW程序结构分类说明
 
   C/C++、Python、Java以及绝大多数其他文本编程语言都遵循程序执行的“控制流”模式。在这种模式下,程序元素的先后顺序决定程序的执行顺序。与传统的基于文本的程序设计语言不同,LabVIEW按照“数据流”驱动模式运行程序。只有所有必需的输入数据具备时,程序框图节点才运行。节点在运行时产生输出数据并将该数据传送给数据流路径中的下一个节点。数据流经节点的动作决定了程序框图上VI和函数的执行顺序。
使用LabVIEW进行设计的过程也就是根据用户需求创建各种数据结构,并利用以上所述的程序控制结构,按照数据流驱动的模式控制各种针对数据结构的操作按照某种方式运行,来实现用户需求的过程。这是一个极富创造性的过程,当然一个重要的前提就是熟悉基本程序结构,本章后续部分着重介绍这些内容。