1
LabVIEW 数 据 类 型
数组、簇和波形
2
概述 -数组
数组是同类型元素的集合 。 一个数组可以是一维或者多
维,如果必要,每维最多可有 231- 1个元素。可以通过数
组索引访问其中的每个元素。索引的范围是 0到 n – 1,
其中 n是数组中元素的个数。
3
概述 - 簇、波形
簇 ( Cluster) 是另一种数据类型, 它的元素可
以是不同类型的数据 。 它类似于 C语言中的
stucture。 使用簇可以把分布在流程图中各个位
置的数据元素组合起来, 这样可以减少连线的
拥挤程度。减少子 VI的连接端子的数量。
波形 ( Waveform) 可以理解为一种 簇的变形,
它不能算是一种有普遍意义的数据类型, 但非
常实用 。
4
数组的创建及自动索引
?数组的创建
创建一个数组有两件事要做,首先要建一个数
组的, 壳, ( shell),然后在这个壳中置入数
组
元素(数或字符串等)
ABC0
Array Constant
ABC0
Array Constant
0
Array Constant
数组作为数据源创建框图
5
数组的创建及自动索引
?在 前面板中 创建数 组的方法 是, 从
Controls模板中选择 Array & Cluster,
把数组放置在前面板中, 然后选择一个
对象 ( 例如数值常量 ) 插入到数组框中 。
这样就创建了一个数值数组 。
?也可以直接在前面板中创建数组和相应
的控制对象, 然后将它们复制或者拖曳
到流程图中, 创建对应的常数 。
6
数组控制、常数和显示对象
?通过把数组与数值、布尔数、字符串或
者簇组合在一起,可以在前面板和流程
图中创建任何一种 控制对象、常数对象
和显示对象 。数组元素不能是数组、图
表或者图形。如果您想查看一些数组的
例子,请查看
Examples\General\arrays.llb中的例子
7
自动索引
?For循环和 While循环可以自动地在数组的上下
限范围内编索引和进行累计。这些功能称为自
动索引。在启动自动索引功能以后,当把某个
外部节点的任何一维元素连接到循环边框的某
个输入通道时,该数组的各个元素就将按顺序
一个一个地输入到循环中。循环会对一维数组
中的标量元素,或者二维数组中的一维数组等
编制索引。在输出通道也要执行同样的工作
―― 数组元素按顺序进入一维数组,一维数组
进入二维数组,依此类推。
8
自动索引
?备注:
在默认情况下,对于每个连接到 For循环的数
组都会执行自动索引功能。可以禁止这个功能
的执行,方法是用鼠标右键单击通道(输入数
组进入循环的位置),在快捷菜单中选择
Disable Indexing。
9
练习 1,创建自动索引的数组
?目的:使用 For 循环的自动索引功能创建数
组,并用一个图形( Graph)显示该数组。
?前面板
10
步骤
1,打开一个新的前面板 。
2,选择 Controls?Array & Cluster,在前面板中放置一
个数组 。 设置它的标签为 Waveform Array。
3,选择 Controls?Numeric,在数组框中插入一个数字式
显示对象 。 如右图所示 。 它用于显示数组的内容 。
4,选择 Controls?Graph,在前面板中放置一个波形图 。
设置它的标签为 Waveform Graph。
5,隐藏图例和模板 。
6.用鼠标右键单击图形, 并在快捷菜单中取消选中 Y
Scale?Autoscale Y,禁止自动坐标功能 。
11
练习步骤
?流程图
12
练习 2:输入数组使用自动索引
?目的,打开并执行一个 VI,它将在一个
For循环中使用自动索引功能处理一个数
组
打开 Examples\General\arrays.llb中的
Separate Array Values VI 。
13
Case结构为 True的流程图
14
Case结构为 False的流程图
15
练习 2
? 步骤:
1,执行该 VI。在输入的八个数中,可以看到 4
个属于正数数组,另外 4个属于负数数组 。
2,从流程图中将一个值为 5的常数对象连接到
For 循环的计数器端子。执行该 VI。可以
看到尽管输入数组仍然有八个元素,但是 3
个位于正数数组,另外 2个位于负数数组。
这说明,如果设置了 N并开启了自动索引功
能,那么实际循环的次数将取较小的数 。
3,关闭该 VI,不要保存任何修改。
16
数组功能函数
?LabVIEW提供了很多用于操作数组的功能函数,
位于 Functions?Array中。其中包括 Replace
Array Element,,Search 1D Array,Sort 1D Array、
Reverse 1D Array和 Multiply Array Elements等等。
?创建数组 —— Build Array函数( Functions?Array),
用于根据标量值或者其他的数组创建一个数组 。
?初始化数组( Initialize Array) —— 用于创建所有
元素值都相等的数组。下图中,该功能函数创建
了一个一维数组。
17
数组功能函数
?利用流程图中的常数对象的值创建和初
始化数组的两种方法
? 左侧的方法是,将 5个字符串常数放入一个一维字符串
数组中
? 右侧的方法是,将三组数值常数放入三个一维数值数
组,再将这三个数组组成一个二维数组
18
数组功能函数
?初始化数组( Initialize Array) —— 用于
创建所有元素值都相等的数组
?初始化一维数组
19
数组功能函数
?初始化三维数组,如果所有的维长度输
入都是 0,该函数会创建一个具有指定数
据类型和维数的空数组
20
数组功能函数
?数组大小 —— Array Size函数,返回输入
数组中的元素个数
21
数组功能函数
?数组子集 ( Array Subset) —— 选取数组
或者矩阵的某个部分
22
数组功能函数
?数组子集( Array Subset)
? 该函数可以返回从某个指针开始的部分数组,
并包括了长度元素。下图显示了一些数组子
集的例子,注意,数组索引从 0开始
23
数组功能函数
?索引数组( Index Array) —— 用于访问
数组中的某个元素
24
数组功能函数
?索引数组( Index Array)例子
?从二维数组中提取一维数组例子
25
创建数组功能函数
?使用创建数组函数,把一些元素和输出
组织成一个更大的数组
26
多态化组合 (标量与数组 )
?多态化是指一种函数功能,即可以协调
不同格式、维数或者显示的输入数据,
大多数 LabVIEW的函数都是多态化的。
27
簇 -创建簇控制和显示
?在前面板上放置一个簇壳( Cluster shell)
就创建了一个簇,然后你可以将前面板
上的任何对象放在簇中。
图所示是一个含4个 Control的
簇。也可以在流程图上用类似
的方法创建簇常数
28
簇的序( Order)
?簇的元素有一个序,它与簇内元素的位
置无关。簇内第一个元素的序为 0,第二
个是 1,等等。如果你删除了一个元素,
序号将自动调整。如果你想将一个簇与
另一个簇连接,这两个簇的序和类型必
须同一。
?如果想改变簇内元素的序,可在快速菜
单中选择 Cluster Order,这时会出现
一个窗口,在该窗口内可以修改序
29
使用簇与子 VI传递数据
?一个 VI的连接窗口最大有 28个端子, 如果你
不希望使用全部 28个端子传递数据, 这既烦琐
又易出错 。 通过把控制或显示对象捆绑成一个
簇的方法, 仅使用一个端子就可以实现该功能 。
?捆绑 ( Bundle) 数据
? Bundle功能将分散的元件集合为一个新的簇, 或允
许你重置一个已有的簇中的元素 。 可以用位置工具
拖曳其图标的右下角以增加输入端子的个数 。 最终
簇的序是取决于被捆绑的输入的顺序 。 右图中
Bundle图标中部的 Claster端子用于用新元素重置原
簇中的元素
30
使用簇与子 VI传递数据
?分解( Unbundle)簇
? Unbundle功能是 Bundle的逆过程,它将
一个簇分解为若干分离的元件。如果你要对
一个簇分解,就必须知道它的元素的个数。
LabVIEW还提供一种可以根据元素的名字
来捆绑或分解簇的方法,稍后介绍 。
31
练习簇
?目的:学习创建簇、分解簇,再捆绑簇
并且在另一个簇中显示其内容
?前面板
6.00
Numeric
Boolean1 Boolean 2
Tsinghua
String
Input Cluster
6.00
Numeric
Boolean1 Boolean 2
Tsinghua
String
Output Cluster
STOP
stop
32
练习簇
?流程图
33
用名称捆绑与分解簇
?有时你并不需要汇集或分解整个簇,而
仅仅需要对其一、两个元素操作。这时
你可以用名称来捆绑与分解簇。 在
Cluster 工具模板中除了 Bundle及
Unbundle功能外,还提供有 Bundle By
Name和 Unbundle By Name功能
34
用名称捆绑与分解簇
?Bundle By Name和 Unbundle By Name功
能允许根据元素的名称(而不是其位置)
来查询元素。与 Bundle不同,使用
Bundle By Name可以访问你需要的元素,
但不能创建新簇;它只能重置一个已经
存在的簇的元素,同时你必须给 Bundle
By Name图标中间的输入端子一个输入
以申明要替换其元素的簇。 Unbundle可
返回指定名称的簇元素,不必考虑簇的
序和大小。
35
数组和簇的互换
?有时你会发现,将数组变为簇(或者相反)很
方便。尤其是因为 LabVIEW包括的关于数组的
操作功能多于簇。例如,前面板上有一个多按
钮的簇,你希望颠倒这些按钮值的序。好了,
Reverse 1D Array功能正好可用,但是它仅可
用于数组。这没关系,你可以使用功能 Cluster
to Array将簇转换为数组,使用 Reverse 1D
Array切换开关的值,最后再利用 Array to
Claster 变换回簇。
36
Waveform 数据类型
? 在数据采集和信号分析中经常要遇到波形数据, 在
LabVIEW 6i中增加了 Waveform数据类型, 使得波形
的描述更加简洁 。 Waveform数据类型包含了波形的数
据 (Y),起始时刻 (t0)和步长 ΔX,使用 Waveform 模板
的 Build Waveform 函数可以建立一个波形 。
? 许多用于数据采集和波形分析的 VI和函数的缺省状态都
接 受 或 返 回 Waveform 数 据 类 型 。 当 你 将 一 个
Waveform数据类型连接到 Waveform Graph或 Chart
时, 会自动画出相应的曲线 。 Waveform数据类型是根
据原有的数据类型进一步, 打包, 组合而成, 这种打包
也不可避免地带来一些负作用, 有 时 还 需 要 对
Waveform数据类型, 解包, 。
37
Waveform 数据类型
有关 Waveform数据类型的函数或 VI在
Functions? Waveform和 Analyze之中 。
LabVIEW 数 据 类 型
数组、簇和波形
2
概述 -数组
数组是同类型元素的集合 。 一个数组可以是一维或者多
维,如果必要,每维最多可有 231- 1个元素。可以通过数
组索引访问其中的每个元素。索引的范围是 0到 n – 1,
其中 n是数组中元素的个数。
3
概述 - 簇、波形
簇 ( Cluster) 是另一种数据类型, 它的元素可
以是不同类型的数据 。 它类似于 C语言中的
stucture。 使用簇可以把分布在流程图中各个位
置的数据元素组合起来, 这样可以减少连线的
拥挤程度。减少子 VI的连接端子的数量。
波形 ( Waveform) 可以理解为一种 簇的变形,
它不能算是一种有普遍意义的数据类型, 但非
常实用 。
4
数组的创建及自动索引
?数组的创建
创建一个数组有两件事要做,首先要建一个数
组的, 壳, ( shell),然后在这个壳中置入数
组
元素(数或字符串等)
ABC0
Array Constant
ABC0
Array Constant
0
Array Constant
数组作为数据源创建框图
5
数组的创建及自动索引
?在 前面板中 创建数 组的方法 是, 从
Controls模板中选择 Array & Cluster,
把数组放置在前面板中, 然后选择一个
对象 ( 例如数值常量 ) 插入到数组框中 。
这样就创建了一个数值数组 。
?也可以直接在前面板中创建数组和相应
的控制对象, 然后将它们复制或者拖曳
到流程图中, 创建对应的常数 。
6
数组控制、常数和显示对象
?通过把数组与数值、布尔数、字符串或
者簇组合在一起,可以在前面板和流程
图中创建任何一种 控制对象、常数对象
和显示对象 。数组元素不能是数组、图
表或者图形。如果您想查看一些数组的
例子,请查看
Examples\General\arrays.llb中的例子
7
自动索引
?For循环和 While循环可以自动地在数组的上下
限范围内编索引和进行累计。这些功能称为自
动索引。在启动自动索引功能以后,当把某个
外部节点的任何一维元素连接到循环边框的某
个输入通道时,该数组的各个元素就将按顺序
一个一个地输入到循环中。循环会对一维数组
中的标量元素,或者二维数组中的一维数组等
编制索引。在输出通道也要执行同样的工作
―― 数组元素按顺序进入一维数组,一维数组
进入二维数组,依此类推。
8
自动索引
?备注:
在默认情况下,对于每个连接到 For循环的数
组都会执行自动索引功能。可以禁止这个功能
的执行,方法是用鼠标右键单击通道(输入数
组进入循环的位置),在快捷菜单中选择
Disable Indexing。
9
练习 1,创建自动索引的数组
?目的:使用 For 循环的自动索引功能创建数
组,并用一个图形( Graph)显示该数组。
?前面板
10
步骤
1,打开一个新的前面板 。
2,选择 Controls?Array & Cluster,在前面板中放置一
个数组 。 设置它的标签为 Waveform Array。
3,选择 Controls?Numeric,在数组框中插入一个数字式
显示对象 。 如右图所示 。 它用于显示数组的内容 。
4,选择 Controls?Graph,在前面板中放置一个波形图 。
设置它的标签为 Waveform Graph。
5,隐藏图例和模板 。
6.用鼠标右键单击图形, 并在快捷菜单中取消选中 Y
Scale?Autoscale Y,禁止自动坐标功能 。
11
练习步骤
?流程图
12
练习 2:输入数组使用自动索引
?目的,打开并执行一个 VI,它将在一个
For循环中使用自动索引功能处理一个数
组
打开 Examples\General\arrays.llb中的
Separate Array Values VI 。
13
Case结构为 True的流程图
14
Case结构为 False的流程图
15
练习 2
? 步骤:
1,执行该 VI。在输入的八个数中,可以看到 4
个属于正数数组,另外 4个属于负数数组 。
2,从流程图中将一个值为 5的常数对象连接到
For 循环的计数器端子。执行该 VI。可以
看到尽管输入数组仍然有八个元素,但是 3
个位于正数数组,另外 2个位于负数数组。
这说明,如果设置了 N并开启了自动索引功
能,那么实际循环的次数将取较小的数 。
3,关闭该 VI,不要保存任何修改。
16
数组功能函数
?LabVIEW提供了很多用于操作数组的功能函数,
位于 Functions?Array中。其中包括 Replace
Array Element,,Search 1D Array,Sort 1D Array、
Reverse 1D Array和 Multiply Array Elements等等。
?创建数组 —— Build Array函数( Functions?Array),
用于根据标量值或者其他的数组创建一个数组 。
?初始化数组( Initialize Array) —— 用于创建所有
元素值都相等的数组。下图中,该功能函数创建
了一个一维数组。
17
数组功能函数
?利用流程图中的常数对象的值创建和初
始化数组的两种方法
? 左侧的方法是,将 5个字符串常数放入一个一维字符串
数组中
? 右侧的方法是,将三组数值常数放入三个一维数值数
组,再将这三个数组组成一个二维数组
18
数组功能函数
?初始化数组( Initialize Array) —— 用于
创建所有元素值都相等的数组
?初始化一维数组
19
数组功能函数
?初始化三维数组,如果所有的维长度输
入都是 0,该函数会创建一个具有指定数
据类型和维数的空数组
20
数组功能函数
?数组大小 —— Array Size函数,返回输入
数组中的元素个数
21
数组功能函数
?数组子集 ( Array Subset) —— 选取数组
或者矩阵的某个部分
22
数组功能函数
?数组子集( Array Subset)
? 该函数可以返回从某个指针开始的部分数组,
并包括了长度元素。下图显示了一些数组子
集的例子,注意,数组索引从 0开始
23
数组功能函数
?索引数组( Index Array) —— 用于访问
数组中的某个元素
24
数组功能函数
?索引数组( Index Array)例子
?从二维数组中提取一维数组例子
25
创建数组功能函数
?使用创建数组函数,把一些元素和输出
组织成一个更大的数组
26
多态化组合 (标量与数组 )
?多态化是指一种函数功能,即可以协调
不同格式、维数或者显示的输入数据,
大多数 LabVIEW的函数都是多态化的。
27
簇 -创建簇控制和显示
?在前面板上放置一个簇壳( Cluster shell)
就创建了一个簇,然后你可以将前面板
上的任何对象放在簇中。
图所示是一个含4个 Control的
簇。也可以在流程图上用类似
的方法创建簇常数
28
簇的序( Order)
?簇的元素有一个序,它与簇内元素的位
置无关。簇内第一个元素的序为 0,第二
个是 1,等等。如果你删除了一个元素,
序号将自动调整。如果你想将一个簇与
另一个簇连接,这两个簇的序和类型必
须同一。
?如果想改变簇内元素的序,可在快速菜
单中选择 Cluster Order,这时会出现
一个窗口,在该窗口内可以修改序
29
使用簇与子 VI传递数据
?一个 VI的连接窗口最大有 28个端子, 如果你
不希望使用全部 28个端子传递数据, 这既烦琐
又易出错 。 通过把控制或显示对象捆绑成一个
簇的方法, 仅使用一个端子就可以实现该功能 。
?捆绑 ( Bundle) 数据
? Bundle功能将分散的元件集合为一个新的簇, 或允
许你重置一个已有的簇中的元素 。 可以用位置工具
拖曳其图标的右下角以增加输入端子的个数 。 最终
簇的序是取决于被捆绑的输入的顺序 。 右图中
Bundle图标中部的 Claster端子用于用新元素重置原
簇中的元素
30
使用簇与子 VI传递数据
?分解( Unbundle)簇
? Unbundle功能是 Bundle的逆过程,它将
一个簇分解为若干分离的元件。如果你要对
一个簇分解,就必须知道它的元素的个数。
LabVIEW还提供一种可以根据元素的名字
来捆绑或分解簇的方法,稍后介绍 。
31
练习簇
?目的:学习创建簇、分解簇,再捆绑簇
并且在另一个簇中显示其内容
?前面板
6.00
Numeric
Boolean1 Boolean 2
Tsinghua
String
Input Cluster
6.00
Numeric
Boolean1 Boolean 2
Tsinghua
String
Output Cluster
STOP
stop
32
练习簇
?流程图
33
用名称捆绑与分解簇
?有时你并不需要汇集或分解整个簇,而
仅仅需要对其一、两个元素操作。这时
你可以用名称来捆绑与分解簇。 在
Cluster 工具模板中除了 Bundle及
Unbundle功能外,还提供有 Bundle By
Name和 Unbundle By Name功能
34
用名称捆绑与分解簇
?Bundle By Name和 Unbundle By Name功
能允许根据元素的名称(而不是其位置)
来查询元素。与 Bundle不同,使用
Bundle By Name可以访问你需要的元素,
但不能创建新簇;它只能重置一个已经
存在的簇的元素,同时你必须给 Bundle
By Name图标中间的输入端子一个输入
以申明要替换其元素的簇。 Unbundle可
返回指定名称的簇元素,不必考虑簇的
序和大小。
35
数组和簇的互换
?有时你会发现,将数组变为簇(或者相反)很
方便。尤其是因为 LabVIEW包括的关于数组的
操作功能多于簇。例如,前面板上有一个多按
钮的簇,你希望颠倒这些按钮值的序。好了,
Reverse 1D Array功能正好可用,但是它仅可
用于数组。这没关系,你可以使用功能 Cluster
to Array将簇转换为数组,使用 Reverse 1D
Array切换开关的值,最后再利用 Array to
Claster 变换回簇。
36
Waveform 数据类型
? 在数据采集和信号分析中经常要遇到波形数据, 在
LabVIEW 6i中增加了 Waveform数据类型, 使得波形
的描述更加简洁 。 Waveform数据类型包含了波形的数
据 (Y),起始时刻 (t0)和步长 ΔX,使用 Waveform 模板
的 Build Waveform 函数可以建立一个波形 。
? 许多用于数据采集和波形分析的 VI和函数的缺省状态都
接 受 或 返 回 Waveform 数 据 类 型 。 当 你 将 一 个
Waveform数据类型连接到 Waveform Graph或 Chart
时, 会自动画出相应的曲线 。 Waveform数据类型是根
据原有的数据类型进一步, 打包, 组合而成, 这种打包
也不可避免地带来一些负作用, 有 时 还 需 要 对
Waveform数据类型, 解包, 。
37
Waveform 数据类型
有关 Waveform数据类型的函数或 VI在
Functions? Waveform和 Analyze之中 。