2015年LabVIEW实验指导书

更新时间:2023-03-08 05:15:18 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《虚拟仪器设计》

实验指导书

机械工程学院

机械电子系

2015年3月

1

目录

实验1 LabVIEW入门 ............................................................................ 3 实验2 程序结构 ..................................................................................... 7 实验3 数据类型:数组、簇 ............................................................... 16 实验4 图形显示 ..................................................................................... 23 实验5 字符串和文件I/O ..................................................................... 25 实验6 信号处理与分析 ......................................................................... 31 实验7 VI程序的创建与结构控制 ......................................................... 36 实验8 LabVIEW网络程序设计 ............................................................. 41 实验9 LabVIEW串口数据采集实验 ..................................................... 46 实验10 基于声卡的数据采集系统 ....................................................... 50

2

实验1 LabVIEW入门

1 实验目的

(1)初步学会使用LabVIEW;

(2)掌握创建自己的VI。

2 实验任务

(1)

建立一个测量温度和容积的VI;

(2) 为 VI创建图标和联接器; (3) 使用LabvIEW图表模式。

3 实验步骤

练习1-1:

建立一个测量温度和容积的VI,其中须调用一个仿真测量温度和容积的传感器子VI。步骤如下:

1. 选择 File?New,打开一个新的前面板窗口。 2. 从 Controls?Numeric 中选择 Tank放到前面板中。 3. 在标签文本框中输入“容积” ,然后在前面板中的其他任何位置单击一下。 4. 把容器显示对象的显示范围设置为0.0到1000.0。

a. 使用文本编辑工具(Text Edit Tool),双击容器坐标的10.0 标度,使它高亮显示。

b. 在坐标中输入 1000,再在前面板中的其他任何地方单击一下。 这时0.0到1000.0之间的增量将被自动显示。 5. 在容器旁配数据显示。

将鼠标移到容器上,点右键,在出现的快速菜单中选Visible Iterms?Digital Display即可。

6.从Controls?Numeric 中选择一个温度计,将它放到前面板中。设置其标签为“温

度”,显示范围为0到100,同时配数字显示。可得到如下的前面板图。

3

图1-1 练习1-1的前面板图

7. WindowsoShow Diagram 打开流程图窗口。从功能模板中选择对象,将它们放到流

程图上组成下图(其中的标注是后加的)。

乘法函数 进程监视器 随机数发生器 图1-2 练习1-1的流程图

该流程图中新增的对象有两个乘法器、两个数值常数、一个随机数发生器、一个进程监视器,温度和容积对象是由前棉板的设置自动带出来的。

a. 乘法器和随机数发生器由Functions?Numeric中拖出,尽管数值常数也可以这

样得到,但是建议使用c 中的方法更好些。

b. 进程监视器(Process Monitor)不是一个函数,而是以子VI的方式提供的,它

存放在LabVIEW\\Activity目录中,调用它的方法是在Functions?Select a VI下打开Process Monitor,然后在流程图上点击一下,就可以出现它的图标。 注意:LabVIEW目录一般在Program Files\\National Instruments\\目录下。 8.用连线工具

将各对象按规定连接。a中的遗留问题创建数值常数对象的另一

数值常数

种方法是在连线时一起完成。具体方法是:用连线工具在某个功能函数或VI的连线端子上单击鼠标右键,再从弹出的菜单中选择 Create Constant,就可以创建一个具有正确的数据格式的数值常数对象。

9.选择 FileoSave, 把该VI 保存为 LabVIEW\\Activity 目录中的 Temp & Vol.vi。

在前面板中,单击Run(运行)按钮,运行该 VI。注意电压和温度的数值都显示在前面板中。

10.选择FileoClose,关闭该 VI 。 练习 1-1 结束

练习 1-2 为 VI创建图标和联接器

1.打开 LabVIEW\\Activity 目录中的Temp & Vol.vi,这是练习1-1做的程序。 2.在前面板中,用鼠标右键单击窗口右上角的图标,在快捷菜单中选择 Edit Icon….,

也可以双击图标激活图标编辑器。注意只能在前面板中编辑图标和联接器。 3.删除默认图标。使用Select Tool(矩形框),单击并拖动想要删除的部分,按下

。也可以通过双击工具框中的阴影矩形删除图标。

4.用 Pencil Tool (铅笔工具)绘制一个温度计。

5.用 Text Tool(文本工具)创建文本。得到图标将如下图所示。

4

图1-3 编辑后的图标编辑器窗口

6.单击OK,关闭编辑器。新创建的图标就显示在屏幕右上角的图标窗口中。 7.用鼠标右键单击前面板中的图标窗口,在快捷菜单中选择Show

Connector,设置联接器端子连接模式。在默认情况下,LabVIEW 会根据前面板中的控制对象和显示对象的数目确定联接器的端子连接模式。因为前面板中有两个对象,所以联接器有两个端子,如左图所示。用鼠标右键单击联接器窗口,在快捷菜单中选择Rotate 90 Degrees(旋转90度),注意联接器窗口的变化,如左图所示。

8.将端子连接到温度计和电压计:

a. 点击联接器上部端子。光标自动变成连线工具,同时端子变成黑色。

b. 单击温度显示对象。一个移动的虚线框把它包围起来,选中的端子的颜色变为与控制/显示对象的数据类型一致的颜色。

如果单击前面板中的任何空白区域以后,虚线消失,选中的端子变暗,这表示您已经成功地把显示对象和上部端子连接起来。如果端子是白色,则表示没有连接成功。

c. 重复步骤a 和 b,把底部的端子和容积计连接起来。 d. 用鼠标右键单击联接器,在快捷菜单中选择Show Icon?. 9.选择FileoSave ,保存该 VI。

这样这个 VI 就完成了,并也可以作为子 VI 被其他的VI调用。子VI 的图标在主 VI 的流程图中代表它。VI 的联接器(含有两个端子)输出温度和容积。

练习 1-2 结束

练习 1-3 使用三种图表模式

目的:查看 VI 分别在三种模式下执行时图表的显示。

1.建立前面板及流程图如下

该程序中利用一个循环产生连续的sin(i)函数值,并及时地在chart图表上显示出来,现在前面板上的chart是一个strip,这是一个坐标式显示器,与纸带式图表记录

5

器相似。每接受一个新数据,新数据就将显示在右侧,而原有数据移动到左侧

图1-4 图表的例子

2.用鼠标选中chart,点击右键,可在快速菜单中选择AdvancedoUpdate Mode子菜单。可以选择更换其他两种更新模式。

示波器模式是一个返回式的显示器,与示波器类似。每接受一个新数据时,它就把新数据绘制在原有数据的右侧。当数据曲线到达显示区的右边缘时,VI 会删除全部图形,从左边缘重新开始绘制曲线。示波器模式显然要快于条状图模式,因为它不会因为滚动产生溢出。

扫描模式更接近于示波器模式,但是当数据曲线到达显示区的右边时,不会变成空白,而是会出现一个移动的垂线,标记新数据的开始,并当VI添加新数据时穿过整个显示区。

练习 1-3 结束。

4 实验报告

写出以上三个练习的中的步骤要点,附上运行时的前后面版图形。

6

实验2 程序结构

1 实验目的

(1)学会使用LabVIEW中的While循环;

(2)学会使用LabVIEW中的移位寄存器; (3)学会使用LabVIEW中的For循环; (4)学会使用LabVIEW中的CASE结构; (5)学会使用LabVIEW中的顺序结构; (6)学会使用LabVIEW中的公式节点。

2 实验任务

(1)建立一个While循环的VI; (2)建立一个移位寄存器的VI; (3)建立一个For循环的VI; (4)建立一个CASE结构的VI; (5)建立一个顺序结构的VI; (6)建立一个有公式节点的VI。

3 实验步骤

练习 2-1 使用While循环和图表

目的:用 While 循环和图表获得数据,并实时显示。

创建一个可以产生并在图表中显示随机数的VI。 前面板有一个控制旋钮可在0到10秒之间调节循环时间,还有一个开关可以中止VI的运行。学习怎样改变开关的动作属性,以便不用每次运行VI时都要打开开关。操作步骤如下:

前面板

?o?úD?1?1.00.80.60.40.20.0010230.010.02.0-o?2ó?ê±4.06.08.0?????a??ONOFF

图2-1 练习2-1的前面板

1. 选择FileoNew,打开一个新的前面板。 2. 选择ControlsoBoolean,在前面板中放置一个开关。设置开关的标签为控制开关。

7

3. 使用标签工具创建 ON 和 OFF 的标签,放置于开关旁。 4. 选中ControlsoGraph,在前面板中放置一个波形图(是chart,而不是graph)。

设置它的标签为随机信号。这个图表用于实时显示随机数。 5. 把图表的纵坐标改为0.0 到 1.0。方法是用标签工具把最大值从10.0改为1.0。 6. 选择ControlsoNumeric,在前面板中放置一个旋钮。设置旋钮的标签为循环延时。

这个旋钮用于控制While 循环的循环时间。 流程图

7. 开流程图,按照下图创建流程图。

图2-2 练习2-1的流程图

a) 从 FunctionsoStructures 中选择 While 循环,把它放置在流程图中。将其拖至适当大小,将相关对象移到循环圈内。

b) 从 Functionso Numeric中选择随机数(0-1)功能函数放到循环内。 c) 在循环中设置Wait Until Next ms Multiple函数 (FunctionsoTime &

Dialog),该函数的时间单位是毫秒,按目前面板旋钮的标度,可将每次执行时间延迟0到10毫秒。

d) 照上面所示的流程图连线,把随机数功能函数和随机信号图表输入端子连

接起来,并把启动开关和While 循环的条件端子连接。

8. 返回前面板,调用操作工具后单击垂直开关将它打开。 9. 把该 VI 保存为 LabVIEW\\Activity目录中的Random Signal.vi。

10. 执行该 VI。While循环的执行次数是不确定的,只要设置的条件为真,循环

程序就会持续运行。在这个例子中,只要开关打开(TRUE),框图程序就会一直产生随机数,并将其在图表中显示。

11. 单击垂直开关,中止该VI。关闭开关这个动作会给循环条件端子发送一个

FALSE值,从而中止循环。

12. 用鼠标右键单击图表,选择Data OperationsoClear Chart,清除显示缓存,

重新设置图表。

练习 2-1结束

附注与说明

布尔开关的机械动作:

布尔开关有6种机械动作属性可供选择。在前面板上用鼠标右键单击开关,在快捷菜单中选择Mechanical Action就可以看到这些可选的动作。LabVIEW还提供了一个范例示范这些动作,它是位于Examples\\General\\Controls\\booleans.llb的Mechanical Action of Booleans.vi。

8

练习 2-2 使用移位寄存器

目的:创建一个可以在图表中显示运行平均数的VI。 前面板

1. 打开一个新的前面板,按照下图所示创建对象。 2. 把波形图表的坐标范围改为0.0到2.0。 3. 在添加竖直坐标之后,用鼠标右键单击它,在快捷菜单中选择Mechanical Action?Latch When Pressed,再选择Operate?Make Current Values Default,把ON状态设置为默认状态。

BooleanONOFFè?±ê?μ£1ONúDoμ?ˉ3÷Latch When Pressed?o?úêy2.01.51.00.50.0050 图2-3 练习2-2的前面板

1. 按下图创建流程图。

图2-4 练习2-2的流程图

2. 在流程图中添加 While 循环(Functions?Structures),创建移位寄存器。

a. 用鼠标右键单击While循环的左边或者右边,在快捷菜单中选择Add Shift Register。 b. 用鼠标右键单击寄存器的左端子,在快捷菜单中选择Add Element,添加一个寄存器。用同样的方法创建第三个元素。 3. Random Number (0–1)函数(Functions?Numeric)——产生0到1之间的某个随机数。 4. Compound Arithmetic 函数(Functions?Numeric)——在本练习中,它将返回两个周期产生的随机数的和。如果要加入其他的输入,只需用右键单击某个输入,从快捷菜单中选择Add Input。 5. 除法函数(Functions?Numeric)——在本练习中,它用于返回最近四个随机数的平均值。

9

6. 数值常数(Functions?Numeric)——在While循环的每个周期,Random Number (0–1)函数将产生一个随机数。VI就将把这个数加入到存储在寄存器中的最近三个数值中。Random Number (0–1)再将结果除以4,就能得到这些数的平均值(当前数加上以前的三个数)。然后再将这个平均值显示在波形图中。 7. Wait Until Next ms Multiple函数 (Functions?Time & Dialog)——它将确保循环的每个周期不会比毫秒输入快。在本练习中,毫秒输入的值是500毫秒。如果用鼠标右键单击图标,从快捷菜单中选择Visible?Label,就可以看到Wait Until Next ms Multiple的标签。

8. 用鼠标右键单击Wait Until Next ms Multiple 功能函数的输入端子,在快捷菜单中选择Create Constant。出现一个数值常数,并自动与功能函数连接。

9. 将Constant设置为500。这样连接到函数的数值常数设置了500毫秒的等待时间。因此循环每半秒执行一次。注意,VI用一个随机数作为移位寄存器的初始值。如果没有设置移位寄存器端子的初始值,它就含有一个默认的数值,或者上次运行结束时的数值,因此开始得到的平均数没有任何意义。 10. 执行该 VI,观察过程。

11. 把该 VI 保存为LabVIEW\\Activity目录下的Random Average.vi。

练习 2-2 结束。

附注:移位寄存器的初值:

上面的练习中对移位寄存器设置了初值0.5。如果不设这个初值,默认的初值是0。在这个例子中,一开始的计算结果是不对的,只有到循环完3次后移位寄存器中的过去值才填满,即第4次循环执行后可以得到正确的结果。

练习 2-3 使用For循环

目的:用For循环和移位寄存器计算一组随机数的最大值。 1.打开一个新的前面板,按照下图创建对象。

a. 将一个数字显示对象放在前面板,设置它的标签为“最大值”。

b.将一个波形图表放在前面板,设置它的标签为“随机数”。将图表的纵坐标范围改为0.0到1.0。

c.在图表的快捷菜单中选择Visible ItemsoScrollbar和Digital Display,并隐藏Plot Legend。

d.用移位工具修改滚动栏的大小。

图2-5 练习2-3的面板和流程图

2.按照上图画流程图。

10

3.在流程图中放置一个For循环(FunctionsoStructures)。

4.在For循环的边框处单击鼠标右键,在快捷菜单中选择Add Shift Register。 5.将下列对象添加到流程图。

1.Random Number (0–1)函数(FunctionsoNumeric)——产生0到1之间的某个随

机数。 2. 数值常数(FunctionsoNumeric)——在这个练习中需要将移位寄存器的初始值设

成0。

3.Max&Min函数(FunctionsoComparison)——输入两个数值,再将它们的最大值输

出到右上角,最小值输出到右下角。这里只需要最大值,只用连接最大值输出。 4. 数值常数(FunctionsoNumeric)——For循环需要知道需要执行的次数。本练习

中是100次。

6.按照上图连接各个端子。 7.运行该VI。

8.将该VI保存为LabVIEW\\Activity 目录下的Calculate Max.vi。

练习 2-3 结束。

练习 2-4 使用 Case结构

目的:创建一个VI以检查一个数值是否为正数。如果它是正的,VI就计算它的平方根,反之则显示出错。

前面板

1. 打开一个新的前面板,并按照下图所示创建对象。控制对象用于输入数值,显示对象用于显示该数值的平方根。 流程图

2.照下图创建流程图。

Number2.00SQRT1.41

11

图2-6 练习2-4的面板和流程图

从FunctionsoStructures中选择一个 Case结构,并放置在在流程图中。Case 结构是一个可以改变大小的方框。先来做Ture的情况,照流程图上半部分构造。

Greater Or Equal To 0? 函数(FunctionsoComparison)——如果输入数值大于或者等于0就会返回一个TRUE值。

Square Root 函数(FunctionsoNumeric)——返回输入数值的平方根。 连好线

点击Case框的选择按钮,转入False情况编程 数值常数(FunctionsoNumeric)——这里用于显示错误的代数值-999.00。

One Button Dialog函数(FunctionsoTime & Dialog)——在这里它用于显示一个对话框,内容是Error...。

字符串常数 (FunctionsoString)——用Edit Text Tools在对话框中输入字符串。 该VI在TRUE或者FALSE情况下都会执行。如果输入的数值大于等于0,VI会执行TRUE Case,返回该数的平方根,否则将会输出-999.00,并显示一个对话框,内容为Error...。

返回前面板,运行该VI。修改标签为Number的数字式控制对象的数值,分别尝试一个正数和负数。注意,当把数字式控制对象的值改为负数时,LabVIEW会显示Case结构的FALSE Case中设置的出错信息。

保存该 VI 到LabVIEW\\Activity 目录中的Square Root.vi。

练习 2-4 结束。

练习 2-5 使用顺序结构

目的:创建一个 VI,计算生成等于某个给定值的随机数所需要的时间。 前面板

1. 打开一个新的前面板,并按照下图所示创建对象。

??·¨êyY?50±?μ°?μ50′D′??êy6¥???ê±??£¨??£?0.00

图2-8 练习2-5的前面板

我们约定数据是0到100范围的整数。当前值用于显示当前产生的随机数。“执行次数”用于显示达到指定值循环执行的次数。匹配时间用来显示达到指定值所用的时间。 流程图

12

i. ii. iii. iv.

v.

vi.

图2-7 练习2-5的流程图(共3帧)

在流程图中放置顺序结构(FunctionsoStructures)。

用鼠标右键单击帧的边框,在快捷菜单中选择Add Frame After,创建一个新帧。重复这个步骤,再创建一个帧。共3桢。 选中第0桢,设置读取初始时间(子)程序. 第0帧的下边框上含有一个小方框,其中有一个箭头。这个方框叫做顺序局部变量,可以在同一个顺序结构中的各个帧之间传递数据。用鼠标右键单击第0帧的底部边框,选择Add Sequence Local,创建顺序局部变量。顺序局部变量显示为一个空的方块。当您将某个功能函数与顺序局部变量相连时,方块中的箭头就会自动显示。 Tick Count (ms) 函数(FunctionsoTime & Dialog)——返回启动到现在的时间(以毫秒为单位)。在这里例子里需要使用两个这个函数。另一个在第2帧中。

按图连好线。转入第1帧。该帧是匹配计算,内含一个循环结构。该图中使用的新函数有:

Round to Nearest函数(FunctionsoNumeric)——在该例中,它用于取0到100之间的随机数到距离最近的整数。

Not Equal?函数(Functionso Comparison)——在该例中,它将随机数和前面板中设置的数相比较,如果两者不相等会返回TRUE值,否则返回FALSE。 Increment函数(FunctionsoNumeric)——在该例中,它将While循环的计数

13

器加1。

vii. 按图连好线。转入第2帧

在第0帧中,Tick Count (ms)功能函数将以毫秒为单位表示当前时间。这个数值被连到顺序局部变量,这样它就可以被后续的帧使用。在第1帧中,只要函数返回的值与指定值不等,VI就会持续执行While循环。在第2帧中,Tick Count (ms)功能函数以毫秒为单位返回新的时间。VI从中减去原来的时间(由第0帧通过顺序局部变量提供)就可以计算出花费的时间。

viii. 返回前面板,在Number to Match控制对象中输入一个数值,执行该VI。 ix. 把该VI保存为LabVIEW\\Activity 目录下Time to Match.vi。

练习 2-5 结束。

练习 2-6 使用公式节点

目的:创建一个VI,它用公式节点计算下列等式:

32

y1 = x – x + 5 y2 = m* x + b x的范围是从0到10。可以对这两个公式使用同一个公式节点,并在同一个图表中显示结果。

前面板

Waveform Graphm30.001000.0800.0600.0b20.00200.00.0012345678910400.0y1y2

图2-9 练习2-6的面板

6. 打开一个新的前面板,按照上图(该图中包含运行结果)创建前面板中的对象。波形图显示对象用于显示等式的图形。该 VI使用两个数字式控制对象来输入m和b的值。 流程图

7. 按照下图创建流程图。

14

图2-9 练习2-6的流程图

在创建某个输入或者输出端子时,必须给它指定一个变量名。这个变量名必须与公式节点中使用的变量名完全相符。

公式节点中,在边框上单击鼠标右键,在快捷菜单中选择Add Input,可以创建三个输入端子。在快捷菜单中选择Add Output,创建输出端子。

x的范围是从0到10(包括10),就必须连接11到计数端子。 Build Array (FunctionsoArray)——在这个例子中,它用于将两个数据构成数组形式提供给一个多曲线的图形中。通过用变形工具拖拉边角就可以创建两个输入端子。 8. 返回前面板,尝试给m和b赋以不同的值再执行该 VI。 9. 把该VI保存为 LabVIEW/Activity 目录下的Equations.vi。 练习 2-6 结束。

4 实验报告

写出以上6个练习的中的步骤要点,附上运行时的前后面版图形。

15

实验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功能函数和它所连接的常数对象。方法是用移位工具选择该功能函数和连接的常数对象,按下。再选择EditoRemove Bad Wires。按照上图完成流程图的连线。 11. 执行该VI。注意初始的X值是0,delta X值是1。

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

图3-8 练习3-3的面板和框图

1.按照图3-8创建一个前面板。

2.从ControlsoNumeric模板中选择一个数字控制对象放置在前面板中,设置它的标签为scalar 1。

3.复制并粘贴该数字显示对象,创建两个新的对象,并分别设置它们的标签为scalar 2和scalar 3。

4.创建一个数字控制对象的数组,设置它的标签为array 1。复制并粘贴它,创建一个新的数组,设置它的标签为array 2。

5.在array 1、scalar 1、 scalar 2、scalar 3、array 2中输入数值1到9。 6.创建流程图。选择FunctionsoArray,在流程图中放置一个Build Array功能函数。用定位工具增大函数额面积,以容纳5个输入。

7.把数组和标量与Build Array连接起来。创建输出的一维数组,它由 array 1、scalar 1、 scalar 2、array 2、scalar 3中的元素所组成,如图所示。

8.执行该VI。可以看到array 1、scalar 1、 scalar 2、scalar 3、array 2中的数值出现在同一个一维数组中。

9.保存该VI为LabVIEW\\Activity目录下的Build Array.vi。

练习 3-3 结束。

练习 3-4 簇

目的:学习创建簇、分解簇,再捆绑簇并且在另一个簇中显示其内容。

Input ClusterNumeric6.00Boolean1Boolean 2Output ClusterNumeric6.00Boolean1Boolean 2stopSTOPStringTsinghuaStringTsinghua

21

图3-10 练习3-4的面板和框图

1.打开前面板,创建一个簇壳(Array & Cluster palette),标签改为Input Cluster,拖曳至

适当大小。

2.在这个簇壳中放置一个数字Control,两个布尔开关,和一个串Control。

3.仿照以上步骤,创建Output Cluster如上。注意将各Control改为相应的indicator。 4.用快速菜单查看两个簇的序是否一致,若有差别,改之。

5.在前面板上设置一个[STOP]按钮。注意其缺省值为FALSE,不要改变它的状态。 6.建立如上面所示的流程图。注意在[STOP]按钮与循环条件端子之间接入了一个NOT函

数,因为按钮缺省值为FALSE,经NOT函数后变为TRUE,这就意味着当按钮状态不变时,循环继续执行,相反一旦按钮动作,则循环终止。 7.返回前面板并运行VI。在输入簇中输入不同的值观察输出。 8.关闭并保存程序。Cluster Exercise.vi 练习 3-4 结束

4 实验报告

写出以上4个练习的中的步骤要点,附上运行时的前后面版图形。

22

实验4 图形显示

1 实验目的

(1)掌握Chart和Graph的特征;

(2)学会利用XY Graph构成利萨育图形。

2 实验任务

建立一个利萨育图形的VI。

3 实验步骤

练习 4-1 Chart和Graph的比较

目的:创建一个VI,用Chart和Graph分别显示40个随机数产生的曲线,比较程序的差别。

前面板及流程图如下

图4-1 Chart和Graph的比较

显示的运行结果是一样的。但实现方法和过程不同。在流程图中可以看出,Chart产生在循环内,每得到一个数据点,就立刻显示一个。而Graph在循环之外,40个数都产生之后,跳出循环,然后一次显示出整个数据曲线。从运行过程可以清楚地看到这一点。

值得注意的还有For循环执行40次,产生的40个数据存储在一个数组中,这个数组创建于For循环的边界上(使用自动索引功能)。在For循环结束之后,该数组就将被传送到外面的Graph。仔细看流程图,穿过循环边界的连线在内、外两侧粗细不同,内侧表示浮点数,外侧表示数组。

23

练习 4-1 结束

XY图形控件(XY Graph)

波形图(Waveform Graph)有一个特征,其X是测量点序号、时间间隔等,Y是测量数据值。但是它并不适合描述一般的Y值随X值变化曲线。适合于这种情况的控件是XY Graph。我们通过一个构成利萨育图形的例子来看一下它的使用。我们知道如果控制XY方向的两个数组分别按正弦规律变化(假设其幅值、频率都相同),如果它们的相位相同,则利萨育图形是一条45度的斜线,当它们之间相位差90度时为圆,其他相位差是椭圆。

练习4-2 利用XY Graph构成利萨育图形。

图4-2 利用XY Graph构成利萨育图形

面板和框图如图4-3所示。面板上除了一个XY Graph外,还有一个相位差输入控件。在框图中使用了两个Sine Waveform.vi,第一个所有输入参数(包括频率、幅值、相位等)都使用缺省值,所以其初始相位为0。第二个将其初始相位作为一个控件引到面板上。它们的输出是包括t0、dt和Y值的簇,但是对于XY Graph只需要其中的Y数组,因此使用波形函数中的Get Waveform Components函数分别提取出各自的Y数组,然后再将他们捆绑在一起,连接到XY Graph就可以了。当相位置为45度时,运行程序,得到如图所示的椭圆。 练习 4-2 结束

4 实验报告

写出以上2个练习的中的步骤要点,附上运行时的前后面版图形。

24

实验5 字符串和文件I/O

1 实验目的

(1)学会使用LabVIEW中的字符串;

(2)学会使用LabVIEW中的文件存储、读取。

2 实验任务

(1)建立一个使用字符串的VI;

(2)建立一个使用的文件存储、读取VI;

3 实验步骤

练习 5-1 组合字符串 目的:使用一些字符串功能函数将一个数值转换成字符串,并把该字符串和其他一些字符串连接起来组成一个新的输出字符串。 前面板

打开一个新的前面板,按照下图向其中添加对象。

HeaderSETNumber5.50TrailerVOLTS?3ê?′?3¤è?16?3ê?3?2?′?SET 5.5000 VOLTS

其中的两个字符串控制对象和数值控制对象可以合并成一个输出字符串并显示在字符串显示器中。数值显示器显示出字符串的长度。

本练习中输出字符串是一个GPIB(IEEE 488)命令字符串,它可用来与和串口仪器(RS-232 或者 RS-422)进行通信。

流程图

? Format Into String函数(Functions?String)——在本练习中,它用于对

25

? ? ? ?

数值和字符串进行格式化,使它们成为一个输出字符串。用变形工具可以添加三个加和输入。

String Length函数(Functions?String)——在本练习中,它用于返回一个字符串的字节数

执行该VI。注意,Format Into String 功能函数将两个字符串控制对象和数值控制对象组合成一个输出字符串。

把该VI保存为 Build String.vi,在下一个练习中还将用到这个VI。

字符串格式的设定:选中Format Into String函数,单击右键,在快速菜单中选择Edit Format String,可分别对个输入的各部分格式做设定。

练习 5-1 结束。

练习 5-2 字符串子集和数值的提取

目的:创建一个字符串的子集,其中含有某个数值的字符串显示,再将它转换成数值。

打开 Examples\\General\\strings.llb中的Parse String.vi。用默认输入值执行该VI。注意,DC的字符串子集被用于输入字符串。还要注意,字符串的数值部分被提取出来,并转换为数值。您可以尝试使用不同的控制数值(记住数组式的字符串是从0开始进行编号),或者您可以返回到流程图,查看怎样从输入字符串中提取出其中的元素。

String Subset函数(Functions?String)——在本练习中,它用于返回偏移地址开始的子字符串以及字节数。第一个偏移地址是0。

很多情况下,必须把字符串转换成数值,例如需要将从仪器中得到的数据字符串转换成数值。

Scan From String函数(Functions?String)——在这个例子中,它用于扫描字符串,并将有效的数值(0到9,正负,e,E和分号)转换成数值。如果连接了一个格式字符串,它将根据字符串指定的格式进行转换,否则将进行默认格式的转换。

该函数从偏移地址的string处开始扫描。第一个字符的偏移地址是0。这个函数在已知头长度(本例中是VOLTS DC)时或者字符串只含有有效字符时很有用。 选择File?Close,关闭该VI。注意不要保存它。 练习 5-2 结束。

26

练习 5-3 将数据写入电子表格文件

目的:修改一个已有的 VI以使用文件 I/O 功能函数,以便可以将数据以 ASCII 格式保存到一个新的文件。然后就可以用一个电子表格程序打开该文件。 前面板

打开前面练习中创建的Graph Waveform Arrays.vi。当调用这个VI时,该VI将产生两个数据数组,并将它们绘制在一个图区中。您需要对该VI进行修改,从而把两个数组写入一个文件,格式是每列含有一个数组。

Array0-0.09Waveform Graph1.51.0Plot 0Plot 10.50.0transpose? (no:F)-0.50102030405060708090100don't transpose

流程图

打开Graph Waveform Arrays.vi 的流程图,按照下图在流程图的右下角添加功能函数。 13. Write To Spreadsheet File VI (FunctionsoFile I/O)用于将二维

数组转换成电子表格字符串,再将它写入一个文件。如果没有指定路径名称,将会弹出一个文件对话框,提示输入文件名。该VI将把一维或者二维

数组写入文件。这个例子中,因为用的是二维数组,所以无需连接一维输入端子。

? Boolean常数 (FunctionsoBoolean)用于控制是否在写入数据之前转换成二维数组。

在这个例子中需要对数据进行转换。因为电子表格文件的每列都含有一个数据数组,所以必须先转换成二维数组。

? 返回前面板,执行该VI。数据数组产生以后,会出现一个文件对话框提示输入新建文

件的文件名。输入文件名,并单击 OK。

? 可以尝试选择转换与不转换两种情况运行程序,查看结果差别。 ? 保存该VI为Waveform Arrays to File.vi,并关闭该VI。

现在可以用电子表格软件或者文本编辑器打开或者编辑刚才创建的文件。可以看到两列表

27

格,每列含有100个元素。

在这个例子中,直到所有数组都被采集以后,数据才可以被转换或者写入文件。如果需要更大的数据缓存和希望在数据产生后把它们写入到硬盘,就需要使用另外一个文件I/O VI。

练习 5-3 结束。

练习 5-4 向文件添加数据 目的:创建一个 VI,可以把温度数据以 ASCII 格式添加到某个文件中。该 VI 使用 For 循环产生温度数据,并将它们存储到一个文件中。在每个循环期间,您都要把数据转换成字符串,添加一个逗号作为分隔符,并将字符串添加到文件中。

前面板

打开一个新的前面板,并按照下图放置对象。

y?êYμ?·?êy20???è Chart90.085.080.0append to file? new file75.070.0395984.96

前面板中包括一个数字式显示器和一个波形图。“数据点个数”控制对象指定了需要采

集和写入文件的温度数据的数量。波形图表则用于显示温度曲线。将波形图表的Y轴范围设置为70.0到90.0,X轴范围设置为0到20。

流程图

? 打开流程图,添加For循环并增大它的面积。该VI将产生由“数据点个数”控制对象

指定的个数的温度数据。 ? 在循环中加一个移位寄存器,方法是用鼠标右键单击循环边界,在快捷菜单中选择移位

28

? ?

? ? ? ?

?

? ?

寄存器。这个移位寄存器中将含有文件的路径名。 完成对象的连线。

Empty Path 常数(FunctionsoFile I\\OoFile Constants)——用于初始化移位寄存器,以保证需要对文件写入数据时路径都是空的。会出现一个文件对话框提示输入文件名。

Digital Thermometer VI(FunctionsoSelect a VI?)——返回一个模拟温度测量值(仿真)。

Format Into String函数(FunctionsoString)——将温度数据转换成字符串,并且在数据后面增加一个逗号。

Write Characters To File VI((FunctionsoFile I/O)——用于向文件写入字符串。

Boolean常数(FunctionsoBoolean)用于将Write Characters To File VI的append to file?输入为TRUE, 这样在循环执行时新的温度数据就会加入到选中的文件中。用操作工具单击这个常数可以将它设置为TRUE。

返回前面板,把“数据点个数”设置为20,执行该VI。这时会出现一个文件对话框,提示输入文件名。输入文件名以后,VI就会在每个温度数据产生时,将它写入到该文件中。

把该VI保存为LabVIEW\\Activity目录下的Write Temperature to File.vi。

使用任意一个字处理软件,例如Write for Windows,Teach Text for Macintosh, 或者 UNIX平台下的某个文本编辑器,打开该数据文件查看其内容。您可以看到文件的内容是20个用逗号分隔开的数值(准确到小数点后三位)。

练习 5-4 结束。

练习 5-5 从文件读取数据

目的:创建一个VI,可以从上一个练习中创建的例子中读取数据,并把这些数据显示在一个波形图形中。必须按照数据保存的格式来读取它,因为原来是用字符串数据类型,把数据保存为 ASCII 格式,那么就必须用一个文件 I/O 函数把数据作为字符串读出。 前面板

打开一个新的前面板,并按照下图放置对象。

ó?′??t?á3?2?′?87.402344,86.914062,86.425781,85.937500,85.449219,85.449219,84.960937,84.472656,83.984375,83.984375,83.984375,83.984375,???è Graph100.090.080.070.060.050.0012345678910

前面板中包括一个字符串显示对象和一个波形图。“从文件读字符串“显示对象将从上个练习创建的文件中读出用逗号分隔开的温度数据。波形图则用于显示温度曲线。

29

流程图

? Read Characters From File VI(FunctionsoFile I/O)——用于从文件中

读取数据,以及输入字符串中的信息。如果没有指定路径名称,将出现一个文件对话框提示您输入文件名。在这个例子中,无需判断需要读取的字符的

个数,因为文件的字符数比默认的512要少。要从文件中读取数据,必须知道数据的存储方式。如果知道了文件的长度,就可以使用Read Characters From File VI读取指定个数的字符。

? Extract Numbers VI (Examples\\General\\strings.llb)——用于提取由逗

号、分行符号、非数值字符等分隔开的数据组成的ASCII字符串,并将它们转换成数值数组。

? 返回前面板,执行该VI。将出现一个文件对话框,在其中选择刚才保存的数据文件,

您可以看到图形中显示的数据与Write Temperature to File VI 例子中显示的一样。 ? 保存该VI为Temperature from File.vi,并关闭它。

练习 5-5 结束。

4 实验报告

写出使用字符串的VI;使用的文件存储、读取VI的步骤要点;附上运行时的前后面版

图形。

30

实验6 信号处理与分析

1 实验目的

(1)学会使用LabVIEW中的频谱分析(FFT);

(2)学会使用LabVIEW中的数字滤波器。

2 实验任务

(1)建立一个使用LabVIEW中的频谱分析的VI; (2)建立一个使用LabVIEW中的数字滤波器的VI。

3 实验步骤

练习 6-1 FFT的例子

1.程序面板及框图如下所示

31

2.流程图中的Array Size 函数用来根据样本数转换FFT的输出,得到频率分量的正确幅值。

3.把该VI保存为LabVIEW\\Activity目录中的FFT_2sided.vi。

4.选择频率(Hz)=10,采样率= 100,样本数= 100。执行该VI。注意这时的时域图和频谱图。因为采样率=样本数= 100 ,所以时域图中的正弦波的周期数与选择的频率相等,即可以显示10个周期。(如果把频率改成5,那么就会显示5个周期) 双边 FFT

5.检查频谱图可以看到有两个波峰,一个位于10Hz,另一个位于90Hz,90Hz处的波峰实际上是10Hz处的波峰的负值。因为图形同时显示了正负频率,所以被称为双边FFT。

6.先后令频率=10、20(Hz),执行该VI。注意每种情况下频谱图中波峰位置的移动。 观察频率等于10和20时的时域波形。注意哪种情况下的波形显示更好,并解释原因。

7.因为fs = 100 Hz,所有只能采样频率低于50Hz的信号(奈奎斯特频率=fs/2)。把频率修改为48Hz,可以看到频谱图的波峰位于± 48 Hz。

8.把频率改为52HZ,观察这时产生的图形与第5步产生的图形的区别。因为52大于奈奎斯特频率,所以混频偏差等于|100 – 52| = 48 Hz。

32

9.把频率改成30和70Hz,执行该VI。观察这两种情况下图形是否相同,并解释原因。 单边 FFT

10.按照下图修改流程图。上面已经知道因为FFT含有正负频率的信息,所以可以FFT具有重复信息。现在这样修改之后只显示一半的FFT采样点(正频率部分)。这样的方法叫做单边FFT。单边FFT只显示正频部分。注意要把正频分量的幅值乘以2才能得到正确的幅值。但是,直流分量保持不变。(若程序中考虑含直流分量的情况,应当增加一个分支或case结构。

11.设置频率(Hz) = 30,采样率= 100,样本数= 100, 运行该VI。 12.保存该VI为LabVIEW\\Activity目录下的FFT_1sided.vi。

13.把频率改为70Hz,执行该VI,观察这时产生的图形与第9步产生的图形的区别。

练习 6-1 结束。

练习6-2 使用数字滤波器

目的:使用一个低通数字滤波器对实际采集的方波信号滤波。

1.创建前面板和流程图如下所示。

33

2.注意流程图。其中使用了一个数字滤波器模块(Functions模板:Analyze)Signal Processing) Filters下的Butterworth Filter.vi)。先介绍一下这个VI。

Butterworth 滤波器

filter type :按下列值指定滤波器类型 0: Lowpass 低通 1: Highpass 高通 2: Bandpass 带通 3: Bandstop 带阻

X :需要滤波的信号序列

sampling freq fs :产生X序列时的采样频率,必须大于0。缺省值是1.0。如果它小于等于0则输出序列Filtered X 为空并返回一个错误。

high cutoff freq fh :高端截止频率。当滤波器类型为0 (lowpass) 或 1 (highpass)时忽略该参数。

low cutoff freq fl:低端截止频率。它必须满足Nyquist 准则,即 0≦fi<0.5fs

如果该条件不满足则输出序列Filtered X 为空并返回一个错误。fi 的缺省值是 0.125。

order :大于0,缺省值是2。

init/cont :内部状态的初始化控制。当其为FALSE (default), 初态为0,当init/cont 为 TRUE, 滤波器初态为上一次调用该VI的最后状态。为了对一个大数据量的序列进行滤波,可以将其分割为较小的块,设置这个状态为FALSE处理第一块数据,然后改设置为TRUE继续对对其余的数据块滤波。

Filtered X :滤波样本的输出数组。

3.在了解了这个滤波器的功能之后再来看上面的流程图。

这里DAQ部分将一个外部的1KHz的方波采集进来,采样频率是100KHz,采到的方波一方面显示其波形,同时又送到滤波器的入口。滤波器类型设置为Lowpass,其采样频率端直接连接到前面的采样频率控制端,因而也是100KHz。另外,将采样频率除以90后作为低端截止频率,应该也是合理的,滤波器的阶数选为6。这样的一个VI运行结果如前面板所示。

34

还需要指出的是原方波不以X轴对称,有直流分量,经这个低通滤波器后,直流分量还应当存在,曲线显示的确如此。

练习 6-2 结束。

4 实验报告

写出以上2个练习的中的步骤要点,附上运行时的前后面版图形。

35

实验7 VI程序的创建与结构控制

1 实验目的:

创建VI程序,学习子程序的创建和调用,熟悉结构控制的使用。

2 实验任务

创建一个VI子程序模拟温度测量。假设传感器输出电压与温度成正比。例如,当温度为70°F时,传感器输出电压为0.7V。本程序也可以用摄氏温度来代替华氏温度显示。

创建一个VI程序检测温度是否超出范围,当温度超出上限(High Limit)时,前面板上的LED将点亮,并且有一个蜂鸣器发声。学习使用顺序结构和包括头文件的数据文件。当程序停止数据采集后,自动产生数据文件的头文件,它包括操作者名字和文件名,然后将采集的数据附在头文件后面。

3实验仪器设备

装有Labview7的PC机。本程序用软件代替了DAQ数据采集卡。使用Demo read voltage子程序来仿真电压测量,然后把所测得的电压值转换成摄氏或华氏温度读数。

4实验内容及步骤 (1)子VI前面板设计

1. 用File菜单的New选项打开一个新的前面板窗口。 2. 把温度计指示部件放入前面板窗口。

3. 在前面板窗口的空白处点击鼠标键,然后从弹出的Numeric子模板中选择

Thermometer。

4. 在高亮的文本框中输入“温度计”,再点击鼠标键按钮。

5. 重新设定温度计的标尺范围为0.0到100.0。使用标签工具A,双击温度计标尺的

10.0,输入100.0,再点击鼠标键或者工具栏中的V按钮。 6. 在前面板窗口中放入竖直开关控制。

在面板窗口的空白处点击鼠标键,然后弹出的Boolean子模板中选择Vertical Switch,在文本框中输入“温度值单位”,再点击鼠标键或者工具栏中的V按钮。

使用标签工具A,在开关的“条件真”(true)位置旁边输入自由标签“摄氏”,再在“条件假”(false)位置旁边输入自由标签“华氏”。

36

(2)子程序框图程序设计

1. 从Windows菜单下选择Show Diagram功能打开框图程序窗口。

2. 点击框图程序窗口的空白处,弹出功能模板,从弹出的菜单中选择所需的对象。本

程序用到下面的对象:

Multiply(乘法)功能(Numeric子模板)。在本例中,将读取电压值乘以100.00,以获得华氏温度。

Subtract(减法)功能(Numeric子模板)。在本例中,从华氏温度中减去32.0,以转换成摄氏温度。

随机数产生功能(Numeric子模板),用于产生随机温度值。 Divide(除法)功能(Numeric子模板)。在本例中,把相减的结果除以1.8以转换成摄氏温度。

Select(选择)功能(Comparison子模板)。取决于温标选择开关的值。该功能输出华氏温度(当选择开关为false)或者摄氏温度(选择开关为True)数值。

数值常数。用连线工具,点击你希望连接一个数值常数的对象,并选择Create Constant功能。若要修改常数值,用标签工具双点数值,再写入新的数值。

字符串常量。用连线工具,点击你希望连接字符串常量的对象,再选择Create Constant功能。要输入字符串,用标签工具双击字符串,再输入新的字符串。

While循环功能,用于产生连续输入随机温度值。 定时采集功能(time&Dialog子模板),以免随机数变化过快。

3. 使用移位工具(Positioning tool),把图标移至图示的位置,再用连线工具连接

起来。

注意:如果要显示图标接线端口,则点击图标,再从弹出菜单中选择Show Terminals功能。也可以从Help菜单中选择Show Help功能以打开帮助信息窗口。 Demo read voltage子程序产生温度值,我们的程序将读数转换成华氏温度读 数,或者再把华氏温度转换成摄氏温度。

4. 选择前面板窗口,使之变成当前窗口,并运行VI程序。点击连续运行按钮,便程

序运行于连续运行模式。

5. 再点击连续运行按钮,关闭连续运行模式。 6. 创建图标Temp:

此图标可以将现程序作为子程序在其他程序中调用。创建方法如下: 在面板窗口的右上角的图标框中点击鼠标,从弹出菜单中选择Edit Icon功能。双

37

点选择工具,并按下Delete键,消除缺省的图标图案。用画图工具画出温度计的图标。 注意:在用鼠标画线时按下键,则可以画出水平或垂直方向的连线。

使用文本工具写入文字,双击文本工具把字体换成Small Font。

当图标创建完成后,点击OK以关闭图标编辑。生成的图标在面板窗口的右上角。 7. 创建联接器端口:

点击右上角的图标面板,从弹出菜单中选择Show Connector功能。LabVIEW将会根据控制和显示的数量选择一种联接器端口模式。在本例中,只有两个端口,一个是竖直开关,另一个是温度指示。

把联接器端口定义给开关和温度指示。

使用连线工具,在左边的联接器端口框内按鼠标键,则端口将会变黑。再点击开关控制件,一个闪烁的虚线框将包围住该开关。

现在再点击右边的联接器端口框,使它变黑。再点击温度指示部件,一个闪烁的虚线框将包围住温度指示部件,这即表示着右边的联接器端口对应温度指示部件的数据输入。

如果再点击空白外,则虚线框将消失,而前面所选择的联接器端口将变暗,表示你已经将对象部件定义到各个联接器端口。

注意:LabVIEW的惯例是前面板上控制的联接器端口放在图标的接线面板的左边,而显示的联接器端口放在图标的接线面板的右边。也就是说,图标的左边为输入端口而右边为输出端口。

8. 文件菜单的SAVE功能保存上述文件,并将文件命名为Thermometer.Vi。

现在,该程序已经编制完成了。它可以在其他程序中作为子程序来调用,在其它程序的框图窗口里,该温度计程序用前面创建的图标来表示。联接器端口的输入端用于选择温度单位,输出端用于输出温度值。 9. 关闭该程序

(3)主程序前面板设计 按照下图设计前面板。

1. “温度模式”、“停止并保存数据”均是布尔控制控件,“报警”是布尔显示控件,

“设定高限”为数值控件,“当前温度”为布尔显示控件,“当前温度值状态”为字符串显示控件,“当前温度”为数值型显示控件,“操作者名”为布尔控制控件,“文

件保存路径”为路径控件。

38

(4)主程序框图程序设计

1. 按照上图所示,完成框图程序,

2. 从结构(Structures)工具模板选择条件循环结构“While Loop”放入框图程序窗

口,调整该条件循环框的大小,把先前从前面板创建的两个节点放入循环框内。 注意:条件循环结构是一种无限循环结构,只要条件满足,它就一直循环运行下去。在本例中,只要允许开关(Enable Switch)是ON状态,该VI程序就一直运行,采集温度测量值,并在图表上显示。

3. 放入其它的框图程序对象。Thermometer VI,这个VI程序是你在上个练习中创建

的,用Select a VI?子模板找到文件。 4. 按照上图的框图程序连好线。

5. 创建模式开关。把连线工具放在Thermometer VI的Mode输入端口上,按鼠标右键

并选择Creat Control,这样就可以自动创建模式转换开关,并将它与Thermometer VI子程序相连线,再转换到前面板窗口,将模式转换开关的位置重新调整。 6. 在前面板窗口,使用标注工具,双击模式开关的“OFF”标签,并把它转换成“华

氏”,再把“ON”标签转换民“摄氏”。要转换开关状态,使用操作工具(Operating Tool)。

7. 使用Time & Dialog子模板中的Wait Until Next ms Multiple功能,再加上时间

39

常数Numeric Constant,把它设置为500。 8. 该程序还使用了如下的功能模块:

Case结构,右边的TRUE Case与图中的FALSE Case同属于一个Case结构。根据其输入端上的数值,来决定执行哪一个Case程序。如果Thermometer Vi子程序返回的温度值大于High Limit数值,将执行True Case程序,反之则执行False Case程序。

Write Characters to File模块(在File I/O子模板)。该功能把一个字符串写入一个新的文件或者附加到一个已存在的文件中。它在写入前打开或者创建一个文件,在完成时关闭该文件。在本例中,它用来建立头文件格式。

Write to Spreadsheet File模块(在File I/O子模块)。该模块把一个二维或者一维单精度数组转换成字符串,并把字符串写入一个新文件或者附回在一个已存在的文件后面。在本例中,它将由温度采集数据和上限值组成的二维数组附加在一个已创建了头文件的数据文件后面。

Transpose 2D Array模块(在Array子模板)。在本例中,它把二维数组转换成以列为分界的二维数组,这样在写入数据文件时它就会以列的形式显示。

Concatenate String模块(在String子模板)。在本例中,它用于创建头文件字符串。

顺序结构程序按指定的顺序执行各个程序步骤。在本例中,我们首先创建数据文件的头文件,然后再将数据写入文件中,顺序结构中的数据传递通道使用快捷菜单中的“sequence local”创建

9. 条件循环框边线上的方块叫作通道(tunnel)。在本例中,通道是条件循环的数据

通道口。若要建立数据索引,点击通道,并选择Enable Indexing选项,表示当条件循环执行时,把数据顺序放入一个数组中。循环结束后,通道输出该数组。否则,通道仅输出最后一次循环放入的数据值。

10. 返回前面板,在”设定高限”控制栏中输入30,在“操作者名”控制栏中输入你

的名字,再输入数据文件名(例如C:\\testdata.txt)。运行该程序。当按下“停止并保存数据”开关后,将产生一个ASCII文件。

11. 将文件命名为Temperature Control.vi,并存盘退出(用Save As选项)。

5思考题

1.如何将一个VI程序创建为子VI程序,让其可以连接输入输出? 2.如何找到蜂鸣器?写出路径。

D:\\Program Files\\labview\\LabVIEW 7.0\\vi.lib\\platform system.vi 3.如何增添或减少一个Case?

4.框图程序中涉及了Cluster的操作,使用的是什么功能? 5.打印或写出你设计产生的ASCII文件的内容。

6 实验报告内容

(1)实验目的、实验设备、实验内容、简述实验步骤、流程图、运行结果的前面板图; (2)回答思考题;

(3)实验感想。

40

本文来源:https://www.bwwdw.com/article/txb.html

Top