1、第3章 数组、簇和波形第第3 3章章 数组、簇和波形数组、簇和波形3.1 数组数组 3.2 簇簇 3.3 波形波形 习题习题3 第3章 数组、簇和波形数组、簇和波形是LabVIEW中三类比较复杂的数据类型。数组是一种由同一类型数据元素组成的大小可变的集合,与其他编程语言中的数组概念相同。簇是由混合类型数据元素组成的大小固定的集合,相当于C语言中的结构数据类型。波形数据是LabVIEW为数据采集和处理提供的一种专门的数据结构。灵活运用这三种数据类型可极大地提高编程效率,简化程序代码。第3章 数组、簇和波形3.1 数数 组组数组是由同一类型数据元素组成的大小可变的集合。大多数数组是一维数组,少数是
2、二维数组,极少数是三维或多维数组。LabVIEW中除了不能有数组的数组、图表数组、图形数组外,可以创建数字类型、字符串类型、布尔类型以及其他任何数据类型的数组。数组通常用一个循环来创建,因为For循环的循环次数是预先指定的,所以在循环开始前已经分配好了内存。3.1.1 数组的创建数组的创建在LabVIEW中,数组由数据类型、数据索引和数据3部分组成,数据类型隐含在数据中。如图3-1所示,索引位于左侧,数组元素位于右侧的数组框架中,用户通过索引显示可以很容易地访问到数组中的任何一个元素。第3章 数组、簇和波形图3-1 数组的组成第3章 数组、簇和波形数组控制器和指示器框架位于ControlsAl
3、l ControlsArray&Cluster子模板上,数组常量框架位于FunctionsAll FunctionsArray子模板上,见图3-2。数组的创建分两步。第一步,从Controls模板中创建数组框架,如图3-3(a)所示。此时创建的数组框架不包含任何内容,没有数据类型,也没有数据,在程序中不能使用。第二步,定义数组类型。定义数组类型的方法有两种,一是直接将面板上已有的控制器或指示器拖入数组框架内;另一种方法是在空数组框架内右键弹出菜单选择所需类型对象,放置在框架内,如图3-3(b)所示。图3-3(b)中所示的是放置了数值型控制器,构成数值型控制器数组。放置在数组内的对象一旦确定,数
4、组类型就确定了。第3章 数组、簇和波形图3-2 数组框架在模板上的位置 第3章 数组、簇和波形图3-3 数组的创建过程第3章 数组、簇和波形为同时显示数组的多个元素,可使用定位工具在数组窗口角落上出现网络形状时或抓住大小调节柄,将对象扩展到能显示所希望数量的数组元素,如图3-4所示。在后面板创建数组与前面板类似,首先从Functionss模板上创建框架,然后添加具体数据类型的数据。在前面板和框图中创建数组的不同处是:前面板创建的是数组变量,可以是控制器,也可以是指示器;而在框图程序中创建的数组只能是常量。第3章 数组、簇和波形图3-4 改变显示数组元素的个数 第3章 数组、簇和波形3.1.2
5、多维数组多维数组数组在创建时都是一维数组,使其成为多维数组时,可以直接用鼠标(对象操作工具状态)在索引边框下边缘的尺寸控制点上下拖动,或者在右键弹出的快捷菜单中选择Add Dimension即可添加数组的维数,如图3-5所示。另外,还可以改变数组对象的属性对话框修改数组的维数。二维数组需要有两个索引(行索引和列索引)来定位一个元素。三维数组需要三个索引,由页、行和列组成,每一页可以看做是一个二维数组。通常,n维数组需要n个索引。第3章 数组、簇和波形图3-5 添加数组的维数第3章 数组、簇和波形3.1.3 利用循环结构创建数组利用循环结构创建数组利用For循环和While循环的自动索引功能可以
6、很方便地创建数组。首先看图3-6所示的两个程序框图及运行结果。图3-6(a)中For循环的自动索引功能默认打开,每次循环产生一个010之间的数组元素,循环结束后,产生一个含有5个元素的一维数组,数组自动传输到指示器中。我们注意到,循环结构外的连线比较粗。图3-6(b)中,因为For循环的自动索引功能被关闭,所以只有最后一个010之间的随机数4.55576传输到循环体外,并且在循环体内外的连线粗细没有变化。使用两个嵌套的For循环可以创建二维数组。外层循环产生行元素,内层循环产生列元素。图3-7给出了利用两个For循环嵌套创建的一个3行4列的二维随机数组的前面板和框图程序。第3章 数组、簇和波形
7、图3-6 利用For循环的自动索引功能创建数组第3章 数组、簇和波形图3-7 使用嵌套的For循环创建二维数组 第3章 数组、簇和波形将数组传送到自动索引功能打开的For循环中时,LabVIEW会自动把循环次数设置为数组的长度,所以不需要为循环计数端子N连接数值。如果多个数组输入For循环,并且循环的计数端子设置了循环次数,则实际的循环次数取最小值。3.1.4 数组函数数组函数LabVIEW中用于处理数组的节点位于FunctionsAll FunctionsArray子模板上,如图3-8所示。下面详细介绍各个节点的用法。第3章 数组、簇和波形图3-8 Array子模板第3章 数组、簇和波形1A
8、rray SizeArray Size节点的图标如图3-9所示,节点的输入array为一个任意维数的数组,输出size(s)返回各维的长度。若输入一维数组,则输出为一个整数值;若输入多维数组,则输出为一个一维数组,每个元素对应输入数组中每一维的长度。【例3.1】求一维数组、二维数组和三维数组的长度。VI的前面板和程序框图如图3-10所示。第3章 数组、簇和波形图3-9 Array Size节点的图标第3章 数组、簇和波形图3-10 例3.1的前面板和程序框图第3章 数组、簇和波形2Index ArrayIndex Array节点的图标如图3-11所示,n-dimension array是任意类
9、型的n维数组,接入数组后会自动生成n个索引端口,这n个索引端口是一组。以二维数组为例,使用定位工具拖拽节点的下边沿增加新的输入索引端子组,每组索引端子对应一个输出端口,如图3-12所示。输出element or subarray返回索引值对应的标量或数组。如果索引端口没有输入,则输出端口将按照从上到下的顺序依次输出数组的元素;对于二维数组,将从上到下依次按行输出。仔细观察索引端口组,注意到,默认情况下除了第一个索引端口以外的其他索引端口都被禁用,禁用的端口由一个空心小方框表示,未禁用的索引端口由实心小方框表示。当对索引端口输入数据时,禁用状态自动解除。第3章 数组、簇和波形图3-11 Inde
10、x Array节点的图标第3章 数组、簇和波形图3-12 添加索引端口第3章 数组、簇和波形【例3.2】从一个二维数组中取出某一行的所有元素、某一列的所有元素和某一个元素。VI的前面板和程序框图如图3-13所示。输入一个二维数组,通过拖动节点的下边沿,建立了3组索引端口,利用第一组索引端口取出某一行的所有元素,利用第二组索引端口取出某一列的所有元素,利用第三组索引端口取出某一元素。3Replace Array SubsetReplace Array Subset节点的图标如图3-14所示,n-dimension array是任意类型的n维数组,接入数组后会自动生成n个索引端口,完成的功能是用n
11、ew element/subarray的内容替换索引值的索引目标,可以是某一位置的元素或子数组。输出端口output array为替换后的新数组。注意,new element/subarray端口的数据类型必须与输入数组的数据类型一致。第3章 数组、簇和波形图3-13 例3.2的前面板和程序框图第3章 数组、簇和波形图3-14 Replace Array Subset节点的图标 第3章 数组、簇和波形【例3.3】替换二维数组中的某一列元素。VI的前面板和程序框图如图3-15所示。4Insert Into Array Insert Into Array节点的图标如图3-16所示,n-dim ar
12、ray是任意类型的n维数组,接入数组后会自动生成n个索引端口,完成的功能是在index指定的位置插入n or n-1 dim array的内容。注意,对每组n个索引端口只能连接一个。【例3.4】在二维数组中插入一行元素。VI的前面板和程序框图如图3-17所示。第3章 数组、簇和波形图3-15 例3.3的前面板和程序框图第3章 数组、簇和波形图3-16 Insert Into Array节点的图标第3章 数组、簇和波形图3-17 例3.4的前面板和程序框图第3章 数组、簇和波形5Delete From Array Delete From Array节点的图标如图3-18所示,其功能是从n-dim
13、 array输入的数组中删除指定的元素或者子数组。删除的起始位置由index端口决定,删除的长度由length端口决定。array w/subset deleted端口输出删除元素后的新数组,deleted portion端口输出被删除的元素。索引端口的数目由输入数组的维数决定,而且只能有一个索引端口接入数值。【例3.5】在一个三维数组中删除指定列数的元素。VI的前面板和程序框图如图3-19所示,从每一页的第一列开始,删除一列,前面板显示的是删除第一列后,第一页的变化情况。第3章 数组、簇和波形图3-18 Delete From Array节点的图标 第3章 数组、簇和波形图3-19 例3.5
14、的前面板和程序框图第3章 数组、簇和波形6Initialize Array Initialize Array节点的图标如图3-20所示,其功能是初始化数组,数组的维数由dimension size端口的个数决定,每一维的长度由dimension size确定,数组中的元素全部等于element端口输入的值。将节点放置在框图上时,只有一个dimension size端口,通过拖动节点的下边沿,或在dimension size端口的快捷菜单中选择Add Dimension,可以创建多维数组,如图3-21所示。【例3.6】初始化一个二维数组。VI的前面板和程序框图如图3-22所示。第3章 数组、簇和
15、波形图3-20 Initialize Array节点的图标第3章 数组、簇和波形图3-21 添加dimension size端口 第3章 数组、簇和波形图3-22 例3.6的前面板和程序框图第3章 数组、簇和波形7Build Array Build Array节点的图标如图3-23所示,其功能是合并多个数组或给数组添加元素,形成一个新数组,因此节点可以接收数组和单值元素。该节点的两种组合方式取决于开关选项Concatenate Inputs(连接输入)。当Concatenate Inputs被选中时,输出appended array是将所有输入连接,其维数与所有输入参数中的最高维数相同。当Co
16、ncatenate Inputs被关闭时,所有输入参数的维数必须相等,输出比输入高一维。最初在框图上放置的节点只有一个输入端口,通过快捷菜单选择Add Input或使用定位工具拖拽节点的下边沿可以增加输入端口。第3章 数组、簇和波形图3-23 Build Array节点的图标第3章 数组、簇和波形【例3.7】利用Build Array节点创建数组。VI的前面板和程序框图如图3-24所示。图3-24(a)中的输入参数全是标量,输出是一维数组,而且Concatenate Inputs选项自动关闭不能打开;图3-24(b)和图3-24(c)都是输入两个一维数组,但结果不一样,因为图3-24(c)将连
17、接输入功能打开;图3-24(d)输入两个数组的维数不同,Concatenate Inputs选项被打开而且不能关闭,输出是二维数组。第3章 数组、簇和波形图3-24 例3.7的前面板和程序框图第3章 数组、簇和波形8Array SubsetArray Subset节点的图标如图3-25所示,其功能是从输入数组array中取出由index和length端口指定的元素。index端口和length端口成对出现,而且对数与输入数组的维数相同。输出subarray与输入数组的维数相同。【例3.8】从二维数组中取出部分元素。VI的前面板和程序框图如图3-26所示。9Rotate 1D Array Rot
18、ate 1D Array节点的图标如图3-27所示,其功能是将输入的一维数组元素循环右移n个位置,即将最后n个元素移至最前面。【例3.9】将一维数组循环左移3位和右移3位。VI的前面板和程序框图如图3-28所示。当输入端口n为负值时,左移n位。第3章 数组、簇和波形图3-26 例3.8的前面板和程序框图 第3章 数组、簇和波形图3-27 Rotate 1D Array节点的图标第3章 数组、簇和波形图3-28 例3.9的前面板和程序框图第3章 数组、簇和波形10Reverse 1D Array Reverse 1D Array节点的图标如图3-29所示,其功能是将输入的一维数组倒序输出,输入数
19、组可以是任意类型的数组。【例3.10】将一维数组倒序输出。VI的前面板和程序框图如图3-30所示。11Search 1D ArraySearch 1D Array节点的图标如图3-31所示,其功能是从输入的一维数组中检索值为element的元素,由端口start index确定检索的初始位置。如果找到该元素,则返回该元素的索引值,否则返回-1。【例3.11】在一维数组中检索一个字母的位置。VI的前面板和程序框图如图3-32所示。第3章 数组、簇和波形图3-29 Reverse 1D Array节点的图标第3章 数组、簇和波形图3-30 例3.10的前面板和程序框图第3章 数组、簇和波形图3-3
20、1 Search 1D Array节点的图标第3章 数组、簇和波形图3-32 例3.11的前面板和程序框图 第3章 数组、簇和波形12Split 1D ArraySplit 1D Array节点的图标如图3-33所示,其功能是将输入的一维数组array从index设置的索引处分成两个一维数组。当index的值小于等于0时,first subarray输出为空;当index的值大于数组长度时,second subarray输出为空。【例3.12】将一维数组分成两部分。VI的前面板和程序框图如图3-34所示。13Sort 1D ArraySort 1D Array节点的图标如图3-35所示,其功能
21、是将输入的一维数组按照升序排列。另外,该节点与Reverse 1D Array节点组合可以实现对一维数组的降序排列。【例3.13】将一维数组按照升序和降序分别排列。VI的前面板和程序框图如图3-36所示。第3章 数组、簇和波形图3-33 Split 1D Array节点的图标 第3章 数组、簇和波形图3-34 例3.12的前面板和程序框图 第3章 数组、簇和波形图3-35 Sort 1D Array节点的图标第3章 数组、簇和波形图3-36 例3.13的前面板和程序框图第3章 数组、簇和波形14Array Max&MinArray Max&Min节点的图标如图3-37所示,其功能是返回输入任意
22、维数组的最大值和最小值,以及它们在数组中的位置。当数组中有多个元素同为最大值或同为最小值时,只输出第一个值所在的位置。【例3.14】查找数组中的最大值和最小值。VI的前面板和程序框图如图3-38所示。15Transpose 2D Array Transpose 2D Array节点的图标如图3-39所示,其功能是将输入的二位数组转置,即求矩阵的转置矩阵。第3章 数组、簇和波形图3-37 Array Max&Min节点的图标第3章 数组、簇和波形图3-38 例3.14的前面板和程序框图第3章 数组、簇和波形图3-39 Transpose 2D Array节点的图标第3章 数组、簇和波形16Int
23、erpolate 1D Array Interpolate 1D Array节点的图标如图3-40所示,其功能是进行线性插值。【例3.15】在一维数组中进行线性插值。VI的前面板和程序框图如图3-41所示。17Threshold 1D Array Threshold 1D Array节点的图标如图3-42所示,其功能是求一维数组的门限值,是线性插值的逆过程。第3章 数组、簇和波形图3-40 Interpolate 1D Array节点的图标第3章 数组、簇和波形图3-41 例3.15的前面板和程序框图第3章 数组、簇和波形图3-42 Threshold 1D Array节点的图标第3章 数组、
24、簇和波形18Interleave 1D Arrays Interleave 1D Arrays节点的图标如图3-43所示,其功能是将输入的一维数组进行插接。首先将所有一维数组的第0个元素按顺序放在输出数组中;再将所有一维数组的第1个元素按顺序放在输出数组中,依次类推。如果输入数组的长度不同,则以最小长度为准对其他数组进行截取。【例3.16】将3个不同长度的一维数组插接。VI的前面板和程序框图如图3-44所示。第3章 数组、簇和波形图3-43 Interleave 1D Arrays节点的图标第3章 数组、簇和波形图3-44 例3.16的前面板和程序框图第3章 数组、簇和波形19Decimate
25、 1D ArrayDecimate 1D Array节点的图标如图3-45所示,其实现的功能与Interleave 1D Arrays节点相反。【例3.17】将一个一维数组分解成多个一维数组。VI的前面板和程序框图如图3-46所示。20Reshape ArrayReshape Array节点的图标如图3-47所示,其功能是将n维数组转化成m维数组数出。输出数组的维数由dimension size端口的个数决定。【例3.18】将一个二维数组转化为三维数组。VI的前面板和程序框图如图3-48所示。第3章 数组、簇和波形图3-45 Decimate 1D Array节点的图标第3章 数组、簇和波形图
26、3-46 例3.17的前面板和程序框图 第3章 数组、簇和波形图3-47 Reshape Array节点的图标第3章 数组、簇和波形图3-48 例3.18的前面板和程序框图 第3章 数组、簇和波形3.1.5 多态性多态性多态性(Polymorphism)是LabVIEW的一些函数(如加、减、乘和除)接受不同维数和类型输入的能力。具有这种能力的函数是多态函数,图3-49显示了乘函数的一些多态性的不同组合。图3-48中,第一个组合是两个标量相乘;第二个组合是一个标量和一个一维数组相乘;第三个组合是两个长度不同的一维数组相乘,相乘后的数组维数取较短的一个数组的长度。第3章 数组、簇和波形图3-49
27、乘函数的多态性组合第3章 数组、簇和波形3.2 簇簇簇(cluster)是一种类似数组的数据结构,也是复合数据类型,用于分组数据。簇与数组有两个重要区别,一是簇可以包含不同的数据类型,而数据组只能包含相同的数据类型;另一个区别是簇具有固定的大小,在运行时不能添加元素,而数组的长度在运行时可以自由改变。簇和数组的相似之处是二者都是由控件和指示器组成的。3.2.1 簇的创建簇的创建簇的创建和数组的创建类似,首先建立框架,然后向框架中添加元素。簇控制器和指示器的框架位于ControlsAll ControlsArray&Cluster子模板上,簇常量框架位于FunctionsAll Function
28、sCluster子模板上,如图3-50所示。第3章 数组、簇和波形图3-50 簇框架在Controls和Functions模板上的位置第3章 数组、簇和波形簇的创建过程如图3-51所示。需要注意的是,向簇框架中添加元素时不能同时包含控制器和指示器。在簇框架上弹出的快捷菜单中,AutoSizing中的3个选项可以调整簇元素的布局。其中,Size to Fit选项调整簇框架的大小,以适合所包含的所有元素;Arrange Horizontally选项水平压缩排列所有元素;Arrange Vertically选项垂直压缩排列所有元素。3.2.2 簇的顺序簇的顺序簇元素按照放入簇框架中的先后顺序排序,并
29、且依次标记为0、1、2、。当从簇中删除元素时,剩余元素的顺序将自动调整。改变簇中已有元素排列顺序的方法是在簇边缘弹出的快捷菜单中选择Record Controls in Cluster,这样进入簇元素顺序的编辑状态,如图3-52所示。第3章 数组、簇和波形图3-51 簇的创建过程 第3章 数组、簇和波形图3-52 簇元素顺序编辑状态第3章 数组、簇和波形从上簇元素顺序编辑状态图中看到,每个元素右下角出现两个序号,左边黑底白字的是新序号,右边是修改之前的旧序号。在改变顺序之前,左边和右边的数字是相等的。最初工具栏提示Click to set to 0,这时单簇元素之一将把该元素设置为第0个元素。
30、此时,工具栏信息变成Click to set to 1,再单击某个元素将其设置为第1个元素,依次设置完毕后,单击工具栏中的OK按钮确认修改,也可以单击X按钮恢复到没有改变顺序之前的状态。簇元素的顺序是比较重要的,通过图3-53所示的例子可以看到。当改变簇元素的顺序后,相应的也要改变簇指示器,否则连线是无效的,如图3-53(b)所示。第3章 数组、簇和波形图3-53 簇元素顺序的重要性第3章 数组、簇和波形3.2.3 簇的功能函数簇的功能函数簇的功能函数位于FunctionsAll FunctionsCluster子模板上,如图3-54所示,其中最重要的是Unbundle和Bundle函数。1U
31、nbundleUnbundle节点的图标如图3-55所示,其功能是将输入簇cluster进行解包以提取簇中的单个元素,输出元素按照簇顺序从上到下排列。框图上放置的Unbundle节点只有两个输出端口,接入cluster后,输出端口数会自动调整为cluster所包含的元素的个数。【例3.19】将一个簇中的元素分别取出。VI的前面板和程序框图如图3-56所示。接入簇后,Unbundle函数自动调整输出端口的数目和数据类型,使其与输入簇所含元素一致。第3章 数组、簇和波形图3-54 Cluster子模板第3章 数组、簇和波形图3-55 Unbundle节点的图标第3章 数组、簇和波形图3-56 例3
32、.19的前面板和程序框图第3章 数组、簇和波形2BundleBundle节点的图标如图3-57所示,当不接入输入参数cluster时,该节点将element0n-1打包生成含有n个元素的新簇,接入输入端口的顺序决定了生成新簇中元素的顺序。当接入参数cluster后,element端口的数目自动调整为与cluster所含元素数相同,节点的功能是替换cluster中的指定元素。注意,接入元素的顺序必须与cluster中所含元素的顺序按照类型匹配。刚在框图上放置的Bundle节点只有两个输入端口,用鼠标拖动下边沿,或者在节点的快捷菜单中选择Add Input可以增加端口,如图3-58所示。第3章 数
33、组、簇和波形图3-57 Bundle节点的图标第3章 数组、簇和波形图3-58 增加element端口 第3章 数组、簇和波形【例3.20】将不同数据类型的元素组成一个新簇;替换簇中的某些元素。VI的前面板和程序框图如图3-59所示。在第2个例子中看到,没有接入替换元素的原簇元素没有改变。3Unbundle By NameUnbundle By Name节点的图标如图3-60所示,其功能是将cluster of named输入簇中的元素按标签解包,只能获得有标签元素的值。当接入簇时,在输出端口右键弹出的快捷菜单中的Select Item子菜单中可以选择元素。【例3.21】Unbundle By
34、 Name节点应用举例。VI的前面板和程序框图如图3-61所示。第3章 数组、簇和波形图3-59 例3.20的前面板和程序框图第3章 数组、簇和波形图3-60 Unbundle By Name节点的图标第3章 数组、簇和波形图3-61 例3.21的前面板和程序框图 第3章 数组、簇和波形4Bundle By NameBundle By Name节点的图标如图3-62所示,input cluster必须接入参数,而且至少有一个元素有标签。节点的功能是按照输入端口的标签替换input cluster中的元素。由于该节点是按照元素标签打包的,所以name端口不需要有明确的顺序,只要按照在name端口
35、(Operate Value状态左键单击)弹出的菜单或右键Select Istm子菜单中所选的元素标签接入数据即可,如图3-63所示。【例3.22】Bundle By Name节点应用举例。VI的前面板和程序框图如图3-64所示。第3章 数组、簇和波形图3-62 Bundle By Name节点的图标 第3章 数组、簇和波形图3-63 选择name端口的数据第3章 数组、簇和波形图3-64 例3.22的前面板和程序框图第3章 数组、簇和波形5Build Cluster ArrayBuild Cluster Array节点的图标如图3-65所示,该节点的功能是先将component端口输入的n个
36、参数打包成簇,然后组成元素为簇的一维数组。输入参数可以都是数组,但要求维数必须相等。6Index&Bundle Cluster ArrayIndex&Bundle Cluster Array节点的图标如图3-66所示,输入参数为任意数据类型的一维数组,将输入数组中的元素按照索引组成簇,然后将这些簇组成一维数组输出。【例3.23】Index&Bundle Cluster Array节点应用举例。VI的前面板和程序框图如图3-67所示。第3章 数组、簇和波形图3-65 Build Cluster Array节点的图标 第3章 数组、簇和波形图3-66 Index&Bundle Cluster Ar
37、ray节点的图标 第3章 数组、簇和波形图3-67 例3.23的前面板和程序框图第3章 数组、簇和波形3.2.4 簇和数组互换簇和数组互换在LabVIEW中,簇和数组的转换很容易,可通过下面两个节点实现。这两个节点位于FunctionsAll FunctionsCluster子模板上。1Cluster To ArrayCluster To Array节点的图标如图3-68所示,输入簇cluster的所有元素必须是相同数据类型,该节点将所有簇元素按照顺序组合成一维数组输出。2Array To ClusterArray To Cluster节点的图标如图3-69所示,其功能与Cluster To
38、Array节点的功能相反,即将输入数组中的元素按顺序打包成簇输出。第3章 数组、簇和波形图3-68 Cluster To Array节点的图标第3章 数组、簇和波形图3-69 Array To Cluster节点的图标 第3章 数组、簇和波形3.3 波波 形形在信号采集、处理和分析过程中经常使用波形数据类型。波形的结构和簇非常相似,是一种特殊类型的簇。LabVIEW提供了很多功能强大的节点用来处理波形数据。3.3.1 Time Stamp和和VariantTime Stamp是LabVIEW中记录时间的专用数据类型。Time Stamp控制器和指示器位于ControlsAll Controls
39、Numeric子模板上,Time Stamp Constant位于FunctionsAll FunctionsNumeric子模板上,如图3-70所示。Time Stamp的初始值是0。在Time Stamp对象弹出的快捷菜单中选择Data OperationSet Time and Data,打开对话框,可以在此修改日期和时间。第3章 数组、簇和波形图3-70 Time Stamp控件和常量第3章 数组、簇和波形Variant是一种特殊的数据类型,任何数据类型都可以转化为Variant类型,然后为其添加属性。Variant类型的操作节点都在FunctionsAll FunctionsComm
40、unicationDataSocketVariant子模板上,如图3-71所示,节点依次为:To Variant、Variant To Data、Variant To Flattened String、Flattened String To Variant、Get Variant Attribute、Set Variant Attribute、Delete Variant Attribute。第3章 数组、簇和波形图3-71 Variant操作节点第3章 数组、簇和波形3.3.2 波形数据的组成波形数据的组成LabVIEW中的波形数据有两种:模拟波形数据(Waveform Data)和数字波形
41、数据(Digital Waveform Data)。模拟波形数据用来表示模拟信号的波形;数字波形用来表示二进制数据。通常二者都是由4个元素组成,即起始时间、Delta t、波形数据和属性。(1)起始时间t0。起始时间t0为Time Stamp类型,表示波形数据的时间起点。起始时间可以用来同步多个波形,也可以用来确定两个波形的相对时间。(2)Delta t dt。dt是双精度浮点数,表示一个波形中相邻两个数据点之间的时间间隔,以s为单位。第3章 数组、簇和波形(3)波形数据Y。Y是双精度浮点数组,按照时间先后顺序给出整个波形的所有数据点。(4)属性Attributes。属性包含了波形的数据信息,
42、如波形名称、数据采集设备的名称等。Attributes是Variant数据类型,用于携带任意的属性信息。LabVIEW利用前面板对象Waveform和Digital Waveform来分别存放模拟波形数据和数字波形数据,Waveform和Digital Waveform在ControlsAll ControlsI/O子模板上。默认情况下只显示3个元素(t0、dt和Y),在右键弹出的快捷菜单中选择Visible ItemsAttributes可显示属性,如图3-72所示。第3章 数组、簇和波形图3-72 波形控件第3章 数组、簇和波形3.3.3 波形数据的操作节点波形数据的操作节点波形数据的操作
43、节点位于FunctionsAll FunctionsWaveform子模板上,如图3-73所示。这些节点分为基本波形运算节点、模拟波形数据运算节点、数字波形数据运算节点和波形数据的存取节点4部分。这里主要介绍几个最基本的波形操作节点。1Get Waveform ComponentsGet Waveform Components节点的图标如图3-74所示,其功能是将波形数据的4个组成元素分离。在默认情况下,该节点只有t0端口,拖动图标的上边沿或下边沿,或者在输出端口的右键弹出快捷菜单中选择Add Element,可以增加dt、Y、attributes输出端口。使用Operate Value(操作
44、工具)可以弹出元素选择快捷菜单,或在右键弹出的菜单中选择Select Item,利用该下拉菜单可切换4个元素的输出。第3章 数组、簇和波形图3-73 波形数据操作节点第3章 数组、簇和波形图3-74 Get Waveform Components节点的图标第3章 数组、簇和波形2Build Waveform Build Waveform节点的图标如图3-75所示,该节点的功能是创建一个新的数据波形,或修改已有的波形。默认情况该节点只有waveform和t0输入端口,增加端口和选择输入端口输入元素名称的方法与Get Waveform Components节点相同。如果waveform端口没有接入
45、数据,则节点根据输入参数建立新的波形数据;如果waveform端口接入已有波形数据,则节点根据waveform component端口的输入修改已有波形数据中的值。3Set Waveform AttributeSet Waveform Attribute节点的图标如图3-76所示,其功能是为波形数据添加或修改属性。当由name端口指定的属性名称已经存在时,节点将根据value端口的输入修改这个属性,replaced端口返回True。当name端口指定的属性名称不存在时,节点将为波形数据添加一个新的属性,replaced端口返回False。第3章 数组、簇和波形图3-75 Build Wavef
46、orm节点的图标第3章 数组、簇和波形图3-76 Set Waveform Attribute节点的图标第3章 数组、簇和波形4Get Waveform AttributeGet Waveform Attribute节点的图标如图3-77所示,该节点的功能是获得波形数据属性中的属性名称和对应的属性值。图3-77(a)表示输入端口name没有接入参数的情况,输出端口names返回字符串数组,数组中的每一个元素对应一个属性名称;输出端口values返回一个variant数组,数组中每一个元素对应一个属性值。图3-77(b)表示输入端口name接入属性名称的情况,当节点从波形数据的属性中找到name
47、端口输入的属性名称时,输出found端口返回True,并从value返回该属性值;如果没有找到,则found端口返回False,value返回空。第3章 数组、簇和波形图3-77 Get Waveform Attribute节点的图标(a)(b)第3章 数组、簇和波形习习 题题 33.1 利用For循环自动索引特性创建一个一维数组,并计算数组元素的平方和。3.2 构建一个VI,该VI产生500个随机数并使用波形显示控件显示波形。计算随机数的平均值、最大值、最小值并在前面板显示计算结果。3.3 讨论数组和簇的相同点和不同点。3.4 建立一个簇,包含个人姓名、年龄、民族、专业等信息,并使用Unbundle节点将各个元素分别取出。