往链点点通共享资源,了解更多请登录www.WL566.com
实验一 虚拟仪器及LabVIEW入门
实验一要求:
运行National Instruments LabVIEW 6.1,完成下列实验讲义中的所给出的练习题1-1和1-2。并完成实验报告。
1.1 虚拟仪器概述
虚拟仪器(virtual instrumention)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。下面的框图反映了常见的虚拟仪器方案。
虚拟仪器的主要特点有:
· 尽可能采用了通用的硬件,各种仪器的差异主要是软件。
· 可充分发挥计算机的能力,有强大的数据处理功能,可以创造出功能更强的仪器。
· 用户可以根据自己的需要定义和制造各种仪器。
虚拟仪器实际上是一个按照仪器需求组织的数据采集系统。虚拟仪器的研究中涉及的基础理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。
虚拟仪器的起源可以追朔到20世纪70年代,那时计算机测控系统在国防、航天等领域已经有了相当的发展。PC机出现以后,仪器级的计算机化成为可能,甚至在Microsoft公司的Windows诞生之前,NI公司已经在Macintosh计算机上推出了LabVIEW2.0以前的版本。对虚拟仪器和LabVIEW长期、系统、有效的研究开发使得该公司成为业界公认的权威。
普通的PC有一些不可避免的弱点。用它构建的虚拟仪器或计算机测试系统性能不可能太高。目前作为计算机化仪器的一个重要发展方向是制定了VXI
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
,这是一种插卡式的仪器。每一种仪器是一个插卡,为了保证仪器的性能,又采用了较多的硬件,但这些卡式仪器本身都没有面板,其面板仍然用虚拟的方式在计算机屏幕上出现。这些卡插入标准的VXI机箱,再与计算机相连,就组成了一个测试系统。VXI仪器价格昂贵,目前又推出了一种较为便宜的PXI标准仪器。
虚拟仪器研究的另一个问题是各种标准仪器的互连及与计算机的连接。目前使用较多的是IEEE 488或GPIB
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
。未来的仪器也应当是网络化的。
1.2 LabVIEW是什么?
LabVIEW(Laboratory Virtual instrument Engineering)是一种图形化的编程语言,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件。LabVIEW集成了与满足GPIB、VXI、RS-232和RS-485协议的硬件及数据采集卡通讯的全部功能。它还内置了便于应用TCP/IP、ActiveX等软件标准的库函数。这是一个功能强大且灵活的软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程都生动有趣。
图形化的程序语言,又称为“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图或流程图。它尽可能利用了技术人员、科学家、工程师所熟悉的术语、图标和概念,因此,LabVIEW是一个面向最终用户的工具。它可以增强你构建自己的科学和工程系统的能力,提供了实现仪器编程和数据采集系统的便捷途径。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。
利用LabVIEW,可产生独立运行的可执行文件,它是一个真正的32位编译器。像许多重要的软件一样,LabVIEW提供了Windows、UNIX、Linux、Macintosh的多种版本。
1.3 LabVIEW的运行机制
1. 3.1 LabVIEW应用程序的构成
所有的LabVIEW应用程序,即虚拟仪器(VI),它包括前面板(front panel)、流程图(block diagram)以及图标/连结器(icon/connector)三部分。
前面板
前面板是图形用户界面,也就是VI的虚拟仪器面板,这一界面上有用户输入和显示输出两类对象,具体表现有开关、旋钮、图形以及其他控制(control)和显示对象(indicator)。图1所示是一个随机信号发生和显示的简单VI是它的前面板,上面有一个显示对象,以曲线的方式显示了所产生的一系列随机数。还有一个控制对象——开关,可以启动和停止工作。显然,并非简单地画两个控件就可以运行,在前面板后还有一个与之配套的流程图。
流程图
流程图提供VI的图形化源程序。在流程图中对VI编程,以控制和操纵定义在前面板上的输入和输出功能。流程图中包括前面板上的控件的连线端子,还有一些前面板上没有,但编程必须有的东西,例如函数、结构和连线等。图1-2是与图1-1对应的流程图。我们可以看到流程图中包括了前面板上的开关和随机数显示器的连线端子,还有一个随机数发生器的函数及程序的循环结构。随机数发生器通过连线将产生的随机信号送到显示控件,为了使它持续工作下去,设置了一个While Loop循环,由开关控制这一循环的结束。
如果将VI与标准仪器相比较,那么前面板上的东西就是仪器面板上的东西,而流程图上的东西相当于仪器箱内的东西。在许多情况下,使用VI可以仿真标准仪器,不仅在屏幕上出现一个惟妙惟肖的标准仪器面板,而且其功能也与标准仪器相差无几。
图标/连接器
VI具有层次化和结构化的特征。一个VI可以作为子程序,这里称为子VI(subVI),
被其他VI调用。图标与连接器在这里相当于图形化的参数,详细情况稍后介绍。
1.2.2 LabVIEW的操作
模板
个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载
在LabVIEW的用户界面上,应特别注意它提供的操作模板,包括工具(Tools)模板、控制(Controls)模板和函数(Functions)模板。这些模板集中反映了该软件的功能与特征。下面我们来大致浏览一下。
工具模板(Tools Palette)
该模板提供了各种用于创建、修改和调试VI程序的工具。如果该模板没有出现,则可以在Windows菜单下选择Show Tools Palette命令以显示该模板。当从模板内选择了任一种工具后,鼠标箭头就会变成该工具相应的形状。当从Windows菜单下选择了Show Help Window功能后,把工具模板内选定的任一种工具光标放在流程图程序的子程序(Sub VI)或图标上,就会显示相应的帮助信息。
下述工具中注意1和2的区别,2用于编程时,1用于运行程序时。4是一个特有的工具,它并不是一个简单的画线工具,而是一个符合LabVIEW语言规定的对象连接工具。
工具图标有如下几种:
图标
名称
功 能
1
Operate Value(操作值)
用于操作前面板的控制和显示。使用它向数字或字符串控制中键入值时,工具会变成标签工具
2
Position/Size/Select (选择)
用于选择、移动或改变对象的大小。当它用于改变对象的连框大小时,会变成相应形状。
3
Edit Text(编辑文本)
用于输入标签文本或者创建自由标签。当创建自由标签时它会变成相应形状。
4
Connect Wire(连线)
用于在流程图程序上连接对象。如果联机帮助的窗口被打开时,把该工具放在任一条连线上,就会显示相应的数据类型。
5
Object Shortcut Menu(对象菜单)
用鼠标左键可以弹出对象的弹出式菜单。
6
Scroll Windows(窗口漫游)
使用该工具就可以不需要使用滚动条而在窗口中漫游。
7
Set/Clear Breakpoint(断点设置/清除)
使用该工具在VI的流程图对象上设置断点。
8
Probe Data(数据探针)
可在框图程序内的数据流线上设置探针。通过控针窗口来观察该数据流线上的数据变化状况。
9
Get Color(颜色提取)
使用该工具来提取颜色用于编辑其他的对象。
10
Set Color(颜色设置)
用来给对象定义颜色。它也显示出对象的前景色和背景色。
下面的两个模板是多层的,其中每一个子模板下还包括多个对象。
控制模板(Control Palette)
注意:只有打开前面板时才能调用该模板
该模板用来给前面板设置各种所需的输出显示对象和输入控制对象。每个图标代表一类子模板。如果控制模板不显示,可以用Windows菜单的Show Controls Palette功能打开它,也可以在前面板的空白处,点击鼠标右键,以弹出控制模板。
控制模板如左图所示,它包括如下所示的一些子模板。子模板中包括的对象,我们在功能中用文字简要介绍。
图标
子模板名称
功 能
1
Numeric(数值量)
数值的控制和显示。包含数字式、指针式显示表盘及各种输入框。
2
Boolean(布尔量)
逻辑数值的控制和显示。包含各种布尔开关、按钮以及指示灯等。
3
String & Path(字符串和路径)
字符串和路径的控制和显示。
4
Array & Cluster(数组和簇)
数组和簇的控制和显示。
5
List & Table(列表和
表格
关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载
)
列表和表格的控制和显示
6
Graph(图形显示)
显示数据结果的趋势图和曲线图。
7
Ring & Enum(环与枚举)
环与枚举的控制和显示。
8
I/O(输入/输出功能)
输入/输出功能。于操作OLE、ActiveX等功能。
9
Refnum
参考数
10
Digilog Controls(数字控制)
数字控制
11
Classic Controls(经典控制)
经典控制,指以前版本软件的面板图标。
12
Activex
用于ActiveX等功能。
13
Decorations(装饰)
用于给前面板进行装饰的各种图形对象。
14
Select a Controls(控制选择)
调用存储在文件中的控制和显示的接口。
15
User Controls(用户控制)
用户自定义的控制和显示。
功能模板(Functions Palette)
注:只有打开了流程图程序窗口,才能出现功能模板。
功能模板是创建流程图程序的工具。该模板上的每一个顶层图标都表示一个子模板。若功能模板不出现,则可以用Windows菜单下的Show Functions Palette功能打开它,也可以在流程图程序窗口的空白处点击鼠标右键以弹出功能模板。
功能模板如右图所示,其子模块如下所示。(个别不常用的子模块未包含)
图标
子模板名称
功 能
1
Structure(结构)
包括程序控制结构命令,例如循环控制等,以及全局变量和局部变量。
2
Numeric(数值运算)
包括各种常用的数值运算,还包括数制转换、三角函数、对数、复数等运算,以及各种数值常数。
3
Boolean(布尔运算)
包括各种逻辑运算符以及布尔常数。
4
String(字符串运算)
包含各种字符串操作函数、数值与字符串之间的转换函数,以及字符(串)常数等。
5
Array(数组)
包括数组运算函数、数组转换函数,以及常数数组等。
6
Cluster(簇)
包括簇的处理函数,以及群常数等。这里的群相当于C语言中的结构。
7
Comparison(比较)
包括各种比较运算函数,如大于、小于、等于。
8
Time & Dialog(时间和对话框)
包括对话框窗口、时间和出错处理函数等。
9
File I/O(文件输入/输出)
包括处理文件输入/输出的程序和函数。
10
Data Acquisition(数据采集)
包括数据采集硬件的驱动,以及信号调理所需的各种功能模块。
11
Waveform(波形)
各种波形处理工具
12
Analyze(分析)
信号发生、时域及频域分析功能模块及数学工具 。
13
Instrument I/O(仪器输入/输出)
包括GPIB(488、488.2)、串行、VXI仪器控制的程序和函数,以及VISA的操作功能函数。
14
Motion & Vision(运动与景像)
15
Mathematics(数学)
包括统计、曲线拟合、公式框节点等功能模块,以及数值微分、积分等数值计算工具模块。
16
Communication(通讯)
包括TCP、DDE、ActiveX和OLE等功能的处理模块。
17
Application Control(应用控制)
包括动态调用VI、标准可执行程序的功能函数。
18
Graphics & Sound(图形与声音)
包括3D、OpenGL、声音播放等功能模块。包括调用动态连接库和CIN节点等功能的处理模块。
19
Tutorial(示教课程)
包括LabVIEW示教程序。
20
Report Generation(文档生成)
21
Advanced(高级功能)
22
Select a VI(选择子VI)
23
User Library(用户子VI库)
1.4 LabVIEW的初步操作
1. 4.1 创建VI和调用子VI
我们通过例子来说明如何创建一个VI。
练习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,同时配数字显示。可得到如下的前面板图。
图1-3 练习1-1的前面板图
7. Windows»Show Diagram 打开流程图窗口。从功能模板中选择对象,将它们放到流程图上组成下图(其中的标注是后加的)。
图1-4 练习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.选择 File»Save, 把该VI 保存为 LabVIEW\Activity 目录中的 Temp & Vol.vi。
在前面板中,单击Run(运行)按钮,运行该 VI。注意电压和温度的数值都显示在前面板中。
10.选择File»Close,关闭该 VI 。
练习 1-1 结束
附注与说明:
1.如果要查看某个功能函数或者 VI 的输入输出,需要从Help菜单中选择Show Help,再把光标置于这个功能函数或者 VI上。例如进程监视器 VI 的 Help 窗口显示如下:
2. 显示对象(Indicator)、控制对象(Control)和数值常数对象
显示对象和控制对象都是前面板上的控件,前者有输入端子而无输出端子,后者正好相反,它们分别相当于普通编程语言中的输出参数和输入参数。数值常数对象可以看成是控制对象的一个特例。
在前面板中创建新的控制对象或显示对象时,LabVIEW 都会在流程图中创建对应的端子。端子的符号反映该对象的数据类型。例如,DBL 符号表示对象数据类型是双精度数;TF 符号表示布尔数;I16 符号表示16位整型数;ABC符号表示对象数据类型是字符串。
一个对象应当是显示对象还是控制对象必须弄清楚,否则无法正确连线。有时他们的图标是相似或相同的,可以根据需要明确规定它是显示对象还是控制对象。方法是将鼠标移到图标上,然后点右键,可出现快速菜单(例见右图)。如果菜单中的第一项是Chang to Control,说明这是一个显示对象,你可以根据需要,将其变为控制对象。如果菜单中的第一项是Chang to Indicator ,说明这是一个控制对象,你也可以根据需要,将其变为显示对象。
控制对象和显示对象都不能在流程图中删除,只能从前面板上删除。
3. 关于连线
连线是程序设计中较为复杂的问题。流程图上的每一个对象都带有自己的连线端子,连线将构成对象之间的数据通道。因为这不是几何意义上的连线,因此并非任意两个端子间都可连线,连线类似于普通程序中的变量。数据单向流动,从源端口向一个或多个目的端口流动。不同的线型代表不同的数据类型。下面是一些常用数据类型所对应的线型和颜色:
类型
颜色
标量
一维数组
二维数组
整形数
兰色
浮点数
橙色
逻辑量
绿色
字符串
粉色
文件路径
青色
当需要连接两个端点时,在第一个端点上点击连线工具(从工具模板栏调用),然后移动到另一个端点,再点击第二个端点。端点的先后次序不影响数据流动的方向。
当把连线工具放在端点上时,该端点区域将会闪烁,表示连线将会接通该端点。当把连线工具从一个端口接到另一个端口时,不需要按住鼠标键。当需要连线转弯时,点击一次鼠标键,即可以正交垂直方向地弯曲连线,按空格键可以改变转角的方向。
接线头是为了帮助正确连接端口的连线。当把连线工具放到端口上,接线头就会弹出。接线头还有一个黄色小标识框,显示该端口的名字。
线型为波折号的连线表示坏线。出现坏线的原因有很多,例如:连接了两个控制对象;源端子和终点端子的数据类型不匹配(例如一个是数字型,而另一个是布尔型)。可以通过使用定位工具点击坏线再按下
来删除它。选择 Edit»Remove Bad Wires 或者按下 可以一次删除流程图中的所有坏线。当 VI 无法运行,或者显示 Signal has Loose Ends (信号丢失终端)的错误信息时,这是一个快捷的调试方法。
1.4.2 程序调试技术
1.找出语法错误
如果一个VI程序存在语法错误,则在面板工具条上的运行按钮会变成一个折断的箭头,表示程序不能被执行。这时该按钮被称作错误列表。点击它,则LabVIEW弹出错误清单窗口,点击其中任何一个所列出的错误,选用Find功能,则出错的对象或端口就会变成高亮。
2.设置执行程序高亮
在LabVIEW的工具条上有一个画着灯泡的按钮,这个按钮叫做“高亮执行”按钮上。点击这个按钮使它变成高亮形式,再点击运行按钮,VI程序就以较慢的速度运行,没有被执行的代码灰色显示,执行后的代码高亮显示,并显示数据流线上的数据值。这样,你就可以根据数据的流动状态跟踪程序的执行。
3.断点与单步执行
为了查找程序中的逻辑错误,有时希望流程图程序一个节点一个节点地执行。使用断点工具可以在程序的某一地点中止程序执行,用探针或者单步方式查看数据。使用断点工具时,点击你希望设置或者清除断点的地方。断点的显示对于节点或者图框表示为红框,对于连线表示为红点。当VI程序运行到断点被设置处,程序被暂停在将要执行的节点,以闪烁表示。按下单步执行按钮,闪烁的节点被执行,下一个将要执行的节点变为闪烁,指示它将被执行。你也可以点击暂停按钮,这样程序将连续执行直到下一个断点。
4.探针
可用探针工具来查看当流程图程序流经某一根连接线时的数据值。从Tools工具模板选择探针工具,再用鼠标左建点击你希望放置探针的连接线。这时显示器上会出现一个探针显示窗口。该窗口总是被显示在前面板窗口或流程图窗口的上面。在流程图中使用选择工具或连线工具,在连线上点击鼠标右键,在连线的弹出式菜单中选择“探针”命令,同样可以为该连线加上一个探针。
1.4.3 子VI的建立
子VI(SubVI)相当于普通编程语言中的子程序,也就是被其他的 VI调用的VI。可以将任何一个定义了图标和联接器的 VI作为另一个 VI的子程序。在流程图中打开 Functions»Select a VI…. ,就可以选择要调用的子 VI 。构造一个子VI主要的工作就是定义它的图标和联接器。
每个VI在前面板和流程图窗口的右上角都显示了一个默认的图标。启动图标编辑器的方法是,用鼠标右键单击面板窗口的右上角的默认图标,在弹出菜单中选择 Edit Icon。
下图显示了图标编辑器的窗口。可以用窗口左边的各种工具设计像素编辑区中的图标形状。编辑区右侧的一个方框中显示了一个实际大小的图标。图标编辑器的具体使用细节参阅有关资料。
图1-5 图标编辑器窗口
联接器是 VI 数据的输入输出接口。如果用面板控制对象或者显示对象从子 VI 中输出或者输入数据,那么这些对象都需要在联接器面板中有一个连线端子。您可以通过选择 VI的端子数并为每个端子指定对应的前面板对象以定义联接器。
定义联接器的方法是,用鼠标右键单击面板窗口中的图标窗口,在快捷菜单中选择 Show Connector。
联接器图标会取代面板窗口右上角的图标。LabVIEW自动选择的端子连接模式是控制对象的端子位于联接器窗口的左边,显示对象的端子位于联接器窗口右边。选择的端子数取决于前面板中控制对象和显示对象的个数。
联接器中的各个矩形表示各个端子所在的区域,可以用它们从 VI 中输入或者输出数据。如果必要,也可以选择另外一种端子连接模式。方法是在图标上单击鼠标右键单出快捷菜单,选择 Show Connector,再次弹出快捷菜单,选择Patterns。下面我们通过一个练习说明具体操作。
练习 1-2 为 VI创建图标和联接器
1.打开 LabVIEW\Activity 目录中的Temp & Vol.vi,这是练习1-1做的程序。
2.在前面板中,用鼠标右键单击窗口右上角的图标,在快捷菜单中选择 Edit Icon….,也可以双击图标激活图标编辑器。注意只能在前面板中编辑图标和联接器。
3.删除默认图标。使用Select Tool(矩形框),单击并拖动想要删除的部分,按下。也可以通过双击工具框中的阴影矩形删除图标。
4.用 Pencil Tool (铅笔工具)绘制一个温度计。
5.用 Text Tool(文本工具)创建文本。得到图标将如下图所示。
图1-6 编辑后的图标编辑器窗口
6.单击OK,关闭编辑器。新创建的图标就显示在屏幕右上角的图标窗口中。
7.用鼠标右键单击前面板中的图标窗口,在快捷菜单中选择Show Connector,设置联接器端子连接模式。在默认情况下,LabVIEW 会根据前面板中的控制对象和显示对象的数目确定联接器的端子连接模式。因为前面板中有两个对象,所以联接器有两个端子,如左图所示。用鼠标右键单击联接器窗口,在快捷菜单中选择Rotate 90 Degrees(旋转90度),注意联接器窗口的变化,如左图所示。
9.将端子连接到温度计和电压计:
a. 点击联接器上部端子。光标自动变成连线工具,同时端子变成黑色。
b. 单击温度显示对象。一个移动的虚线框把它包围起来,选中的端子的颜色变为与控制/显示对象的数据类型一致的颜色。
如果单击前面板中的任何空白区域以后,虚线消失,选中的端子变暗,这表示您已经成功地把显示对象和上部端子连接起来。如果端子是白色,则表示没有连接成功。
c. 重复步骤a 和 b,把底部的端子和容积计连接起来。
d. 用鼠标右键单击联接器,在快捷菜单中选择Show Icon….
10.选择File»Save ,保存该 VI。
这样这个 VI 就完成了,并也可以作为子 VI 被其他的VI调用。子VI 的图标在主 VI 的流程图中代表它。VI 的联接器(含有两个端子)输出温度和电压。
练习 1-2 结束
1.5 图表(chart)入门
图表(chart)是一种周期性更新数据的数字式图形显示对象。可以在Controls»Graph 模板中找到两种图表:波形图和强度图(后者不常用)。也可以自定义图表的格式,以满足自己的显示需要或者让它显示更多的数据。图表具有的特性有:滚动条、图例、模板、数值显示、时间坐标显示。
右图显示了快速菜单中Advanced»Update Mode子菜单中提供的三种图表显示类型——Strip chart(条状图),Scope chart(示波器图)和Sweep chart(扫描图)。默认模式是条状图。
练习 1-3 使用三种图表模式
目的:查看 VI 分别在三种模式下执行时图表的显示。
1.建立前面板及流程图如下
该程序中利用一个循环产生连续的sin(i)函数值,并及时地在chart图表上显示出来,现在前面板上的chart是一个strip,这是一个坐标式显示器,与纸带式图表记录器相似。每接受一个新数据,新数据就将显示在右侧,而原有数据移动到左侧
图1-7 图表的例子
2.用鼠标选中chart,点击右键,可在快速菜单中选择Advanced»Update Mode子菜单。可以选择更换其他两种更新模式。
示波器模式是一个返回式的显示器,与示波器类似。每接受一个新数据时,它就把新数据绘制在原有数据的右侧。当数据曲线到达显示区的右边缘时,VI 会删除全部图形,从左边缘重新开始绘制曲线。示波器模式显然要快于条状图模式,因为它不会因为滚动产生溢出。
扫描模式更接近于示波器模式,但是当数据曲线到达显示区的右边时,不会变成空白,而是会出现一个移动的垂线,标记新数据的开始,并当VI添加新数据时穿过整个显示区。
练习 1-3 结束。
重叠式和堆栈式图区
LabVIEW可以用同一个垂直坐标在一个图表中显示多个图区,这种图区被称为重叠式图区,也可使用多个垂直坐标,这时这种图形被称为堆栈式图区。请参考Examples\General\ Graphs\charts.llb 中的charts.vi示例。
补充练习:
通过下面的要求练习LabVIEW的操作。
画出如右下所示的流程图,配以适当的前面板。注意连线时快捷菜单和Create功能的使用,和在前面板上替换不同的Indicator的方法。
图1-8 补充练习的面板及框图
实验2-3程序结构
实验2要求:
运行National Instruments LabVIEW 6.1,完成下列实验讲义中的所给出的练习题2-1、2-2、2-3中的任意两题,并完成实验报告。
实验3要求:
运行National Instruments LabVIEW 6.1,完成下列实验讲义中的所给出的练习题2-4、2-5、2-6中的任意两题,并完成实验报告。
2.1 循环结构
2.1. 1 While 循环
While 循环可以反复执行循环体的程序,直至到达某个边界条件。它类似于普通编程语言中的 Do 循环和 Repeat-Until 循环。While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。
· 该循环有如下特点:
· 计数从0开始(i=0)。
· 先执行循环体,而后i+1,如果循环只执行一次,那么循环输出值i=0。
· 循环至少要运行一次。
图2-1 While 循环示意图
练习 2-1 使用While循环和图表
目的:用 While 循环和图表获得数据,并实时显示。
创建一个可以产生并在图表中显示随机数的VI。 前面板有一个控制旋钮可在0到10秒之间调节循环时间,还有一个开关可以中止VI的运行。学习怎样改变开关的动作属性,以便不用每次运行VI时都要打开开关。操作步骤如下:
前面板
图2-2 练习2-1的前面板
1. 选择File»New,打开一个新的前面板。
2. 选择Controls»Boolean,在前面板中放置一个开关。设置开关的标签为控制开关。
3. 使用标签工具创建 ON 和 OFF 的标签,放置于开关旁。
4. 选中Controls»Graph,在前面板中放置一个波形图(是chart,而不是graph)。设置它的标签为随机信号。这个图表用于实时显示随机数。
5. 把图表的纵坐标改为0.0 到 1.0。方法是用标签工具把最大值从10.0改为1.0。
6. 选择Controls»Numeric,在前面板中放置一个旋钮。设置旋钮的标签为循环延时。这个旋钮用于控制While 循环的循环时间。
流程图
7. 开流程图,按照下图创建流程图。
图2-2 练习2-1的流程图
a. 从 Functions»Structures 中选择 While 循环,把它放置在流程图中。将其拖至适当大小,将相关对象移到循环圈内。
b. 从 Functions» Numeric中选择随机数(0-1)功能函数放到循环内。
c. 在循环中设置Wait Until Next ms Multiple函数 (Functions»Time & Dialog),该函数的时间单位是毫秒,按目前面板旋钮的标度,可将每次执行时间延迟0到10毫秒。
d. 照上面所示的流程图连线,把随机数功能函数和随机信号图表输入端子连接起来,并把启动开关和While 循环的条件端子连接。
8. 返回前面板,调用操作工具后单击垂直开关将它打开。
9. 把该 VI 保存为 LabVIEW\Activity目录中的Random Signal.vi。
10. 执行该 VI。While循环的执行次数是不确定的,只要设置的条件为真,循环程序就会持续运行。在这个例子中,只要开关打开(TRUE),框图程序就会一直产生随机数,并将其在图表中显示。
11. 单击垂直开关,中止该VI。关闭开关这个动作会给循环条件端子发送一个FALSE值,从而中止循环。
12. 用鼠标右键单击图表,选择Data Operations»Clear Chart,清除显示缓存,重新设置图表。
练习 2-1结束
附注与说明
布尔开关的机械动作:
布尔开关有6种机械动作属性可供选择。在前面板上用鼠标右键单击开关,在快捷菜单中选择Mechanical Action就可以看到这些可选的动作。LabVIEW还提供了一个范例示范这些动作,它是位于Examples\General\Controls\booleans.llb的Mechanical Action of Booleans.vi。
2.1.2 移位寄存器(Shift Register)
移位寄存器可以将数据从一个循环周期传递到另外一个周期。在程序设计中,经常要用到它.创建一个移位寄存器的方法是,用鼠标右键单击循环的左边或者右边,在快捷菜单中选择 Add Shift Register。如右图所示。
移位寄存器在流程图上用在循环边框上相应的一对端子来表示。右边的端子中存储了一个周期完成后的数据,这些数据在这个周期完成之后将被转移到左边的端子,赋给下一个周期。移位寄存器可以转移各种类型的数据--数值、布尔数、数组、字符串等等。它会自动适应与它连接的第一个对象的数据类型。下图表示了它的工作过程.
图2-3 Shift Register的工作过程
可以令移位寄存器记忆前面的多个周期的数值。这个功能对于计算数据均值非常有用。还可以创建其他的端子访问先前的周期的数据,方法是用鼠标右键单击左边或者右边的端子,在快捷菜单中选择Add Element。例如,如果某个移位寄存器左边的端口含有三个元素,那么就可以访问前三个周期的数据。
练习 2-2 使用移位寄存器
目的:创建一个可以在图表中显示运行平均数的VI。
前面板
1. 打开一个新的前面板,按照下图所示创建对象。
2. 把波形图表的坐标范围改为0.0到2.0。
3. 在添加竖直坐标之后,用鼠标右键单击它,在快捷菜单中选择Mechanical Action»Latch When Pressed,再选择Operate»Make Current Values Default,把ON状态设置为默认状态。
图2-4 练习2-2的前面板
流程图
4. 按下图创建流程图。
图2-4 练习2-2的流程图
5. 在流程图中添加 While 循环(Functions»Structures),创建移位寄存器。
a. 用鼠标右键单击While循环的左边或者右边,在快捷菜单中选择Add Shift Register。
b. 用鼠标右键单击寄存器的左端子,在快捷菜单中选择Add Element,添加一个寄存器。用同样的方法创建第三个元素。
6. Random Number (0–1)函数(Functions»Numeric)——产生0到1之间的某个随机数。
7. Compound Arithmetic 函数(Functions»Numeric)——在本练习中,它将返回两个周期产生的随机数的和。如果要加入其他的输入,只需用右键单击某个输入,从快捷菜单中选择Add Input。
8. 除法函数(Functions»Numeric)——在本练习中,它用于返回最近四个随机数的平均值。
9. 数值常数(Functions»Numeric)——在While循环的每个周期,Random Number (0–1)函数将产生一个随机数。VI就将把这个数加入到存储在寄存器中的最近三个数值中。Random Number (0–1)再将结果除以4,就能得到这些数的平均值(当前数加上以前的三个数)。然后再将这个平均值显示在波形图中。
10. Wait Until Next ms Multiple函数(Functions»Time & Dialog)——它将确保循环的每个周期不会比毫秒输入快。在本练习中,毫秒输入的值是500毫秒。如果用鼠标右键单击图标,从快捷菜单中选择Visible»Label,就可以看到Wait Until Next ms Multiple的标签。
11. 用鼠标右键单击Wait Until Next ms Multiple 功能函数的输入端子,在快捷菜单中选择Create Constant。出现一个数值常数,并自动与功能函数连接。
12. 将Constant设置为500。这样连接到函数的数值常数设置了500毫秒的等待时间。因此循环每半秒执行一次。注意,VI用一个随机数作为移位寄存器的初始值。如果没有设置移位寄存器端子的初始值,它就含有一个默认的数值,或者上次运行结束时的数值,因此开始得到的平均数没有任何意义。
13. 执行该 VI,观察过程。
14. 把该 VI 保存为LabVIEW\Activity目录下的Random Average.vi。
练习 2-2 结束。
附注:移位寄存器的初值:
上面的练习中对移位寄存器设置了初值0.5。如果不设这个初值,默认的初值是0。在这个例子中,一开始的计算结果是不对的,只有到循环完3次后移位寄存器中的过去值才填满,即第4次循环执行后可以得到正确的结果。
2.1.3 For循环
For循环用于将某段程序执行指定次数。和While 循环一样,它不会立刻出现在流程图中,而是出现一个小的图标,而后您可以修改它的大小和位置。具体的方法是,先单击所有端子的左上方,然后按下鼠标,拖曳出一个包含所有端子的矩形。释放鼠标时就创建了一个指定大小和位置的For循环。
For循环将把它的框图中的程序执行指定的次数,For循环具有下面这两个端子:
N: 计数端子(输入端子)——用于指定循环执行的次数。
I: 周期端子(输出端子)——含有循环已经执行的次数。
上图显示了一可以产生100个随机数并将数据显示在一个图表上的For循环。在该例中,i 的初值是0,终值是99。
练习 2-3 使用For循环
目的:用For循环和移位寄存器计算一组随机数的最大值。
1.打开一个新的前面板,按照下图创建对象。
a. 将一个数字显示对象放在前面板,设置它的标签为“最大值”。
b. 将一个波形图表放在前面板,设置它的标签为“随机数”。将图表的纵坐标范围改为0.0到1.0。
c. 在图表的快捷菜单中选择Visible Items»Scrollbar和Digital Display,并隐藏Plot Legend。
d. 用移位工具修改滚动栏的大小。
图2-5 练习2-3的面板和流程图
2.按照上图画流程图。
3.在流程图中放置一个For循环(Functions»Structures)。
4.在For循环的边框处单击鼠标右键,在快捷菜单中选择Add Shift Register。
5.将下列对象添加到流程图。
a Random Number (0–1)函数(Functions»Numeric)——产生0到1之间的某个随机数。
b 数值常数(Functions»Numeric)——在这个练习中需要将移位寄存器的初始值设成0。
c Max&Min函数(Functions»Comparison)——输入两个数值,再将它们的最大值输出到右上角,最小值输出到右下角。这里只需要最大值,只用连接最大值输出。
d 数值常数(Functions»Numeric)——For循环需要知道需要执行的次数。本练习中是100次。
6.按照上图连接各个端子。
7.运行该VI。
8.将该VI保存为LabVIEW\Activity 目录下的Calculate Max.vi。
练习 2-3 结束。
2.2 分支结构:Case
Case结构含有两个或者更多的子程序(Case),执行那一个取决于与选择端子或者选择对象的外部接口相连接的某个整数、布尔数、字符串或者标识的值。必须选择一个默认的Case以处理超出范围的数值,或者直接列出所有可能的输入数值。Case结构见下图,各个子程序占有各自的流程框,在其上沿中央有相应的子程序标识:Ture、False或1、2、3…。按钮用来改变当前显示的子程序(各子程序是重叠放在屏幕同一位置上的)。
练习 2-4 使用 Case结构
目的:创建一个VI以检查一个数值是否为正数。如果它是正的,VI就计算它的平方根,反之则显示出错。
前面板
1. 打开一个新的前面板,并按照下图所示创建对象。控制对象用于输入数值,显示对象用于显示该数值的平方根。
流程图
2.照下图创建流程图。
图2-6 练习2-4的面板和流程图
3. 从Functions»Structures中选择一个 Case结构,并放置在在流程图中。Case 结构是一个可以改变大小的方框。先来做Ture的情况,照流程图上半部分构造。
a Greater Or Equal To 0? 函数(Functions»Comparison)——如果输入数值大于或者等于0就会返回一个TRUE值。
b Square Root 函数(Functions»Numeric)——返回输入数值的平方根。
c 连好线
d 点击Case框的选择按钮,转入False情况编程
e 数值常数(Functions»Numeric)——这里用于显示错误的代数值-999.00。
f One Button Dialog函数(Functions»Time & Dialog)——在这里它用于显示一个对话框,内容是Error...。
g 字符串常数 (Functions»String)——用Edit Text Tools在对话框中输入字符串。
h 该VI在TRUE或者FALSE情况下都会执行。如果输入的数值大于等于0,VI会执行TRUE Case,返回该数的平方根,否则将会输出-999.00,并显示一个对话框,内容为Error...。
4. 返回前面板,运行该VI。修改标签为Number的数字式控制对象的数值,分别尝试一个正数和负数。注意,当把数字式控制对象的值改为负数时,LabVIEW会显示Case结构的FALSE Case中设置的出错信息。
5. 保存该 VI 到LabVIEW\Activity 目录中的Square Root.vi。
VI 的算法
本练习中的流程图功能相当于代码式编程语言中的下列伪代码:
if (Number >= 0) then
Square Root Value = SQRT(Number)
else
Square Root Value = -999.00
Display Message "Error.. "
end if
练习 2-4 结束。
2.3 顺序结构和公式节点
2.3.1 顺序结构(Sequence Structure)
在代码式的传统编程语言中,默认的情况是,程序语句按照排列顺序执行,但LabVIEW中不同,它是一种图形化的数据流式编程语言。在图2-7左图中,假设有A、B、C、D4个节点,其数据流向如右图所示。按照数据流式语言的约定,任何一个节点只有在所有
图2-7 顺序结构的说明
的输入数据有效时才会执行,所以图中,当且仅当A、B、C3个节点执行完,使得D节点的3个输入数据都到达D节点后,D节点才执行。但是你要注意,这里并没有规定A、B、C3个节点的执行顺序。在LabVIEW中这种情况下,A、B、C的执行顺序是不确定的,如果你需要对它们规定一个确定的顺序,那就需要使用本节介绍的“顺序结构”。
图2-7中的右边是顺序结构的图标,它看上去像是电影胶片。它可以按一定顺序执行多个子程序。首先执行0帧中的程序,然后执行1帧中的程序,逐个执行下去。与Case结构类似,这多帧程序在流程图中占有同一个位置。
练习 2-5 使用顺序结构
目的:创建一个 VI,计算生成等于某个给定值的随机数所需要的时间。
前面板
1. 打开一个新的前面板,并按照下图所示创建对象。
图2-8 练习2-5的前面板
我们约定数据是0到100范围的整数。当前值用于显示当前产生的随机数。“执行次数”用于显示达到指定值循环执行的次数。匹配时间用来显示达到指定值所用的时间。
流程图
图2-8 练习2-5的流程图(共3帧)
1. 在流程图中放置顺序结构(Functions»Structures)。
2. 用鼠标右键单击帧的边框,在快捷菜单中选择Add Frame After,创建一个新帧。重复这个步骤,再创建一个帧。共3桢。
3. 选中第0桢,设置读取初始时间(子)程序
4. 第0帧的下边框上含有一个小方框,其中有一个箭头。这个方框叫做顺序局部变量,可以在同一个顺序结构中的各个帧之间传递数据。用鼠标右键单击第0帧的底部边框,选择Add Sequence Local,创建顺序局部变量。顺序局部变量显示为一个空的方块。当您将某个功能函数与顺序局部变量相连时,方块中的箭头就会自动显示。
5. Tick Count (ms) 函数(Functions»Time & Dialog)——返回启动到现在的时间(以毫秒为单位)。在这里例子里需要使用两个这个函数。另一个在第2帧中。
6. 按图连好线。转入第1帧。该帧是匹配计算,内含一个循环结构。该图中使用的新函数有:
Round to Nearest函数(Functions»Numeric)——在该例中,它用于取0到100之间的随机数到距离最近的整数。
Not Equal函数(Functions» Comparison)——在该例中,它将随机数和前面板中设置的数相比较,如果两者不相等会返回TRUE值,否则返回FALSE。
Increment函数(Functions»Numeric)——在该例中,它将While循环的计数器加1。
7. 按图连好线。转入第2帧
在第0帧中,Tick Count (ms)功能函数将以毫秒为单位表示当前时间。这个数值被连到顺序局部变量,这样它就可以被后续的帧使用。在第1帧中,只要函数返回的值与指定值不等,VI就会持续执行While循环。在第2帧中,Tick Count (ms)功能函数以毫秒为单位返回新的时间。VI从中减去原来的时间(由第0帧通过顺序局部变量提供)就可以计算出花费的时间。
8. 返回前面板,在Number to Match控制对象中输入一个数值,执行该VI。
9. 把该VI保存为LabVIEW\Activity 目录下Time to Match.vi。
练习 2-5 结束。
附注与说明:设置数据范围
在设定一个数据对象时,可以设置对输入数据的限制,利用快捷键选择Data Range… 选项,将会出现如下对话框:
图2-9 设置数据范围
它可以防止用户创建的控制对象或显示对象的值超出某个预设的范围。您可以选择忽略这个值,将它强制修改到范围以内,或暂停程序的执行。在程序执行时,如果发生溢出错误,溢出错误符号将显示在工具栏中的执行按钮的位置。而且,一个立体的黑框将把发生溢出的控制对象包围起来。
2.3.2 公式节点(Formula Node)
公式节点是一个大小可变的方框,可以利用它直接在流程图中输入公式。从Functions»Structures中选择公式节点就可以把它放到流程图中。当某个等式有很多变量或者非常复杂时,这个功能就非常有用。例如等式:y = x2 + x + 1使用公式节点可以表示为:
图2-10 公式节点示意图
利用公式节点可以直接输入一个或者多个复杂的公式,而不用创建流程图的很多子程序。使用文本编辑工具来输入公式。创建公式节点的输入和输出端子的方法是,用鼠标右键单击第0帧的底部边框,选择Add Input (Add Output)。再在节点框中输入变量名称。变量名对大小写敏感。然后就可以在框中输入公式。每个公式语句都必须以分号(;)结尾。
公式节点的帮助窗口中列出了可供公式节点使用的操作符、函数和语法规定。一般说来,它与C语言非常相似,大体上一个用C写的独立的程序块都可能用到公式节点中。但是仍然建议不要在一个公式节点中写过于复杂的代码程序。
下面这个例子显示了如何在一个公式节点中执行不同条件时的数据发送。
请阅读下面这段程序代码,如果X为正数,它将算出X的平方根并把该值赋给Y,如果X为负数,程序就给Y赋值-99。
if (x >=