



顺序结构用来控制程序子框图按照顺序执行。顺序结构包含一个或多个按顺序执行的子程序框图(可形象地称为“帧”)。跟程序框图的其他部分一样,在顺序结构的每一帧中,每个节点的执行顺序由数据依赖性来确定。顺序结构有两种类型:平铺式顺序结构和层叠式顺序结构,分别如图4-8(a)和图4-8(b)所示。
 
    图4-8 平铺式和层叠式顺序结构
平铺式顺序结构的帧如同电影的胶片,在程序框图上显示每个帧,并按照从左至右的顺序执行每一帧中的代码,这意味着某个帧的输入可能取决于之前某个帧的输出。与平铺式顺序结构不同,层叠式顺序结构将所有的帧依次层叠,每次只能看到其中一帧,并且按照帧0、帧1、直至最后一帧的顺序执行,相对于平铺式结构比较节省程序框图空间。如果要在层叠式顺序结构的帧之间进行数据传递,可以在顺序结构中增加“顺序结构局部变量”(Sequence Local)。右击结构边框并在弹出的菜单中选择“添加顺序结构局部变量”选项,可添加一个顺序局部变量。如果将数据连接至顺序局部变量,它的接线端中将出现一个向外的箭头,其后续帧中的接线端将出现向内的箭头,用于表示数据的流向。图4-8(c)给出了含有顺序结构局部变量的层叠式顺序结构的连续两个帧。使用位于层叠式顺序结构顶端的“帧选择器及标识”(Sequence Selector Identifier),可浏览已有帧或重新安排帧的顺序。单击帧选择器及标识中的递减或递增箭头,可以循环浏览已有帧。单击帧号旁边的向下箭头,可以从下拉菜单中选择跳转至某一个特定的帧。右击帧的边框,从弹出的菜单中选择“将本帧设置为”选项和帧号,将重新安排层叠式顺序结构的顺序。
平铺式顺序结构和层叠式顺序结构之间可以相互进行转换。右击平铺式顺序结构,在弹出的菜单中选择“替换为层叠式顺序结构”选项,可将平铺式顺序结构转换为层叠式顺序结构。如果将平铺式顺序结构转变为层叠式顺序结构,然后再转变回平铺式顺序结构,LabVIEW会将所有输入接线端移到顺序结构的第一帧中。最终得到的平铺式顺序结构所进行的操作与层叠式顺序结构相同。将层叠式顺序转变为平铺式顺序,并将所有输入接线端放在第一帧中,则可以将连线移至与最初平铺式顺序相同的位置。在层叠式顺序结构中添加、删除或重新安排帧时,LabVIEW会自动调整帧标签中的数字。
使用顺序结构应谨慎,任何一个顺序结构局部变量都会打破从左到右的数据流驱动模式。因此,在LabVIEW程序设计中应尽量避免使用太多顺序结构,这可以通过以下方法来实现。
● 在需控制执行顺序时,尽量使用程序框图节点之间自然的数据依赖性代替顺序结构(图4-4)。
● 如果不存在自然的数据依赖关系,使用数据流参数(如错误簇)来控制程序执行顺序(图4-6)。
● 当程序中既没有自然的数据依赖,也没有数据流参数来确定程序执行时,才使用顺序结构来人为创建数据依赖。
图4-8给出了利用顺序结构创建数据依赖关系的例子。在图4-9(a)的程序代码中,While循环在用户按下Stop按钮后结束(该循环的功能在后面章节讲述),While循环结束后,希望使用“退出LabVIEW”函数关闭LabVIEW,但是“退出LabVIEW”函数与While循环之间并无自然的数据依赖关系,因此将While循环输出寄存器连接到顺序结构的边框上,创建人为的数据依赖。虽然在顺序结构中并没有将While循环输出寄存器的值作为参数,但是这种关系却可以保证“退出LabVIEW”函数在While循环执行完成后才运行。在图4-9(b)中的程序代码中,Input的初始化“退出LabVIEW”函数和While循环之间不存在自然的数据依赖,因此使用顺序结构人为约束它们之间的执行顺序,确保程序安全地执行,这种结构也经常用在大型的程序设计中。
顺序结构虽然可以保证程序的执行顺序,但滥用不仅会降低程序的响应能力,还会阻止程序的并行操作能力。这是因为无论顺序结构的哪一帧是否出现错误,顺序结构中的后续帧都要执行。换句话说,一旦顺序结构开始运行,程序就必须等到顺序结构执行完毕才能继续接受用户输入。这种做法阻止了程序运行时的并发处理能力。在设计时,设计人员应尽量避免滥用顺序结构,并竭尽所能充分发挥LabVIEW固有的并行机制。例如,如果不使用顺序结构,使用PXI、GPIB、串口、DAQ等I/O设备的异步任务就可以与其他操作并发运行。
事实上顺序结构在多数情况下可以被分支结构代替,在后续章节会进一步讲解这些技术。
 
    图4-9 利用顺序结构人为创建数据依赖关系