999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

VC++與Matlab混合編程技術(shù)在 現(xiàn)代控制理論系統(tǒng)仿真中的應(yīng)用

2013-04-16 10:44:58
電子世界 2013年5期
關(guān)鍵詞:方法系統(tǒng)

一、引言

現(xiàn)代控制理論是建立在狀態(tài)空間基礎(chǔ)上的一種控制理論,是自動控制理論的一個(gè)主要組成部分。在現(xiàn)代控制理論中,包括線性系統(tǒng)和非線性系統(tǒng),定常系統(tǒng)和時(shí)變系統(tǒng),單變量系統(tǒng)和多變量系統(tǒng),它們在建模之后都表達(dá)為矩陣形式,因此通過計(jì)算機(jī)進(jìn)行控制系統(tǒng)的仿真,實(shí)質(zhì)就是利用計(jì)算機(jī)來進(jìn)行矩陣運(yùn)算。小型控制系統(tǒng)進(jìn)行仿真時(shí),所涉及的控制算法以及矩陣運(yùn)算量都是有限的,因此對仿真的效能要求較低。而當(dāng)需要進(jìn)行復(fù)雜系統(tǒng)的仿真試驗(yàn)時(shí),不僅編寫相應(yīng)的控制算法消耗大量的人力,較低的程序執(zhí)行效率也將消耗大量的計(jì)算機(jī)運(yùn)算能力,因此選取和使用快捷高效的仿真開發(fā)方法顯得尤其必要。

Matlab是一種應(yīng)用廣泛的數(shù)學(xué)類科技應(yīng)用軟件,在數(shù)值運(yùn)算尤其是矩陣運(yùn)算方面有著非常好的表現(xiàn),用戶不需要深刻了解算法及編程技巧,只需掌握了入門的數(shù)學(xué)知識和程序設(shè)計(jì)能力就可以利用其進(jìn)行復(fù)雜的科學(xué)計(jì)算,如今已經(jīng)成為學(xué)界理論分析和實(shí)驗(yàn)研究所必須掌握的軟件工具之一。但限于其本身是一種解釋方式運(yùn)行的高級計(jì)算機(jī)語言,在進(jìn)行重復(fù)計(jì)算工作時(shí)執(zhí)行效率較低,且運(yùn)算過程不能脫離計(jì)算機(jī)環(huán)境進(jìn)行。VC++是微軟公司推出的開發(fā)環(huán)境Visual Studio中的一個(gè)組成部分,用戶可以利用其進(jìn)行快速的Windows應(yīng)用程序開發(fā),設(shè)計(jì)出圖形界面豐富的功能軟件,但是在編寫矩陣運(yùn)算時(shí)缺少專業(yè)的數(shù)據(jù)類型變量,當(dāng)編寫復(fù)雜的算法時(shí)不免要消耗大量的編程時(shí)間[1][2]。

比較兩者的優(yōu)缺點(diǎn)后不難發(fā)現(xiàn),Matlab易于使用但是在仿真時(shí)程序運(yùn)行效率低[3],實(shí)時(shí)性較差,使用條件有限,VC++不便于直接進(jìn)行矩陣計(jì)算但是代碼運(yùn)行效率高,實(shí)時(shí)性較好,應(yīng)用范圍廣,也就是說,如果通過混合編程能讓兩者的優(yōu)勢互補(bǔ),在工作中將大大減少在算法編程方面的工作量,并且能夠改善仿真程序代碼的運(yùn)行效率以及實(shí)時(shí)性,為科研工作和工程開發(fā)提供更強(qiáng)大的技術(shù)支持。

二、混合編程方法簡介

目前VC++與Matlab相結(jié)合的混合編程主要有以下幾種方法[4]:

1.在VC++中調(diào)用Matlab引擎(Engine)

這種處理方法不要求鏈接整個(gè)Matlab,只需嵌入必要的Matlab引擎庫,節(jié)省了大量的系統(tǒng)資源,使應(yīng)用程序整體性能更好,處理效率更高,但這種混合編程的方法需要Matlab在后臺適時(shí)運(yùn)行不能脫離Matlab環(huán)境,嚴(yán)重影響了程序的通用性,因此這種方法在實(shí)際開發(fā)過程中很少采用。

圖1 新建 VC++對話框程序

圖2 設(shè)計(jì)程序界面

圖3 單級倒立擺系統(tǒng)仿真框圖

圖4 Simulink仿真模型得到的仿真結(jié)果

圖5在VC++中求解反饋增益 矩陣 K

圖6 根據(jù)VC++中求得的增益矩陣K得到的仿真結(jié)果

圖7 Matlab中求解增益矩陣K消耗 的時(shí)間

圖8 VC++中求解增益矩陣K消耗的時(shí)間的方法

2.Matlab調(diào)用由C/C++編寫編譯為mex文件的函數(shù)

這種方法是對Matlab函數(shù)庫和一種補(bǔ)充,用戶可以自已編寫一些高效或者具有特定功能的函數(shù),利用編譯器把它們編譯為mex文件,供Matlab調(diào)用,相當(dāng)于添加自定義的Matlab函數(shù)。

3.在VC++中調(diào)用Matlab生成的動態(tài)鏈接庫

這種方法通過指定的編譯器,把由Matlab編寫的m函數(shù)文件編譯成動態(tài)鏈接庫文件(dll)。只需在程序開發(fā)和發(fā)布中包含其生成的動態(tài)庫,就可以在VC++程序中調(diào)用封裝好的Matlab函數(shù),實(shí)現(xiàn)數(shù)值算法的運(yùn)用。這種方法可以使程序脫離Matlab運(yùn)行環(huán)境,減少文件外部存儲空間的占有量,并實(shí)現(xiàn)了代碼共享。

4.使用COM組件對象模型技術(shù)實(shí)現(xiàn)混合編程

COM技術(shù)是一種應(yīng)用廣泛、方便靈活的方法,是利用Matlab提供的Deploy Tool工具實(shí)現(xiàn)Matlab與C/C++的混合編程。COM給軟件開發(fā)人員提供了一種共享二進(jìn)制代碼的方法,但是由于缺乏可視化界面,其應(yīng)用范 圍受到一定限制。

三、混合編程實(shí)例與驗(yàn)證

從實(shí)際應(yīng)用角度考慮,前兩種編程方法雖然簡便,但適用范圍狹窄,第四種方法適用性好于前兩種方法,但需要用戶掌握較高的程序設(shè)計(jì)水平,不便于科研人員使用。本文選用第三種方法進(jìn)行編程,并以控制工程中經(jīng)典的單級倒立擺系統(tǒng)的LQR線性二次型調(diào)節(jié)器的設(shè)計(jì)為例,描述這一方法的實(shí)現(xiàn)過程,驗(yàn)證其在控制系統(tǒng)仿真中能夠帶來的優(yōu)勢之處。

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

1.混合編程步驟

(1)Matlab編譯環(huán)境的設(shè)置

控制算法從Matlab到VC++的代碼轉(zhuǎn)制要通過編譯器來進(jìn)行,所以首先要設(shè)置Matlab的編譯環(huán)境。啟動Matlab R2010a,在命令窗口中輸入命令mbuildsetup,根據(jù)出現(xiàn)的提示選擇合適的編譯器,本文所使用的是Microsoft Visual C++ 2008。

(2)編寫包含函數(shù)算法的m文件并且進(jìn)行編譯

本例中m文件實(shí)現(xiàn)了單級倒立擺系統(tǒng)矩陣x˙= A x+ B u 和LQR控制反饋增益矩陣的函數(shù)fu nction[K,S,E]=myLQR(Info,Q,R,N)的求解過程。這里需要說明的是,m文件應(yīng)是函數(shù)的實(shí)現(xiàn)而不是單純的腳本文件,而且從混合編程的角度來講,編譯腳本文件不具備實(shí)際意義。

Matlab提供了三種使用Matlab編譯器的方式[5]:①在Matlab環(huán)境中使用mcc命令;②在系統(tǒng)命令環(huán)境中使用mcc.exe(在Windows上);③在Matlab環(huán)境中使用Deployment Tool。

以第①種方法為例,m文件編寫完成后,在Matlab中修改當(dāng)前工作文件夾路徑為包含m文件的文件夾路徑。在Matlab命令窗口中輸入:mcc- W cpplib:myLQR-T link:lib m yLQR.m即可將m文件編譯為動態(tài)鏈接庫文件。

(3)建立VC++工程并進(jìn)行屬性設(shè)置

新建一個(gè)空白的對話框工程。

如圖1所示,在項(xiàng)目-屬性-配置屬性-C/C++的附加包含目錄中加入”MATLAB PATHR2010aexterninclude”,其中MATLAB PATH是Matlab在硬盤中的安裝路徑。

在項(xiàng)目-屬性-配置屬性-鏈接器的附加庫目錄中加入”MATLAB PATHR2010aexternlibwin32microsoft”。

在項(xiàng)目-屬性-配置屬性-鏈接器-輸入的附加依賴項(xiàng)中加入”mclmcrrt.lib myLQR.lib”。

將上一步中由m文件生成的頭文件、動態(tài)鏈接庫文件和靜態(tài)鏈接庫復(fù)制到VC++工程文件夾目錄下。

(4)VC++界面設(shè)計(jì)及數(shù)據(jù)接口編程

根據(jù)單級倒立擺的基本參數(shù),以及LQR線性二次型調(diào)節(jié)器的加權(quán)參數(shù),設(shè)計(jì)VC++對話框的圖形界面,并使用mwArray類型變量配置動態(tài)鏈接庫函數(shù)的數(shù)據(jù)接口,如圖2所示。

2.驗(yàn)證編程有效性與運(yùn)行速度

(1)Matlab中的運(yùn)算結(jié)果

在Simulink中依據(jù)單級倒立擺的系統(tǒng)仿真框圖建立仿真程序模型,如圖3所示。

選取一組適當(dāng)?shù)膯渭壍沽[系統(tǒng)參數(shù)[6]。

表1 單級倒立擺系統(tǒng)參數(shù)

根據(jù)單級倒立擺系統(tǒng)的系統(tǒng)模型[7]。

將得到 的最優(yōu)反饋增益矩陣K加到Simulink仿真模型中的反饋增益環(huán)節(jié)上。仿真后得到輸出結(jié)果為小車位移x和擺桿傾角Ψ,如圖圖4所示。

(2)VC++中的運(yùn)算結(jié)果

在求解LQR二次型最優(yōu)控制反饋增益矩陣的程序中輸入與 前文中單級倒立擺系統(tǒng)相同的系統(tǒng)參量,并進(jìn)行計(jì) 算,得到最佳反饋增益矩陣K,如圖5所示。

選擇時(shí)間軸T=0:0.005:10,使用lsim命令可以求得此單級倒立擺系統(tǒng)的輸出響應(yīng)分別為小車位移x和擺桿傾角Ψ,如圖6所示。

對比兩次仿真的結(jié)果可以得出結(jié)論,利用編譯器編譯m文件得到的動態(tài)鏈接庫文件所包含的函數(shù)能夠正確進(jìn)行矩陣運(yùn)算,得到LQR二次型最優(yōu)控制反饋增益矩陣K。

在Matlab中使用其自帶的Profiler工具統(tǒng)計(jì)myLQR函數(shù)求解反饋增益矩陣K時(shí)所消耗的時(shí)間為5 14毫秒如圖7所示。

而在VC++中,在調(diào)用myLQR函數(shù)的語句前后分別使用GetTickCount()函數(shù)查詢當(dāng)前系統(tǒng)時(shí)間,兩次查詢的結(jié)果作差后,即得到VC++執(zhí)行函數(shù)myLQR求解矩陣K所消耗的運(yùn)算時(shí)間,如圖8所示。

程序運(yùn)行后得到VC++中調(diào)用myLQR函數(shù)消耗時(shí)間為442毫秒,如前文圖5所示。說明了在進(jìn)行相同的矩陣運(yùn)算時(shí),VC++環(huán)境下具有略優(yōu)于Matlab環(huán)境下的代碼運(yùn)行效率。

四、結(jié)論

可以看到,通過使用混合編程技術(shù)把Matlab中有關(guān)于控制算法的函數(shù)轉(zhuǎn)編為VC++可用的動態(tài)鏈接庫形式,在用戶沒有進(jìn)行任何控制算法編寫的情況下,就可以完成在VC++中對控制系統(tǒng)的控制變量的求解,進(jìn)而完成控制系統(tǒng)仿真。免去了用戶需要親自編寫C/C++控制算法的繁瑣工序,只需用戶編寫一部分接口程序即可,而且通過單級倒立擺系統(tǒng)最優(yōu)控制反饋增益矩陣的求解實(shí)例還可以論證,這種編程方法集成了兩個(gè)軟件的優(yōu)點(diǎn),使得生成的程序同時(shí)具備較好的運(yùn)行效率和實(shí)時(shí)性、普適性,拓展了Matlab在現(xiàn)代控制理論系統(tǒng)仿真中的適用范圍,有助于縮減新型控制算法的編程周期,為新型控制算法的研究與開發(fā)提供了一種新的編程思路。

[1]張亮,王繼陽.MATLAB與C/C++混合編程[M].人民郵電出版社,2008.

[2]劉維.精通Matlab與C/C++混合程序設(shè)計(jì)(第二版)[M].北京航空航天大學(xué)出版社,2006.

[3]李曦,唐琳.在MATLAB中運(yùn)行其他可執(zhí)行軟件的方法[J].微計(jì)算機(jī)信息,2006,22(3-3).

[4]楊剛,姚華.實(shí)用航空發(fā)動機(jī)LQR權(quán)陣選取方法[J].南京航空航天大學(xué)學(xué)報(bào),2006(4).

[5]Robin G.Qiu and Yongfeng Ju Research on MATLAB Programming Efficiency.Mei Xiao et al.,2011,Applied Mechanics and Materials,135-136,788.

[6]BaiLi Zhang,JiangGuo Wang,The Analysis and Simulation of First-Order Inverted Pendulum Control System Based on LQR.ISIP2010 Third International Symposium.

[7]Hongliang Wang,Haobin Dong,Lianghua He,etc.Design and Simulation of LQR Controller with the Linear Inverted Pendulum,ICECE2010 International Conference.

[8]Shiyong Yang,Liping Xu,Peijin Wang.“Study on PID Control of a Single Inverted Pendulum System”vol.S1,2007.

猜你喜歡
方法系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
學(xué)習(xí)方法
半沸制皂系統(tǒng)(下)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
主站蜘蛛池模板: 91啦中文字幕| 色综合久久无码网| 亚洲一区二区视频在线观看| 国产青榴视频| 色综合婷婷| 亚洲精品久综合蜜| 97成人在线观看| 青青草原国产| 91无码视频在线观看| 波多野结衣一区二区三区四区视频 | 国产91色在线| 色婷婷国产精品视频| 国产视频一区二区在线观看| 又粗又硬又大又爽免费视频播放| 欧美国产日韩在线| 亚洲高清在线天堂精品| 国产91特黄特色A级毛片| 国产香蕉一区二区在线网站| 国产日本欧美亚洲精品视| 国产美女在线免费观看| 456亚洲人成高清在线| 全午夜免费一级毛片| 久久国产毛片| 中文字幕无码电影| 久久久久国色AV免费观看性色| 少妇极品熟妇人妻专区视频| 国产精品欧美日本韩免费一区二区三区不卡 | 中国国语毛片免费观看视频| 久久久精品无码一区二区三区| 久久精品这里只有国产中文精品 | 日韩福利在线观看| jizz亚洲高清在线观看| 亚洲色婷婷一区二区| 热久久这里是精品6免费观看| 亚洲成a人片在线观看88| 熟妇丰满人妻av无码区| 亚洲天堂自拍| 成人欧美日韩| 在线观看91精品国产剧情免费| 久久毛片网| 人人91人人澡人人妻人人爽 | 91高清在线视频| 亚洲中文精品久久久久久不卡| 尤物成AV人片在线观看| 中文无码精品A∨在线观看不卡| 野花国产精品入口| 精品夜恋影院亚洲欧洲| 亚洲一区二区三区国产精品 | 国内精品视频在线| 找国产毛片看| 欧美丝袜高跟鞋一区二区| 一级毛片免费高清视频| 狠狠色噜噜狠狠狠狠色综合久| 国产丝袜丝视频在线观看| 久久久久亚洲Av片无码观看| 午夜a级毛片| 为你提供最新久久精品久久综合| 亚洲视频在线网| 亚洲精品午夜无码电影网| 亚洲伊人电影| 久久久久人妻一区精品| 日韩一级毛一欧美一国产| 丁香五月激情图片| 在线中文字幕日韩| 亚洲最黄视频| 国产黄色视频综合| 欧美一区二区三区欧美日韩亚洲 | 香蕉视频国产精品人| 欧美国产在线看| аⅴ资源中文在线天堂| 亚洲av无码成人专区| 亚洲一区黄色| 国产尹人香蕉综合在线电影 | 色天堂无毒不卡| 亚洲丝袜第一页| 国产成人免费| 免费在线色| 亚洲男女在线| 精品国产女同疯狂摩擦2| 大陆精大陆国产国语精品1024| 91精品专区| 亚洲天堂2014|