基于DLL的虚拟仪器系统开发
汤晓安
湖南长沙国防科技大学电子科学与工程学院405教研室
摘 要 本文在介绍最新技术─虚拟仪器及其开发环境LabVIEW的特点的基础上分析并实现了将LabVIEW与外部代码进行连接的高级技术之一—动态链接库机制。实践表明此机制高效、易行是增强LabVI EW与其它Windows应用程序之间的数据共享能力的一条很好的途径。
关键词 虚拟仪器 LabVIEW动态链接库 DLL
1 引言
美国国家仪器公司的创新产品─基于G语言的开发环境LabVIEW的出现使得“虚拟仪器”的思想为工业界所接受。 所谓虚拟仪器就是在通用计算机平台上用户根据自己的需求定义和设计仪器的测试功能其实质是将传统仪器硬件和最新计算机软件技术充分结合起来以实现并扩展传统仪器的功能。与传统仪器相比虚拟仪器在智能化程度、处理能力、性能价格比、可操作性等方面均具有明显的技术优势。
LabVIEW Laboratory Virtual Instrument Engineering Workbench─实验室虚拟仪器工程平台是目前国际上首推应用最广的虚拟仪器开发环境之一主要应用于仪器控制、数据采集、数据分析、数据显示等领域并适用于Windows 3. 1/95/98、 Windows NT、Macintosh、UNIX等多种不同的操作系统平台。与传统程序语言不同 LabVIEW采用强大的图形化语言G语言编程面向测试工程师而非专业程序员编程非常方便人机交互界面直观友好具有强大的数据可视化分析和仪器控制能力等特点。
使用LabVIEW开发环境用户可以创建32位的编译程序从而为常规的数据采集、测试、测量等任务提供了更快的运行速度。 LabVIEW是真正的编译器用户可以创建独立的可执行文件能够脱离开发环境而单独运行。
对于大多编程任务 LabVIEW通常能产生高效的代码。但LabVIEW亦存在不足如不适于或不擅长于完成大量数据处理的任务不能进行系统调用实现底层操作如访问物理地址等。在虚拟仪器系统开发中若遇到这类问题就可利用LabVIEW所提供的与外部代码进行连接的机制如动态链接库机制将其自身无法或不易实现的任务通过能够或更适于完成此类任务的外部代码来实现。
2 LabVIEW调用外部程序代码的途径之一─动态链接库机制
2. 1 动态链接库机制概述
LabVIEW是一个功能强大的虚拟仪器开发环境它完整地集成了与GPIB、 VXI、 RS-232、RS-485和内插式数据采集卡等硬件的通讯。 LabVIEW还具有内置程序库提供了大量的连接机制通过DLLs、共享库、 ActiveX等途径实现与外部程序代码或软件系统的连接。
LabVIEW提供了4种调用外部程序代码的途径其中动态链接库Dynamic Link Library─DLL机制是从LabVIEW调用标准共享库和用户自定义库函数的通用方法。具体实现时是使用LabVIEW功能模板中“Advanced”子模板里的“调用库函数Call Library Function”结点。
“调用库函数结点”包括大量的数据类型和调用规范使用它可调用大多数标准共享库和用户自定义库中的函数包括 Windows 3. 1/95/98/NT下的动态链接库Dynamic Link
1
Library、 Macintosh下的代码段Code Fragment、 UNIX下的共享库函数Shared LibraryFunction等。
当用户需要调用的代码已经存在或者用户比较熟悉Windows中动态链接库、Macintosh中代码段、 UNI X中共享库的创建过程时 “调用库函数结点”非常有用此时使用它也最为合适恰当 因为库使用了对几个开发环境都适用的格式标准故用户可以使用几乎任何开发环境去创建LabVIEW能够调用的库。
2.2 动态链接库机制实现步骤
设此处要实现在Windows 98下利用LabVIEW 5. 1 (for Windows 95/98/NT)中的“动态链接库机制”调用一个DLL此DLL返回机器的名称。
1) 建立“调用库函数结点”
新建LabVIEW程序“hostname.vi”存至新建目录“d:\temp”下其前面板如下
框图程序如下
其中 “Call Library Function”结点是通过选择功能模板中“Advanced”子模板里的 “CallLibrary 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”
2
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 ;
/* 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
3.结束语
本文着重阐述并实现了将LabVIEW与外部代码进行连接的高级技术之一─动态链接库机制并给出了应用实例。由于在LabVI EW中引入了C语言的强大功能从而提高了LabVIEW的整体性能。
本方法已在LabVIEW 5.1 for Windows 95/98/NT及Visual C++ 6.0 for Windows95/98/2000/NT环境下实现。实践证明此方法高效、易行是增强LabVIEW与其它Window s应用程序之间的数据共享能力的一条很好的途径。
参考文献
1 LabVIEW User M anual National Instruments Corporation 1998
2 G Programming Reference M anual National Instruments Corporation 1998
3 LabVIEW Advanced Course M anual National Instruments Corp oration 1997
Development of DLL-Based Virtual Instrument System
Tang Xiao An
College of Electronic Science And Engineering,
National Univ of Defence Technolo gy,Chang Sha,Hunan,410073
Abstra ct This p ap er introduces virtual instrument and its development environment─LabVI EW discussesand realizes the advanced technologyDynamic Link Library(DLL) which is one of the general methods forcalling external code from LabVIEW。 It has been proved that this method is efficientpracticable and it is a goodway improving the LabVIEW’s cap acity sharing data with other applications in Windows。
Key words virtual instrument LabVIEW Dynamic Link Library(DLL)
邮编: 410073
电话 0731-4576434(O)
Email: xatang@public cs hn cn
4
5
6
书犹药也善读之可以医愚。
7
0 0 1 2 3 4 5 6
SBS含量 %
8
目前国内云计算市场竞争异常激烈,尤其是国内的腾讯云、阿里云、景安等商家促销活动一波接一波的进行,对于有需要的用户确实得到不小的实惠。但是这样给予国内的主机商确实是比较大的打击,毕竟这些商家的背景和实例强劲,即便是贴本补贴优惠,也是不怕的。前两年阿里一家各种活动促销,确实在国内市场占据主要的市场地位,腾讯云开始两年没有较大的吸引用户,不过这两年的发展还是比较稳健的。我们很多网友在之前肯定也享受到一些...
ParkInHost主机商是首次介绍到的主机商,这个商家是2013年的印度主机商,隶属于印度DiggDigital公司,主营业务有俄罗斯、荷兰、德国等机房的抗投诉虚拟主机、VPS主机和独立服务器。也看到商家的数据中心还有中国香港和美国、法国等,不过香港机房肯定不是直连的。根据曾经对于抗投诉外贸主机的了解,虽然ParkInHost以无视DMCA的抗投诉VPS和抗投诉服务器,但是,我们还是要做好数据备...
易探云怎么样?易探云最早是主攻香港云服务器的品牌商家,由于之前香港云服务器性价比高、稳定性不错获得了不少用户的支持。易探云推出大量香港云服务器,采用BGP、CN2线路,机房有香港九龙、香港新界、香港沙田、香港葵湾等,香港1核1G低至18元/月,183.60元/年,老站长建站推荐香港2核4G5M+10G数据盘仅799元/年,性价比超强,关键是延迟全球为50ms左右,适合国内境外外贸行业网站等,如果需...