LabVIEW按照数据流模式运行VI。当具备了所有必需的输入时,程序框图节点将运行。节点在运行时产生输出数据并将该数据传送给数据流路径中的下一个节点。数据流经节点的动作决定了程序框图上VI和函数的执行顺序。

Visual Basic、C++、JAVA以及绝大多数其他文本编程语言都遵循程序执行的控制流模式。在控制流中,程序元素的先后顺序决定了程序的执行顺序。

LabVIEW是以数据流而不是命令的先后顺序决定程序框图元素的执行顺序。因此可创建具有并行操作的程序框图。例如,可同时运行两个For循环并在前面板上显示其结果。如以下程序框图所示。

LabVIEW是一个多任务多线程系统,可同时运行多个执行线程和多个VI。

数据依赖关系和人工数据依赖关系

控制流执行模式由指令驱动。数据流执行模式则由数据驱动,又称为数据依赖。即从其他节点接收数据的节点总是在其他节点执行完毕后再执行。

没有连线的程序框图节点可以任意顺序执行。当自然的数据依赖关系不存在时,可用数据流向参数控制执行顺序。当数据流向参数不可用时,可用顺序结构控制执行顺序。

数据依赖关系不存在

数据依赖关系不存在时,不要想当然地认为程序的执行顺序是从左到右,自顶向下的。应确保数据流的连线,从而对事件顺序进行明确定义。

在下面的程序框图中,读取二进制文件函数和关闭文件函数之间不存在数据依赖关系,因为二者没有相连。该范例将由于不能确定哪个函数先执行而无法按所期望的顺序执行。如“关闭文件”函数先运行,“读取二进制文件”函数将不执行。

在下面的程序框图中,“读取二进制文件”函数的输出连接到“关闭文件”函数,二者建立了数据依赖关系。“关闭文件”函数只有在接收到“读取二进制文件”函数的输出后才能执行。

数据流向参数

数据流向参数通常为引用句柄或错误簇,它返回的是与相应的输入参数相同的值。当自然的数据依赖关系不存在时,可使用数据流向参数来控制执行顺序。把要执行的第一个节点的数据流输出连接到要执行的下一个节点的相应输入,便创建了人工数据依赖关系。如没有这些数据流向参数,则必须使用顺序结构来确保数据操作按期望的顺序执行。

数据流和内存管理

相较于控制流执行模式,数据流执行模式使内存管理更为简单。在LabVIEW中,无需为变量分配内存或为变量赋值。只需创建带有连线的程序框图以表示数据的传输。

生成数据的VI和函数会自动为该数据分配内存。当该VI或函数不再使用该数据时,LabVIEW将释放相关内存。向数组或字符串添加新数据时,LabVIEW将分配足够的内存来管理这些新数据。

LabVIEW自动进行内存管理,因此用户对何时分配或释放内存的控制权较少。而当VI要处理大量的数据时,用户应了解何时发生内存分配。了解相关原则可帮助用户使用更少的内存编写VI。开发过程中减少内存占用,可帮助提高VI运行的速度。