利用DLL技术实现LabVIEW和MATLAB混合编程_彭宇宁
- 格式:pdf
- 大小:195.83 KB
- 文档页数:3
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混合编程方法的研究与实现柴敬安;廖克俭;潘德辉;李淼【期刊名称】《计算机测量与控制》【年(卷),期】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], 徐何;李滔;李勇因版权原因,仅展示原文概要,查看原文内容请购买。
欢迎订阅欢迎撰稿欢迎发布产品广告信息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 混合编程,将二者有机结合起来,使在锅炉管板焊接中,能够轻松得到不同位置焊接管口的轨迹方程,实现自动焊机对焊接轨迹的良好控制。
第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控制策略在实际工业过程控制系统中有着广泛的应用,它也是“过程控制系统”课程教学内容中最为不可缺少的一部分。
收稿日期: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 是以矩阵运算为基础的一种数学软件。
*广西科学基金资助项目(桂科基0663022)LabVIEW和MATLAB在应用领域方面侧重点不同,各有优势领域。
从应用程序接口技术出发,LabVIEW和MATLAB/Simulink混合编程的方法可分为:基于数据共享、基于源码转换和库引用、基于对MATLAB计算引擎的控制、应用LabVIEW扩展包SIT和应用MATLAB工具包RTW等五种类型,下面对这些方法进行简单的介绍和比较,以供开发者参考。
1基于数据共享的方法其主要思路是构建一个数据共享的通道,来发挥MATLAB强大的数值处理功能。
这其中包括参数数据的预处理和结果数据的总结分析处理,也可以进行非实时性中间数据的处理。
1.1通过剪贴板或数据文件(表格、文本和二进制文件)这是一种最原始也是最简单的应用方法,它适合于一些后续的数据分析和结果验证。
LabVIEW中的关于将数据保存到文件的VI很丰富,可以导出格式很多,同样MATLAB能接受的文件类型也是非常丰富。
此方法可以通过在LabVIEW中的“WriteToSpreadsheetFile.vi”、“WritetoTextFile.vi”、“WritetoBinaryFile.vi”等VI,将数据写入.xls、.txt、.dat等格式的文件,然后通过MATLAB中的load函数将数据导入MATLAB空间中,之后再进行相应的处理。
1.2DDE动态数据交换(DynamicDataExchange,DDE)是Win-dows操作系统中一种基于消息的进程间通信协议。
LabVIEW提供了DDE通信VI,利用这些VI可以创建DDEServer或DDEClient,完成接收/发送数据、请求/提供服务等功能。
LabVIEW调用MATLAB功能时,需将服务名(servicename)指定为“MATLAB”,主题名(TopicName)指定为“Engine”,同时在运行VI之前先启动MATLAB或者MATLAB计算引擎(在内存中均为MATLAB.exe),否则无法通信。
计算机与现代化 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中,供后面的程序使用。