LabVIEW中的数据结构

本节内容包含

字符串型


字符串是一串可显示或不可显示ASCII字符。字符串提供了一种不依赖于平台的消息和数据格式。字符串的主要应用包括:

  • 创建简单的文本消息。
  • 通过发送文本命令控制仪器,并以ASCII或者二进制字符串的格式返回数据值,这些值接着可以被转换为数值型。
  • 将数值数据存储在硬盘上。如要在ASCII文件中存储数值型数据,您必须在将数据存储至硬盘之前将数值型数据转换为字符串型。
  • 通过对话框引导用户。

在前面板上,字符串可以通过表格、标签、文本输入框来表示。LabVIEW内置的VI和函数,可以帮助您对字符串进行操作,包括格式化字符串、解析字符串及其他编辑操作。LabVIEW使用粉色来表示字符串数据。

字符串型数据的详细信息

数值型

LabVIEW中数值型数据包括浮点数、定点数、整数、无符号数以及复数。双精度和单精度数以及复数在LabVIEW中都以橙色表示。所有的整数以蓝色表示。

注: 各种数值型数据的不同之处在于存储和表示数据时所使用的位数。

某些数据形式还可以提供扩展的配置选项,例如:您可以为浮点型数据(包含复数)类型赋予物理单位,还可以为定点型数据配置编码和范围。

数值型数据的详细信息

查看数值型数据类型表

布尔型


LabVIEW使用8个数据位来存储布尔型数据。在LabVIEW中可使用布尔型来表示0和1、真和假。若8位都是0,则布尔值为假。只要有任一位非0,则布尔值为真。布尔型数据的常见应用包括代表数字数据;用于前面板输入控件,使其成为带有一定机械动作的开关,用来控制条件结构等执行结构。布尔控件还常用作退出While循环结构的条件。 在LabVIEW中,使用绿色代表布尔型数据。

布尔控件机械动作的详细信息

动态数据类型

大多数的Express VI均可接受和/或返回动态数据类型,以深蓝色来表示。

使用“转换至动态数据”和“从动态数据转换”VI,可以转换下列数据类型的浮点数值或布尔数据:

  • 一维波形数组
  • 一维标量
  • 一维标量数组-最新值
  • 一维标量-单通道
  • 二维标量数组-列为通道
  • 二维标量-行为通道
  • 单一标量
  • 单一波形

动态数据类型应连接至可以最恰当地表示数据的显示控件,如图形、图表、数值、布尔显示控件等。然而,由于动态数据必须自动转换以匹配所连接的显示控件,所以Express VI常常会导致程序框图的执行速度变慢。

动态数据类型是为搭配Express VI使用的。大多数其他的LabVIEW 内置VI和函数则无法接受这种数据类型。如需使用内置VI或函数分析、处理包含有动态数据类型的数据时,必须先对动态数据类型进行类型转换。

动态数据的详细信息

数组

有时,将相互关联的数据归为一组,可以更方便处理。在LabVIEW中,可以使用数组和簇来将相互关联的数据集合在一起。 数组将相同类型的数据集合在一个数据结构中,而簇则将多种类型的数据集合在一个数据结构中。

数组由元素和维度组成。元素是数组中的数据。维度是数组的长度、高度或深度。 一个数组可以是一维或多维的,而且每一维在内存允许的情况下可以有多达(231)-1个元素。

您可以创建布尔值、数值、路径、字符串、波形以及簇的数组。对一组相似的数据进行操作或进行重复计算时,可考虑使用数组。在存储波形或循环结构所产生的数据,即每个周期产生一个元素时,数组是理想的选择。

注:LabVIEW中的数组索引都以0起始。无论数组的维度如何,第一个元素的索引均为0。

数组中的元素是有序的,因此可通过索引访问数组中任意元素。索引从零开始,即索引的范围是0到n-1,其中n是数组中元素的个数。例如,设数组元素为一年的12个月,n=12,因此索引范围为0-11。其中“三月”是第三个月,其索引值为2。

图1所示即为一个数值数组的范例。数组中的第一个元素(3.00)的索引为1,第二个元素(1.00)的索引为2。图中未显示索引为0的元素,因为索引显示控件选择了元素1。在索引框中所显示的值,永远都是指最左上角的元素的索引值。

(1)索引框 |  (2)元素框

图1. 数值数组控件

创建数组输入控件和显示控件

图2所示,在前面板上添加一个数组框,然后将数据对象或元素(如数值或字符串控件)拖入其中,即可添加输入控件或显示控件的数组。

图2. 将数值控件拖入数组框内

如试图将一个无效的输入或显示控件拖入数组框中,则无法实现该操作。

在程序框图中使用数组之前,必须在数组框中插入对象。否则数组的接线端将为空,不会产生任何相关的数据类型。

二维数组

前面的例子都是一维数组。而二维数组则是以网格的方式存储数据。它需要一个列索引和一个行索引来定位一个元素,且二者都是以0作为起始。图3显示了一个8列8行的二维数组,其中包含8 × 8 = 64个元素。

图3. 二维数组

如要在前面板上添加一个多维数组,右键点击索引显示框,并选择快捷菜单中的“添加维度”。此外,也可以改变索引框的大小,直至出现所需维数。

初始化数组

数组可以进行初始化,也可以不进行初始化。初始化数组即定义各个维度中的元素的个数与内容。一个未初始化的数组包含固定的维数,但不包含任何元素。图4 所示,即为一个未经初始化的二维数组控件。请注意其元素均无法选择,表明此数组是未经初始化的。

图4. 未经初始化的二维数组

在一个二维数组中,若初始化某一列中的元素之后,那一列及其前面的未初始化的列都将自动初始化,并被赋予相应数据类型的默认值。如图5所示,在以0为起始的第2列中输入4,则第0、1、2列将自动被初始化为0,即数值数据类型的默认值。

图5. 带有9个初始化元素的二维数组

创建数组常量

若要在程序框图上创建一个数组常量,可在函数选板上选择“数组常量”,将数组框放置到程序框图上,然后在框内放置字符串常量、数值常量、布尔常量、以及簇常量。数组常量用于存储常量数据或用于同另一个数组进行比较。

自动索引数组输入


将数组连线到For循环或者While循环时,通过自动索引功能可将每次迭代与数组中的一个元素相连。此时,循环的隧道将从实心方块变成空心,表明已启用自动索引功能。右键单击隧道,从快捷菜单中选择启用索引或禁用索引,可以切换隧道的状态。

数组输入

若对连接至For循环输入接线端的数组启用了自动索引动能,LabVIEW会将循环的次数自动设定为数组的大小,因此无需连接循环计数的接线端。由于For循环每次可处理数组中的一个元素,因此只要是连接至For循环的数组,LabVIEW就会默认启用自动索引功能。如不需要一次处理数组中的一个元素,可以禁用自动索引功能。

图6中,For循环执行的次数等同于数组中的元素数量。通常情况下,如果For循环的计数接线端没有连线,运行箭头是断开的。但是,在这个例子中的运行箭头是完整的。

图6. 使用数组来决定For循环的次数

如果有多个隧道启用自动索引,或者连接了循环计数端,则循环的实际执行次数将取其中的最小值。举例来说,如有两个数组进入For循环(分别具有10个、20个元素),同时将值15连接至循环计数端,则循环的实际执行次数为10次。此时虽然可以索引第一个数组的所有元素,但是仅能索引第二个数组的前10个元素。

数组输出

当自动索引一个数组的输出隧道时,每一次循环输出一个新元素到数组。因此,自动索引输出数组的大小等于循环的次数。

此时,连接输出隧道和数组显示控件的连线将变粗,表明它将输出一个数组,且输出隧道中将包含一个方框。

图7. 自动索引输出

在循环隧道上点击右键,并在快捷菜单中的选择“启用索引”或“禁用索引”,即可启用或关闭自动索引功能。While循环的自动索引功能默认是关闭的。

举例来说,若要隧道仅输出最后一次循环的值,则需要停用自动索引。

创建二维数组

将一个For循环嵌入在另一个For循环中,即可创建二维数组。 外层的For循环可以创建行元素,而内层的For循环可以创建列元素。

图8. 创建一个二维数组

 

视频:簇

簇可以将混合类型的数据集合在一起。 LabVIEW错误簇就是簇的常见例子之一,它包含一个布尔值、一个数值以及一个字符串。簇类似于文本编程语言中的记录或者结构体。

将多个数据元素捆绑在一起,可以使程序框图上的连线更加简洁,并减少子VI的接线端的数量。接线板最多可以有28个接线端。如果一个VI的前面板上有超过28个控件需要将值传递至另一个VI,则可以将其中的一部分集合到一个簇中,并为其分配一个接线端即可。

程序框图上的大多数簇的连线和数据类型接线端都是粉色的。错误簇的连线与数据类型接线端则是暗黄色。数值类型的簇(有时视为点)则使用棕色的连线与数据类型接线端。将棕色的数值簇连接至数值运算函数(如加运算或求方根),即可以对簇中的所有元素同时进行运算。

簇中元素的顺序

虽然簇与数组中的元素均有顺序,但是只要使用解除捆绑函数就可将簇内的所有元素拆开。您可以使用“按名称解除捆绑”函数将簇内的元素按名称解除捆绑。如使用“按名称解除捆绑”函数,簇中的每一个元素必须要有个标签。与数组不同的是,簇的大小是固定的。 与数组相同的是,一个簇里面要么全是输入控件要么全是显示控件。簇中不能同时含有输入控件和显示控件。

创建簇控件

只要将簇框添加到前面板(如下图所示)上,再将数据对象或元素(可以是布尔、枚举、数组、数值、字符串、路径以及簇控件)拖拽至框内,即可在前面板上创建簇输入控件或显示控件。

另外,通过拖拽鼠标游标,可以改变簇框的尺寸。

图9. 创建簇输入控件

图10中的示例是一个含有三个输入控件的簇: 一个字符串、一个布尔开关和一个数值控件。

图10. 簇输入控件示例

创建簇常量

若要在程序框图中创建簇常量,可在函数选板上选择 “簇常量”,将簇外框放置到程序框图上,然后在框内放置一个字符串常量、数值常量、布尔常量或者簇常量。簇常量用于存储常量数据或用于同另一个簇进行比较。

如前面板窗口中有一个簇控件或者显示控件,而您想在程序框图中创建一个包含同样元素的簇常量,可以从前面板窗口将该簇拖曳到程序框图中,或者在前面板窗口中右键单击该簇,从快捷菜单中选择“创建»常量”。

使用簇函数

簇函数用于创建并操作簇。举例来说,可执行类似下列的操作:

  • 从簇中提取一个数据元素。
  • 向簇中添加一个数据元素。
  • 将簇分解为单独的数据元素。

另外也可以使用“捆绑”函数来组装一个簇。“捆绑”与“按名称捆绑”函数可以修改簇;而“解除捆绑”与“按名称解除捆绑”则可以将簇打散。

在程序框图上右键单击簇接线端,从快捷菜单中选择“簇、类与变体”选板,可在程序框图上放置“捆绑”、“按名称捆绑”、“解除捆绑”和“按名称解除捆绑”函数。“捆绑”或“解除捆绑函数”将自动产生正确的接线端数量。“按名称捆绑”与“按名称解除捆绑”函数将显示簇中的第一个元素。 此时可通过位置调整工具来改变“按名称捆绑”和“按名称解除捆绑”函数的大小,以显示簇内的其他元素。

组装簇

“捆绑”函数可以将独立的元素组装成簇,或者改变现有簇中的个别元素值,而无需更新所有元素的值。 使用位置调整工具可重新设定捆绑函数的大小,或者可在元素输入端上点击右键后选择快捷菜单中的“添加输入”。

图11. 在程序框图中组装一个簇

修改簇

若要连接簇的输入,则只需连接需要修改的元素。以图12为例,其中有三个控件。

图12. 使用“捆绑”函数修改一个簇

图12所示,如果您已知簇中元素的顺序,可以使用“捆绑”函数来连线,从而更改Command元素的值。

也可以使用“按名称捆绑”函数,以改变或获取现有簇中的带标签元素。“按名称捆绑”函数的功能接近于“捆绑”函数,但不是按照簇中的顺序来引用元素,而是按其标签来引用元素。您只能按标签来访问元素。输入的数量不需要与输出簇的元素数量匹配。

可以使用操作工具来点击输入接线端,并在下拉菜单中选择一个元素。也可右键点击输入接线端,通过下拉菜单中的选择项来选择元素。

图13所示,可以通过“按名称捆绑”函数来修改Command与Function的值。

图13. 使用“按名称捆绑”函数修改簇

对于开发过程当中可能发生改变的数据结构,建议使用“按名称捆绑”函数。为簇添加一个新元素或者改变元素的顺序时无需对“按名称捆绑”函数重新连线,因为这些名称仍然有效。

解簇

“解除捆绑”函数用于将簇分割为独立的元素。

“按名称解除捆绑”函数用于根据用户所指定的名称,返回簇内元素。输出接线端的数量与输入簇中元素的数量不必相同。

请使用操作工具点击输出接线端,在下拉菜单中选择一个元素。也可右键点击输出接线端,通过下拉菜单中的选择项来选择元素。

图14为例,如对簇使用“解除捆绑”函数,则该簇具有4个输出端点与簇中的四个控件相对应。 本例中,用户必须知道簇内元素的顺序,才能将簇分解后的布尔控件与簇内的开关控件对应起来。元素从0开始,从上到下为顺序。若使用“按名称解除捆绑”函数,则输出接线端的数量可以任意指定,并可根据元素的名称来存取独立的元素,而无需依照其顺序。

图14. 解除捆绑和按名称解除捆绑

枚举

枚举包含输入控件、常量与显示控件,是多种数据类型的集合。 枚举代表成对的值,分别是一个字符串和一个数值。枚举中可以包含一组或多组的值。 举例来说,若创建一个枚举类型称为“Month”,则Month变量的值对可能为January-0、February-1,直到 December-11。图15展示了枚举输入控件的属性对话框中的值对。只要对枚举控件点击右键,选择编辑项即可直接使用此功能。

图15. Month枚举控件属性对话框

与字符串相比,由于枚举便于在程序框图上操作数字,所以用途比较广泛。图16显示了上述Month枚举控件、所选的值对,以及相应的程序框图接线端。

(1)前面板控件 |  (2)选择一个项 |  (3)程序框图对象

图16. Month枚举控件

探针工具


使用探针工具,可在VI运行时检查连线上实时传递的值。

如程序框图比较复杂,操作繁多,且每一步都可能返回错误的值,此时可以使用探针工具。探针工具结合执行过程高亮显示、单步执行以及断点,可用于确定是否产生了数据错误以及错误发生在哪里。高亮显示执行过程、单步调试或在断点处暂停时如有数据产生,探针会立即更新并在探针监视窗口中显示数据。执行过程由于单步执行或断点而在某一节点处暂停时,可用探针探测刚才执行的连线,查看流经该连线的数值。

交互式LabVIEW入门课程

体验全新交互式LabVIEW入门课程,掌握LabVIEW基础概念。

继续学习

上一篇NI LabVIEW错误调试及处理
执行结构下一篇