引 言
虚拟仪器技术是20世纪90年代发展起来的一种新技术,融计算机和总线技术、微电子技术、测量技术于一身,它是对传统仪器的重大突破,是计算机技术与仪器技术相结合的产物。它利用计算机系统的强大功能,结合相应的硬件,大大突破传统仪器在数据处理、显示和存储以及系统维护和扩展等方面的限制。虚拟仪器的众多优点使其得到了广泛的应用,然而当今著名的虚拟仪器开发软件(如LabVIEW等)只能支持NI公司生产的数据采集卡,而不能直接驱动普通的数据采集卡。本文重点研究了在虚拟仪器开发软件平台LabVIEW下使用普通数据采集卡的方法。
1 虚拟仪器开发平台LabVIEW与数据采集卡的连接
LabVIEW是美国NI公司推出的一种基于G语言(Graphics Language),即图形化编程语言的虚拟仪器软件开发工具,具有强大的数据采集功能,通常只支持NI公司的数据采集卡,而这些卡的价格比较昂贵。因此,为了能在LabVIEW平台上驱动普通的数据采集卡,用户必须通过LabVIEW所提供的调用库函数节点(call Library Function Node,CLFN)及代码接口节点(Code Interface Node,CIN)等功能,将功能强大、编程灵活、而且已有很多现成程序模块的C语言同Lab-VIEW中编程直观方便的图形化G语言结合起来,从而实现用普通的数据采集卡来采集数据的功能,使LabVIEW在对硬件的支持上有了一个质的飞跃。
在LabVIEW中利用CLFN节点可以较容易地实现访问动态链接库(DLL),而且在购买数据采集卡的时,厂商一般会给用户提供动态链接库。所以研究在LabVIEW平台下调用动态链接库驱动普通的数据采集卡来实现数据采集更具有普遍性。
2 基于动态链接库的普通数据采集卡的驱动
2.1 动态链接库概述
动态链接是一种应用程序在运行时与库文件连接起来的技术。动态链接库(DLL)是一个可以多方共享的程序模块,提供函数供Windows应用程序或其他的动态链接函数库直接或间接调用,只有在别的模块中调用了它的某个函数以后才发生作用。它是在应用程序运行时被装入和链接的,而不是把库代码复制到应用程序中,只是在程序中记录了函数的入口点和接口。动态链接库独立于编程语言,因此LabVIEW可以调用用大多数语言(如Visual C++,C++ Builder等)编写生成的动态链接库。在调用DLL的函数时,必须知道以下4个信息:函数返回的数据类型,函数调用的方式,函数的参数及类型,DLL库文件的位置等。
2.2 LabVIEW对DLL的调用
通过对Call Library Function Node的配置可以实现DLL的调用,关键要了解被调用的函数名称、功能及其输入/输出参数。配置节点的目的在于指定DLL模块中与LabVIEW数据交换的相应驱动函数。调用Call Library Function模块,双击此模块,在弹出CLF对话框中进行节点配置,CLF函数配置对话框见图1。第一个参数“库名或路径”,填入需要调用的动态链接库文件的名字和路径。第二个参数“函数名”,是链接库中要调用的函数名称。当在库名或路径栏中设定了DLL的路径后,在函数名下拉框中就可以看到该动态链接库所包含的所有函数名。第三个参数“调用规范”,此栏中可以设置该动态链接库是标准WINAPI调用还是普通的C调用。一般来说,都采用C调用,但是对于API调用则必须选择stdeall(WINAPI),最后一个需要注意的参数选项是线程安全选择,此栏中可以选择DLL是否可以被重入调用,默认情况是在UI线程中运行,即该动态链接库只能在User Interrace Thread下运行。如果动态链接库中被调用的函数返回时间很长,那么就会导致LabVIEW不能执行UI线程中的其他任务,因此界面反应可能会很慢,甚至停止。这时候最好把它设为重入,若设置为重人,则该动态链接库可以由多个线程同时调用,但前提是必须保证该DLL能被多个线程同时安全调用。
在参数配置菜单下设置函数的返回值类型和输入参数。对话框右侧对应每一个参数的参数名称、类型、数据类型、参数传递方式。其中,需要注意的是数据类型选项,在不同的编译平台下,数据类型的定义名称是不一样的。为了将数据类型一一对应,在LabVIEW中必须对数据类型名称定义进行转换。
3 普通数据采集卡在LabVIEW平台下的应用实例
以北京优采公司的UA301A型A/D数据采集卡为例,该采集卡在LabVIEW平台下不能直接被驱动。该采集卡提供了一个动态链接库ua300a.dll,此动态链接库中提供了许多简洁高效的采集和控制函数,支持UA301A采集器的各种功能。