1、基于 Visual Basic 的数据采集卡控制技术 詹根基 (华东交通大学机电学院)【摘要】本文通过对美国 National Instruments 公司的数据采集卡进行具体的分析,介绍了基于 Visual Basic 软件,运用 OCX(ActiveX 控件)和 DLL(动态连接库)开发了控制数据采集卡程序的方法。【关键词】数据采集卡, Visual BasicBased on Visual Basic Control Technology of Data Acquisition CardGenji Zhan Houkun GuoMechanical and Electrical Engi
2、neer School East China Jiaotong UniversityAbstract The paper analyzes data Acquisition card (DAQ) of American National Instruments Company Limited in detail. By application of Visual Basic, It introduces how to develop control DAQ program by using OCX and DLL.Key Words DAQ Visual Basic OCX DLL1 前言 在
3、 Windows 98 中,也许我们可以使用 Visual C+,利用 inp 和 outp 的输入输出函数指令,达到和 DOS 模式下相同的缓冲器控制功能。但在较高级的操作系统中(如 Windows 2000 和 Windows XP),这种做法就不行了。这是因为由于 Windows 操作系统是一个受保护的系统。微软认为,如果随便就可以下达硬件控制命令,将会危害整个系统的稳定性。那如何开发硬件控制程序呢?Visual Basic 本身的程序无法直接控制数据采集卡,但通过借助 DLL 或额外的 OCX 控件的协助。我们所写的控制程序代码就经过层层的转译,一直到数据采集卡上的缓冲器;而检测程序代
4、码则通过相反的管道将状态返回到我们所写的程序里。在 Visual Basic 的程序中,如果使用 DLL 的方式通信,这些额外的 DLL 必须事先告诉 Visual Basic 编译器,通常这些 DLL 被声明在模块中,以便 Visual Basic 知道如何建立和 DLL 的连接管道。至于使用 OCX 的部分,美国 National Instruments 公司在其光盘中备有 OCX 可以使用。在安装其光盘后,就会有这些必要的 OCX 存在。在 Visual Basic 工作环境中的【工程】| 【部件】的方式加入就可以了。Visual Basic 简单易学之外,开发控制程序的成本比起组态软件
5、来说也比较低,而且通过ActiveX 技术可以实现 VB 和 Matlab 的混合编程。Matlab 是一种功能强大的数学软件,利用它附带的各种专业软件包可以实现多种学科的专业计算,大大增强开发软件的功能。比如,使用它的 FFT()函数可以像加法计算一样进行快速傅立叶变换,但是 Matlab 本身作为一种数学软件不便于编写专业的应用软件。OCX 控件的方法使用上比较方便,可以按照属性、事件、方法等接口成员来操作 OCX,但其性能的表现比 DLL 稍微差一些。使用 OCX 控件的方法,也会被系统转译成 DLL 动态连接库或直接控制驱动程序。所以使用 DLL 动态连接库的速度比较快,而且程序的灵活
6、性也可以达到最大。本文着重介绍用 DLL 用于温度测量系统的方法。2 系统配置:目前,数据采集和传输所用的计算机接口卡已基本标准化,诸如美国 National Instruments 等公司推出用于 PC 的数据采集卡和 D/A 数据输出卡,可通过 PCI 总线插槽直接置入 PC 机,而且有完善的软件支持 (该公司的 LabView 软件) ,特别适宜工业控制和实验室应用。21 硬件:系统构成以研华 IPC 为主机,用作系统的操作平台;采用美国 National Instruments 公司 E 系列的数据采集卡作为过程输入通道,实现测量信号的输入信号的输出,使用温度计是三线式的电阻式温度传感
7、器(Pt-100)。我们使用的是 100oC 和 0oC 时的电阻比值为 1.3851,所以利用 Pt-100 的电压换算成实际温度的公式为 TX=(VO/1.9952)-100)/0.3851 示意图如下所示:图一22 软件将 NI 的数据采集卡安装到计算机的 PCI 接口槽后,还必须为计算机安装 NI 特别为采集卡编写的一套驱动采集卡所需要的驱动程序和和控制工具 DLL。要使用 DLL 进行数据采集,必须在程序的工程中包含所需的 DLL 声明。NI-DAQ 中已经有为 Visual Basic 声明好的模块可供使用,分别为 nidaq32.Bas、 nidex32.Bas、 nidaqcn
8、s.Bas 和 nidaqerr.Bas。直接把 DLL 的函数声明的模块拷贝到项目的目录下这样,我们就可以调用这些 DLL 程序来达到监控的功能了。3 软件的设计和开发31 数据交换流程:通过 OCX 或是 DLL 控制数据采集卡时,其流程如图二所时,通过层层的转译,程序中的控制要求就可以到达数据采集卡,而数据采集卡的数据也就可以返回到程序。Visual Basic用 OCX? 使用 OCX使用 DLL驱动程序操作系统硬件 I/O图二、硬件数据输入输出流程在数据采集卡上的模拟输入通道取得信号,所取得的信号分为单点采集和波形取样两种方式。对于测量温度这种改变速率较底的情况,使用单点取值的方式就
9、可以了。下面给出的程序就是这种方式。32 控制界面设计:下面以温度控制系统为例介绍主画面的设计。系统的主要程序在 Timer 控件的 Timer 事件中实现,用轮询的方法在一定的时间间隔不停地读取温度数据。温度实时曲线用作者自己制作的 ActiveX 控件来实现为了给读者最直接的感受,主界面的设计如图三所视:图三、温度监控系统界面33 程序开发数据采集的过程如下:、指定设备号码、指定测量通道、调用 DLL 的取值函数、把电压信号转换成温度值、温度的显示和画图。部分的程序如下:在 Timer1 的 Timer 事件中键入以下代码:dim iStatus as Integer,iDevice as
10、 Integer,iChan as Integerdim dVoltage as Double, VolValue as Double, dGain as IntegeriDevice=1 指定设备号码iChan=1 指定测量通道,一共有个单接点的通道iGain=1 指定通道增益,设为可测量正负伏的信号,如果测量正负伏,则设为-iStatus=AI_VRead(iDevice, iChan ,iGain, dVoltage) 调用 DLL 的取值函数, iStatus 返回值为为正常,否则数据采集卡错误if iStatus=0 ThenVolValue =Format(dVoltage,”0.
11、00”)把取到的电压值存在变量 VolValue 中,等待转换成温度值txtTemperature.text=( VolValue /1.9952)-100)/0.3851wyRealCur1.SetCurrentVal(VolValue) 实时显示温度曲线elseMsgBox “取值错误!”,vbCritical+vbOKOnly,”数据采集卡错误”Endif4 结论作者给出了一般的在 Windows 环境下基于 Visual Basic 软件,运用 OCX 和 DLL 实现对控制系统中的数据采集卡的程序开发的步骤和方法。实践表明该方法不仅切实可行,而且简便,快捷,开发成本低。对其它的设备也有一定的参考价值。 【参考文献】1. 建立支持 VB 进行 1/0 断口操作的动态链接库, 测控技术 .1999.92.范逸之。Visual Basic 与 RS-232 串行通信控制,清华大学出版社,20023.范逸之。Visual Basic 与分布监控系统RS232/485 串行通信,清华大学出版社, 2002