文档库 最新最全的文档下载
当前位置:文档库 › VC++

VC++

VC++与Matlab混合编程技术在现代控制理论系统仿真中的应用

作者:蔡浩宇王红波杨树仁刘锦廉索辉

来源:《电子世界》2013年第05期

【摘要】现代控制理论中的控制系统仿真实质上是使用计算机进行控制系统的状态空间矩阵的运算,而对状态空间矩阵以及相应控制算法的编程占据了仿真过程中的主要工作量。利用VC++与Matlab的混合编程可以有效减少与矩阵运算相关的编程工作量,使得在VC++环境下的控制系统仿真变得可行且高效。本文结合单级倒立摆的LQR控制,阐述并印证了VC++与Matlab混合编程这一方法在现代控制理论系统仿真中的作用。

【关键词】VC++;Matlab;混合编程;现代控制理论

一、引言

现代控制理论是建立在状态空间基础上的一种控制理论,是自动控制理论的一个主要组成部分。在现代控制理论中,包括线性系统和非线性系统,定常系统和时变系统,单变量系统和多变量系统,它们在建模之后都表达为矩阵形式,因此通过计算机进行控制系统的仿真,实质就是利用计算机来进行矩阵运算。小型控制系统进行仿真时,所涉及的控制算法以及矩阵运算量都是有限的,因此对仿真的效能要求较低。而当需要进行复杂系统的仿真试验时,不仅编写相应的控制算法消耗大量的人力,较低的程序执行效率也将消耗大量的计算机运算能力,因此选取和使用快捷高效的仿真开发方法显得尤其必要。

Matlab是一种应用广泛的数学类科技应用软件,在数值运算尤其是矩阵运算方面有着非常好的表现,用户不需要深刻了解算法及编程技巧,只需掌握了入门的数学知识和程序设计能力就可以利用其进行复杂的科学计算,如今已经成为学界理论分析和实验研究所必须掌握的软件工具之一。但限于其本身是一种解释方式运行的高级计算机语言,在进行重复计算工作时执行效率较低,且运算过程不能脱离计算机环境进行。VC++是微软公司推出的开发环境Visual Studio中的一个组成部分,用户可以利用其进行快速的Windows应用程序开发,设计出图形界面丰富的功能软件,但是在编写矩阵运算时缺少专业的数据类型变量,当编写复杂的算法时不免要消耗大量的编程时间[1][2]。

比较两者的优缺点后不难发现,Matlab易于使用但是在仿真时程序运行效率低[3],实时性较差,使用条件有限,VC++不便于直接进行矩阵计算但是代码运行效率高,实时性较好,应用范围广,也就是说,如果通过混合编程能让两者的优势互补,在工作中将大大减少在算法编程方面的工作量,并且能够改善仿真程序代码的运行效率以及实时性,为科研工作和工程开发提供更强大的技术支持。

二、混合编程方法简介

目前VC++与Matlab相结合的混合编程主要有以下几种方法[4]:

1.在VC++中调用Matlab引擎(Engine)

这种处理方法不要求链接整个Matlab,只需嵌入必要的Matlab引擎库,节省了大量的系统资源,使应用程序整体性能更好,处理效率更高,但这种混合编程的方法需要Matlab在后台适时运行不能脱离Matlab环境,严重影响了程序的通用性,因此这种方法在实际开发过程中很少采用。

2.Matlab调用由C/C++编写编译为mex文件的函数

这种方法是对Matlab函数库和一种补充,用户可以自已编写一些高效或者具有特定功能的函数,利用编译器把它们编译为mex文件,供Matlab调用,相当于添加自定义的Matlab函数。

3.在VC++中调用Matlab生成的动态链接库

这种方法通过指定的编译器,把由Matlab编写的m函数文件编译成动态链接库文件(dll)。只需在程序开发和发布中包含其生成的动态库,就可以在VC++程序中调用封装好的Matlab函数,实现数值算法的运用。这种方法可以使程序脱离Matlab运行环境,减少文件外部存储空间的占有量,并实现了代码共享。

4.使用COM组件对象模型技术实现混合编程

COM技术是一种应用广泛、方便灵活的方法,是利用Matlab提供的Deploy Tool工具实现Matlab与C/C++的混合编程。COM给软件开发人员提供了一种共享二进制代码的方法,但是由于缺乏可视化界面,其应用范围受到一定限制。

三、混合编程实例与验证

从实际应用角度考虑,前两种编程方法虽然简便,但适用范围狭窄,第四种方法适用性好于前两种方法,但需要用户掌握较高的程序设计水平,不便于科研人员使用。本文选用第三种方法进行编程,并以控制工程中经典的单级倒立摆系统的LQR线性二次型调节器的设计为例,描述这一方法的实现过程,验证其在控制系统仿真中能够带来的优势之处。

本文所采用的软件版本是Visual Studio 2008和Matlab R2010a。

1.混合编程步骤

相关文档
相关文档 最新文档