第 30 卷第 1 期
2013 年 1 月
计算机应用与软件
Computer Applications and Software
Vol. 30 No. 1
Jan. 2013
基于 DLL 技术和 COM 组件技术实现 LabVIEW 和
MATLAB 混合编程
宋广东1
2 王 昌1
,
1 ( 山东省光纤传感技术重点实验室 山东 济南
2 王金玉1
,
2 路 璐3 魏玉宾1
,
,
2
)
250014
2 ( 山东省科学院激光研究所 山东 济南
3 ( 北京红晶石投资咨询有限公司 北京
)
250014
)
100044
LabVIEW 和 MATLAB 混合编程应用日益广泛,然而大多数开发软件在客户端应用时需要同步安装 MATLAB
,大大限制
摘 要
了软件的推广应用。针对 LabVIEW 和 MATLAB 混合编程开发软件发布后独立于 MATLAB 运行的要求,从 LabVIEW 和 MATLAB 共
同支持的数据接口技术出发,论述 LabVIEW 调用 MATLAB 计算代码的方法,比较每种接口技术的优势和缺点。通过实例实现了基
( 基于组件对象模型) 组件技术的 LabVIEW 与 MATLAB 混合编程。成功实现了应用程序独立运
于 DLL
行并明显改善了执行效率。
关键词
( 动态链接库) 技术和 COM
LabVIEW MATLAB 混合编程 DLL COM 组件
中图分类号 TP311
文献标识码 A
:
DOI
10. 3969 / j. issn. 1000-386x. 2013. 01. 074
IMPLEMENTING MIXED PROGRAMMING WITH LABVIEW AND MATLAB BASED ON
DLL TECHNOLOGY AND COM COMPONENT TECHNOLOGY
Song Guangdong1
Key Laboratory for Optical Fiber Sensing Technology of Shandong Province
,
2 Wang Chang1
,
2 Wang Jinyu1
,
2
1 (
2 (
Institute of Laser
,
Shandong Academy of Sciences
3 (
Beijing Balas Investment Consultion Co. Ltd
,
2
Lu Lu3 Wei Yubin1
,
,
China
Jinan 250014
,
,
China
Shandong
)
,
Shandong
)
)
,
China
,
Jinan 250014
,
Beijing 100044
Abstract
The application of mixed programming with LabVIEW and MATLAB is increasingly widespread
,
but most developing software
,
need to install MATLAB synchronously when applied in client
this greatly limits the promotion and application of the software. In order to
meet the demand of the software mixed programming with LabVIEW and MATLAB that after its release it runs independently to MATLAB
,
in
this paper we discuss the method of LabVIEW calling MATLAB computing code based on the data interface technology jointly supported by the
both
compare the advantages and disadvantages of each interface technology. The mixed programming with LabVIEW and MATLAB based on
DLL
dynamic link library
technology and COM
Component Object Model
component technology is achieved through examples. The
)
(
)
,
(
software runs independently to MATLAB is successful realised and the efficiency is significantly improved.
Keywords
LabVIEW MATLAB Mixed programming DLL COM component
0 引 言
DAQmx
。MATLAB
是图形化的开发工具,集成了
LabVIEW
串口操作等模块,在硬件控制
数据采集
、
网络通信方面功能强大,在
VISA
、
虚拟仪器设计和测控软件开发方面已是事实上的工业标准,可
以实现软件的快速开发,界面开发简捷
具有强大的
科学计算机数据处理能力,集合了应用广泛的模块和工具箱强
大的计算能力
将两者结合起来混合编程的思想也被越来越多
的工程技 术 人 员 采 纳
以 及 以 后 的 版 本 中
国 内 的 专 家 学
LabVIEW
者[
混合编程方面针对二者早期版
]在
本做了大量研究应用工作,而针对二者新版本的研究资料和实
现混合编程软件独立于
独立运行的成功实例较少
。
与
本文通过
组件两种技术成功实现了
。
已经 很 好 地 将
LabVIEW 8. 0
集 成 进 来
LabVIEW
MATLAB
MATLAB
MATLAB
和
和
在
。
。
1 - 3
DLL
COM
LabVIEW
接口编程,解决了混合编程软件独立于
MATLAB
运行
MATLAB
的难题
。
1 LabVIEW 与 MATLAB 接口编程方法
LabVIEW
与
MATLAB
之间的通信技术主要有下面几种:
( 1) 动态数据交换( DDE) 技术 LabVIEW
,利用这些
或
VI
发送数据
VI
请求
、
/
可以创建
提供服务等功能
DDE Server
。
信
收
/
提供了
通
DDE
,完成接
DDE Client
( 2) ActiveX 技 术 ( 即 Automation Server 技 术 )
中基于
VIEW
ActiveX
实现和
MATLAB
Lab-
混合编程的方法又有两
在
收稿日期:
2012 - 02 - 14。
关键技术研究及产业化(
研领域: 光纤传感,智慧矿山,微震监测与信号分析处理
员
2011ZHZX1A0107
光纤传感网络在海洋油气和矿山领域的
。宋广东,助理研究员,主
。王昌,副研究
。王金玉,助理研究员
。魏玉宾,助理研究员
。路璐,工程师
。
)
288
计算机应用与软件
2013 年
{
}
return TRUE
;
extern ″C″ _declspec
(
double * sampleValue
{
DLL
技术实现了
调用
LabVIEW
ue
,
MATLAB
脚本节点,第二种使用
两种方法的基本过程都相同
先打开
———
种,第一种使用
板
服务器,然后执行
。
命令,最后关闭自动化服务器
ActiveX
MATLAB
函数模
自动化
MATLAB
( 3) 动态链接库( DLL)
将
技术) 结合起来,把调用
和
DLL
MATLAB
MATLAB
计算引擎的
供
调用
另外一种方法是通过
DLL
LabVIEW
。
。
计算引擎( 基
代码编
插
MATCOM
C
COM
于
译成
件将
文件编译成
代码,这些代码能被
C + +
C / C
文件,合理设计输入输出参
编译成
中通过调用库函数节点方便地调用,且
DLL
MATLAB
的
M
编译器
+ +
数,就可以在
脱离了
VC + + 6. 0
LabVIEW
MATLAB
运行环境,执行效率高
。
( 4) COM 组件技术
生成器
COM
作为独立的
它能把
。
COM
对象,可直接被其他支持
从
MATLAB
MATLAB
版本开始,
提供了
6. 5
开发的算法做成组件,这些组件
的语言所引用
。
组件技术的
联合开发的应用程序运行效率高,而且非
COM。
利用
COM
COM
及以上版本支持
LabVIEW 5. 0
和
LabVIEW
常利于用户应用软件的独立发布
MATLAB
。
动态数据交换(
引擎( 调 用
MATLAB
C
调用) 的最大缺点是不能脱离
VIEW
技术( 基于
MATCOM
应用软件的独立发布
和
插件) 和
COM
文献[
]利用
4
混合编程,文献[
]进行了
5
MATLAB
。
) 技术
DDE
计 算 引 擎 的
、ActiveX
技术和
代 码 编 译 成
计算
Lab-
MATLAB
供
DLL
工作环境
MATLAB
。DLL
组件技术都可以实现用户
本 文 通 过 例 子 分 别 介 绍 利 用
LabVIEW
MATLAB
上述研究都是在较低级版本的开发环
技 术 ( 基 于
混
组件技术实现
DLL
和
LabVIEW
MATLAB
MATLAB R2007a
,
Microsoft Visual C + +
组件的技术研究
。
COM
境下实 现 的
。
插件) 和
COM
开发环境如下:
MATCOM
合编程
,
MATCOM 4. 5
6. 0
。
,
LabVIEW 8. 5。
2 LabVIEW 和 MATLAB 混合编程技术实现
打开
MATLAB
新建一个
文件命名为
m
能是实现滑动平均消除信号趋势项
一维数组,
slidstep
动平均后返回数组
文件内容如下:
是滑动阶次; 输出参数
。
。M
输入参数
slidaver
,函数的功
是
是信号滑
sampleValue
slidaverValue
function slidaverValue = slidaver
(
sampleValue
,
slidstep
)
clc
l = slidstep
;
x = sampleValue
;
(
1
(
) ;
x
,
) ;
l
) ,
x
1
n = length
(
b = ones
[
b* x
;
a =
b = a
for k = 1
:
l
b
;
end
a = b
,
b* x
) ];
(
n
for j = l + 1
:
n - l
(
)
j
= mean
(
(
a
:
j - l
j + l
) ) ;
end
slidaverValue = x
(
:
)
n
1
(
- a
:
l + 1
n + l
) ;
2. 1 基于 DLL 混合编程
2. 1. 1 使用 MATCOM 插件生成 DLL
首先安装
从菜单中选择
择
,改变文件类型为
MATCOM 4. 5
(
,安装成功后,运行
) ,选择
Browse
Tools-> Customize-> Add-ins and Macro Files
VC + + 6. 0
,并
,选
Add-in
. dll
MATcom45 \ bin \
mvcide. dll
文件,确定
在
。
工 具 条
VC + + 6. 0
新 建
的开发环境中可以看到
工
Win32 Dynamic-Link Library
Visual MATCOM
程,命名为
。
,创建
myslidaver
A simple DLL project。
工具条
COM
到新建工程
Add m-files to current project
在
把
文件添加
myslidaver. cpp
。
slidaver. m
点 击
MAT-
文件添加
,
#
,编译,在
include ″slidaver. h″
,否则将提示错误
slidaver. h
在
。
matlib. h″
代码,返回
和采样数组
以指针的形式传递,添加一个表示数组长度的变量
码如下:
myslidaver. cpp
slidaverValue
型数据
double
#include ″matlib. h″
中同样要添加
#include ″
中添加数据处理
sampleValue
全部代
len。
#include ″stdafx. h″
#include ″matlib. h″
#include ″slidaver. h″
BOOL APIENTRY DllMain
)
(
HANDLE hModule
,
DWORD ul_reason_for_call
LPVOID lpReserved
,
)
dllexport
,
int slidstep
void libslidaver
,
int len
)
(
double * slidaverVal-
(
initM
Mm a1
;
MATCOM_VERSION
,
x1
(
) ;
) ;
使用矩阵类
/ /
/ /
初始化
构造矩阵
库
matlib
,
x1.
a1
Mm
a1 = zeros
1
(
for
(
int i1 = 1
,
i1
(
a1
1
x1 = slidaver
,
len
;
)
a1
;
;
)
i1 + +
[
];
i1 - 1
i1 < len + 1
= sampleValue
,
slidstep
) ;
int i = 1
i < = x1. rows
( ) ;
i + +
)
)
(
for
;
int j = 1
j < = x1. cols
,
j - 1
i - 1
[
( ) ;
]
j + +
= x1. r
(
) ;
,
j
i
slidaverValue
(
for
{
}
exitM
( ) ;
;
return
}
( ) 和
程序中涉及到了两个成员函数
. rows
,
) 代表矩阵
j
文件夹下产生
别返回矩阵的行数和列数;
编译运行后在
列的元素
x1. r
(
i
。
Release
. cols
( ) ,它们分
行第
的第
x1
i
j
myslidaver. dll。
2. 1. 2 LabVIEW 调用 DLL
打开
新建一个
LabVIEW
数节点,函数配置选板如图
vi
所示
1
。
,在程序框图面板添加调用库函
程序框图如图
2
则将会产生调用错误
图
调用库函数节点设置
1
所示,返回值
slidaverValue
为了在客户端应用还要在
。
需要赋初值,否
文件夹
Release
第 1 期
宋广东等: 基于 DLL 技术和 COM 组件技术实现 LabVIEW 和 MATLAB 混合编程
289
下添加
ago4501. dll
,
v4501v. dll
,
v4501v. lib
,
matlib. h
四个文件
。
数个数,此处设为
1
常量即可; 信号数组
下对应的参数直连;
类型,但是转到
; 输出参数
slidaverValue
和滑动阶次
虽然在
输入端右击创建一个
可以与节点
中是一维矩阵
slidstep
MATLAB
sampleValue
slidaverValue
中要把它当成二维数组处理,
输出端需要加入变体至数据转换函数,函数类型要用
LabVIEW
slidaver-
doub-
Value
型二维空数组初始化
程序框图具体如图
。
所示
。
5
le
De-
图
2 LabVIEW
调用
DLL
2. 2 基于 COM 组件混合编程
2. 2. 1
在
com 组件编译生成
MATLAB
命令行(
) 输入
> >
deploytool
命令; 打开
页面,选择工具栏第一项新建工程(
ployment Tool
deployment project
选择
) ,在弹出的
New Deployment Project
,在右边栏中选择
,在
MATLAB Builder for . NET
Generic COM
,并为工程
Component
选择路径,注意工程保存路径中不能出现汉字,否则在后续生成
时会出现错误,如图
栏中输入工程名称
myslidaver. prj
所示
Name
3
。
Create a new
左边一栏
图
3
新建工程项目页面设置
在新页面中选择工具栏
然后选择工具栏中的
点击工具栏中的
Add File
,为新建工程添加
,生成
文件,
M
Build the project
,在
Package the project
distrib
myslidaver_1_0. dll。
文件夹下生成
stall. bat
,
myslidaver_pkg. exe
两个文件,若要在没有安装
的机器上调用此
,需要运行
即可把组件注册到机器上,供客户端程序调用[
]
6
DLL
_install. bat
myslidaver_
或
LAB
pkg. exe
。
_in-
MAT-
2. 2. 2 LabVIEW 调用 COM 组件
打开
LabVIEW
新建一个
,在程序框图面板中添加互联接
打开自动化,在其输入引脚自动化应用句柄右击选
类,浏览找到
,选中
vi
myslidaverclass
| ActiveX |
口
择
并点击确定按钮,如图
ActiveX
myslidaver_1_0. dll
所示
4
。
组件
2. 3 DLL 技术和 COM 组件技术比较
5 LabVIEW
调用
COM
图
,对
。
4. 5
由于
但是在
MATCOM
最终版本为
MATLAB 6. 5
文件到
版本提供了较好的支持,可以方便地实现
的转换
后续版本引入的新函数和标识无法识别,因此基于
成
版本及部 分 后 续 版 本 函 数
及以前的
文件
以后版本没有提供同步更新,对
生
和以前
MATLAB 6. 5
组 件 的 调 用 技 术,是
运行时库
公司当前主推的接口技术,需要
调用的方法只适用于
MATLAB 6. 5
MATCOM
LabVIEW
基 于
C + +
COM
DLL
供
。
M
MathWorks
(
MATLAB
) 的支持,适用于
MCR
MATLAB Components Runtime
以后的版本
的功能是提供
MATLAB
6. 5
。MCR
行底层支持,它打包了
件,因而可以运行几乎所有支持编译的
令,只是初始化时间比以前要慢得多
用
wden
一些函数即不支持生成
MATLAB
提供的
。
也不支持生成
MATLAB
MATLAB
发布程序的运
组
、
及工具箱命
笔者用上述两种方法调
中的
MATLAB
运行所必需的支持全部库
函数都没有成功,因此
MATLAB
组件
。
COM
DLL
3 结 语
DLL
基于
技术和
组件技术混合编程的方法的最大优
点就是可以创建独立的应用程序,而且在执行效率方面明显改
善
混合编程技术,不需要安装
,适合
COM
。
DLL
基于
版本( 及后续版本部分函数) 的用户
6. 5
术具有极佳的应用前景,需要额外安装
根据应用特点选择其中一种使用
基于
技术混合编程的方法,可以将
势结合起来,开发出功能更强大
LabVIEW
。
。
MCR
DLL
和
MCR
基于
MATLAB
组件的技
开发者可以
组件
COM
各自的优
COM
支持
。
技术和
MATLAB
性能更优越的测控软件
、
。
参 考 文 献
[
1
[
2
[
3
[
4
[
5
[
6
加载
把打开自动化输出引脚右击创建
4 LabVIEW
图
组件
COM
类的方法选择
slidaver
方法,方法节点下
myslidaver. Imyslidaverclass
参数表示输出参
nargout
] 徐晓东,郑对元,肖武
常用功能与编程实例精讲
. LabVIEW 8. 5
北京: 电子工业出版社,
2009.
] 曲丽 荣,胡 容,范 寿 康
. LabVIEW、MATLAB
及 其 混 合 编 程 技 术
机械工业出版社,
2011.
[
]
.
M
[
]
.
M
] 王济,胡晓
. MATLAB
在振动信号处理中的应用[
M
]
.
北京: 中国水
LabVIEW
和
MATLAB
混合编程
] 彭宇宁,朱后
利水电出版社,知识产权出版社,
技术实现
) :
调用
DLL
计算机与现代化,
] 胡吉朝,傅钥,王定远
]
[
J
.
利用
2007
144
2006.
(
.
93-95.
. LabVIEW
) :
(
. IT
研究[
]
J
技术论坛,
26
] 宋广东,刘统玉,王昌,等
基于
.
]
编程实现振动信号处理[
J
.
2008
71-72.
组件的
COM
山东科学,
VB
,
(
23
与
) :
1
2010
32-35.
MATLAB
混合
MATLAB COM
组件的技术