指导书(16学时)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
齐齐哈尔大学
通信与电子工程学院
传感器与虚拟仪器实验
指导书
实验课名称:传感器与虚拟仪器
教学班级:物联网11级
教师姓名:王丽
实验地点:6J513
实验一labview基础操作
一、实验目的及要求:
1、熟悉Labview的基本组件、前面板、程序框图、快捷和下拉菜单、选项板及在线帮助、VI的创建方法
2、掌握编辑前面板和程序框图的方法
3、学会使用联机帮助
4、运行和调试简单VI程序
二、实验环境(包括仪器及型号、使用的平台及相关软件):
计算机,labview8.6软件
三、实验预备知识:
1、一个labview程序由一个或多个虚拟仪器组成,虚拟仪器简称为VI,每个VI由前面板、框图和图标三部分组成,框图是VI的源代码,由labview的图形化编程即G语言组成,图标是VI的图形表示,会在另外的VI框图中作为一个对象使用。
2、所有的LabVIEW 应用程序,即虚拟仪器(VI),它包括前面板(front panel)、流程图(block diagram)以及图标/连结器(icon/connector)三部分。
四、实验内容、步骤及结果:
[练习1] 启动Labview,查找Labview示例
步骤:
1.在“新建”窗口中选择“VI-基于模板-使用指南(入门)-生成、分析和显示”,
单击后右侧便相应出现该模板VI的程序框图预览和该模板VI的功能说明,然后单击“确定”按钮,便同时打开了“生成、分析和显示”模板VI的前面板和程序框图。
2.单击按钮Run运行该程序
3.改变波形和频率,看看波形和频率的变化
[练习2] 熟悉前面板与程序框图的切换及观察程序流的执行过程
1.在练习1的基础上,利用快捷方式将前面板切换到程序框图。
(ctrl+E)
2.单击高亮度显示按钮观察代码的数据流向。
[练习3]随机信号发生器(利用开关控制一系列随机数的产生)
1、新建“lianxi3.vi”
2、控件》查看》图形显示控件》波形图表,单击放入前面板中,程序框图也会出现相应的控件端子。
3、控件》按钮与开关》垂直摇杆开关,单击放入前面板中,
4、在程序框图里单击右键,显示“编程”——然后是“数值”选框,里面有0-1的随机数,挨着“数值常量”,单击放入程序框图中,
5、在程序框图中单击右键,选择编程》结构》while循环,单击放入程序框图中,框住上述端子
6、按照图连线,单击运行按钮,可在前面板中看到波形,单击开关,则停止。
[练习4] 打开lianxi3.vi,为其添加程序注释,并运行和调试VI
1、采用连续运行、单步运行,高亮度程序运行等方法。
2、在程序框图中设置断点
3、使用探针观察运行时连线上的数据。
(查看》工具选板,里面有设置\清除断点以及探针数据,设置断点后,看探针数据的变化,然后清除断点,再看探针数据的变化)
此为设置断点
此为取消断点后,数值一直在变化
实验二数据操作实验
一、实验目的及要求:
1、熟悉几种常见的数据类型
2、熟悉数据类型设定操作
3、掌握数据运算的常用运算方法
4、利用数据操作章节知识完成Labview编程和调试
二、实验环境(包括仪器及型号、使用的平台及相关软件):
计算机,labview8.6软件
三、实验预备知识:
1、工具中的第一个手型工具可以修改数值常量的值
2、工具中的第二个手型工具可以修改标签值,即控件的名称。
3、右击仪表属性》标尺,可以修改仪表控件的显示范围
4、函数》编程》比较中的控件,例如,其输出端为真(T)或假(F),两个输入端,在上面的输入端所输入的数值常量要放在比较的前面,例如
,其输出为真,即T,如果,其输出为假,即F
四、实验内容及结果:
[练习1]假设有一台仪器,需要调整其输入电压,当调整电压超过某一设定电压值时,需要通过指示灯颜色变化发出警告。
1、启动Labview程序,单击VI,建立一个新的VI程序,命名为lianxi21.vi。
这时将同时打开Labview的前面板和后面板(框图程序面板)。
在前面板中显示控制模板,在后面板中显示函数模板。
在两个面板中都显示工具模板。
如果模板中没有被显示出来,可以通过菜单“查看/工具选板”来显示工具模板,通过“查看/控件选板”来显示控件模板(或者是按鼠标右键),“查看/函数选板”来显示函数模板。
如图1所示。
图1
2、前面板设计
输入控制和输出显示可以从控件模板的各个子模板中选取。
本设计中,程序前面板中应有1个调压旋钮,1个仪表,1个指示灯,1个关闭按钮共4个控件。
1)往前面板添加1个旋钮控件:控件—新式—数值—旋钮,如图2所示。
鼠标左键框选后,可以移动位置;左键单击后可以改变大小。
双击将标签改为“调压旋钮”,字的大小可以在“应用程序字体”中修改。
2)往前面板添加1个仪表控件:控件—新式—数值—仪表,如图2所示。
调节方法同上。
标签改为“电压表”。
3)往前面板添加1个指示灯控件:控件—新式—布尔—圆形指示灯,如图3所示。
按住“shift”同时调整大小,将其调整为大小适中的圆形指示灯。
将标签改为“上限灯”。
4)往前面板添加1个停止按钮控件:控件—新式—布尔—停止按钮,如图3所示。
将标签改为“关闭”。
设计的程序前面板如图4所示。
保存文件,名字取为“输入电压控制”。
图2 添加旋钮、仪表控件
图3 添加指示灯、按钮控件
图4 程序前面板
3、框图程序设计——添加节点
每一个程序前面板都对应着一段框图程序。
在框图程序中对VI编程,以控制和操纵定义在前面板上的输入和输出功能。
切换到框图程序设计面板,通过函数模板添加节点。
1)添加1个循环结构:如图5所示,以下添加的节点放置在循环结构框架中。
2)添加1个数值常数节点:函数—数学—数值—数值常量,如图6所示,值改为8。
3)添加1个比较节点“≥”:如图7所示。
4)添加1个选择结构:如图5所示。
图5 添加循环结构、选择结构
图6 添加数值常数
图7 添加比较节点
图8 框图程序——节点布置图1
5)在选择结构的True选项中,添加1个数值常数节点:如图6所示,其值为0。
6)在选择结构的True选项中,添加1个比较节点:如图7所示
7)分别将调压旋钮图标、电压表图标、停止按钮图标从外拖入循环结构中:将上限灯图标拖入选择结构的True选项中。
添加的所有节点及其布置如图8所示。
8)在选择结构的False选项中,添加1个数值常数节点:如图6所示,值为1。
9)在选择结构的False选项中,添加1个比较节点:如图7所示。
10)添加一个局部变量节点:函数—编程—结构—局部变量,如图9所示。
选择局部变量节点,单击鼠标右键,在弹出菜单的“选择项”选项下,选择对象名称“上限灯”,其读写属性默认为“写”属性。
将该局部变量拖入选择结构的False选项中。
添加的所有节点及其分布置如图10所示。
图9 添加局部变量
图10 框图程序——节点布置图2
4、框图程序设计——连线。
如图11、12所示。
使用工具箱中的连线工具,将所有节点连接起来。
当把连接工具放在节点端口上时,该端口区域将会闪烁,表示连线将会接通该端口。
当把连接工具从一端口接到另一端口时,不需要按住鼠标键。
当需要连线弯曲时,单击一次鼠标键,即可以正交垂直方向的弯曲连线,按空格键可以改变转角的方向。
图11 框图程序——连接1
图12 框图程序——连接2
5、运行程序
进入前面板,单击快捷工具栏“运行”按钮,运行程序。
用鼠标“转动”调压旋钮,可以看到仪表指针随着转动;当调整值大于等于8时,上限灯变换颜色。
程序运行画面如图12所示。
图12 程序运行画面
[练习2] 构建VI,产生两个随机数(在0到1之间)并在仪表上显示两个随机数。
仪表上分别设置标签“Random number1”和“Random number2”,使其中一个仪表呈蓝色而另一个仪表呈红色。
当红色仪表上随机数值比蓝色仪表数值大时,用一个方形LED显示绿色,否则LED显示黑色。
运行VI几次并观察结果。
[练习3] 构建停车信号灯。
创建从0到2变化的刻度盘控件,该控件具有3个LED显示:绿色、黄色和红色。
当在刻度盘0位置时,使VI打开绿色LED;当在刻度1上时,变为黄色;当在刻度2上时,变为红色。
(注意:将表盘数据类型设置为长整型)
[练习4] 构造VI产生一个-10到10间的随机数。
在VI的前面板上用指示器来显示随机数的值,然后点亮随机数所在范围对应的LED。
用一个LED显示负的随机数,一个LED显示在0到4范围内的随机数,一个LED显示大于等于5的随机数。
改变LED的属性使其点亮时为亮黄色,关闭时为暗黄色。
(实现方法:(0-1
之间的)随机数*20-10,为布尔型数据“与”)
实验三数组、簇
一、实验目的及要求:
1、掌握创建和使用数组的方法
2、能够使用多种数组内部函数
3、掌握簇的创建和使用方法
4、学会使用内部函数处理簇
二、实验环境(包括仪器及型号、使用的平台及相关软件):
计算机,labview8.6软件
三、实验预备知识:
1、数组是同类型元素的集合,一个数组可以是一维或者多维,可通过数组索引访问其中的每个元素。
索引的范围是0-n-1,n是数组中元素的个数,数组中的元素可以是数据、字符串等,所有元素的数据类型必须一致。
2、簇的元素可以是不同类型的数据,类似于c语言中的struct,簇可以把分布在流程图中各个位置的数据元素组合起来,额可以减少连线的拥挤程度。
3、数组靠拖动产生行和列,数组最开始被创建时只是一个框架,不包含任何内容,可将相应数据类型的前面板对象放入数组框架中。
4、在前面板上,要得到数组的输出数值时,只要将Express》数值显示控件拖动到数组框架中即可。
四、实验内容及结果:
[练习1]字符串练习
设计一个字符串连接与子字符串显示窗口,其前面板设计和程序框图设计如图所示。
[练习2]利用全局变量实现字符串的传递
步骤:
(创建全局变量)
1.在labview的启动界面中的new选择创建全局变量global
2.放置字符串输入控件。
标签改为字符串全局变量
3.将光标放在该控件上,点右键,设置键入时刷新
4.保存,命名为:字符串实例.vi
(创建发送端)
5.新建vi,在前面板放置字符串输入控件,标签为“字符串发送端”,点右键,
设置键入时刷新。
6.进入程序框图,点击右键选择已经建立的全局变量文件
7.照上述框图编写。
8.接收端同理。
9.其前面板设计和程序框图设计如图所示。
[练习3]字符串函数练习
[练习4]创建子VI对两个输入矩阵A和B执行矩阵乘。
矩阵A是n×m矩阵,而矩阵B是m×p矩阵。
产生的矩阵C是n×p矩阵,这里C=AB。
[练习5]构建一个VI,该VI产生500个随机数并绘制在波形图指示器上。
计算随机数的平均值并在前面板上显示结果。
使用Statistics Express VI计算随机数的平均值。
[练习6]设计一个公式波形发生器,其前面板设计和程序框图设计如图所示。
实验四程序结构实验(一)
一、实验目的及要求:
1.学习并掌握For循环和While循环以及它们的不同点
2.学习使用移位寄存器和反馈节点
二、实验环境(包括仪器及型号、使用的平台及相关软件):
计算机,labview8.6软件
三、实验预备知识:
1. While 循环
While 循环可以反复执行循环体的程序,直至到达某个边界条件。
它类似于普通编程语言中的 Do 循环和 Repeat-Until 循环。
While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。
该循环有如下特点:
1)计数从0开始(i=0)。
2)先执行循环体,而后i+1,如果循环只执行一次,那么循环输出值i=0。
3)循环至少要运行一次。
条件端子
循环变量
图While 循环示意图
2. For循环
For循环用于将某段程序执行指定次数。
和While 循环一样,它不会立刻出现在流程图中,而是出现一个小的图标,而后您可以修改它的大小和位置。
具体的方法是,先单击所有端子的左上方,然后按下鼠标,拖曳出一个包含所有端子的矩形。
释放鼠标时就创建了一个指定大小和位置的For循环。
For循环将把它的框图中的程序执行指定的次数,For循环具有下面这两个端子:N: 计数端子(输入端子)——用于指定循环执行的次数。
I: 周期端子(输出端子)——含有循环已经执行的次数。
上图显示了一可以产生100个随机数并将数据显示在一个图表上的For循环。
在
该例中,i 的初值是0,终值是99。
3.移位寄存器(Shift Register)
移位寄存器可以将数据从一个循环周期传递到另外一个周期。
在程序设计中,经常要用到它.创建一个移位寄存器的方法是,用鼠标右键单击循环的左边或者右边,在快捷菜单中选择 Add Shift Register。
移位寄存器在流程图上用在循环边框上相应的一对端子来表示。
右边的端子中存储了一个周期完成后的数据,这些数据在这个周期完成之后将被转移到左边的端子,赋给下一个周期。
移位寄存器可以转移各种类型的数据--数值、布尔数、数组、字符串等等。
它会自动适应与它连接的第一个对象的数据类型。
下图表示了它的工作过程.
图Shift Register的工作过程
可以令移位寄存器记忆前面的多个周期的数值。
这个功能对于计算数据均值非常有用。
还可以创建其他的端子访问先前的周期的数据,方法是用鼠标右键单击左边或者右边的端子,在快捷菜单中选择Add Element。
例如,如果某个移位寄存器左边的端口含有三个元素,那么就可以访问前三个周期的数据。
4.分支结构:Case
Case结构含有两个或者更多的子程序(Case),执行那一个取决于与选择端子或者选择对象的外部接口相连接的某个整数、布尔数、字符串或者标识的值。
必须选择一个默认的Case以处理超出范围的数值,或者直接列出所有可能的输入数值。
Case结构见下图,各个子程序占有各自的流程框,在其上沿中央有相应的子程序标识:Ture、False或1、2、3…。
按钮用来改变当前显示的子程序(各子程序是重叠放在屏幕同一位置上的)。
5. 顺序结构(Sequence Structure )
在代码式的传统编程语言中,默认的情况是,程序语句按照排列顺序执行,但LabVIEW 中不同,它是一种图形化的数据流式编程语言。
在左图中,假设有A 、B 、C 、D 4个节点,其数据流向如右图所示。
按照数据流式语言的约定,
图
任何一个节点只有在所有的输入数据有效时才会执行,所以图中,当且仅当A 、B 、C 3个节点执行完,使得D 节点的3个输入数据都到达D 节点后,D 节点才执行。
但是你要注意,这里并没有规定A 、B 、C 3个节点的执行顺序。
在LabVIEW 中这种情况下,A 、B 、C 的执行顺序是不确定的,如果你需要对它们规定一个确定的顺序,那就需要使用本节介绍的“顺序结构”。
图中的右边是顺序结构的图标,它看上去像是电影胶片。
它可以按一定顺序执行多个子程序。
首先执行0帧中的程序,然后执行1帧中的程序,逐个执行下去。
与Case 结构类似,这多帧程序在流程图中占有同一个位置。
四、实验内容及结果:
[练习1] 写出1+2+3+4+…+100的程序。
(利用移位寄存器实现)
提示:进行第一次运算的是0+0,For 循环中的重复端子是从0开始计数,移位即寄存器在没有初始化的情况下,默认的数值是0,所以第一次运算的是0+0,第二次运算的是寄存器的0与重复端子的1
相加,所以循环要进行101次。
移位寄存器的初始化:移位寄存器的初始化是非常必要的,因为只要用户不退出VI ,移位寄存器便可记录上次运算完时的结果,所以上面的程序在第二次执行时输出的结果不是5050,而是10100!添加初始化即可。
[练习2]计算一组随机数的最大值和最小值
提示:在程序框图中,放置一个For循环,设置循环次数为10次。
单击边框选择添加两个移位寄存器,分别初始化为0和1。
新建一个VI,在前面板上放置一个波形图标,用它来记录产生的随机数。
同时在前面板上放置两个数值显示控件“最大值”和“最小值”,用来显示随机数中的最大值和最小值。
放置随机数函数和最大最小值函数与程序框图中,其中最大最小值函数位于编程→比较→最大值与最小值。
然后连线。
(函数)编程》比较,里面有最大值与最小值)
[练习3] 利用While循环和移位寄存器,设计一个控制LED灯闪烁的VI,LED 灯闪烁的时间可以在程序中设定。
实验五程序结构实验(二)
一、实验目的及要求:
1、熟悉labview中一些函数的使用
2、熟悉顺序结构、Case结构、公式节点的使用方法
3、能够鉴别常见的结构连线错误
二、实验环境(包括仪器及型号、使用的平台及相关软件):
计算机,labview8.6软件
三、实验预备知识:
1、c语言的for循环包括初值设定、循环条件、更新表达式三部分,而labview的for 循环允许设定的只有一个循环次数,系统默认从零开始循环。
For循环与数组操作密不可分。
开启索引后,for循环可以根据数组长度自动设定循环次数,N端子可以不连接任何数据。
2、labview的循环可以选择“禁用索引”和“开启索引”,数据流入循环时,禁用索引时,提取的是全部数据,开启索引时,每次循环使用数组中的一个元素。
数据流出循环结构体时,禁止索引时,数据流出的是最后一次循环产生的数据,开启索引时,每次循环产生的数据会形成一个数组。
3、移位寄存器相当于内存空间,存储中间数据,创建移位寄存器的方法是,用鼠标右击循环的左边或者右边,在快捷菜单中选择add shift register.
移位寄存器在流程图上用在循环边框上相应的一对端子来表示。
四、实验内容及结果:
[练习1] 创建VI,在前面板上放置3个LED。
程序运行时,第一个LED打开并保持打开状态。
1秒以后,第二个LED打开并保持打开状态;再过2秒,第三个LED打开并保持打开状态。
所有LED都保持打开状态3秒,然后程序结束。
提示:使用3帧单层顺序结构,每帧包含延时函数。
[练习2]构建VI,使用公式节点来计算下面的公式:提示:公式表达式位置
y1=10sin(a)+b
y2=a**3+b**2+100
输入变量是a和b,输出是y1和y2。
也可以使用表达式
数值指示器显示最大心率。
使用公式节点计算心率公式。
[练习4]利用case结构的多分支,进行下列简单程序设计
要求:星期一显示:新的一周开始了,好好学习!
星期二显示:今天是星期二,继续努力!
星期三显示:今天是星期三,生活愉快!
星期四显示:周四了,继续努力!
星期五显示:今天是星期五,站好最后一班岗!
星期六显示:周末愉快!
星期日显示:好好休息!
提示:显示对话框位置如图:
实验六创建子VI
一、实验目的及要求:
熟悉构建和使用子VI,掌握使用Icon Editor和指定端子
二、实验环境(包括仪器及型号、使用的平台及相关软件):
计算机,labview8.6软件
三、实验预备知识:
1、子VI(SubVI)相当于普通编程语言中的子程序,也就是被其他的 VI 调用的VI。
可以将任何一个定义了图标和联接器的 VI 作为另一个 VI 的子程序。
在流程图中打开Functions»Select a VI…. ,就可以选择要调用的子 VI 。
构造一个子VI 主要的工作就是定义它的图标和联接器。
每个VI 在前面板和流程图窗口的右上角都显示了一个默认的图标。
启动图标编辑器的方法是,用鼠标右键单击面板窗口的右上角的默认图标,在弹出菜单中选择Edit Icon。
四、实验内容及结果:
[练习1]构建VI,使用LabVIEW固有函数计算用户输入3个数的平均值。
在程序中,首先将3个数求和,接着再除以3,得出的平均值显示在前面板上。
另外,再添加一段程序,将平均值乘以[0,...,1]范围内的随机数。
将计算平均值的一组代码创建成子VI,并编辑图标以便表示子VI的功能,即计算3个数的平均值。
[练习2]创建子VI将华氏温度转化为摄氏温度,其转换关系为:C=(F-32)/1.8。
另外添加Select函数(位于Function选项板的Programming->Comparisons子选项板上),Select函数将返回连接到True或False输入端子上的输入值,具体返回哪一个取决于布尔型输入的值。
[练习3]创建子VI计算年龄,出生日期和当前日期作为输入。
用三个独立的整形控件来输入日期:一个表示日,一个表示月,一个表示年。
月份用阿拉伯数字表示。
例如,1表示一月,2表示二月,等等。
为VI创建图标,将输入和输出连接到图标的端子上。
实验七图表和图形实验(一)
一、实验目的及要求:
1、掌握Chart和Graph的特征;
2、学会利用XY Graph构成利萨育图形。
二、实验环境(包括仪器及型号、使用的平台及相关软件):
计算机,labview8.6软件
三、实验预备知识:
1、为了方便地显示波形,LabVIEW专门预定义了波形数据类型。
它实际上就是按照一定格式预定义的簇,在信号采集,处理和分析过程中经常会用到它。
2、波形数据控件携带的数据包含了时间波形的基本信息,因此可以直接作为Chart和Graph的输入。
横坐标代表时间,纵坐标代表Y值
3、Chart可以将新测得的数据添加到曲线的尾端,从而反映实时数据的变化趋势,它主要用来显示实时曲线。
对于标量数据,Chart图表直接将数据添加在曲线的尾端。
对于一维数组数据,它会一次性把一维数组的数据添加在曲线末端,即曲线每次向前推进的点数为数组数据的点数。
4、Graph和Chart的区别在于Graph是一次性将现有数据绘图,在绘图之前先自动清空图表,而不会将新数据添加到曲线的尾端。
根据显示方法,Graph又分为波形图、XY曲线图、强度图、数字时序图和三维图。
四、实验内容及步骤:
[练习1] Chart和Graph的比较
目的:创建一个VI,用Chart和Graph分别显示40个随机数产生的曲线,比较程序的差别。
前面板及流程图如下
图 Chart和Graph的比较
显示的运行结果是一样的。
但实现方法和过程不同。
在流程图中可以看出,Chart 产生在循环内,每得到一个数据点,就立刻显示一个。
而Graph在循环之外,40个数都产生之后,跳出循环,然后一次显示出整个数据曲线。
从运行过程可以清楚地看到这一点。
值得注意的还有For循环执行40次,产生的40个数据存储在一个数组中,这个数组创建于For循环的边界上(使用自动索引功能)。
在For循环结束之后,该数组就将被传送到外面的Graph。
仔细看流程图,穿过循环边界的连线在内、外两侧粗细不同,内侧表示浮点数,外侧表示数组
[练习2] XY图形控件(XY Graph)
波形图(Waveform Graph)有一个特征,其X是测量点序号、时间间隔等,Y是测量数据值。
但是它并不适合描述一般的Y值随X值变化曲线。
适合于这种情况的控件是XY Graph。
我们通过一个构成利萨育图形的例子来看一下它的使用。
我们知道如果控制XY方向的两个数组分别按正弦规律变化(假设其幅值、频率都相同),如果它们的相位相同,则利萨育图形是一条45度的斜线,当它们之间相位差90度时为圆,其他相位差是椭圆。
利用XY Graph构成利萨育图形。
面板和框图如图所示。
面板上除了一个XY Graph外,还有一个相位差输入控件。
在框图中使用了两个Sine Waveform.vi,第一个所有输入参数(包括频率、幅值、相位等)都使用缺省值,所以其初始相位为0。
第二个将其初始相位作为一个控件引到面板上。
它们的输出是包括t0、dt和Y值的簇,但是对于XY Graph只需要其中的Y数组,因此使用波形函数中的Get Waveform Components函数分别提取出各自的Y数组,然后再将他们捆绑在一起,连接到XY Graph就可以了。
当相位置为45度时,运行程序,得到如图所示的椭圆。