亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2013-04-16 10:44:58
        電子世界 2013年5期
        關(guān)鍵詞:控制算法增益編程

        一、引言

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

        Matlab是一種應(yīng)用廣泛的數(shù)學(xué)類(lèi)科技應(yīng)用軟件,在數(shù)值運(yùn)算尤其是矩陣運(yùn)算方面有著非常好的表現(xiàn),用戶(hù)不需要深刻了解算法及編程技巧,只需掌握了入門(mén)的數(shù)學(xué)知識(shí)和程序設(shè)計(jì)能力就可以利用其進(jìn)行復(fù)雜的科學(xué)計(jì)算,如今已經(jīng)成為學(xué)界理論分析和實(shí)驗(yàn)研究所必須掌握的軟件工具之一。但限于其本身是一種解釋方式運(yùn)行的高級(jí)計(jì)算機(jī)語(yǔ)言,在進(jìn)行重復(fù)計(jì)算工作時(shí)執(zhí)行效率較低,且運(yùn)算過(guò)程不能脫離計(jì)算機(jī)環(huán)境進(jìn)行。VC++是微軟公司推出的開(kāi)發(fā)環(huán)境Visual Studio中的一個(gè)組成部分,用戶(hù)可以利用其進(jìn)行快速的Windows應(yīng)用程序開(kāi)發(fā),設(shè)計(jì)出圖形界面豐富的功能軟件,但是在編寫(xiě)矩陣運(yùn)算時(shí)缺少專(zhuān)業(yè)的數(shù)據(jù)類(lèi)型變量,當(dāng)編寫(xiě)復(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)用范圍廣,也就是說(shuō),如果通過(guò)混合編程能讓兩者的優(yōu)勢(shì)互補(bǔ),在工作中將大大減少在算法編程方面的工作量,并且能夠改善仿真程序代碼的運(yùn)行效率以及實(shí)時(shí)性,為科研工作和工程開(kāi)發(fā)提供更強(qiáng)大的技術(shù)支持。

        二、混合編程方法簡(jiǎn)介

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

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

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

        圖1 新建 VC++對(duì)話(huà)框程序

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

        圖3 單級(jí)倒立擺系統(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++編寫(xiě)編譯為mex文件的函數(shù)

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

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

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

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

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

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

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

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

        1.混合編程步驟

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        選取一組適當(dāng)?shù)膯渭?jí)倒立擺系統(tǒng)參數(shù)[6]。

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

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

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

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

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

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

        對(duì)比兩次仿真的結(jié)果可以得出結(jié)論,利用編譯器編譯m文件得到的動(dòng)態(tài)鏈接庫(kù)文件所包含的函數(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ù)的語(yǔ)句前后分別使用GetTickCount()函數(shù)查詢(xún)當(dāng)前系統(tǒng)時(shí)間,兩次查詢(xún)的結(jié)果作差后,即得到VC++執(zhí)行函數(shù)myLQR求解矩陣K所消耗的運(yùn)算時(shí)間,如圖8所示。

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

        四、結(jié)論

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

        [1]張亮,王繼陽(yáng).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ā)動(dòng)機(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.

        猜你喜歡
        控制算法增益編程
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        我家有只編程貓
        基于增益調(diào)度與光滑切換的傾轉(zhuǎn)旋翼機(jī)最優(yōu)控制
        基于單片機(jī)的程控增益放大器設(shè)計(jì)
        電子制作(2019年19期)2019-11-23 08:41:36
        基于Multisim10和AD603的程控增益放大器仿真研究
        電子制作(2018年19期)2018-11-14 02:37:02
        基于ARM+FPGA的模塊化同步控制算法研究
        一種優(yōu)化的基于ARM Cortex-M3電池組均衡控制算法應(yīng)用
        一種非圓旋轉(zhuǎn)工件支撐裝置控制算法
        99热这里有精品| 无码免费一区二区三区| 亚洲视频一区二区免费看| 无码a级毛片免费视频内谢| 毛片在线播放a| 国产乱对白刺激视频| 成人男性视频在线观看| 国产一区二区三区国产精品| 无码国产一区二区三区四区| 精人妻无码一区二区三区| 国产一区二区三区小向美奈子 | 在线播放五十路熟妇| 少妇熟女天堂网av天堂| 国产av无码专区亚洲aⅴ| 粗大的内捧猛烈进出在线视频| 最近中文字幕免费完整版| 亚洲中文字幕在线一区| 亚洲精品国产第一区三区| 国产免费人成视频在线播放播| 国产人在线成免费视频| 午夜精品久久久久久久99热| 在线免费看91免费版.| 91麻豆精品一区二区三区| 国产精品一区二区资源| 熟妇人妻无码中文字幕| 波多野42部无码喷潮在线| 国产黄污网站在线观看| 手机在线国产福利av| 少妇高潮无码自拍| 国产精品99久久久久久98AV| 亚洲中文字幕无码一区| 三年片大全在线观看免费观看大全 | 真人抽搐一进一出视频| 亚洲精品久久视频网站| 手机免费在线观看日韩av| 国产伦码精品一区二区| 美日韩毛片| √天堂中文官网8在线| 特级a欧美做爰片第一次| 无码人妻丰满熟妇区免费| 久久日本视频在线观看|