在LabVIEW中利用DLL实现数据采集Realization of Data Acquis ition with DLL in LabVIEW班级学号:0704114-23姓名:杨鹏摘要:随着计算机技术及虚拟仪器技术的迅速发展, 虚拟仪器正逐渐成为测试领域的发展方向。
本文介绍了在LabVIEW 环境下驱动普通数据采集卡的重要方法- - 动态链接库机制(DLL), 并结合具体实例介绍了一种利用LabVIEW 提供的Call LibraryFunction (CLF)节点实现对动态链接库(DLL)调用的关键技术及步骤, 实现LabV IEW 与普通数据采集卡的结合, 丰富LabVIEW 对硬件的控制能力。
并将数据库技术应用于虚拟测试系统中, 建立了Access 数据库, 实现数据的存储和自动管理,从而拓展了虚拟测试系统的功能。
关键词:动态链接库(DLL); 数据采集;1 绪论目前, 电子测试仪器的发展方向正在从简单功能组合向以个人计算机(PC)为核心的通用虚拟测试平台过渡, 从硬件模块向软件包形式过渡。
建立在PC 机和数据采集设备上的虚拟仪器系统, 由于其特有的灵活和强大的功能, 也越来越广泛的应用于实验室研究和工业控制中的测试及测量领域。
从简单的仪器控制, 数据采集到尖端的测试和工业自动化, 从大学实验室到工厂, 从探索研究到技术集成, 人们都可以发现LabVIEW 应用的成果和开发的产品。
LabVIEW采用基于流程图的图形化编程方式, 也被成为G 语言(graphical language)。
G 语言编程和虚拟仪器技术已经成为工业界和学术界关注的热点技术之一。
数据采集是LabVIEW 的核心技术之一, 也是LabVIEW 与其他编程语言相比的优势所在。
使用LabVIEW 的DAQ 技术,可以编写出强大的DAQ 应用软件。
NI 公司生产的系列数据采集卡借助LabVIEW 内部的DAQ 库的驱动,可以在LabVIEW环境下运行。
但由于NI 公司的采集卡价格比较昂贵,但是选择第三方的数据采集卡, 就需要解决LabVIEW 与非NI 数据采集卡的兼容和驱动的问题。
2 LabVIEW 调用外部程序代码的途径之一———动态链接库机制LabVIEW 具有强大的外部接口能力, 可以实现LabVIEW与外部的应用软件, C 语言, Windows API 以及HiQ 等编程语言之间的通信, 在LabVIEW 中可用的外部接口包括:DDE,CIN,DLL,MATLAB Script 以及HiQ Script 等。
合理地使用这些接口,充分利用其他软件的功能, 弥补LabVIEW 自身的不足, 可以编写出功能更加强大的LabVIEW应用软件。
动态链接库(Dynamic Link Libraries,简称DLL)是一个可执行模块, 但不接受任何消息, 所以并不可以直接运行, 只是提供一群函数供Windows 应用程序或其他的动态链接函数库调用。
动态链接库只有在别的模块中调用了它的某个函数以后才发生作用。
由于动态链接库在应用程序运行期间被连接起来的,故称为动态链接库。
动态链接库(DLL)一直是基于Windows 程序设计的一个非常重要的组成部分。
DLL 是一种基于Windows的程序模块, 它可以在运行时刻被装入和连接。
为了实现LabVIEW对普通数据采集卡的支持, 用户可以使用LabVIEW 提供的调用库函数节点CLF (Call Library Function)和代码接口节点CIN(Code Interface)将编程灵活的C 语言和直观方便的LabVIEW程序结合起来。
但是比较调用库函数节点CLF 和代码接口节点CIN 这两种方法, 使用CLF 节点访问动态链接库DLL 更具优势:首先, DLL 是外部模块, 自行开发一个DLL 比使用CIN 节点易于实现且便于维护。
其次, CIN节点需要调用.lsb 格式的文件, 而.lsb 格式文件的创建过程十分复杂, 需要利用Visual C++和CINTools 来创建.lsb 文件。
这样用户在开发虚拟仪器产品的过程中可以充分利用数据采集卡开发商为用户提供的DLL 模块, 可以缩短开发周期。
基于以上因素, 本问所介绍的是利用CLF (Call LibraryFunction)节点直接调用普通数据采集卡已有的DLL 模块。
3 LabVIEW 调用普通数据采集卡自带的DLL 库3.1 数据采集卡介绍许多数据采集卡开发商都提供了DLL库函数的驱动程序,用户可以根据实际应用的需要, 用LabVIEW中的CLF 节点直接调用有关函数, 从而省去编写驱动程序的过程。
在LabVIEW平台下普通数据采集卡使用主要分为三步: ①初始化并打开设备(数据采集卡) ;②启动模拟量数据采集;③对某一通道模拟量数据采集。
本文所采用的是PCI- 9114 型多功能数据采集卡。
该卡具有32 位PCI 总线, 12 位模拟量输入分辨率, 16 路单端或8 路差动模拟量输入,最高110 KHz A/D 采样频率,双极性或单极性输入信号, 三种A/D 触发模式:软件触发、可编程定时器触发与外部触发, 并且自带了Windows 下的驱动程序库PCI_DASK.dll, 库内包含数据采集的所有函数。
下面是驱动程序库PCI_DASK.dll 中的三个关键函数:① Register_Card。
函数Register_Card 功能是打开数据采集卡, 从注册文件或配置文件中得到合适的使设备工作的参数,同时分配内存来储存这些参数, 使设备做好I/O 操作的准备工作, 输入的参数为CardType 和Card_num, 该函数的返回值是板卡标识号, 今后对于这个标识号做的操作就会被解释为对该卡的操作;② AI_ReadChannel。
函数AI_ReadChannel 用来从输入通道中读取采集的模拟量, 输入参数是板卡标识号, 模拟输入通道号和增益代码;③ Release_Card。
函数Release_Card 用来释Register_Card()函数分配的存储参数值以关闭装载的数据采集卡, 输入参数为板卡标识号。
3.2 在LabVIEW中调用动态链接库的步骤在LabVIEW 下对DLL 的调用可通过CLF 调用库函数节点来实现。
具体方法是创建一个VI ,在其图形代码窗口中, 选择ALL Functions→Advanced→Calling Library Function Node ,双击节点在弹出的对话框中或者点击右键选Configure 对其进行配置。
一般需要设置以下几点内容:① DLL 所在的路径。
在对话框Library Name or Path 中输入DLL 路径或单击Browse⋯来查找所要调用的DLL;②被调用的函数原型,包括函数返回类型、函数形参类型及个数等信息。
只要在第一步输入了正确的DLL ,则在FunctionName 中将自动显示该DLL 的所有输出函数。
选择待用的函数后,配置该函数的所有参数,在Function Prototype 中将显示正确的被调用函数原型及所有形参类型;③ DLL 的调用规程。
在LabVIEW中有C 和stdcall 两种调用方式。
对于Windows API 函数应选择stdcall ,否则应选择C;④线程安全选择。
如果编译生成的DLL 是线程安全时(即能同时被其它程序调用) ,则选择Reentrant 选项,否则选Run inUI Thread。
一般选择Run in UI Thread 即可。
同时为其他程序所调用, 则选择Reentrant 选项。
3.3 基于动态链接库的数据采集应用实例下面以调用PCI- 9114 的Register_Card 函数为例, 介绍如何使用CLF 节点, 如图1使用PCI- 9114 采集器的采样功能,必须首先调用函数Register_card 函数对设备进行初始化, Register_card 函数的输入为板卡类型和卡号, 返回值是板卡标识号,然后调用函数AI_ReadChannel 进行数据采集, AI_ReadChannel的输入为Register_card 函数的返回值板卡标识号, 模拟通道号和增益代码, 输出为采集到的数据, 最后调用函数Release_Card释放板卡所占资源。
因此需要分别配置好三个CLF 节点。
图2为数据采集框图程序。
编写数据采集框图程序有几个要点:①连续数据采集。
要实现系统的连续数据采集, 应该使系统保持在循环状态, 所以在设计中使用了While 循环, 点击stop数据采集停止, 并释放板卡占用的资源。
②增益。
增益表示输入信号被处理前放大或缩小的倍数,给信号输入一个增益值, 就可以减小信号的输入范围, 使A/ D转换能尽量的细分输入信号。
设计时增益默认值为0。
③数据存储。
本系统采用了Access 数据库存储采集到的数据, 在设计中使用了LabVIEW数据库访问工具包LabSQL。
上面说到的LabSQL 是一个免费的、多数据库、跨平台的LabVIEW数据库访问工具包。
LabSQL 的优点是易于理解, 操作简单, 不熟悉SQL 语言的用户也可以很容易地使用, 并且它源代码开放。
在使用LabSQL 之前, 首先需要在Windows 操作系统中的ODBC 数据源中创建一个DSN (data source name, 数据源名)。
LabSQL 与数据库之间的连接就是建立在DSN 基础之上的。
本文用到的是LabSQL 添加记录功能。
添加记录的基本步骤如下:第一步:建立与数据库的连接; 第二步:建立与记录集(RecordSet)对象的连接; 第三步:添加记录; 第四步:断开与数据库之间的连接,整个过程如图2 所示。
为了验证系统的性能, 利用函数发生器产生正弦波信号,设置数据采集卡的频率为10Hz, 设置好通道和增益后就可以进行数据采集。
存储到Access 数据库的数据如下图3 所示。
4 结论虽然LabVIEW提供了大量的仪器驱动程序库, 但仍不能满足所有用户尤其是要自行开发仪器的用户的需求, 很多情况用户需自己修改动态链接库, 由于篇幅关系, 不介绍如何修改动态链接库。
本文详细介绍了在LabVIEW 中如何调用动态链接库(DLL)驱动普通数据采集卡PCI9114 完成数据采集任务, 并完成数据存储和管理。
在虚拟仪器系统中, 利用LabVIEW 调用动态连接库函数功能, 既增强了LabVIEW 软件的功能, 又可以开发自己的数据采集和工业控制产品, 提高了系统的开发效率,同时又体现了Labview 强大的数据采集功能, 弥补了其不能驱动国产数据采集卡的不足。
5 结束语现场总线作为工业控制网络技术在纺织行业发挥着越来越重要的作用, 实现了系统的分布式控制, 网络速度快, 可靠性高, 开放性好, 抗干扰能力强, 安装、调试和系统维护方便, 提高了纺织企业的信息化管理水平和生产效率, 降低了生产成本,增强了市场竞争力。