资源描述
LabVIEW 计算机实测与控制
摘要:
本实验主要研究熟悉了LabVIEW的编程语言和编程环境,并利用其与硬件相配合,完成了一系列控制及测量等。主要涉及温度测量,光强测控,红绿灯控制等。
关键字:LabVIEW,测控。
1.引言
1.1 虚拟器概述
虚拟仪器(virtual instrument)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。图1-1反映了常见的虚拟仪器方案。
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的运行机制
所有的LabVIEW应用程序,即虚拟仪器(VI),它包括前面板(front panel)、流程图(block diagram)以及图标/连结器(icon/connector)三部分。
前面板是图形用户界面,也就是VI的虚拟仪器面板,这一界面上有用户输入和显示输出两类对象,具体表现有开关、旋钮、图形以及其他控制(control)和显示对象(indicator)。
流程图提供VI的图形化源程序。在流程图中对VI编程,以控制和操纵定义在前面板上的输入和输出功能。流程图中包括前面板上的控件的连线端子,还有一些前面板上没有,但编程必须有的东西,例如函数、结构和连线等。
VI具有层次化和结构化的特征。一个VI可以作为子程序,这里称为子VI(sub VI),被其他VI调用。图标与连接器在这里相当于图形化的参数。
1.4 LabVIEW的操作模版
LabVIEW具有多个图形化的操作模板,用于创建和运行程序。这些操作模板可以随意在屏幕上移动,并可以放置在屏幕的任意位置。操纵模板共有三类,为工具(Tools)模板、控制(Controls)模板和功能(Functions)模板。
工具模板为编程者提供了各种用于创建、修改和调试VI程序的工具。如图1-2所示,由左而右由上而下依次为:操作工具,选择工具,标签工具,连线工具,对象弹出菜单工具,漫游工具,断点工具,探针工具,颜色提取工具和颜色工具。
控制模板可以给前面板添加输入控制和输出显示。每个图标代表一个子模板。如图1-3所示,由左而右由上而下依次为:数值子模板,布尔值子模板,字符串子模板,列表和环子模板,数组和群子模板,图形子模板,路径和参考名子模板,控件容器库子模板,,对话框子模板,修饰子模板,用户自定义的控制和显示和调用存储在文件中的控制和显示的接口。
功能模板是创建框图程序的工具。该模板上的每一个顶层图标都表示一个子模板。如图1-4所示,由左而右由上而下依次为:结构子模板,数值运算子模板,布尔逻辑子模板,字符串运算子模板,数组子模板,群子模板,比较子模板,时间和对话框子模板,文件输入/输出子模板,仪器控制子模板,仪器驱动程序库,数据采集子模板,信号处理子模板,数学模型子模块,图形与声音子模块,通讯子模板,应用程序控制子模块,底层接口子模块,文档生成子模板,示教课程子模板和用户自定义的子VI模板。
2. 实验内容
2.1 利用LabVIEW进行数据采集——温度测量
图2-1为温度测量前面板的设计,而图2-2为相应的温度测量流程图。
我们这里使用的是温度-电压传感器(热敏电阻),电压随温度在一定范围内近似呈线性关系,换算公式为:
Eq2-1
图中,Creat ID, AD INT, AD Read, AD Close以及AD Release为与硬件配套的内置LabVIEW程序,分别对应于创建设备对象,初始化和启动AD,读取AD数据,停止AD设备,释放端口资源。
该程序通过一个while循环结构实现,每隔10ms端口测一组数据,然后在前面板以曲线及温度计形式显示出来,以用户按stop键退出循环,释放资源。
通过此程序可以进行LabVIEW的数据采集,实现从硬件到到虚拟器的数据传递。
2.2 利用LabVIEW进行输出控制——光强测量与控制
图2-3为光强测量与控制的前面板的设计,而图2-4为相应的流程图。
我们这里是通过将传感器测量值与光强呈线性关系进行转换,换算公式为:
Eq2-2
整个程序通过while循环结构实现。共分成两支,上支为对光强的控制,在前面板上用户通过调整旋钮实现:下支为对光强的测量,在前面板以图线及光强计的形式实现。
该程序实现了对数据的输出控制,可以很好地对光强的输出做实时监控,在生产实践方面有较好的应用。
2.3 模拟红绿灯(改进)
改进目的是模拟现在上海的红绿灯,而不是单纯的在红黄绿三灯之间转换,要求循环运作。故一般分为4部分:第1部分:红灯亮,准备过渡到黄灯第2部分:红黄灯同时亮,准备过渡到绿灯。第3部分:绿灯亮,准备过渡到黄灯。在最后三秒内以闪烁的方式过渡。第4部分:黄灯亮,准备过渡到红灯。同时将原来仅限于个位数的倒计时扩展为两位数,如此,与现有的交通信号灯更为符合。
图2-5所示为相应流程图最复杂的一部分(由于它涉及绿灯闪烁的部分),另外3个case结构与其相似,而如图2-6所示为红绿灯系统的前面板。
在前面板上,灯与倒计时为Indicator,而红黄绿灯时间的控制为Control,用户可以根据需要调节每个灯亮的时间(0-99秒)。
在流程图上,我们对于之前的红绿灯做了如下修正和改进:
1) 在设计绿灯闪烁的部分,首先把time定义为DBL格式,然后设计500ms循环一次,每次time减去0.5,通过乘以2判断奇偶,奇亮偶暗。
2) 由于在前面板上加了十位数的显示,因此在流程图上多了一个case结构显示十位数数字。算法也有所不同。[time/10-(time/10取整)]*10就可以得到个位数,而time/10去整就得到十位数数字。
3) 之前循环一次是time-1然后和0比较,再将该值做一次计算。而现在需要两次计算(个位数和十位数),因此需要把time-1赋值给time,然后用该局部变量来计算(否则time-1的值只能使用一次,第二次计算的初始值就不再是time-1)。
程序流程改动中需要注意的几个关键点是:
1) 需要使用顺序框来安排计算的先后顺序。
2) 局部变量的使用,要分清Control和Indicator的区别以及write和read的区别。
3) Case结构的判断是整数,故需对条件进行人为的调整方可继续。
该程序很好地成功再现了社会上红绿灯的运行模式,而且设计简洁,可随意调节更改,可以胜任红绿灯的控制程序。
3. 实验总结和讨论
3.1 总结
本次试验较好地实现了预期目标,完成了从硬件到虚拟器的数据传递以及虚拟器对硬件的输出控制,并设计模拟了现今的红绿灯的工作模式。
3.2 讨论
这里对程序设计中容易出错的几个要点进行一下讨论:
1) 在常值数组里,插入的数值常量尽管显示的是0,但其缺省值是没有,即使是0也需要输入。
2) 如果是一数值处在干线上,输入到几条分支上,并非并列输入计算,而是由一条分支计算完的值赋给下一条分支,因此需要额外注意。
3) 循环结构中,time-1的值并非先赋给time,而是先进行之后的运算,最后再将该值赋给time,进行下一步的判断,因此需加上一个顺序结构(原来自带的程序红绿灯的故障也是缘于此)。
4) 局部变量需要分清Control和Indicator的区别。
5) 局部变量的定义,需要注意是否在之后的计算中都是整数,若不确定,建议用DBL格式(资源允许的情况下)。
参考资料:
1. 北京中科泛华测控技术有限公司,《计算机虚拟仪器图形编程LabVIEW实验教材》
2. 李扬,郑莹娜.图形化编程语言LabVIEW环境及其开放性.计算机工程.第25卷第4期.
展开阅读全文