LABVIEW调用动态链接库

合集下载

LABVIEW调用动态链接库

LABVIEW调用动态链接库

参数类型
说明
Numeric 型参数有以下几种数据类型:
z 8、16、32 和 64 位符号和无符号整型(Signed or Unsigned Integer)
Numeric
z 4 字节单精度类型(4-byte single)
z 8 字节双精度类型(8-byte Double)
利用“Pass”下拉列表指定传递参数指针或是传递参数的指针。
Array 型参数的数据类型同 Numeric 型参数的数据类型;
通过 Dimensions 指定数组的维数;
Array Format 有以下几种选项:
Array
z Array Data Pointer 传递一维指针到数组值
z Array handle 传递一个指向数组每一维的 4 个字节指针的指针,其后为数组
long add_num(float *p, long size, float *sum);
图 6-14 CFN 的配置结果
i) 确定后会发现 CFN 根据配置自动进行了更新更新后的情况如右图示。 2. 生成.C 或.C++文件,完成实现函数功能的代码并为函数添加 DLL 导出声明;
在 CFN 节点上通过右键菜单选择“Create .C File…”生成 mydll.c 文件,其内容如下:
in UI Thread”方式调用 DLL,调用的函数将直接在用户线程中运行。另外一种方式为递归方式 “Reentrant”,在这种情况下可以允许多个线程同时调用 DLL 中的函数。但要确保正常调用,必须使 DLL 中的代码线程安全。以下是一些最基本的线程安全特性:
a. 代码不含有未受保护的全局数据(如全局变量,文件); b. 代码不访问硬件(即不含有寄存器一级的代码); c. 代码不调用非线程安全的函数、DLL 或者驱动; d. 代码使用信号量或者互斥量来保护全局量; e. 代码被一个非递归的 VI 调用时为线程安全。

LabVIEW中访问数据库的几种不同方法

LabVIEW中访问数据库的几种不同方法

LabVIEW中访问数据库的几种不同方法虚拟仪器VI(Virtual Instruments)是National Instruments公司在其产品LabVIEW中首先提出的创新概念[1]。

虚拟仪器系统的概念是测控系统的抽象。

不管是传统的还是虚拟的仪器,它们的功能都是相同的:采集数据并进行分析处理,然后显示处理的结果。

它们之间的不同主要体现在灵活性方面。

虚拟仪器由用户自己定义功能,可以自由地组合计算机平台、硬件、软件以及完成应用系统所需要的各种功能。

另外,虚拟仪器开发周期短、成本低、维护方便,易于应用新理论和新技术实现仪器的换代升级[2]。

现代的测试测量系统大多数需要对被测对象进行全方位检测,这必然会使获取的数据量急剧增长。

面对大量的数据信息,采用数据库技术,可准确反映各类数据之间的密切联系,能够有效地管理和组织数据,是现代测试测量系统的发展趋势。

但是现有的LabVIEW版本本身并不具备数据库访问功能,不能像VB、VC++、Delphi、PowerBuilder那样非常方便的进行数据库程序的开发。

因此以LabVIEW编制的虚拟仪器系统需要其它辅助的方法来进行数据库访问。

1、在LabVIEW中访问数据库的方式(1)利用NI公司的附加工具包中的数据库接口工具包LabVIEW SQL Toolkit进行数据库访问。

该工具包集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和一些高级的数据库访问功能。

它的优点是易于理解,操作简单,用户可以不学习SQL语法。

缺点是需要另外购买且价格昂贵,无疑会增加系统成本。

(2)利用LabVIEW的ActiveX功能,调用Microsoft ADO对象,利用SQL语言实现数据库的访问。

使用这种方法需要用户对Microsoft ADO 以及SQL语言有较深的了解。

(3)通过第三方开发的免费工具包LabSQL访问。

LabSQL利用Microsoft ADO以及SQL语言来完成数据库访问,将复杂的底层ADO 及SQL操作封装成一系列的LabSQL VIs,简单易用。

labview动态调用

labview动态调用

基本概念众所周知,LabVIEW程序又称虚拟仪器,即VI。

VI是由以下三部分构成:·前面板——即用户界面。

·程序框图——包含用于定义VI功能的图形化源代码。

·图标和连线板——用以识别VI的接口,以便在创建VI时调用另一个VI。

当一个vi可以应用在其它VI中,则称为子vi。

子vi相当于文本编程语言中的子程序。

在进行LabVIEW程序设计时,一个VI中可以包含一个或若干个子vi。

这些子vi是被直接放置在程序框图中,习惯上称这些子vi为:静态链接子vi。

这些子vi在VI载入的同时也被加载到内存中。

动态调用VI在应用程序设计时,我们希望能够自由地、任意切换操作界面和测量程序界面,并且希望在任何时候,前面板上仅运行一个程序界面。

这样就能够保证良好地、准确地实现“人机对话”。

完成这样的操作,就需要动态的调用不同的VI。

与静态链接的子vi不同,动态加载VI只有在打开VI引用时VI的调用程序才会将其加载。

如果VI调用程序较大,采用动态加载VI的方式可以节省加载时间和内存,这是因为在调用程序需要运行该VI以前无需将其加载,在操作结束后又可将其从内存中释放。

问题是:在涉及到动态调用的LabVIEW帮助文件中,看到了这样的概念:“严格类型VI”。

那么与此相对应一定还存在着:“非严格类型VI”。

似乎将VI分成了两种不同的形式?到底“什么是严格类型VI和非严格类型VI”?它们有什么内在联系和不同以及区别呢?前几天我还和NI的AE讨论这个问题,就是:“什么是严格类型vi和非严格类型VI”?但一直没有得到明确的答复。

察看一些LabVIEW的资料,也没有弄明白这个问题。

直到开始写这篇博客时,因涉及到这个概念,才开始对这个问题进行了仔细的分析,分析的结果似乎找到了一些答案。

严格类型vi:严格类型vi就是可以被其它VI调用的子vi(静态链接子vi)。

进一步说LabVIEW 提供的“函数”选板上的vi都是严格类型vi。

LabVIEW与数据库的连接

LabVIEW与数据库的连接

LabVIEW与数据库的链接2011-01-07 11:37:57| 分类:嵌入式系统| 标签:labview与数据库的链接|字号大中小订阅17.1 Database Connectivity工具包介绍NI为LabVIEW用户提供了一个专门和数据库链接的工具包:Database Connectivity。

安装好工具包后,Database Connectivity工具包的VI将会在函数选板的附加工具包列中出现。

Database子选板如图17-1所示。

DB Tools Open Connection:打开数据库连接,如图17-2(a)所示。

DB Tools Close Connection:关闭数据库连接,如图17-2(b)所示图17-2(a) DB Tools Open Connection 图17-2(b) DB Tools Close ConnectionDB Tools Insert Data:根据数据库连接插入一列新的数据,如图17-3(a)所示。

页脚内容1DB Tools Select Data:根据数据库连接从数据库中提取一列数据,如图17-3(b)所示。

图17-3(a) DB Tools Insert Data 图17-3(b) DB Tools Select DataDB Tools Create Table:根据数据库连接创建一个新的表格。

输入参数表格和行信息分别表示表格的名称和表格中每行的属性,如图17-4(a)所示。

DB Tools Drop Table:根据数据库连接删除一个由输入参数表格指定名称的表格,如图17-4(b)所示。

图17-4(a) DB Tools Create Table 图17-4(b) DB Tools Drop TableDatabase Variant To Data:将数据库变量转换为由输入参数类型指定的LabVIEW数据类型,如图17-5所示。

页脚内容2Utility子选板比较常用的函数有DB Tools List Tables.vi与DB Tools List Columns.vi。

Labview实现VBA通信

Labview实现VBA通信

二、labview实现
3 labview调用dll(3/6)
将节点放置在程序框图中,双击会出现 调用库函数的配置对话框,共有四页。
第一页用于填写被调用函数的信息,包 括库名/路径,函数名,线程和调用规 范
选中程序框图中指定路径,则在程序框 图中添加路径作为输入连接在相应位置
选定路径后,dll中的所有暴露出来的函 数都将列出
二、labview实现 2 VI介绍
VI,virtual instrument,虚拟仪器的简称,是基于计算机的仪器。实际上是一个按 照仪器需求组织的数据采集系统。
VI,也是Labview的一个程序。其扩展名为.vi 这类似C语言中的.C或者C++的.cpp。 一个VI可以实现一个函数或某项功能,可以被其它的VI调用。LabVIEW通过这样的
7、点击关闭设备以关闭设备 8、点击停止程序使程序停止
Add:重庆市江北区南桥人家花园6单元1-2室 Email : service@ Tel/Fax:023-86839022
二、labview实现
7 labview使用技巧总结
1、前面板用来添加控件,程序面板用来添加程序和对控件的操作 2、簇内部包含数组会导致数组的值无法读出,可以将数组用多个数值代替 3、事件结构三条黄金准则
1、不要将事件结构放置在while循环之外 2、不要在事件结构中直接使用循环处理事件,使用生产者消费者循环 3、在事件结构中添加“停止”按钮的处理分支
Add:重庆市江北区南桥人家花园6单元1-2室 Email : service@ Tel/Fax:023-86839022
一、VBA介绍
3、动态链接库dll
DLL是Dynamic Link Library的缩写,意为动态链接 库。

LabVIEW平台下调用DLL实现PC

LabVIEW平台下调用DLL实现PC

LabVIEW平台下调用DLL实现PC/104数据采集 ADT700文章发布人:gxy 共243人阅读文字大小:[ 大中小 ] 文字背景色:Using DLL for PC-104 Data Acquiring in LabVIEW Platform摘要:LabVIEW是一个高效的图形化软件开发环境,在数据采集和测试测量中应用广泛。

但在PC-104硬件平台下使用LabVIEW实现数据采集,由于NI公司没有提供相应的设备驱动程序,对程序设计造成障碍。

在分析动态链接库调用机制的基础上,论述LabVIEW平台下调用DLL实现PC/104数据采集的关键技术。

给出了使用ADT700数据采集卡的具体实现方法。

试验表明系统效果良好运行稳定,满足要求。

关键词:LabVIEW 动态链接库PC/104 数据采集Abstract: As a high efficiency graphical soft development envirment, LabVIEW is used in data acquiring and testing and measuring extensively. Because NI (National Instruments) company doesn’t support driver for other company’s card, there is an obstacle in programming by labVIEW in PC/104 system. By analyzed the mechanism of Dynamic Link Library (DLL), this paper introduced the key technique of drivingPC/104 data acquiring card on LabVIEW platform by using DLL. Given a concretely method of using ADT700. Test result show the system can work effectively and stably, satisfied the design desire.Keywords: LabVIEW; Dynamic Link Library; PC/104; data acquiring1 概述虚拟仪器[1]技术VI(virtual instruments)是National Instruments公司在其产品LabVIEW中首先提出的创新概念。

74.调用动态链接库 6 - LabVIEW 中对 C 语言指针的处理

74.调用动态链接库 6 - LabVIEW 中对 C 语言指针的处理

调用动态链接库6 - LabVIEW 中对 C 语言指针的处理C 语言函数常有指针类型的参数,有时候,在LabVIEW 中只能得到一个指向某个数据的指针。

比如,在第4节里的一个例子:#pragma pack (1)typedef struct { char a; char* str; int b} MyStct;MyStct* testStruct;long TestStructure(MyStct* tempStct);在LabVIEW CLN 节点中,就只能返回以整数类型表示的str 的指针。

在大多数情况下,并不需要在LabVIEW 中得到指针指向内存的具体数据,对这些数据的操作是在DLL的函数中完成的。

我们只需在LabVIEW中得到这个指针的地址,再把它传递到下一个CLN 节点就可以了。

但在某些情况下,我们仍然需要在LabVIEW 中得到指针指向的内容,这只能借助C 语言来完成。

在上面的例子,我们需要另外写一个 C 函数,把函数TestStructure 返回的tempStct 结构中的元素拆开成简单数据类型,作为新的函数的参数(新函数中的一个参数就是char* str,LabVIEW可以识别它)。

在LabVIEW 中调用这个新的函数,可以得到这些简单数据类型的数据。

有些函数需要在外部开辟的一块内存中写入数据,LabVIEW 中没有分配内存的操作,也需要再写一个 C 的函数分配好内存,给被调用的函数使用。

这种做法的缺点是针对每个需要得到内容的指针都要做个包装函数,相当麻烦。

一个减少C代码的方法是:编写一个C函数,负责把指针指向的内存中的数据以数组的形式读出,再在LabVIEW 中把它们从新组织成合理的数据类型。

这种方法其实更复杂,好在LabVIEW 8.5 中自带的一些VI 已经做了这个工作。

如果你需要,不需要再额外编写代码,直接用LabVIEW 提供的VI 就可以了。

[LabVIEW]\vi.lib\Utility\importsl\GetValueByPointer\GetValueByPointer.xnode 就是用来得到指针内容的一个VI。

再谈USB开发:LabVIEW调用DLL文件实现STM32+USB+HID双向通信

再谈USB开发:LabVIEW调用DLL文件实现STM32+USB+HID双向通信

4、结尾
到了这里,我们可以看到,LabVIEW 调用 DLL 文件是很简单的,关键是我们要知道 DLL 文件中的函数原型! 我们也可以比较一下通过 VISA 和通过 LabVIEW 调用 DLL 文件实现 USB HID 双向通 信的的优缺点。 1、通过 VISA,我们可以简单和快速地开发 STM32 USB HID 通信,不必了解底层函 数的原型,系统稳定可靠。但需要我们安装庞大的 VISA 驱动程序,而且硬件需要被 MAX 识别。 2、通过 LabVIEW 调用 DLL 文件,我们不需要安装任何驱动程序,发挥 USB HID 免 驱动的优点,但需要我们了解 DLL 文件中的函数原型,而且如果 DLL 文件做得不好的话, 有可能引起程序崩溃。 其 实 我 们 也 可 以 调 用 windows 系 统 自 带 的 hid.dll 文 件 的 , 一 般 在 以 下 路 径 : C:\WINDOWS\system32。现在的 USB HID 上位机软件,一般都是调用微软的 hid.dll 来实现 的。这个留给用户去完成了(不难的,只要知道函数原型就可以了) 。 其实 LabVIEW 作为一种通用的编程语言, 和 VC++一样, 也可以封装和创建 DLL 文件 的,有兴趣的用户可以了解一下,这里就不详细介绍了。
ห้องสมุดไป่ตู้
2、LabVIEW调用我们创建的DLL文件
LabVIEW 的“调用库函数节点”在以下路径: “互连接口”“库与可执行程序” “调用库函数节点”
我们把这个控件放在 VI 的程序框图中:
双击控件后,可以打开如下配置窗口:
“库名/路径”比较简单,就是 DLL 文件的路径了。而“线程” ,一般都是选择“在 UI 线程中运行” 。在“调用规范”中,因为是调用我们写的 DLL 文件,所以选择“C” 。如果 是调用 windows 系统中的 DLL 文件,那么选择“stdcall(WINAPI) ” 。 我们把 DLL 文件装进来之后, 就可以看到 DLL 文件中包含的所有函数了, 在 “函数名” 下拉列表中可以看到。

第13章 LabVIEW常用外部接口

第13章 LabVIEW常用外部接口

ActiveX组件包括如下几类。 (1)自动化服务器 (2)自动化控制器 (3)控件 (4)文档 (5)容器
13.4.2 ActiveX控件
ActiveX控件是ActiveX最常用的,它 是存放于ActiveX容器的一个可嵌入的组件。 LabVIEW中ActiveX容器函数位于“控件” 选板下“新式→容器”子选板中,如图1314所示。利用“ActiveX容器”函数,用户 可以调用第三方提供的各种ActiveX控件。
图13-7
CIN节点函数接线端子 图13-8 CIN节点函数接线端子与控件的连接
图13-9
创建DLL工程对话框
图13-10 将cintools路径
DLL工程编译命令
图13-13 CIN节点示例程序框图和运行界面
13.4 ActiveX
13.1 调用库函数
13.1.1 DLL简介
DLL是Dynamic Link Library 的缩写 形式,中文译为动态链接库。它是作为共 享函数库的可执行文件。 可以把动态链接库理解为一个函数库。
DLL在编程中的广泛应用主要缘于它的 一些优点。 (1)使用较少的资源 (2)推广模块式体系结构 (3)简化部署和安装 Windows操作系统中一些作为DLL实 现的文件有:ActiveX 控件(.ocx)文件、 控制面板(.cpl)文件和设备驱动程序 (.drv)文件。
图13-1
“调用库函数节点”函数位置
图13-2
“调用库函数”函数配置属性对话框
13.1.4 调用库函数示例
图13-3
调用库函数示例程序框图
13.2 Matlab接口
13.2.1 Matlab Script节点
Matlab是由数值分析、矩阵分析、信 号处理和图形绘制等组成的一个高性能的 数值计算和图形显示的计算软件环境。为 了结合两者以充分利用LabVIEW和Matlab 各自的优点,LabVIEW通过提供的Matlab Script节点可以导入和编辑Matlab程序。

Labview调用VC

Labview调用VC

Labview调用VC对初学者来说来个比较详细的包含步骤例子是难得的,我来个简单的小例子,希望对您有用,呵呵!!!1。

建立动态连接库的C 代码调用1.1 建立函数原形1)后面框图程序中,调用CLF 节点;2)配置一个函数原形,设置调用规程为C,其它不变,确定,退出;3)右键CLF 节点,create C file,保存名字为code.cpp,以供VC++编译使用;1.2 编辑源代码文件1)将所需要的labview 头文件复制到code.cpp 所在目录中,包括:extcode.h platdefines.h fundtype.h;2) 打开code.cpp,添加关键词extern c 、_declspec(dllexport)并包装;然后输入函数的功能代码,如果1 个dll 里面需要多个函数,则需要声明多个函数的原形。

2。

VC++中编译产生dll1)建立project ,fileànew-> win32 Dyna,mic Link Library,输入工程名,选择an empty dll project;2)添加code.cpp 到source file,添加extcode.h platdefines.h fundtype.h 到head files 里面;3)设置dll 参数projectàsettingsàc/C++中设置参数:category: code generation ;根据函数要求可以选择1Byte4 Byte 8Byte,采用默认就可以;multithread;其余默认可以;自己也可以微调;4)BuildàBuild code.dll;5)Ok。

LabVIEW调用操作系统功能

LabVIEW调用操作系统功能
节点位置“函数→互连接口→库与可执行程序”选板
38
7.6 调用动态链接库(DLL)
配置CLF节点 右键单击节点并选择“配置…”选项,或者直接双击节点
39
7.6 调用动态链接库(DLL)
配置DLL的“函数”、“参数”、“回调”和“错误检查”具体步 骤
DLL “函数”页数据类型配置注意
Windows c:\temp\data.dat; Mac OS c:temp:data.dat; Linux /c/temp/data.dat。
13
7.3 读/写配置文件
配置文件写操作
Windows配置文件标准格式 生成名为“Configuration.ini”的配置文件
14
7.3 读/写配置文件
LabVIEW调用操作系统功能
引言
任何一个应用程序开发平台都有其自身的优势与 不足,LabVIEW也不例外。作为一个高级编程人员 ,在开发一个大的复杂应用程序时必须能够综合 应用不同软件开发平台的功能,才能使项目更加 完善。一个好的软件开发环境,也必然具备与其 他应用程序的交互功能及必要的开发工具。
?将与手动配置相似的注册表信息写到注册表中实现odbc数据源的自动配置74读写系统注册表?labview中实现为应用程序自动地配置odbc数据源75输入设备控制?用来获取连接到计算机上的操纵杆键盘和鼠标的信息?输入设备控制vi位于函数互连接口输入设备控制子选板75输入设备控制?实时获取鼠标键盘信息例程?首先通过查询输入设备queryinputdevicesvi查询按键和鼠标的信息?分别初始化键盘和鼠标?在while循环中获取键盘按键信息和鼠标位置及点击信息?关闭输入设备75输入设备控制?程序框图75输入设备控制?程序界面76调用动态链接库dll?动态链接库?动态链接库dynamiclinklibrarydll是一个可以多方共享的程序模块内部对共享的例程和资源进行了封装

Labwindows调用外部DLL文件的问题

Labwindows调用外部DLL文件的问题

1. dll文件的编写(1)打开软件Labwindows/CVI,点击File->New->project新建一个工程*.prj,如图所示。

然后保存为example.prj。

(2)用同样的方式,新建一个*.c文件,然后按照下图所示,在Edit->Insert Construct->Dllmain,然后软件会自动在c文件中添加以下两个函数:int __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)这两个函数是DLL动态链接库必须包含的两个函数,函数的具体内容为:#includeint __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){switch (fdwReason){case DLL_PROCESS_ATTACH:if (InitCVIRTE (hinstDLL, 0, 0) == 0)return 0;/* out of memory */break;case DLL_PROCESS_DETACH:CloseCVIRTE ();break;}return 1;}int __stdcall DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){/* Included for compatibility with Borland */return DllMain (hinstDLL, fdwReason, lpvReserved);}然后在上面C源文件中编写相关的函数,然后保存文件为example.c。

Labview DLL调用指南-非常有用

Labview DLL调用指南-非常有用

【转】labview dll的调用【转载】武汉高收入高福利公司排行榜在LabVIEW中调用DLL的整个过程及注意事项2011-09-15 21:25:44| 分类:驱动开发| 标签:|字号大中小订阅1. LabVIEW支持的数据类型< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />另外,可参考…\Program Files\National Instruments\LabVIEW 2009\examples\dll\data passing\Call Native Code.llb\Call DLL.vi。

…此VI列举了LabVIEW与C语言中兼容的数据类型。

见下表。

2. 在VI里调用DLL时,在DLL的左侧给输出端口添加初始化的值。

给输出端口添加初始化值的目的是分配内存给输出端口。

该初始化数组元素的个数至少为实际输出数组的个数。

若过小,则DLL不正常运行;若相等,则DLL正常运行;若过大,则DLL的数组输出端口除有效数据外,还有其他一些为0的非有效数据。

< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />3.使用DLL的步骤1)制作子VI,添加控件接口到连接端(connector)。

2)在新建的VI中添加DLL,在DLL中指定其路径,会自动添加该DLL包含的输入输出端口。

对于数值型输出,选择Point to value。

选中“Specify path or diagram”,表示动态调用该DLL,此时路径取决于最上端的路径输入端,Library name or path里输入的路径无效。

在parameters页,系统会自动添加DLL的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。

LabVIEW动态链接库DLL基础知识

LabVIEW动态链接库DLL基础知识

0.参考示例:LabVIEW1.调用库函数节点2.配置参数2.1.返回参数类型:有Void,Numeric和String三种,如下图所示。

(1)VoidVoid is only available for return type and is not available for other parameters. Use Void for the return type if your function does not return any values.Even if the function you call returns a value, you can use Void for the return type. When the function returns a value and you select Void as the return type, the value returned by the function is ignored.(2)Numberic(pointer-sized integer),以winpcap.dll为例,如下图。

另外数据类型中的“指针大小整型”帮助文档的解释如下:(3)String目前还没碰到过,等遇到时再补充。

2.2.输入(出)参数其类型共有9种,常用的有数值、数组、字符串和匹配值类型。

2.2.1.数值需要注意的是,其传递选项有“值”和“指针”两种,分别对应值传递和指针传递。

a. 数据类型为int32函数原型为void LVint32(int32 input, int32 *output);本函数计算输入值的平方,然后将结果显示在“输出”中。

返回类型为void,input类型为int32,值传递output类型为int32,指针传递注:如将结果返回至某个控件,该控件本身即可为返回数据提供必要的内存空间。

b. 数据类型为float64函数原型为void LVfloat64(float64 input, float64 *output);本函数计算输入值的平方,然后将结果显示在“输出”中。

Labview和matlab混编软件在labview环境下进行可执行化的方法

Labview和matlab混编软件在labview环境下进行可执行化的方法

Labview和matlab混编软件在labview环境下进行可执行化的方法一、问题的提出:Labview下对matlab程序(m文件)的调用采用ActiveX技术,该技术不能脱离matlab运行环境。

为解决问题,尝试将m文件编译成dll文件,将Labview对m文件的调用变为Labview对dll文件的调用。

但由于研究过程出现的问题和时间的关系,这一问题并未得到解决。

在此作一总结,以便后续工作继续进行。

二、问题的确立:在本文档中,主要针对在Labview环境编写的软件进行可执行化的讨论,该软件包含了使用matlab节点或ActiveX机制的matlab函数。

因此,在Labview环境下对软件进行可执行化的主要包含了三个方面的内容:1.把matlab下编的m文件编译成可被Labview调用的文件形式。

例如:动态链接库(dll)、COM组件等。

本文档主要对动态链接库方式进行讨论,其它方式将在附录中简要说明。

2.在Labview下对动态链接库(dll)文件进行调用3.在Labview下,将含有dll的VI生成安装文件。

该文件可在脱离matlab和labview的目标机上安装、运行。

以上三个步骤如全部完成,则可以说明该应用程序已可以独立的运行发布了。

三、问题的解决方法及过程:下面将详细的讨论每个步骤的具体解决方法和过程,以供参考。

1.把matlab下编的m文件编译成可被Labview调用的文件形式(dll).解决本问题的方法,在不同的matlab版本中是不同的,在此将对在matlab6.5和matlabr2007a(7.4)两个版本下的方法作一说明。

在Matlab6.5版本中,可以通过两种方式将m文件编译成dll文件。

一种是利用matlab为Visual C++发布的一个插件add-in,在Visual C++的环境下,将m文件编译成dll文件。

另一种则是使用mcc命令行的方式对m文件直接进行编译,生成dll文件。

Labview调用dll详解(C语言DLL

Labview调用dll详解(C语言DLL

Ccall和standcall的区别?自己创建的采用Ccal?你都试过吗?
4 n! W5 G+ P' I- M' B- U7 P' AC能用new来分配内存?也许我上学时学的不是ansi c
解释前先说一句废话,只有多了解C才能调用好DLL。LV自带的DLL解析(也就是导入共享库)是没用的。下面继续说这个函数。extern "C" ZLDS10X_DLL_API SENSOR_HANDLE ZLDS10X_DLL_stdcall ZLDS10X_Open(char * portnum , int baud , int timeout , int address); 这里面有四个参数一个返回值。SENSOR_HANDLE 是头文件里面用宏定义的数据类型int 。在返回值选项里面“类型”我们选择“数值”;“数据类型”我们选择int16。值得注意的是,由于C版本众多,而且标准C对于数据类型没有完全规定死,数值的“数据类型”有时候要参看具体的编译器。标准C规定:int不小于16位,long不小于32位。一般可以int选择I16,long选择I32(关于有符号数和无符号数的区别见C,不解释,64机另论)。char*表明传递的字符串,C语言的字符串等价于U8数组,所以“类型”我们选择“数组”;“数据类型”我们选择U8, “数组格式”选择“数组数据指针”。另外三个参数不用多解释。传递的是数值,数据类型选择好就可以了。看起来我们配置好了这个函数,对吧,但是运行就会得到一个-1的结果。-1代表错误。其中的原因在于C语言和labview的不同。C语言里面的字符串是以NULL(\0)结束的,但是labview不是,所以我们要将这个因素考虑进去,具体做法是:使用连接字符串。然后转化为U8,这样就可以啦。顺便解释一下,open的作用是打开串口,原型是C里面的creatfile函数,串口通信的第一个函数,要记得加上\0,否则程序很多会出错误!!值得注意的是,C编译器以及32位机和64位机的差异在Labview调用时也有体现,所以造成实际的调用十分麻烦,要很好的理解C的基础知识!下篇介绍令大家郁闷的指针的调用!
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Array 型参数的数据类型同 Numeric 型参数的数据类型;
通过 Dimensions 指定数组的维数;
Array Format 有以下几种选项:
Array
z Array Data Pointer 传递一维指针到数组值
z Array handle 传递一个指向数组每一维的 4 个字节指针的指针,其后为数组
long add_num(float *p, long size, float *sum);
图 6-14 CFN 的配置结果
i) 确定后会发现 CFN 根据配置自动进行了更新更新后的情况如右图示。 2. 生成.C 或.C++文件,完成实现函数功能的代码并为函数添加 DLL 导出声明;
在 CFN 节点上通过右键菜单选择“Create .C File…”生成 mydll.c 文件,其内容如下:
12
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@ 作者:HighTech Young
通过 Parameter 域和其右边的“Add a Parameter Before”,“Add a Parameter After” 和“Delete this Parameter”三个按钮可以增加、删除以及修改 CFN 的输入参数和类型。当用户选择某参数的类型后,其详 细的数据类型列表和参数传递方式列表将显示出来,以方便进行详细设定。表 6-1 列出了可以设定的输入参 数类型及其详细数据类型信息。
6.3.2. 调用自己开发 DLL 中的函数 开发人员可以在 LabVIEW 中指定 DLL 函数的原型,然后在外部 IDE 中完成代码并编译生成.dll 文件以
供项目使用。 下面就以一个简单DLL 函数原型。 a) 在 LabVIEW 的 diagram 面板上添加一个 CFN 并通过其右键菜单打开 CFN 的配置对话框; b) 使“Library Name or Path”输入框为空; c) 指定函数名“Function Name”和调用方式“Calling Conventions”分别为 add_num 和 C; d) 重命名返回参数的名称为“error”,并指定其类型为 Numeric 的 Signed 32-bit Integer; e) 用“Add a Parameter After”按钮添加第一个参数 p,指定其类型为 Array 的 4-byte Single 并 设定 Array Format 为 Array Data Pointer; f) 用“Add a Parameter After”按钮添加第二个参数 size,指定其类型为为 Numeric 的 Signed 32-bit Integer 并设置参数传递方式为 Value; g) 用“Add a Parameter After”按钮添加第三个参数 sum,指定其类型为为 Numeric 的 4-byte Single 并设置参数传递方式为 Pointer to Value; h) 至此,函数的原型应如下所示(图 6-14):
设定后的最终结果显示在“Function Prototype”文本框中,在确认前,可以在此检查设定是否正确。 如果不正确可以在此修改设定。
13
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@ 作者:HighTech Young
通过 Browse 按钮下的控件用户可以指定多个线程同时调用 DLL。默认情况下,LabVIEW 以“Run
11
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@ 作者:HighTech Young
6.3.1. 配置 Call Library Function Node(CFN) 无论在 LabVIEW 中使用自己开发的 DLL,硬件驱动供应商或者操作系统提供的 API,都可以通过
配置 Call Library Function Node (CFN,图 6-12)来完成。
图 6-12 LabVIEW 的 Call Library Function Node
long add_num(float p[], long size, float *sum); long add_num(float p[], long size, float *sum)
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@ 作者:HighTech Young
6.3. 调用动态链接库(DLL)
相对于 CIN 来讲,NI 更推荐用户使用 DLL 来共享基于文本编程语言开发的代码。除了共享或重复利用 代码,开发人员还能利用 DLL 封装软件的功能模块,以便这些模块能被不同开发工具利用。在 LabVIEW 中 使用 DLL 一般有以下几种途径:
注意:LabVIEW 不支持超过 1D 的 waveform 数组!
如果参数为 digital waveform 数组,则指定 Dimensions 为 1,否则为 0。 Digital Waveform 注意:LabVIEW 不支持超过 1D 的 waveform 数组!
Digital Data
如果参数为 digital data 数组,则指定 Dimensions 为 1,否则为 0。 注意:LabVIEW 不支持超过 1D 的 digital Data 数组!
图 6-13 CLF 配置对话框
在“Function Name”输入框中指定要调用函数的函数名。 通过“Call Conventions”下拉列表框指定调用 DLL 中函数的方式。可以指定调用方式为“C”(默认方 式)或 Windows 标准调用方式“stdcall”。一般来说用“C”方式调用开发人员自己写的 DLL 函数,而“stdcall” 一般做为标准调用方式来调用 windows 的 API 通过 Parameter 域可以指定所调用函数的返回值类型。默认情况下 CFN 节点没有输入参数而且只有一 个 void 类型的返回参数。该参数由 CFN 节点第一对连接点的右端返回,代表 CFN 执行结果。如果返回参数 的类型是 void 类型,则 CFN 连接点为未启用状态(保持为灰色)。CFN 的每一对连接点代表一个输入或输 出参数,若要传递参数给 CFN 则将参数连接至相应连接点的左端,若要读取返回值,则将相应连接点的右端 连接到 Indicator。 CFN 返回参数的类型可以是 Void,Numeric 或 String。只能为返回参数指定 Void 类型,输入参数不能 指定为 Void 类型。调用的函数没有返回值时,指定 CFN 的返回参数类型为 void 类型。即使参数有确定类 型的返回值,也可以指定 CFN 的返回类型为 Void,但是此时,函数的返回值将被忽略。 有些时候,调用的函数返回值不是以上三种类型,可以使用与以上三种类中有相同大小的一个来代替。 例如如果调用的函数返回一个 Char 类型数据,则可以用一个 8-bit unsigned integer 的 Numeric 类型来代 替。此外,由于 LabVIEW 中没有指针,因此调用 DLL 中的返回指针的函数似乎不可能。但是可以设定返回 值类型为一个与指针有相同大小的 Integer 类型,LabVIEW 将把地址以整型值来看待,并且用户可以在以 后的调用中直接使用它。
z string handle Pointer
Waveform 类型的参数默认类型为 8-byte double,因此一般没有必要为其指定数据
Waveform
类型。但是必须为其指定维数,如果参数为单独的 Waveform,则指定 Dimensions 为 0,如果参数为 waveform 数组,则指定 Dimensions 为 1。
在 CFN 图标的右键菜单上选择“Configure…”打开 Call Library Function 配置对话框(图 6-13)。 通过该对话框,可以指定动态库存放路径、调用的函数名以及传递给函数的参数类型和函数返回值的类 型。在配置完后,CLF 节点会根据用户的配置自动更新其显示。
通过 Browse 按钮或者直接在“Library Name or Path”输入框中指定调用函数多在.dll 文件的路 径。
指针
Adapt to Type
用来传递 LabVIEW 独有的数据类型给 DLL。 表 6-2 CFN 输入参数的类型
有时可能在 CFN 配置对话框中并不能找到要传递给它的参数类型,在这种情况下可以通过下面方法来解
决。如果参数不含指针,则可以通过 Flatten to String 函数( )将参数转换为字符串,并将此字符串指 针传递给函数。还有其它一些技巧请参见 NI 手册。
参数类型
说明
Numeric 型参数有以下几种数据类型:
z 8、16、32 和 64 位符号和无符号整型(Signed or Unsigned Integer)
Numeric
z 4 字节单精度类型(4-byte single)
z 8 字节双精度类型(8-byte Double)
利用“Pass”下拉列表指定传递参数指针或是传递参数的指针。
/* Call Library source file */ 14
#include "extcode.h"
该文档版权归上海微视泰科工作室所有,转载请注明出处!
网址:
Email: hightechyoung@ 作者:HighTech Young
的值
z array handle Pointer 为数组的句柄传递一个指针
用 String Format 下拉列表框选择字符串类型
z C String Pointer—以 null 字符结束的字符串
String
z Pascal String Pointer—附加长度字节的字符串
相关文档
最新文档