3.2 数组与簇
3.2.1 数组
数组是LabVIEW 中非常重要的概念,同一类型的数据归为一组就构成了该类型数据的数组。数组由元素和维度组成,元素是构成数组的数据,维度是数组的长度、高度或深度,如图 3-2-1 所示。可以创建数值数组、布尔数组、字符串数组、路径数组、簇数组等数组。
数组可以是一维或多维的,在内存允许的情况下每一维度可有多达(231)-1个元素。
图3-2-1 数组及常见数据类型构成的数组
1.数组选板
【练习3-13】
在图3-2-2中找到LabVIEW前面板的数组控件和程序框图中的“数组”子选板中的数组函数。
图3-2-2 前面板及程序框图中的“数组”子选板
2.创建数组的限制条件
尽管有很多元素可以用于创建数组,但也有一些限制条件,如图3-2-3所示。
图3-2-3 创建数组时限制条件
注意:可以创建多维数组或创建每个簇中含有一个或多个数组的簇数组。
3.创建数组
【练习3-14】
参看如图 3-2-4 所示的在前面板创建数值数组的方法,该方法为最基础的创建方法,注意程序框图中数组控件的图标变化,并尝试创建图3-2-1所列的其他几种数组的显示控件。
图3-2-4 创建数值数组输入控件
从LabVIEW 2015开始,创建数组的方法相较以前版本的方法更为简单。
【练习3-15】
参看如图3-2-5所示方法,在LabVIEW 2015或以上版本中创建一个数值数组,并以此方法,创建如图3-2-1所示的其他类型的数组。
图3-2-5 LabVIEW 2015创建数组的方法
【练习3-16】
继续上面的练习,参看如图3-2-6所示方法,将显示控件转换为输入控件。
图3-2-6 数组的显示控件与输入控件的转换
4.数组常量
数组也可以设置常量,创建的数组常量与其自身的数据类型一致。
【练习3-17】
参看如图3-2-7所示方法,掌握创建数值数组常量的方法,并以此法创建如图3-2-1所示的其他类型的数组常量。
图3-2-7 创建数组常量
5.创建多维数组
数组的维数超过一维时,该数组就是多维数组。对前面板中放置的一维数组进一步操作,就可以得到需要的多维数组。
【练习3-18】
参看如图3-2-8所示步骤,掌握创建多维数组的两种基本方法。
图3-2-8 创建多维数组
若要减少数组的维数,则可选中目标数组→单击鼠标右键→选择“删除维度”选项。
6.数组的索引
想要从数组中准确找到某个位置的元素,需要使用数组的索引操作。使用索引可以浏览数组里的所有元素,也可以定位数组中的某个位置的元素。此外,还可以提取数组中的元素、行、列和页。
【练习3-19】
参看如图3-2-9所示方法,以一维数组为例,编写程序并掌握索引数组的基本方法。
图3-2-9 索引数组
7.数组绘图应用
数组在LabVIEW中广泛参与程序运算和绘图,下面的练习中涉及一维数组、二维数组、簇数组的绘图应用。
【练习3-20】
参看如图3-2-10所示举例,编写程序并掌握在LabVIEW中利用一个二维数组输出绘图的方法。请回答波形图的X轴与数组的哪一个部分关联。
【练习3-21】
参看如图3-2-11所示的数组举例,编写程序并掌握使用簇数组(一维数组)表示XY图中的x值与y值的方法。想一想此方法可延伸应用在哪些场合。
图3-2-10 数组举例
图3-2-11 簇数组举例
【练习3-22】
参看如图3-2-12所示举例,编写程序并掌握使用数组(二维数组)表示数组波形的基本方法。
图3-2-12 二维数组绘图举例
8.数组函数
数组参与程序的运算很大程度是基于数组函数实现的,数组函数位于程序框图中的“数组”选板。这些函数用于数组的创建和编辑等操作。例如,从数组中提取单个数据元素,在数组中插入、删除或替换数据元素、分解数组等相关操作。
1)创建数组
除前面介绍的创建输出的基本方法外,使用“数组”选板中的“创建数组”函数,可以通过编程方式创建新数组。此外,还可利用For循环创建数组(方法见后续章节)。
2)自动调整数组大小的函数
某些数组函数具备自动适应数组维数的能力。例如,将一个一维数组连线到某函数,该函数仅显示单个索引输入。若将一个二维数组连线到该函数,则该函数将显示两个索引输入,一个用于行索引,另一个用于列索引,这就是具备自动适应数组维数能力的函数。这些函数包括“索引数组”函数、“替换数组子集”函数、“数组插入”函数、“删除数组元素”函数和“数组子集”函数等。
【练习3-23】
参看如图3-2-13所示步骤,以“索引数组”函数为例编写程序,并掌握定位工具的使用方法。
3)数组的默认数据
数组的索引范围与数组元素的个数之间关联,当索引值设置超出数组元素的数量范围时,数组元素的参数将返回默认值,而不返回错误的范围值。利用“数组大小”函数可确定数组的元素个数,从而得到数组索引的范围。
图3-2-13 自动调整数组大小的函数(举例)
【练习3-24】
参看如图3-2-14所示步骤,编写程序并理解数组默认数据的概念。
图3-2-14 数组默认数据
4)通过编程替换数组中的元素
对数组里的元素进行操作,可以通过替换数组中元素、行、列或页来实现,可替换的部分取决于数组的维数。例如,在二维或二维以上的数组中,可用一维数组替换行或列;在三维或三维以上的数组中,可用二维数组替换页。
【练习3-25】
如图3-2-15所示,使用“替换数组子集”函数对一个二维数组进行替换数组元素的操作,掌握索引行接线端、索引列接线端的用法。
图3-2-15 替换数组子集
3.2.2 簇
簇和数组在某些方面有相似的地方,都是将一些数据归为一组。簇可以将不同的数据归为一组,数组只能操作同类型的数据。例如,簇里的成员可以包含布尔、数值、字符串甚至是日期时间。簇类似于文本编程语言中的记录或结构体。
【练习3-26】
在程序框图的“函数”选板中搜索“错误簇常量”,并将其放置在程序框图中。通过认识错误簇常量里面的元素,加深对簇概念的理解。错误簇常量如图3-2-16所示。
图3-2-16 错误簇常量
在程序框中使用簇,一方面是利用簇集成多种元素的整体性优势,减少程序框图中因单独使用元素控件接线端而产生的大量连线。
一个VI的连线板最多有28个接线端,若前面板上要传送给另一个VI的输入控件和显示控件多于28个,应可考虑将其中的一些对象组成一个簇,然后为该簇分配一个连线板接线端。
【练习3-27】
读懂图3-2-17中的程序片段,理解在程序中用簇整合前面板中独立控件的优势。
图3-2-17 簇使用场合举例
【练习3-28】
参看图3-2-18,尝试编写由不同元素组成的簇,理解不同颜色所代表的簇对象的含义。
图3-2-18 簇的颜色
1.簇元素的顺序
数组的元素是有序的,利用索引功能可以准备提取数组中有序排列的元素。尽管组成簇的元素是不同的数据类型,但簇里面的元素也是有序排列的。利用簇元素有序排列的特点,在对簇元素的解绑(提取)、捆绑操作时就能够有的放矢。
(1)簇有别于数组的另一个特性是,簇的大小是固定的。
(2)与数组一样,簇包含的要么是输入控件,要么是显示控件,簇不能同时含有输入控件和显示控件。
【练习3-29】
参看如图3-2-19所示步骤,理解簇元素顺序的概念并掌握簇元素重新排序的方法。
【练习3-30】
以簇为数组元素构成簇数组是允许的,简单地说是可以创建簇数组。参看图 3-2-20,理解创建簇数组的基本条件,并掌握创建簇数组的相关禁忌。
图3-2-19 簇元素的顺序
图3-2-20 两个簇的连接
2.创建簇输入控件、簇显示控件和簇常量
簇作为前面板的对象,和数组一样也具有输入控件、显示控件,以及在程序框图中对应的接线端和簇常量。
【练习3-31】
参看如图3-2-21所示步骤,掌握创建簇输入控件、簇显示控件和簇常量的方法,并尝试创建由字符串控件、路径控件组成的簇。
3.簇函数
簇函数的创建及相关操作通过“簇、类与变体”选板进行,如图3-2-22所示。
【练习3-32】
通过编程方法将不同数据类型的元素构成一个簇,参看图 3-2-23,理解并掌握“捆绑”函数和“按名称捆绑”函数的使用方法。
图3-2-21 创建簇输入控件、簇显示控件和簇常量
图3-2-22 “簇、类与变体”选板
图3-2-23 使用“捆绑”函数
【练习3-33】
如果簇包含元素的数据类型完全相同,簇可以通过转换操作成为数组,参看图3-2-24,编写程序,掌握簇转换为数组函数的使用方法。
图3-2-24 簇转换为数组函数
【练习3-34】
如图3-2-25所示,本例利用获得的当前系统时间与目标时间进行减运算,得到差值天数的运算结果,计算过程中借助“捆绑”函数将输出的簇进行数据连接捆绑,进而获得一个新的更改了元素数值数据的簇,可对该簇进行后续的运算。读懂并尝试理解本例中是如何实现替换簇元素的,以及“捆绑”函数在其中起到了什么作用。
图3-2-25 替换簇元素
【练习3-35】
参看图3-2-26,编写程序,掌握解除捆绑簇中元素的方法。
图3-2-26 解除捆绑簇中的元素
【练习3-36】
参看图3-2-27,编写程序,掌握按名称解除捆绑簇中元素的方法。
图3-2-27 按名称解除捆绑簇中元素