LabVIEW对数据采集卡DLL函数的调用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2004年9月襄樊学院学报 Sept.,2004 第25卷第5期 Journal of Xiangfan University V ol.25 No.5
LabVIEW对数据采集卡DLL函数的调用
刘传清
(襄樊学院 物理学系,湖北 襄樊 441053) 
摘要:首先介绍虚拟仪器及其开发环境LabVIEW6的特点,分析并实现了将LabVIEW与外部代码进行连接的高级技术之一—动态链接库(DLL)机制. 实践表明,此机制高效、易行,是增强
LabVIEW与其它Windows应用程序之间的数据共享能力的一条很好的途径.
关键词:虚拟仪器;LabVIEW;动态链接库;DLL 
中图分类号:TN311.11 文献标志码:A 文章编号:1009-2854(2004)05-0015-03 
0 引言 
美国国家仪器NI公司的基于G语言的开发环境LabVIEW的出现,使得虚拟仪器的思想为工业界所接受. 所谓虚拟仪器,就是在通用计算机平台上,用户根据自己的需求定义和设计仪器的测试功能,其实质
是将传统仪器硬件和最新计算机软件技术充分结合起来,以模块化软件实现并扩展传统仪器的功能. 与传
统仪器相比,虚拟仪器在智能化程度、处理能力、性能价格比、可操作性等方面均具有明显的技术优势.
LabVIEW(Laboratory Virtual Instrument Engineering Workbench─实验室虚拟仪器工程平台)是目前国
际上首推应用最广的虚拟仪器开发环境之一,主要应用于仪器控制、数据采集、数据分析、数据显示等领域,并适用于Windows 9X/XP/2000/ NT、Macintosh、UNIX等多种不同的操作系统平台. 与传统程序语言
不同,LabVIEW采用强大的图形化语言(G语言)编程,面向测试工程师而非专业程序员,编程非常方便,人机交互界面直观友好,具有强大的数据可视化分析和仪器控制能力等特点.
使用LabVIEW开发环境,用户可以创建32位的编译程序,从而为常规的数据采集、测试、测量等任
务提供了更快的运行速度. LabVIEW是真正的编译器,用户可以创建独立的可执行文件,能够脱离开发环
境而单独运行. 对于大多编程任务,LabVIEW通常能产生高效的代码.
1 LabVIEW调用外部程序代码的途径之一 —— 动态链接库机制 
1.1 动态链接库机制概述 
LabVIEW是一个功能强大的虚拟仪器开发环境,它完整地集成了与GPIB、VXI、RS-232、RS-485和
内插式数据采集卡等硬件的通讯. LabVIEW还具有内置程序库,提供了大量的连接机制,通过DLLs、共享库、ActiveX等途径实现与外部程序代码或软件系统的连接.
LabVIEW提供了4种调用外部程序代码的途径,其中动态链接库(Dynamic Link Library─DLL)机制
是从LabVIEW调用标准共享库和用户自定义库函数的通用方法. 具体实现时,是使用LabVIEW功能模板
中“Advanced”子模板里的“调用库函数(Call Library Function)”结点.
“调用库函数结点”包括大量的数据类型和调用规范,使用它可调用大多数标准共享库和用户自定义
库中的函数,包括:Windows9X/XP/2000/NT下的动态链接库(Dynamic Link
Library)、Macintosh下的代码段(Code Fragment)、UNIX下的共享库函数(Shared Library Function)等.
当用户需要调用的代码已经存在,或者用户比较熟悉Windows中动态链接库、Macintosh中代码段、UNIX中共享库的创建过程时,“调用库函数结点”非常有用,此时使用它也最为合适恰当,因为库使用了
收稿日期:2004-04-21
基金项目:湖北省教育厅重点项目(2003A006)
作者简介:刘传清(1964- )男,湖北鄂州人,襄樊学院物理学系副教授.
15
刘传清:LabVIEW对数据采集卡DLL函数的调用
对几个开发环境都适用的格式标准,故用户可以使用几乎任何开发环境去创建LabVIEW能够调用的库. 1.2动态链接库机制实现步骤
在Windows 9X下,利用LabVIEW 6.1 (for Windows 95/98/NT)中的“动态链接库机制”调用一个DLL,此DLL返回机器的名称.
1)建立“调用库函数结点”
新建LabVIEW程序“hostname.vi”,存至新建目录“d:\temp”下,其前面板如下:
图1 库函数调用前面板图 
框图程序如下: 
 图2 库函数调用程序框图 
其中,“Call Library Function”结点是通过选择功能模板中“Advanced”子模板里的“Call Library Function”功能模块而产生的.
此LabVIEW程序通过“调用库函数结点”调用一个DLL,此DLL将返回机器的名称,返回结果存至字符串指示量“Machine Name”中,而后将字符串常量“LabVIEW is running on ”与“Machine Name”相拼接,拼接之结果在字符串指示量“Message”中显示.
2)配置“调用库函数结点”
双击框图程序窗口的“Call Library Function”结点,在弹出的对话框中对此“调用库函数结点”进行配置. 其中:
在“Library Name or Path”一项中键入“d:\temp\hostname.dll”(即,指明此结点所链接的DLL文件名,它由C源代码“hostname.c”编译而来);
在“Function Name”一项中键入“MachineName”(即,指明与此结点相链接的DLL文件中的函数的名称);
参数“return type”的类型选择“Void”;所增加的另一个参数“arg1”的类型选择“String”、字符串格式选择“String Handle”;
3)编辑C源文件
编辑C源文件“hostname.c”(存至目录“d:\temp”下),其内容如下:
/* include extcode.h which contains the prototypes for the LabVIEW functions */
#include <extcode.h>
#include <stdio.h>
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDLL, DWORD dwReason, LPVOID lpReserved) {
return TRUE;
}
/* This functions gets the computer name and returns it to LabVIEW */
__declspec (dllexport) void MachineName(void *LVHandle) {
char computerName[MAX_COMPUTERNAME_LENGTH+1];
int compNameLength = MAX_COMPUTERNAME_LENGTH+1;
16
第25卷第5期襄樊学院学报 2004年第5期
/* Get computer name */
GetComputerName(computerName, &compNameLength);
/* Size LabVIEW handle to the correct size */
DSSetHandleSize(LVHandle, compNameLength + 5);
/* Copy the string size to the LabVIEW handle */
**(int32 **)LVHandle = compNameLength ;
/* Copy the string to the LabVIEW handle */
sprintf((*(char **)LVHandle)+4,"%s",computerName);
}
此程序首先了调用Windows的API函数“GetComputerName”获取机器名;然后调用LabVIEW的函数“DSSetHandleSize”来设置LabVIEW句柄之大小;最后将机器名长度(32位整型)、机器名(字符串型)依次写入句柄中.
4)编译C源代码
将C源代码“d:\temp\ hostname.c”编译成一个DLL文件“d:\temp\hostname.dll”.
可使用VC++ 6.0 (for Windows 95/98/2000/NT),完成此编译工作.
5)运行VI
运行LabVIEW程序“hostname.vi”,结果如下:
图3 前面板运行结果 
2 结束语 
本文着重阐述并实现了将LabVIEW与外部代码进行连接的高级技术之一─动态链接库机制,并给出了应用实例. 由于在LabVIEW中引入了C语言的强大功能,从而提高了LabVIEW的整体性能.
本方法已在LabVIEW 6.1 for Windows 95/98/NT及Visual C++ 6.0 for Windows 9X/XP/2000/NT 环境下实现. 实践证明,此方法高效、易行,是增强LabVIEW与其它Windows应用程序之间的数据共享能力的一条很好的途径.
参考文献: 
[1] LabVIEW User Manual,National Instruments Corporation,1998.
[2] G Programming Reference Manual,National Instruments Corporation,1998.
LabVIEW Data Acquisition Invoke for DLL Functions
LIU Chuan-qing
(Department of Physics, Xiangfan University, Xiangfan 441053, China)
Abstract :This paper introduces virtual instrument and the features of its development environment─LabVIEW,analyzes and realizes the advanced technology-Dynamic Link Library(DLL) ,which is one of the general methods for calling external code from LabVIEW. It has been proved that this method is efficient,practicable and also a good one to enhance LabVIEW’s capacity of sharing data with other applications in Windows.
Key words:Virtual instrument; LabVIEW; Dynamic Link Library ; DLL
17。

相关文档
最新文档