利用DLL技术实现LabVIEW和MATLAB混合编程_彭宇宁
LabVIEW与MATLAB联合编程

LabVIEW与MATLAB联合编程
LabVIEW与MATLAB的联合编程⼀般可以通过2种⽅式进⾏:
1. 公式节点[Formula Node]
2. MATLAB脚本节点[MATLAB script node]
1. 公式节点[Formula Node]
位置:函数选板->数学->脚本与公式->公式节点
在程序框图上计算数学公式和类似于C语⾔的表达式。
可在公式中使⽤下列内置函数:abs、acos、acosh、asin、asinh、atan、atan2、atanh、ceil、cos、cosh、cot、csc、exp、expm1、floor、getexp、getman、int、intrz、ln、lnp1、log、log2、max、min、mod、pow、rand、rem、sec、sign、sin、sinc、sinh、sizeOfDim、sqrt、tan和tanh。
2. MATLAB脚本节点[MATLAB script node]【推荐√】
位置:函数选板->数学->脚本与公式->脚本节点-> MATLAB脚本节点
调⽤MATLAB®软件脚本服务器执⾏脚本。
这意味着我们可以采⽤MATLAB语⾔进⾏编程。
下⾯⽤⼀个例⼦展⽰如何使⽤MATLAB脚本节点:
我们需要产⽣⼀个正弦信号,程序框图如下所⽰
结果前⾯板所⽰
注意:在退出LabVIEW前,请不要⾃⾏关闭MATLAB窗⼝。
LabVIEW与Matlab_Simulink混合编程方法及应用_黄世奎

(b)LabVIEW的 ActiveX编程运行效果 图 3 LabVIEW的 ActiveX编程与运行效果
基于 ActiveX自动化技术的开发方式可以更加灵 活地对 Matlab进行控制 , 方便地使用 Matlab的各种工 具箱 , 适合于较大的应用程序开发 , 但在调用大型算法 时 , 经常会遇到数据类型的转换 , 尤其是变体与其他类 型的转换 , 因此 , 必须明确输入 、输出数据的具体类型 , 而且要尽量减少数据传输量和启动 Matlab自动化服 务器的次数 。 2.3 利用 COM组件技术
1 引 言
LabVIEW是目前应用最广 、发展最快 、功能最强 的图形化虚拟仪器软件开发集成环境之一[ 1] , 尽管如 此 , 它对于一些需要进行大量数据运算处理的复杂应 用仍显得有些力 不从心[ 2] 。 而 Matlab是一个为科学 和工程计算专门设计的高级交互式的软件包 。 Matlab 集成了各种领域的数据处理工具包 , 是一个可以完成 各种计算和数学处理的可视化 、强有力 、易于使用和理 解的工具 [ 3] , 但在 循环处 理 、图形 界面 开发 、信号 测 量 、网络通信 、硬件控制等方面明显逊色于 LabVIEW。 因此 , 将 LabVIEW与 Matlab/Simulink混合编程 , 实现 两者相互通讯 、优势互补 , 对于开发功能更为强大的智
(a)fuzzyPID程序框图
(a)LabVIEW的 ActiveX编程
(b)模糊控制系统的输入 、输出曲线 图 2 基于 MatlabScriptNode混合编程技术的应用实例
该 实例中 的 fuzzyPID算法是 由 Matlab/Simulink 构建 , 然后通过在 MatlabScriptNode中编写脚本程序 使之能在 LabVIEW环境下运行 。
基于labview和matlab混合编程的实时自适应滤波系统

12
阅陨粤晕在陨 悦匀粤晕孕陨晕 运耘运粤韵X陨晕郧 再哉 匀哉粤晕允I晕郧 杂匀陨再粤晕
第1期
任静宜等院 基于 LabVIEW 和 MATLAB 混合编程的实时自适应滤波系统
0 引言
目前袁 在信号降噪滤波过程中袁 自适应滤波 器的使用非常广泛袁 该滤波器不需要关于输入信 号的先验知识袁 而是依靠递归算法进行运算袁 在 不能得到有关信号特征的完整知识的环境下袁 逐 渐地估计出所需要的统计特性袁 特别适用于实时 处理遥 自适应算法主要有最小均方误差算法 渊LMS院 Least Mean Square冤 和递推最小二乘算法 渊RLS院 Recursive Least Square冤 两种基本的算法 [1]遥 LMS 算法与模型无关袁 跟踪特性较好袁 结构相对 简单袁 运算量较小袁 是目前使用得最广泛的自适 应滤波算法遥 在实际工程应用中袁 硬件实现算法 时袁 需考虑硬件的面积尧 成本尧 速度和功耗等因 素袁 虽然 RLS 算法收敛速度较快袁 但需要大量的 数学计算袁 在硬件实现上复杂度较高 [2]遥 而 LMS 算法计算简单袁 仅需要 2N+1 次乘法和 2N 次加法遥 因此目前仍以 LMS 算法为主袁 并在近年出现了数 据 块 最 小 均 方 误 差 渊 BLMS院 Block Least Mean Square冤 算法和快速块最小均方衰减 渊FBLMS院 Fast Block Mean Square冤 算法袁 用于减小自适应滤波器 的计算复杂程度并改善传统 LMS 算法的不足 [3]遥
theexperimentalresultsshowthattherealtimesoundsignalnoiseisprocessedintimeandtheefficiencyofrealtimesoundrecognitionisimprovedafterpassingthefilteringsystemkeywords院labview曰matlab曰hybridprogramming曰adaptivefilter曰lmsalgorithm曰dllfiles收稿日期院20190528作者简介院任静宜渊1998冤袁女袁山东潍坊人袁南昌航空大学测试与光电工程学院袁主要研究方向为信号处理遥通信作者院龙盛蓉渊1979冤袁女袁湖北荆州人袁南昌航空大学讲师袁博士袁主要从事传感器与信号处理方面的教学与研究工作遥电子产品可靠性与环境试验耘蕴耘悦栽砸韵晕陨悦孕砸韵阅哉悦栽砸耘l陨粤月陨蕴i栽再粤晕阅耘晕灾陨r韵晕酝耘晕栽粤蕴栽耘杂栽陨晕郧计算机科学与技术阅陨粤晕在陨悦匀粤晕孕陨晕运耘运粤韵x陨晕郧再哉匀哉粤晕允i晕郧杂匀陨再粤晕12阅陨粤晕在陨悦匀粤晕孕陨晕运耘运粤韵x陨晕郧再哉匀哉粤晕允i晕郧杂匀陨再粤晕第1期图1自适应滤波器的原理图fir横向数字滤波器x渊n冤lms自适应算法y渊n冤e渊n冤d渊n冤移0引言目前袁在信号降噪滤波过程中袁自适应滤波器的使用非常广泛袁该滤波器不需要关于输入信号的先验知识袁而是依靠递归算法进行运算袁在不能得到有关信号特征的完整知识的环境下袁逐渐地估计出所需要的统计特性袁特别适用于实时处理遥自适应算法主要有最小均方误差算法渊lms院leastmeansquare冤和递推最小二乘算法渊rls院recursiveleastsquare冤两种基本的算法1遥lms算法与模型无关袁跟踪特性较好袁结构相对简单袁运算量较小袁是目前使用得最广泛的自适应滤波算法遥在实际工程应用中袁硬件实现算法时袁需考虑硬件的面积尧成本尧速度和功耗等因素袁虽然rls算法收敛速度较快袁但需要大量的数学计算袁在硬件实现上复杂度较高2遥而lms算法计算简单袁仅需要2n1次乘法和2n次加法遥因此目前仍以lms算法为主袁并在近年出现了数据块最小均方误差渊blms院blockleastmeansquare冤算法和快速块最小均方衰减渊fblms院fastblockmeansquare冤算法袁用于减小自适应滤波器的计算复杂程度并改善传统lms算法的
Labview和Matlab混合编程方法的研究与实现

Labview和Matlab混合编程方法的研究与实现柴敬安;廖克俭;潘德辉;李淼【期刊名称】《计算机测量与控制》【年(卷),期】2008(16)5【摘要】LabVIEW是一种高性能的图形化虚拟仪器编程软件,它在测试与测量、过程控制与处理,科学研究和分析等方面有广泛的应用,但是,LabVIEW在数值分析和数据运算处理等方面显得有些力不从心;通过其强大的外部接口.提出了基于DDE,DLL,ActiveX自动化,MATLAB Script节点技术的LabVIEW和MATLAB混合编程,并结合小波降噪、虚拟模糊热点温度分析仪实例,对这些方法进行了比较分析;利用混合编程既良好地发挥了仪器语言的优势,又扩展了算法工具箱,探索了智能虚拟仪器新的开发途径.【总页数】4页(P737-739,745)【作者】柴敬安;廖克俭;潘德辉;李淼【作者单位】辽宁石油化工大学,石油化工学院,辽宁,抚顺,113001;辽宁石油化工大学,石油化工学院,辽宁,抚顺,113001;辽宁石油化工大学,石油化工学院,辽宁,抚顺,113001;抚顺市质量技术监督局,辽宁,抚顺,113006【正文语种】中文【中图分类】TP31【相关文献】bVIEW与Matlab/Simulink混合编程方法及应用 [J], 黄世奎;彭宇宁;谢树平;韦德晖bview和Matlab混合编程方法在生物医学信号分析中的应用 [J], 于璐;张勇德;沙宪政BVIEW和MATLAB混合编程方法研究及其在柴油机故障诊断中的应用 [J], 李沈;李森;刘俊磊;侯祥林4.MATLAB/Simulink与LabVIEW的混合编程方法 [J], 谢树平;朱后;李黎;彭宇宁5.Matlab与LabVIEW混合编程方法应用研究 [J], 徐何;李滔;李勇因版权原因,仅展示原文概要,查看原文内容请购买。
基于动态链接库调用方法的LabWindows与MATLAB混合编程

科 黑江— 技信总 — 龙— —
基于动态链接库调用方法的 L b n o a Wid ws 与 MA L B混合编程 T A
张 静 陈 于扬
( 华北 电力 大学 电子 与通信 工程 系 河北 保 定 0 10 ) 70 3
摘 要 : 出一种基于动态链接库调 用方法的 Lb i o s MA L B混合编程技术 , 提 awn w 与 d TA 该方法只需要在 目标机上安装 MC R便 可以使程序脱 离 M | Ar _ L B 大的运行环境独立运行 , L b i o s V 与 M T  ̄ A 庞 将 aw dw/ I A L B强大科学计算能力相结合 , 高了虚拟仪器软件开发效率。利用动态链接库调 用方法和 n C 提 M TA A L B强大的小波分析工具箱的功能, 对电压闪变包络信号提取, 结果表 明 Lb idw/V 针对 M T A a wno s I C A L B动态链接库调用技术使得虚拟仪器软件开发
更加 高效 。
关键词:aWi o s V ; nAB; Lb n w/ IMA d C 动态链
命令 的选项 ,可将 m文件编译成 c + 源代 , + c
L b no s V aWidw/ l和 MA C Ⅱ B都 是 当 今 非 码 、 e m x文件 、b文 件、l文件 、x u dl ee可执行 文件 常流行 的控制系统分析和设计软件 ,但二者各有 等 。生 成 c 语 言 动 态 链 接 库 命 令 : c — mc B
侧重点和优缺点。 前者是美 国国家仪器( a o l chr l :l N tn sa di 【b文件名】【 ia e b i m文件名] 。 I tm n , I n r et N ) s u s 公司开发的面 向计算机测控领域 2 . 2程序的发布 的交互式 C语言软件开发平台,可以在多种操作 无论编译之后生成的是可执行文件还是库文 系统平台上运行。Lb I0 V 丑 widw I以A S l N IC为 件, 要使其能够发 布到没有安装 M T A A L B的计算 核心, 将功能强大 、 使用灵活的 c 语言平台与用于 机上使用 , 必须在 目标计 算机上安装 M R 可 以 C。 数据采集分析和显示的测控专业工 具有机地结 利用 M T A 命令 b im r 创建可以发布给 AL B u d c来 l 合。它的集成化开发平台、 交互式编程方法、 丰富 最终用户的 MC R安装文件。一般来说 , 需要发布 的功能面板和库 函数大大增强了 c语言的功能 , 的文件有 3个 :. a 编译得到的可执行文件或者库 为熟悉 C语言的开发人员开发建立检测 系统、 函数出.C F文件;. Rntlri。 自 T c MC Is e.p l a z 动测试环境、 数据采集系统。 虚拟仪器提供了一个 在最终用户的计算机上 , 首先需要把 M Rn C I— 图 I 包络信 号提取 理想的软件开发环境 , 然而要实现测控领域一些 s l ri解压 , tl .p ae z 并把 MC R中可执行文件所在 目录 ys f p 8 t l; =i 2 i ‘is n l) 先进的理论和方法 , 如神经网络 、 遗传算法、 模糊 加到系统路径上 , 然后就可以使用编译后的程序 v l( 0 .E = 1 6 v v .2 = .x : 理论等方面 , 需要官方额外提供的工具箱。 一般价 了。 n me d ; a =' b' 格不菲。而 M A B拥有强大 、 AL 丰富的内置函数 , 3动态链接库技术的应用 强大的科学计算功能和灵活的接 口 技术,其强项 电网中 存在的非线性负荷会使供电电压 的有 【.= ane(,,nme; c1 w v cv7w a ) ] d 在于数学运算。丑 widw v Lb r0 I与 MA L B的有 效值及波形发生变化 , I TA 影响供 电质量。 传统的检测 a - ro ' ',w m ,) 6 wcd ",l m e ; " ( c, a 7 6 : 机结合, 可以相互弥补, 设计出功能强大的虚拟仪 方法用 F _算法分析稳态调幅波,不能分析幅值 a6=a —1 f’ I ( ' ' 器软件【1 l。 - 4 时变的闪变信号目 。小波变换是一种信号的时间一 stc,Vsbe, t; e gf iil'd 3 stc q v e gf ne (,  ̄ y" 3 qf o 现在普遍采用 的 【b n0 v 与 MA — 频率分析方法, 丑 widW I T 具有多分辨率分析信号的特点 。 而 stc ' pr ns 'a m t s eg f aeU i " f e r ( , P t, i e 3  ̄ A L B混合编程技术主要 有两种 : A I M TAB引擎调 且在时域和频域内都具有表征信号局部特征的能 stc ' pfo fn, ,7 D eg f ae 'io ' 0 , ; ( , P 6 i [ .5 0 用技术、 V 提供的 A t eX CI cv 服务控件接 口, i 都存 力 。 因此在电压闪变信号分析中, 采用小波变换能 sb lt 1) up ( 1 o2 l  ̄) t 在各自的优缺点 , 而且两者都脱离不了 M T  ̄ 有效提取电压闪变信号的调幅波。应用小波分析 po(6 A LB x B 3 0 -1l 庞大的软件运行环境 ,使用起来较复杂 。提出将 进行电压闪变中包络信号的提取主要涉及到小波 丑 i .5 0, 。 dc - r d'', rme ) e mp wc ( ,l m . ; o dc , w 1 M TA A L B的 I n文件编译成动态链接库 ( L D L文 的分解与重构 , 其过程主要分为以下 2 个步骤。n sbl ( 1 a S030 ,1 D upo 2 ; i , 0- , ; t. x 5 1 件 ) Lb i o s V 调用 , 供 a W n w/ I d C 使用起来较为简单 , 信号的小波分解 ,选定一种小波族和设定滤波器 po(emp; l de ) t 只需在 目标 机上安装 M T A A L B运行库就 可独立 长度, 对信号进行 N层分解 。b . 信号的小波重构 , Yae ̄d,u 2t 1 ; lbl'' m s(} n r D p n " je' e p ; i( r t dpg 'm 3 - , t 使用。 对分解后的信号的低频和高频进行重构。 d. d n o )ed 2动态链接库技术 31 .基本 电压闪变信号模型建立 将 m文件编译成动态链接库之后 , 需要将生 21 .编译动态链接库 电压 闪变是由电网电压的幅度起伏变化所引 h文件、b文件 、1文件拷贝到工程 目录下 l i dl 在安装 M T A A L B程序时,选择默认安装模 起的, 所以电压波动与闪变信号用调幅电压表示 : 成 的. 除此之外还需拷贝 M T A A L B库函数 中 f ) ( o ( t =42 [+M sV ) o ( t ) V1 c ( ̄ ] sw ) o c 进行调用, 式, 编译器便会被安装到机器中。首次使用之前 , ( : ^ fe sw ) 的 l m . 、 a ih m lc.、 cm ri 等 文 i xi m tx 、 c r m lc.b b 1 b r. m h 1 ( )为包络信号 需 要在 M T A A L B环境 中配置 CC + / + 编译器 , 在 件。 Widw 上, T ̄B编译器支持以下 3种 CC + no s MA I /+ V为工 频 电压额 定值 3 V 程序运行 .C I 3 编译器 : M为调频幅值,其值一般为 l %,最高可达 L b idw /V 核心 代码 如下 : awno s l C 211Maa 本身提供 的 L cC编译器 , . f] i) c 这 1 % 0 it VC L B C xc t i a e m c t l h vn n C IA L A K E eu n pn1 o r teet e( t .i n o i , W 为工 频 角频 率 是一个免费的 c编译器, 但它不能编译 c + + 程序。 v i clb c Daa n vn Da .it v IDaa 1 od al ak t,ite e t t n eel t2 M t 21 0l dc + .2B r n + :适用 版 本 53 .、5 . a -、54 . 5 W为调制信号的基波角频率 { 及 56等版本。 . ∞ y I; n 32MA A . 耵.B程序设计 d u l o = ; o be n O u co = b ae ) i ] g 21 c o i a /+ ( V )适用版 fnt nI d w v( . Mi f Vs lCC +MS C: 3 ms t u h= 2 0 3 0; si h( e0 wt e n c v 本为 6 、70及 71 . . 0 .。 N= 2 0 3 0; f 动态链接库的生成需要 以下 3个步骤 :. a 编 t 0: 1: c 8 EN CO a e EV T MM I T: = N一 写 m��
Matlab和LabVIEW混合编程的实现

欢迎订阅欢迎撰稿欢迎发布产品广告信息E I C Vo l .15 2008 No.2 101 图3 Soble 算子处理图 图4 二值图 3 二值化整幅图像画面仅有黑白二值的图像就是二值化图像。
二值化的目的是将采集得到的多层次灰度图像处理成二值图像,以便于分析理解和识别并减少计算量。
对图像进行二值化处理的关键是阈值的合理选取。
阈值设置过小易产生噪声;阈值设置过大会降低分辨率,使非噪声被视为噪声而滤掉[5]。
本文采用的是最优阈值原理:统计每幅图像灰度的分布特性,利用类别方差作为判据,选取使类间方差最大值作为选定的阈值。
二值图如图4所示。
4 结束语本文通过对运动车辆的视频进行中值滤波,Soble 算子提取图像的边缘信息,接着进行二值化处理,为以后的识别提供了良好的基础。
利用VC ++编制人机交互友好界面,实现数字逻辑变换及道路图像处理。
该算法具有良好的实时性和可靠性。
□参考文献[1]布洛基,布图兹等.智能车辆[M ].人民交通出版社,2002.11.[2]高守传,姚领田等.V isual C ++实践与提高[M ].中国铁路出版社,2005.12.[3]王晓东,丁冬花.实时车辆检测和跟踪系统设计[J ].微计算机信息,2006,11(2):237-239.[4]王艳春,李建军,何鹏,尹明.公路交通管理中行驶车辆自动识别技术研究[J ].微计算机信息,2006,11(2):193-195.[5]王荣本,游峰,崔高峰等.基于计算机视觉高速车辆的道路识别[J ].计算机工程与应用2004,9(26):18-21.作者简介:胡会珍(1983-),女,汉族,硕士,主要研究方向为控制理论与控制工程,现中北大学在读硕士研究生;黄晋英(1971-),女,汉族,副教授/硕士生导师,主要从事智能控制,模式识别研究。
基金资助:山西省青年科技基金(编号:20051015)收稿日期:2007210230(7672)文章编号:167121041(2008)022*******M a tla b 和La bV I E W 混合编程的实现李霄燕,杨俊宇,赵 佳(长春工业大学电气与电子工程学院,长春130012)摘要:基于M a tla b 强大的计算功能和La bV I EW 的界面良好的特点提出用M a tla b 和La bV I EW 混合编程,将二者有机结合起来,使在锅炉管板焊接中,能够轻松得到不同位置焊接管口的轨迹方程,实现自动焊机对焊接轨迹的良好控制。
基于LabVIEW和MATLAB混合编程的PID控制策略研究

第28卷 第5期2006年10月电气电子教学学报J OU RNAL OF EEEVol.28 No.5Oct.2006基于LabVIEW和MAT LAB混合编程的PID控制策略研究郭一楠,程 健,巩敦卫,李 明(中国矿业大学 信息与电气工程学院,江苏徐州221008)摘 要:PID控制策略应用广泛,同时也是“过程控制”课程教学内容中最为不可缺少的一部分。
为有效促进学生对该策略的直观理解,使学生在实际控制系统中能灵活应用,提出基于虚拟仪器技术和仿真技术的PID控制策略虚拟仿真。
系统包括控制规律选取和参数整定两部分,采用面向实例的动态分析式教学实现与学生的互动。
系统采用LabVIEW和MA TL AB混合编程,实现了动态显示和交互分析的有机结合。
实际运行表明,该系统可以有效加深学生对PID控制策略理论的理解,激发学生的学习兴趣。
关键词:PID;LabVIEW;MA TLAB中图分类号:TP202 文献标识码:A 文章编号:1008-0686(2006)05-0027-06 Development of PID Control Strategy B ased on LabVIEW and MAT LABGU O Yi2nan,CHENG Jian,G ONG Dun2w ei,L I Ming(S chool of I nf ormation and Elect ronic Engineering,Chi na Univercit y of Mi ni ng&Technology,X uz hou221008,China)Abstract:PID(Proportion Intcegral Differential)cont rol strategy is used widely and taken as a necessary teaching content s of p rocess cont rol.In order to facilitate st udent s to comp rehend t his st rategy effectively and use it flexibly,virt ual simulation system of PID control st rategy based on virt ual inst rument and simu2 lation technology is p ut forward.Cont rol rules’selecting and parameters’t uning are two key problems in t he system.Dynamic teaching mode is adopted to realize interaction wit h st udent s in t he system.The sys2 tem is developed by LabV IEW and MA TL AB.It realizes dynamic show of variables in t he p rocess and in2 teractive analyses.Act ual runing indicates t he system can facilitate t he understanding to PID cont rol st rat2 egies and inspire st udent s’interest of learning.K eyw ords:PID;LabV IEW;MA TL AB0 引言PID控制策略在实际工业过程控制系统中有着广泛的应用,它也是“过程控制系统”课程教学内容中最为不可缺少的一部分。
1_基于数据库的LabVIEW与Matlab混合编程及其实现

收稿日期:2006-04-04作者简介:徐峰,硕士,专业为控制理论、控制工程;田作华,教授,博士生导师。
基于数据库的Lab V I E W 与Matlab 混合编程及其实现徐 峰,何黎明,田作华(上海交通大学自动化系,上海 200240)摘要:介绍了在Lab V I E W 中实现与数据库通信的几种方法,以及Lab V I E W 和M atlab 混合编程的几种实现途径。
并以配方优化系统为背景,利用DLL 技术和ActiveX 技术在Lab V I E W +MyS QL +Matlab 构架下实现线性规划算法,为在Lab V I E W 环境下解决基于数据库的复杂算法提供了一种实现途径。
关键词:Lab V I E W ;Matlab;MyS QL;线性规划中图分类号:TP311 文献标识码:A 文章编号:1000-8829(2007)02-0070-03Form ul a ti on O pti m i za ti on w ith M a tl ab and LabV I E W Ba sed on Da t aba seXU Feng,HE L i 2m ing,TI A N Zuo 2hua(Depart m ent of Aut omati on,Shanghai J iaot ong University,Shanghai 200240,China )Abstract:Some methods of database operating in Lab V I E W are described,and three kinds of s oluti on in constructing virtual instru 2ment using Matlab are als o p r ovided .How t o realize linear p r ogra mm ing under the truss of Lab V I E W +M yS QL +M atlab is intr o 2duced,and this realizati on will definitely p r ovide a way t o s olve s ome comp lex algorith m depending on database in Lab V I E W.Key words:Lab V I E W;M atlab;MyS QL;linear p r ogra mm ing M atlab 是以矩阵运算为基础的一种数学软件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机与现代化 2007年第8期JIS UAN JI YU X IAN DA I HUA总第144期文章编号:1006-2475(2007)08-0093-03收稿日期:2006-08-14基金项目:广西自然科学基金资助项目(0663022)作者简介:彭宇宁(1959-),女,四川成都人,广西大学电气工程学院高级工程师,研究方向:过程控制工程,网络化控制,虑拟仪器技术。
利用DLL 技术实现Lab V I E W 和MATL AB 混合编程彭宇宁,朱 后(广西大学电气工程学院,广西南宁530004)摘要:介绍了利用DLL 技术实现LabV IE W 和MA TLAB 进行混合编程的基本原理,并详细阐述了使用M ATLA B 插件和使用M ATLA B 引擎两种方法的步骤,最后对两种方法进行了比较,总结了基于DLL 混合编程的技术特点。
关键词:动态连接库;Lab V IE W ;MA TLAB ;混合编程中图分类号:TP311.13 文献标识码:AUsi n g DLL Techni q ue to Reali z eM ixed Progra mm ing wit h La bVI E W andMATLABPE NG Yu -ning ,ZHU H ou(Instit u t e o f E lectrica l Eng i neering ,Guangx i Un i ve rsit y ,N anning 530004,China )Ab stract :T his paper i n troduces t he keystone o f usi ng D LL to rea lize the m ixed prog ramm i ng w it h Lab V I E W and M ATLA B .A t t he sa m e ti m e ,t he st eps of bo t h m ethods are expa tia t ed :using M ATLA B A dd -i n and i nvoking M ATLA B engine .In the end o f t he ar ticle ,w e co m pa re t hese t wo m ethods ,and s umm arize the advantages o fm i xed progra mm ing v ia DLL .K ey w ords :DLL ;LabV IE W ;MA TLAB ;m i xed progra mm ing0 引 言Lab V I E W 作为虚拟仪器的开发软件,具有功能完整、应用灵活、易于理解、编程简单、开发效率高等优点,已成为虚拟仪器开发事实上的工业标准。
但其在工程计算、图形处理、先进控制、系统建模和仿真方面远不及MATL AB 功能强大。
而MATL AB 在循环处理、图形界面开发、数据输入、网络通信、硬件控制等方面也不如Lab V I E W 。
因此实现两者混合编程,将两者的优势结合互补不足,对于开发功能更为强大的虚拟仪器具有巨大的推动作用。
目前Lab V I E W 和MATLAB 的混合编程方法有三种:第一种基于A ctive X 控件技术,包括MATL AB 脚本节点和Active X 函数模板;第二种基于动态数据交换(DDE )技术;第三种基于组件对象模型(C OM )技术。
前面两种方法都不能脱离MATL AB 环境独立运行,第三种方法相对独立且执行效率较高,但不能全面支持MATL AB 的应用。
本文利用DLL (动态连接库)技术将La bVI E W 、VC 、MATL AB 混合编程有机结合起来,提出一种新的LabVI E W 和MATLAB 进行数据交换和控制的方法。
1 基本原理DLL (Dyna m ic -Link Li b r ary )-动态连接库是基于W indo w s 程序设计的一个重要组成部分,它由一系列封装好的可执行代码组成,其内部函数能被其他程序所共享。
DLL 的编制与具体的编程语言及编译器无关,只要遵守DLL 的开发规范和编程策略,并安排正确的接口,不管用何种编程语言编制的DLL 都具有通用性。
LabV I E W 通过CLF (Ca ll Librar y Function N ode )实现对DLL 的函数[1]。
另一方面,MATLAB 通过MATL AB 编译器和计算引擎为C 语言提供了功能强大的接口,可将与MATLAB 通讯的C 代码编制成DLL 文件供LabV I E W 调用,实现LabV I E W 和MAT -LAB 间接数据交换。
下面举一个简单的例子(本例已在LabV I E W 7.1,M icroso ftV isual C ++6.0,MAT -LAB 6.5上通过),介绍利用DLL 实现LabV I E W 和MATL AB 混合编程的两种途径。
94 计 算 机 与 现 代 化2007年第8期方法一:使用MATLAB 插件生成的共享库(shared M -DLL )。
MATL AB 编译器可以将M 文件编译成C /C ++代码,然后利用C /C ++编译器将其再编译成DLL 供LabV I E W 调用。
工作原理如图1所示。
图1 Lab V I E W 调用M 文件的原理图M a t h W o r ks 公司为V isua l Studi o 开发环境提供了一个MATL AB 插件,该插件可使在VC ++工程中插入M 文件的工作自动化。
因此在下面的工作开始之前,应先为VC 6.0安装这个插件。
为了方便理解,以求一个阵列的正弦值的简单例子来说明其具体步骤。
(1)编写求一个阵列正弦值的M 文件(算法),此处M 文件应为函数文件。
functi on y =sin w ave (x )y =si n (x );(2)保存好M 文件后,切换到VC 环境中新建包含此M 文件的shar edM -DLL 工程。
(3)向工程添加数据交换和算法调用函数。
函数文件经MATLAB 编译器后,其输入输出类型均为m x A rray 指针。
LabV I E W 支持标准C 数据类型(包括数值、数组、字符串、指针等)但不支持m x A r -r ay ,所以必须将m xA rray 转换成标准C 数据才能正确传递给Lab V I E W ,反之,标准C 数据必须转换成m x A rray 也才能作为M -DLL 中函数的参数。
这两个工作可分别通过m x G et P r ()和m xSetPr ()或者m e m cpy ()来完成。
下面给出本例的数据交换和算法调用代码,其他应用与之类同#i nclude "sin w ave .h "//这个头文件与M 文件名相同#i nclude "m _tes.t h "//这个头文件的名字与工程名相同#i nclude "m atl ab .h "//包含mx *()函数的声明/*_declspec (dll expo rt )为VC 中D LL 声明导出函数的关键字,也可用.def 文件指定导出函数。
本例中此函数作为导出函数供L abV IE W 调用,完成数据交换和算法调用等工作。
*/_dec lspec (d llexport )vo id si ne (doub l e *x ,double *y ,i n t len ){m x A rray *t m p =NU LL ,*rslt =NULL ;double *t ;int i ;m _testIn itia lize ();//此函数由MA TLAB 插件自动生成,与工程名有关,用来初始化库函数。
//给m xA rray 实部赋值t mp =m xC rea t eD oub l e M a trix (1,l en ,mxRE A L );m xSe t P r (t mp ,x );/M /文件中的函数转化成C 代码后,带了一个前缀m lf ,参数类型则变为m xA rray 指针rslt =m lfSin w ave (t m p );//获取m xA rray 实部内容t =mxG e t P r (rslt );for (i =0;i <len ;i ++)y [i ]=t [i ];//终止库函数调用m _test Te r m ina te ();}(4)编译此工程,然后在Lab V IE W 中用CLF 调用该D LL 。
图2为Lab V IE W 中调用此M -DLL 中si ne 函数的程序框图,他相当于求阵列[0:∏/10:2∏]的正弦值,其运行结果如图3所示。
图2 程序框图 图3 运行结果方法二:利用MATLAB 计算引擎。
MATL AB 计算引擎是一系列允许用户在别的程序中与MATL AB 交互的函数库和程序库。
在调用过程中,MATLAB 引擎函数库工作在后台,MATL AB 通过它与别的应用程序进行通信。
因此将MATLAB 引擎函数包装在DLL 中供LabV I E W 调用,就可以实现LabV I E W 和MATL AB 间的数据通讯。
下面给出上述例子用MATL AB 引擎实现的DLL 代码,将其编译成DLL ,在LabV I E W 中用CLF 调用并做好相关参数设置即可,其他应用与此相似:#i nc l ude <eng i ne .h >#i nc l ude <w i ndow s .h >//启动MA TLAB 引擎_dec lspec (d llexpor t )int openEng (int *addr ){Eng i ne *ep ;if ((ep =engOpen (NULL ))==NULL )re t u rn 0;else {engSe t V isi b l e (ep ,0);//隐藏M ATLAB 命令窗口*addr =(int )ep ;re t u rn 1;//打开m a tlab 引擎成功}}//关闭MA TLAB 引擎 2007年第8期彭宇宁等:利用DLL技术实现Lab V I E W和MA TLAB混合编程95_dec lspec(d llexport)int c l o seEng(int addr){if(engC lose((Eng ine*)addr))re t u rn0;e lsere t u rn1;//关闭成功}//执行MATLAB命令,在这之前和之后做必要的数据传递。
_dec lspec(dll expo rt)vo id si ne(i n t addr,double*x,doub l e *y,i n t len){m x A rray*A=NU LL,*B=NULL;double*bRea l;int i;Eng i ne*ep;ep=(Eng i ne*)addr;A=m xC rea t eD ouble M atri x(1,len,m xREA L);m e m cpy((void*)mxG e t P r(A),(void*)x,sizeof(x));engPu t V a ri able(ep,"A",A);engEva l Stri ng(ep,"Y=sin(A);");B=engG e t V a ri able(ep,"Y");bR eal=mxG e t P r(B);for(i=0;i<len;i++)y[i]=bRea l[i];}使用MATL AB计算引擎前,先调用openEng打开计算引擎,并将引擎指针保存在addr中,供后面的程序使用。