logo资料库

基于DLL技术和COM组件技术实labVIEW和MATLAB混合编程.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
第 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 组件的技术
分享到:
收藏