实验3 数据类型:数组、簇
1 实验目的
(1)学会使用LabVIEW中的索引数组;
(2)学会使用LabVIEW中的簇;
2 实验任务
(1)建立一个能数组索引的VI; (2)建立一个使用的VI;
3 实验步骤
练习 3-1 创建一个自动索引的数组
目的:使用 For 循环的自动索引功能创建数组,并用一个图形(Graph)显示该数组。
图3-1 练习3-1的面板 前面板:
1.打开一个新的前面板。
2.选择ControlsoArray & Cluster,在前面板中放置一个数组。设置它的标签为Waveform Array。 3.选择ControlsoNumeric,在数组框中插入一个数字式显示对象。如右图所示。它用于显示数组的内容。 4.选择ControlsoGraph,在前面板中放置一个波形图。设置它的标签为Waveform Graph。 5.隐藏图例和模板。
6.用鼠标右键单击图形,并在快捷菜单中取消选中 Y ScaleoAutoscale Y,禁止自动坐标功能。
7.使用文本工具,把Y轴的范围改为-0.5到1.5。
流程图
1. 按照下图创建流程图。
16
2.
图3-2 练习3-1的流程图
由FunctionsoSelect a VI?寻找LabVIEW\\activity目录下的Generate Waveform VI ,它的作用是返回波形中的某一点。这个VI需要输入一个索引,我们将循环周期连接到这个输入。
注意Generate Waveform VI连出来的连线在循环边界变成一个数组时会变粗,正是在这个边界处形成了一维数组。
For循环会自动累计边界内的数组。这种功能叫做自动索引。在这个例子中,连接到循环计数输入的数值常数令For循环创建了一个由100个元素组成的数组。 Bundle函数( Functionso Cluster)——将图块中的各个组件组合成一个簇,在正确连接以前需要改变该函数的图标的大小。将移位工具放在图标的左下角。变形工具会变成如左图所示,拖曳鼠标直到出现第三个输入端子。 数值常数( FunctionsoNumeric)——三个数值常数用于设置For循环执行的周期数N=100,初始X=0和delta X=1。
从前面板执行该VI。该VI将把自动索引后的波形图数组显示在波形图中。
把 X的delta值改为0.5,X的初始值改为20。再次执行该VI。注意,波形图现在同样显示100个点,而每个点的初始值为20,X的delta值为0.5(见X轴)。 只需在显示器中输入元素的索引号就可以查看波形数组中的任何元素。如果输入的数比数组的元素个数大,那么显示器将变暗,表示您没有为该元素设置索引。
如果需要一次查看多个元素,可以通过改变数组显示对象的大小来实现。 把定位工具放置在数组框的右下角。工具将变成右图所示的变形工
具。当工具变形时,用鼠标拖曳数组的右边或者下边。数组现在就可以按照元素索引的上升顺序显示多个素,以某个与指定索引对应的元素开始,如下图所示。
3. 4. 5.
6. 7. 8. 9.
图3-3 练习3-1中多个数组元素的同时观察
在前面的流程图中,您为波形图指定了初始的X值和delta X值。默认的X初始值是0,delta X 值是1。这样,也可以把波形数组直接连接到波形图端子, 而无需指定初始的X值和delta X值,如图3-4所示。
17
图3-4 练习3-1使用默认X及Delta X时简化后的流程图
10. 按上图删除 Bundle功能函数和它所连接的常数对象。方法是用移位工具选择该功能函数和连接的常数对象,按下
2 多图区图形
可以创建含有多条曲线的图形,方法是创建一个数组,用它来汇集传给单图区图形的类型的数据元素。
图3-5 练习3-1多图区图形的流程图
12. 按照上图创建流程图。
* 正弦函数(FunctionsoNumericoTrigonometric)——在这里,它用于在For循环中创建一个由数据点组成的数组,表示一个正弦波周期。
* Pi常数(FunctionsoNumericoAdditional Numeric Constants) * Build Array (FunctionsoArray)——在这里,它用于创建合适的数据结构(一个二维数组),在波形图中绘制两条曲线。。用移位工具拖曳边角可以增大该函数的面积,创建两个输入端子。
13.返回前面板,执行该 VI。注意同一个波形中的两个图区。默认情况下,它们的
X初始值都是0,delta X初始值都是1。下图是该程序的运行结果(前面板未改动)。
14.把该VI保存为LabVIEW\\Activity 目录中的Graph Waveform Arrays.vi。 15. 可以修改图形中的某个图区的外观。方法是,用鼠标右键单击这个图形,再从
弹出菜单选择对应的图例。
18
Waveform Graph1.5Array0-0.091.0Plot 00.50.0-0.50102030405060708090100 图3-6 练习3-1多图区图形的面板显示
练习 3-1 结束。
练习 3-2 对输入数组使用自动索引功能
目的:打开并执行一个VI,它将在一个For循环中使用自动索引功能处理一个数组。
1.选择FileoOpen?,打开Examples\\General\\arrays.llb中的Separate Array Values VI 。
2.打开流程图。下面的示意图显示的是在TRUE和FALSE时的情况。
图3-7 练习3-2的流程图
注意,Input Array引出的连线与For循环外的粗线不同,表示这是一个数组,而循环内部的细线则表示这是一个数组元素。 数组元素在每个循环期间将自动编号。
3. 用自动索引功能设置 For 循环的计数器
注意,计数器端子还没有连线。当您对某个进入For循环的数组使用自动索引功能时,循环就将根据数组的大小执行相应的次数,这样就无需连接某个值到计数器的端口。如果对一个以上的数组使用自动索引功能,或者在使用自动索引功能之外还需要设置计数器时,实
19
际的循环次数将是其中最小的数。
4.执行该VI。在输入的八个数中,可以看到4个属于正数数组,另外4个属于负数数组。
5.从流程图中将一个值为5的常数对象连接到For 循环的计数器端子。执行该 VI。可以看到尽管输入数组仍然有八个元素,但是3个位于正数数组,另外2个位于负数数组。这说明,如果设置了N并开启了自动索引功能,那么实际循环的次数将取较小的数。 6.关闭该VI,不要保存任何修改。
注:练习 3-2的算法说明
下面是一段伪代码,解释上面的算法,假定输入数组为A(已赋值),B(正数)、C(负数)。Sbr 、Scr分别是与B数组、C数组对应的右寄存器数组,Sbl 、Scl分别是与B数组、C数组对应的左寄存器数组,size运算为测数组实际大小,ins运算为将一个数插入数组中最左边的空位。 B=0 C=0 K=size(A(.)) For i=0 to k-1 p=A(i) if p>=0 then Ins p,Sbr Else Ins p,Scr end if Sbl=Sbr Scl=Scr Next i B=Sbr C=Scr Print B Print C End
练习 3-2 结束。
初始化 测A数组大小 取第I个元素值 将p值插入右寄存器 右寄存器值送给左寄存器 右寄存器值送到正数组 显示 练习 3-3 使用创建数组功能函数
目的:使用创建数组函数,把一些元素和输出组织成一个更大的数组。
20