1 引言
虚拟仪器(简称为VI)的开发环境有很多,但NI公司的LabVIEW最为著名。LabVIEW不同于基于文本的编程语言(如Fortran和C),是一种图形编程语言——通常称为G编程语言,其编程过程是通过图形符号描述程序的行为。LabVIEW使用的是科学家和工程师们所熟悉的术语,还使用了很易于识别的构造G语言的图形符号,即使具有很少编程经验的人也能学会使用LabVIEW。
在实验的物理量测量中,对各种参数的测量都希望能够做到精确和实时。对于测量一些变化较快的物理量,就必须借助仪器本身的缓冲存储器或者使用计算机对仪器进行自动化控制。目前大多的实验仪器都提供了与计算机的接口,所以完全可以用计算机通过各种接口自动地控制仪器数据的测量、数据存储以及基本的数据处理和分析。在编程中,软件使用的是功能比较强大的虚拟仪器编程软件LabVIEW,以及从网上下载的一些基本仪器驱动函数,程序主要实现了数据的实时连续采集显示和缓冲采集指定数据两种功能。
&n
bsp; 2 程序设计
2.1 采集方法分类及其特点
根据测量要求的不同,控制方法分为缓冲采集、实时采集和定时采集三种。这三种方法可以满足一般实验数据采集的要求。(1)当实验要求在仪器允许的条件下,尽可能快地获取测量得到的数据时,就要使用仪器本身的缓冲存储器来采集大量的数据,并显示在计算机上,这样快速采集的数据,才能反应物理量在短时间内的变化。(2)实时采集是指采集、显示数据同时进行,这样可以直观地看出测量物理量的变化,它对数据速率要求不是很高,程序的主要部分是数据处理和显示,用户控制参数有屏幕显示个数以及数据采集时间间隔等。如果采集物理量的变化频率太快,一方面接口受传输数据速率的限制,另一方面计算机受处理能力的限制,使得实时采集不能真正显示数据的变化,实时采集就不能使用。所以当实验采集的物理量变化不是很大的时候,使用实时采集,得到的结果更加直观,便于实验者把握实验数据总趋势,并且显示数据的动态曲线图。(3)数据定时采集也是非常常见和重要的,一般希望仪器在规定时间内采集一段数据。
2.2 程序流程
三种程序流程为:(1)实时采集是控制仪器进行实时地数据采集,每得到一个或一组数据后都通过仪器与计算机的接口传输到计算机,并显示,用户可以根据这些实时数据观察当前实验的一些现象,并保存当前数据。(2)缓冲采集应用在实验仪器本身有存储器的时候,控制仪器参数设置,将采集数据后放入存储器,再通过计算机和仪器接口把数据传输到计算机,交由计算机控制,仪器暂停采集,进行下一步数据处理和分析。如果实验仪器本身没有存储器,为了提高采集速度只有先不考虑数据的处理,直接得到原始数据放入数组函数,等到一定量的时候再放入文件进行存储处理。(3)数据定时采集在程序中加入时间判断语句,当设定的采集时间到了,就调用缓冲采集(或实时采集)数据程序,采集数据并存储数据。
下面主要介绍缓冲和实时采集。在编程时,可以根据仪器的编程手册来设置仪器参数。
2.2.1数据缓冲采集
首先,程序开始时把给定的提示信息(“Please Waiting…”)输入到面板上显示表明程序开始运行,请用户等候;然后设置仪器缓冲的各个参数,如采集量,存储个数等,数据采集存储完后再从缓冲中读出数据通过接口(如GPIB)传输到计算机中,显示数据和图形;最后在仪器面板上显示采集完毕信息(“Transmission has been done!”),恢复初始显示采集数据状态,将得到的数据放入表格中,数据图形显示用LabVIEW的WAVEFORM GRAPH 控件。主要程序流程图如图1。
图1:数据缓冲采集主要流程
2.2.2数据实时采集
数据实时采集与数据缓冲采集类似,首先设置仪器基本参数,然后编辑控制显示两个子函数的程序:StrChangeData和ScrDisplay。当设置完仪器采集类型,精度等参数后,则读取仪器面板信息,分析得到数据,通过程序设置参数来控制动态显示数据和图形。主要程序流程如图2。
图2:数据实时采集主要流程
子函数介绍:StrChangeData是将包含测量数据,测量单位等信息字符串转换成实际数据。ScrDisplay是根据用户设置的参数(屏幕显示个数等)实时调整显示数据和图形。
⑴、StrChangeData子函数:
图3:StrChangeData子函数
根据仪器编程手册上命令将面板上测量信息字符串读取出来,字符串一般包含了数据大小,数据单位量级和数据单位。将字符串连接到一个判断中,根据仪器量程,判断语句中有 5种情况分别是“ ”表示基本单位;“m”表示10-3;“μ”表示10-6;“n”表示10-9;“p”表示10-12。然后将它和由数据字符串转换的数据相乘,就可以得到实际数据了。子函数如图3。
⑵、ScrDisplay子函数:
数据显示在这里比较重要,要将设置屏幕显示个数和数据数组大小做比较,分三种情况:(1)屏幕显示个数大于数据数组大小,表明数据还没采集全,直接将采集到的新数据放入数组中。(2)屏幕显示个数等于数据数组大小,则要刷新数据,首先去掉数组中第一个数据,所有数据前移,再加入新的数据,最后刷新显示图形。(3)屏幕显示个数小于数组大小,表明用户重新调整了图形显示数据个数,首先要删除数组前多余的数据(数组大小-屏幕显示个数+1),剩下数据前移,再加入新采集的数据,最后刷新显示图形。
3 测试实例、结果和讨论
在实际实验过程中,往往会涉及到多台仪器同时采集,每台仪器的采集流程图和程序构架都几乎一样,只是仪器内部指令不同而已,所以可以用上诉方法用一个程序同时控制几台仪器采集数据。实验中用keithley的6517和2000实时采集数据,这两台仪器都有GPIB口,可
图4:实验测试程序
实验中将6517和2000的单个数据采集时间都设定为1秒,图形显示个数设为50,这样同时实时采集两路数据(电流和电压值),数据都动态的显示在图形控件和数据列表中,数据存放在指定文件中。
4 结束语
对数据的实时采集,从具体某种硬件所编写的应用软件都很多,从串口到高速的GPIB口数据采集也不少,但是它们往往都是针对某个具体的硬件或者测试系统所做的,系统的讨论数据采集构架的文章很少。现在随着仪器功能的齐全,计算机处理数据速度和接口传输数据速度的提高,自动化控制实验仪器不仅减少工作量,减少人为误差,而且把数据采集和数据处理一体化,直观地得到测量的物理量,同时利用LabVIEW软件的数据处理能力,可以灵活地实时分析处理数据。
本文创新点为(1)讨论了几种数据采集的软件控制方式,解决了一般数据采集的整体设计。(2)软件都是结构化编写的,可以做成dll文件和子函数,对于不同的仪器,只要修改前面的仪器驱动参数,其他的都可以调用相同的子函数或dll文件,这极大的方便了实验室仪器测控软件的编写。(3)数据直接存放到数据库里,方便数据的管理和使用。明显优于以前传统的数据采集。(4)根据实验测量或时间的要求,可以设计缓冲采集、实时采集和定时采集,接口允许还可以控制多台仪器多通道的同时实时采集。
参考文献
毕虎,律方成,李燕青,李和明.LabVIEW中访问数据库的几种不同方法.微计算机信息,2006,1-1:131-134。
吴苗,许江宁,缪绣华,纪兵.基于LabVIEW的设备驱动程序开发技术研究.微计算机信息,2006,2-1:153-155。
毛建东.基于LabVIEW的单片机数据采集系统的设计.微计算机信息,2006,3-2:41-42。
周伟林,李清峰,杨华勇.基于LabVIEW的AC1077数据采集卡的驱动.微计算机信息,2006,1-1:121-123。