You are on page 1of 2

— 36 — 仪 表 技 术 2002 年第 6 期

基于 LabVIEW 软件的动态连接库和数据采集
张辉 ,郁凯元 ,龙涛 ,王建强
( 东南大学 机械工程系 ,江苏 南京 210096)

  摘要 : 介绍 LabVIEW 软件的特点 ,并利用 LabVIEW 软件的动态连接库实现对测试系统的数据采集 。


关键词 : LabVIEW ;动态连接库 ; 虚拟仪器 ; 数据采集

Data Acquisition and Dynamic Link Library Based on Soft ware LabVIEW
ZHANG Hui , YU Kai2yuan , LONG Tao , WANGJian2qiang
(Department of Mechanical Engineering , Southeast University , Nanjing 210096 , China)
Abstract : The paper introduces the back2ground and characteristics of software LabVIEW , and use the dynamic link library of software Lab2
VIEW to create data acuisition for test system.
Key words : LabVIEW ; dynamic link library ; virtual instrument ; data acquisition

DLL 模块可以单独测试 。
1  LabVIEW 软件的特点
2. 2  客户程序到 DLL 模块的连接
LabVIEW 使用图形化编程语言编程 , 执行程序的 DLL 中包含一个导出函数表 。这些函数由它们的
顺序是由块之间的数据流决定的 , 而不是传统文本语 符号名和称作序列号的整数与外界等同起来 。函数表
言的按命令行次序连续执行 。 也包含了 DLL 中的函数地址 。当客户程序首先加载
LabVIEW 是唯一具有编辑器 ( Compiler) 的图形程 DLL 时 ,它并不知道需要调用的函数的地址 ,但它知道
序语言 , 它可以将程序结构最优化 , 使程序拥有与 C 符号和序号 ,动态链接过程在 DLL 中建立一个客户调
语言程序不相上下的执行速度 。另外 ,若使用 Applica2 用与函数地址的表 。如果你编辑和重建 DLL , 不必重
tion Builder 工具软件 , 更可将 LabVIEW 开发出来的程 建客户程序 ,除非已经改变了函数名和参数序列 。
序转换为 Windows 环境下的 . EXE 应用程序 ,可脱离开 DLL 中函数和数据的导出有许多方法 , 可以在
发平台而独立运行 。 DLL 源代码程序中使用像下面这样的声明导出函数 :
LabVIEW 中包含了丰富的函数及子程序库 , 如数 declspec ( dllexport ) void Function ( int n) ;
据信号处理 、
概率统计 、
线性代数以及滤波 、
加窗等子 相应地 ,在客户程序中要求像下面这样明确声明
程序 ,以及 GPIB 、
VXI 、PLC 及串行仪器控制子程序 。 相应的输入函数 ;
通过它所提供的各种函数 、
子程序 ,可以实现硬件系统 declspec ( dllimport ) void Function ( int n) ;
的软化 ,设计符合用户要求的测试控制系统 。 DLL 不能单独执行 , 仅有导出声明并不能使客户
程序链接到 DLL 。客户程序链接 DLL 主要有两种方
2  动态连接库和数据采集卡的驱动
式 : 隐式链接和显式链接 。
2. 1  DLL 动态连接库概述 使用隐式链接时 ,客户程序先链接到编译 DLL 时
所谓“动态链接”
指在生成 EXE 文件时 ,并没有将 生成的导入库 (LIB) 文件 , 在执行这个客户程序时 , 系
DLL 文件直接包含到程序中 ; 只是在程序中记录了函 统也装载它所需的 DLL 。因此 ,要使用隐式链接 ,客户
数的入口点和接口 , 在程序执行时才将库代码装入内 应用程序必须能够从 DLL 开发者那里获得以下信息 :
存 。不管多少程序使用 DLL , 内存中都只有一个 DLL (1) 包含有导出函数以及类声明的头文件 ( h 文
的副本 ,当没有程序使用它时 , 系统就将它移出内存 , 件) ,在程序开发时要知道函数名和函数接口信息 。
减少了对内存与磁盘的要求 。 ( 2) DLL 的导入库文件 (LIB 文件) ,客户应用程序在编
一个大型系统如果用一个 EXE 文件完成 ,程序将 译链接时需要 。( 3) 实际的 DLL 文件 ,它是在客户应
很庞大 ,而且可能有许多重复的功能代码 。如果将程 用程序运行时所必需的 。
序分成主程序和一些小的 DLL , 不但可以减少开发的 显式链接时 ,客户应用程序在运行时通过函数调
工作量 ,而且访问的速度将得到提高 。同时 , 较小的 用来显式装载和下载 DLL , 并通过函数指针来调用

  收稿日期 : 2002 - 07
  作者简介 : 张辉 (1977 - ) ,男 ,安徽萧县人 ,硕士研究生 ,主要从事机电液一体化控制技术及计算机仿真的研究 。

© 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
2002 年第 6 期 仪 表 技 术 — 37 —

DLL 的导出函数 。因为使用指针来调用函数 , 并没有 以使 LabVIEW 在对硬件的支持上有了一个质的飞跃 。


用函数名 ,所以在开发客户应用程序时 ,就不需要太多 Call Library Function 位于 Functions > > Advanced 子
的 DLL 信息 ,但对于函数接口必须清楚 。运行时也要 菜单中 。将选择好的 Call Library Function 的图标放在
提供相关的 DLL 文件 。 设计面板 ( diagram) 中 ; 右键单击 Call Library Function 的
使用隐式链接 ,所有的 DLL 在客户程序加载时都 图标 , 在弹出的菜单选项中选择 Configure …会弹出一
被加载 ; 但用显式链接时 , 可以决定哪个 DLL 加载或 个对话框 ; 通过 Browser 选择所要调用的库名或路径
不加载 。如果使用 LoadLibrary 显式链接 , 可以指定 (D : \ USER \ DAoutput . dll) ; 然后输入想要调用的函数
DLL 的完整路径名 。如果不指定 DLL 的路径名 , 或是 名 ,如 DAoutput ; 在 Calling Conventions 选项中选择所调
采用隐式链接 ,Windows 将遵循下面的搜索顺序来定 用的库是标准调用 ( stdcall ) 还是用户使用 C 语言自己
位 DLL : ( 1) 包含 EXE 文件的目录 。( 2) 进程的当前 创建的库 。在此处特别要注意 ,因为我们是自建库 ,所
目录 。( 3 ) Windows 系 统 目 录 。 ( 4 ) Windows 目 录 。 以一定要选择 C ,如果此处误选 ,在 LabVIEW 程序运行
( 5) 列在 Path 环境变量中的目录 。 时 ,系统会提示“该程序执行了非法操作”。
如果 Windows 系统按上面的方法找不到相应的 以下是关于所调用函数参数和返回值的设置 。
DLL 文件 ,系统将显示对话框提示并终止客户应用程 首先选择返回值的参数类型 , 有三种选择 :Void ,
序的执行 。 Numeric , String 。
2. 3  动态连接库的编写 选定其中的一种后 ,还要再选择具体的数据类型 。
下面以数模转换 DAOutPut . dll 为例简单介绍应用 这时应该选择 Numeric 参数类型 , Signed 322bit Integer
于 LabVIEW 中的动态连接库的编写 。启动 VC + + 6. 0 数据类型 。
按以下步骤生成 DLL 工程 : 单击右侧的 Add Parameter After 给函数填加第一
(1) 在菜单中选择 File \ New \ Project ; 个输入参数 ,同样需要选择参数类型和数据类型 。这
(2) 在工程列表中选择 Win32 Dynamic2Link Library ; 时选择 Numeric 参数类型 ,Signed 162bit Integer 数据类
(3) 在 Project Name 中输入工程名 :DAOutPut ; 型 。然后再次单击右侧的 Add Parameter After 给函数
(4) 单击 Location 右边按钮 ,选择 d : \ temp \ DAOutPut 目录 ;
填加第二个输入参数 , 选择 Numeric 参数类型 ,42byte
(5) 单击 OK 完成 ,至此已创建了 DAOutPut . dll 的工程文件 ;
single 数据类型 。最后单击“OK” 返回 LabVIEW 的 Dia2
(6) 在文件编辑器中 ,找到 DAOutPut . def 文件 ,输入代码后保存 。
gram 界面 。我们会发现 ,Call Library Function 已经根据
;DAoutput . def :Declares the module parameters for the DLL.
LIBRARY    ”
DAoutput ” 刚刚配置的参数个数和数据类型设置好了输入输出端
DESCRIPTION ’
DAoutput Windows Dynamic Link Library’ 口 ,我们只需要连线就行了 , 和使用其他的 LabVIEW
EXPORTS 函数块没有什么差别 。
  ; Explicit exports can go here 包含有 Call Library Function 函数的程序在制作安
其作用是描述 DLL 属性 ,第一句注释语句 , 第二句是指出 DLL 的名字 ,
装程序时 ,应注意将所用到的库 ( 包括创建 DLL 时所
第三句使用 DESCRIPTION 语句描述 DLL 的用途 , 第四句用 EXPORTS 语
使用的库和 DLL 文件本身) 都要包含在 Create Distribu2
句列出被导出函数的名字 。
(7) 在文件编辑器中找到 Daoutput . cpp 文件 , 添加一函数 , 声明如 tion Kit …对话框的 File 标题栏选项中 , 只有这样程序
下 :extern ”C” declspec (dllexport) DAOutput (int channol , float put) 在运行时才能找到它所需要的库函数 。
extern ”C”
表明使用 C + + 编译器 ; declspec ( dllexport) 表明为显式
3  结论
导出函数 ;DAOutput (int channol , float put) 表示函数名为 DAOutput , 有两
个输入 参 数 , 一 个 为 整 型 , 另 一 个 为 浮 点 型 。添 加 代 码 , 完 成 函 数
LabVIEW 软件功能如此强大 , 只要花一些时间创
DAOutput 所需功能 。
建出可对某一硬件设备进行低层操作的库函数集 , 通
(8) 编译程序 ,生成 DAoutput . dll 动态连接库 。
过 Call Library Function 将其制作成一个个函数模块 ,再
2. 4  使用 LabVIEW 调用动态连接库
交给 LabVIEW 使用 , 利用 LabVIEW 图形化编程的方
在 LabVIEW 函数库中有两个外表非常相似的函
便、快捷和强大的虚拟仪器开发功能 ,就可以开发出基
数 Call Library Function 和 Code Interface Node ( CIN) 。
于原来 LabVIEW 不兼容硬件的虚拟仪器 。
使用 Call Library Function , 我们可以调用 Windows
标准的动态连接库 ( DLL ) , 也可以调用用户自己编制 参考文献 :
的 DLL 。此外 ,该函数还支持多种数据类型和调用规
[1 ] LabVIEW Function and VI Reference Manual [ M ] . National In2
则 。使用 CIN 节点可以调用由传统语言编写的代码 , struments Corporation , 1998.
例如 C 语言 。这使得通过它就能够触及图形化编程 [2 ] 龙  涛 . DSHW 软件编程改进及汽车防抱死制动系统 ( ABS)
语言 ( G) 难以触及的领域 , 如对硬件设备的操作 。利 管道动态特性研究 [D ] . 东南大学 ,2002.
用 Call Library Function 可以调用 DLL 这一功能 , 就可 ( 许雪军编发)

© 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.

You might also like