1 引言
虚拟仪器(简称为VI)的开发环境有很多,但NI公司的LabVIEW最为著名。LabVIEW不同于基于文本的编程语言(如Fortran和C),是一种图形编程语言——通常称为G编程语言,其编程过程是通过图形符号描述程序的行为。LabVIEW使用的是科学家和工程师们所熟悉的术语,还使用了很易于识别的构造G语言的图形符号,即使具有很少编程经验的人也能学会使用LabVIEW。而VB作为可视化编程工具,不仅简单容易上手,而且功能强大,可以开发友好的用户使用界面,同时通过ActiveX控件、DLL(动态链接库)等多种方法实现与其他软件的联合开发。
Microsoft把所有以COM为基础的技术统称为ActiveX技术。自动化是大多数ActiveX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。Labview实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将 Labview作为Visual Basic语言的一个ActiveX部件调用。
本文以Agilent公司的E5262A仪器为例,通过Labview和VB混合编程,实现了多种数据采集和自动化控制系统。
2 程序设计
程序设计以VB作为编程界面,同时调用Labview的图形显示控件,而动态链接库则要使用Win的Kernel32.dll,以及Labview的 Gpib32.dll、Visa32.dll、仪器驱动安装时生成的E5260_32.dll等。程序流程图如下图所示。
首先安装仪器自动的驱动库,接口一般采用通用的GPIB标准,不仅数据、命令传输速度快,而且一张GPIB卡能够同时控制最多16台仪器。仪器驱动安装后,会生成一个以仪器为名的DLL文件。可以利用Labview的MAX进行接口扫描,发现新增加的仪器。安装Labview后,在系统目录下有 gpib32.dll文件。
其次当电脑中安装了Labview后,在VB的工程引用中选取所需要的库文件,其中包括了Agilent的VISA库文件;在控件引用中,选中 National Instrument公司的CW(波形显示)等控件;Microsoft的通用对话控件。这样就可以直接使用NI公司Labview的控件了。在VB工程中,添加仪器的动态链接库(DLL)声明,包括将要使用的常量字符、GPIB、VISA接口库函数、仪器(E5262A)库函数、以及系统的Kernel32库函数等等。如:Declare Function viOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Long 等等。
程序设计中首先出现用户选择界面,选择所需要的测量方式,进入下一界面,填写测量参数,程序进行仪器初始化,根据送入参数进行测试,测试结果由Labview控件显示,用户指定文件保存信息将数据保存到文件中。
VB自带了时钟控件Timer,但时间量级是毫秒,快速测量或者反复切换测量状态时不方便,程序中采用了Win的API函数,通过调用 Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)函数,更加方便的对程序进行控制。
E5262数据采集和自动测量要求:测量一般为三极管的电压电流变化曲线和漏电流,因此要加入输入电压值一、电压二作为两者间的电压值,如使用共发射极时,可以测量不同Vce电压值时,Vbe的电流曲线。即先固定Vce的电压值,改变Vbe值,得到伏安曲线。
图1、PNP三极管示意图
根据实验要求设计数据采集模式为以下几种:
模式1:固定通道一,二的电压,即固定Vce、Vbe值,测量电流Ibe。
模式1:固定通道二的输出电压,即固定Vce,以三角波形方式改变通道一(即Vbe)的输出电压,测量电流Ibe。
模式2:固定通道一的输出电压,即固定Vbe,以三角波形改变通道二(即Vce)的输出。测量电流Ibe。
图2 程序流程图
数据保存格式规范为数据序列号、实验日期、采集时间、通道一电压值、通道二电压值、采集电流值。
主要程序代码说明:
ReDim OnePeroI((CInt((vdmax - vdmin) / vdstep)) * CInt(tspotcount.Text)) //根据测量数据要求动态分配空间
For vg = vgmin To vgmax Step vgstep //进行三角波电压输出循环
For vd = vdmin To vdmax Step vdstep//进行三角波电压输出循环
If Option1.value = True Then //判断使用通道测量类型
If Combo1.ListIndex = 0 Then//判断输入类型,电流还是电压
ret = age5260_force(vi, pins(0), age5260_VF_MODE, 2, vd, idcomp, 0)
End If
End If
If RunorStop = True Then //是否被用户强行终止测量
test_stopmeas //仪器设置清零
Exit Sub //退出
Else
spot_meas //进行测量
OnePeroI(CurrentIndex) = meas //保存数据到数组
Sleep Sleeptime //延迟,控制采用速率
End If
CWGraph1.PlotY OnePeroI //Labview控件显示图形
Next vd//通道循环
CWGraph1.ClearData //图形更新
Next vg//通道循环
3 测试实例、结果和讨论
图3 基于Labview和VB仪器采集自动化控制界面
程序在Labview7.1和VB6.0软件下,系统为Windows XP运行测试通过。仪器使用的是Agilent公司的E5262A,实验测量的是三极管在不同偏压下的电流值曲线,程序中可以由自定义的函数设置任意形状的输出电压值。结果表明程序不能快速的自动化测量采集数据,将采集的不同对比图形实时显示,还能够进行初步的数据处理,极大的方便了实验的进行。
4 结束语
本文的创新点:
(1)进行基于VB和Labview的联合混合编程,,利用Labview的强大仪器驱动和实验仪器图形显示、VB的可视化编程完成友好的用户界面进行混合编程,实现了应用系统的无缝集成,丰富了软件的测量功能,缩短了程序的开发周期。
(2)充分的利用了AcitiveX控件和DLL(动态链接库)等多种方法,不仅能够满足实验测量要求,还增强了仪器的测量功能,充分的发挥了虚拟仪器编程的强大能力。
(3)程序中可以通过自己开发的函数进行数据处理,在测量显示存储数据的同时,将初步结果也计算显示出来,这样不仅直观的监控测量系统,还能随时根据结果进行参数的调整。
参考文献
[1]毕虎,律方成,李燕青,李和明.Labview中访问数据库的几种不同方法.微计算机信息,2006,1-1:131-134。
[2]吴苗,许江宁,缪绣华,纪兵.基于Labview的设备驱动程序开发技术研究.微计算机信息,2006,2-1:153-155。
[3]毛建东.基于Labview的单片机数据采集系统的设计.微计算机信息,2006,3-2:41-42。
[4]周伟林,李清峰,杨华勇.基于Labview的AC1077数据采集卡的驱动.微计算机信息,2006,1-1:121-123。