



分支结构的功能类似于文本编程语言中的Switch语句或if…then…else语句,它一般包括两个或两个以上的子程序框图(也称为“分支”),但每次只显示一个子程序框图。分支结构顶部有一个“分支选择器标签”(Case Selector Identifier),它由结构中各个分支对应的选择器值的名称以及两边的递减和递增箭头组成。单击递减和递增箭头可以滚动浏览已有条件分支,也可以单击条件分支名称旁边的向下箭头,并在下拉菜单中选择一个条件分支。
    分支结构根据传递给“分支选择器接线端”(Case Selector Terminal)
     的输入值来选择执行相应的分支,它可位于左边框的任意位置,并可以接受整数、布尔值、字符串和枚举型值。如果分支选择器接线端的数据类型是布尔值,则该结构包括真和假两个分支(图4-10);如果是一个整数、字符串或枚举型值,则该结构可以包括任意多个分支。
    的输入值来选择执行相应的分支,它可位于左边框的任意位置,并可以接受整数、布尔值、字符串和枚举型值。如果分支选择器接线端的数据类型是布尔值,则该结构包括真和假两个分支(图4-10);如果是一个整数、字符串或枚举型值,则该结构可以包括任意多个分支。
   
 
    图4-10 分支结构的两个分支
在设计时,一般通过修改分支结构顶端“分支选择器标签”的值来为输入条件指定处理分支。“分支选择器标签”的值既可以是数值,也可以是字符串或枚举值,这由连接到“分支选择器接线端”的数据类型而定。
如果连接到“分支选择器接线端”的数据类型为数值类型,则必须在“分支选择器标签”中指定相应的值与用来选择要执行的分支。“分支选择器标签”中的值可以是单个值、多个值(数值之间用逗号隔开),或者是一个范围或多个范围。如使用数值范围,可以使用符号“..”来声明。例如,要设定10~20的所有数字(包括10和20)作为一个范围,可以输入10..20。也可以设定开集范围,例如,..100表示所有≤100的数,100..表示所有≥100的数。还可以指定多个范围(范围之间用逗号隔开),如..5,6,7..10,12,13,14。当在同一个条件选择器标签中输入的数值范围有重叠时,分支结构会自动以更紧凑的形式重新显示该标签。例如,上例中范围..5,6,7..10,12,13,14会被优化为..10,12..14显示。
图4-11给出了一个分支结构的所有分支。其中不仅为输入等于1的情况指定了处理分支,还为输入等于2、3、6的情况指定了同一个分支;不仅为输入为10~20(含10和20)的情况指定了分支,还为输入21~30或大于60的情况指定了同一个分支;最后为所有声明的情况指定了默认的处理分支。
 
    图4-11 分支结构各分支的标签值
与数值不同,在“分支选择器标签”中输入字符串和枚举值时,它们会显示在双引号中,如“red”“green”和“blue”。但是在输入这些值时并不需要输入双引号,除非字符串或枚举值本身已包含逗号或范围符号(“,”或“..”)。在字符串值中,反斜杠(\)用于表示非字母数字的特殊字符,如\r表示回车、\n表示换行、\t表示制表符。LabVIEW通过ASCII值确定字符串的范围,在“分支选择器标签”中,字符串表示范围的方式与数值略有不同。例如"a".."c"表示包括以a或b开头的所有字符串,不包括c。范围"a".."c",c包括结束值c。字符串范围对大小写敏感,例如,"A".."c"和"a".."c"表示不同的范围。
通常情况下,分支结构会包含一个默认的处理分支,用于处理分支选择器接线端的值超限情况。如果未为分支结构指定默认分支,则必须为所有可能的输入值指定分支。例如,如果分支选择器的数据类型是整型,并且已为0、1、2和3指定了相应的分支,则必须指定一个默认分支用于处理当输入数据为4或任何其他有效整数值时的情况。需要注意的是,由于布尔输入只有两种可能值,因此不必为其指定默认分支。
如果连接到“分支选择器端子”的值与“分支选择器标签”中的值类型不同,则“分支选择器标签”中的值显示为红色,这时只有编辑或删除该值后VI才能正常运行。同样由于浮点算术运算可能存在四舍五入误差,因此浮点数不能作为分支选择器的值。如果将一个浮点数连接到“分支选择器端子”,LabVIEW将对其舍入到最近的偶数值。如果在“分支选择器标签中”输入浮点数,VI将无法运行。此外,“分支选择器”的值不能使用定点数,将定点数连接至“分支选择器接线端”时,VI的运行箭头将显示为断开。
当改变分支结构中选择器接线端连线的数据类型时,如果可能,条件结构会自动将条件选择器值转换为新的数据类型。如果将数字值转换为字符串,如19,则该字符串的值为“19”。如果将字符串转换为数字值,LabVIEW仅转换可以用于表示数字的字符串值。而仍将其余值保存为字符串。如果将一个数字转换为布尔值,LabVIEW会将0和1分别转换为FALSE和TRUE,将其他数字值转换为字符串。
分支结构可以包含多个数据输入/输出通道。所有输入通道都可供任何分支选用,分支是不是使用它传递数据则可根据自身情况而定。但是,当在分支结构中使用一个输出通道时,每个分支都要为该通道定义其运行时输出到该通道的值。从图形上看,在某一个条件分支中创建一个输出通道时,所有其他条件分支边框的同一位置上也会出现类似通道。只要有一个输出通道没有连线,该结构上的所有输出通道都显示为白色正方形。一种快速的连线方法是右击输出通道,从弹出的菜单中选择“未连线时使用默认”选项,所有未连线的通道将使用通道数据类型的默认值。
分支结构经常用在程序中进行错误处理。如前所述,将错误簇连接到分支结构时,“分支选择器标签”将显示两个选项:错误和无错误。错误时分支结构边框为红色,无错误时边框为绿色。当发生错误时,条件结构将执行错误子程序框图。
虽然分支结构、层叠式和平铺式顺序结构都包含多个帧,但是它们使用数据通道的方法有本质的区别。顺序结构的通道只能有一个数据源,而输出可以来自任意帧。如使用平铺式顺序结构,则顺序结构的外部数据可在每帧执行时输入该帧,帧执行完毕后将返回该数据。如果使用层叠式顺序结构,只有当所有与结构相连的数据输入后才会开始执行该结构。只有当所有帧执行完毕后,各个帧才会返回所连接的数据。要将数据从一个帧传递给平铺式顺序结构中的其他帧时,可将该帧的隧道与结构中的其他帧相连。可以将帧或帧的输出与其他帧相连接。如图4-12所示的例子中,某个用于测试应用程序的VI含有一个状态显示控件,用于显示测试过程中当前测试的名称。如果每个测试都是从不同帧调用的子VI,则不能在每一帧中更新显示控件,层叠式顺序结构中断开的连线便说明了这一点。
 
    图4-12 不能在顺序结构每一帧中使用更新数据
与顺序结构不同,分支结构的任何分支都可以输出数据。在如图4-13所示的例子中,分支结构中的每个分支都相当于顺序结构中的某一帧。While循环的每次循环将执行下一个分支。状态显示控件显示每个分支VI的状态,由于数据在每个分支执行完毕后输出,因此在调用相应子VI选框的前一个分支中将更新状态显示控件。在执行任何分支时,条件结构都可传递数据来结束While循环。例如在运行第一个测试时发生错误,条件结构可以将FALSE值传递至条件接线端来中止循环,即使执行过程中有错误发生,顺序结构也必须执行完所有帧。
 
    图4-13 分支结构的任何分支都可以输出数据