邵曉娟
(陜西工業(yè)職業(yè)技術(shù)學(xué)院,陜西咸陽,712000)
Matlab是一個(gè)常用的仿真計(jì)算軟件,它能夠快速的進(jìn)行數(shù)值計(jì)算和圖片顯示,而且它的編程環(huán)境也相對(duì)要簡(jiǎn)單。到目前為止,Matlab的運(yùn)用范圍十分的廣泛,我們的數(shù)值計(jì)算、建立仿真模型、分析顯示數(shù)據(jù)、制作專業(yè)的圖形以及軟件的開發(fā)等都需要使用它。
Matlab有著全面強(qiáng)大的功能,所以一直以來我們的自動(dòng)控制仿真實(shí)驗(yàn)的設(shè)計(jì)都是采用的這種仿真計(jì)算軟件。但是性能再?gòu)?qiáng)大的軟件也會(huì)有一定的缺點(diǎn),Matlab在運(yùn)行時(shí)速度比較慢,而且要操作Matlab的研究人員必須要對(duì)其有相當(dāng)?shù)牧私?,這樣才能夠自如的使用。所以為了解決這一問題,我們嘗試著將Visual C++與Matlab相結(jié)合,進(jìn)而來研究自動(dòng)控制仿真系統(tǒng)。下面我們將會(huì)詳細(xì)地介紹兩者相結(jié)合后的研究開發(fā)過程。
在本文中我們向大家介紹的自動(dòng)控制仿真實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)原理都是在實(shí)踐中被廣泛運(yùn)用的,比較具有典型意義的實(shí)驗(yàn)。
(1)如何設(shè)計(jì)系統(tǒng)菜單和仿真實(shí)驗(yàn)平臺(tái)
我們?cè)谶M(jìn)行系統(tǒng)菜單設(shè)計(jì)的編程語言是Visual C++6.0,這種編程語言自帶了有許多的控件,我們只需要根據(jù)具體的要求來添加控件,進(jìn)行系統(tǒng)菜單的設(shè)計(jì)。這個(gè)系統(tǒng)設(shè)計(jì)主要是根據(jù)時(shí)域分析、頻域分析和根軌跡分析來做出仿真實(shí)驗(yàn),換句話說,這三個(gè)就是仿真實(shí)驗(yàn)的實(shí)現(xiàn)平臺(tái)。所以,我們?cè)谡介_始軟件設(shè)計(jì)的時(shí)候,要先采取措施來促成這三個(gè)仿真實(shí)驗(yàn)平臺(tái)的實(shí)現(xiàn),至于具體的實(shí)現(xiàn)措施我們可以采用建立菜單或者是下拉列表框點(diǎn)選方式,從而選擇仿真實(shí)驗(yàn)平臺(tái)。
(2) 仿真平臺(tái)的界面設(shè)計(jì)
圖1 自動(dòng)控制仿真實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)的功能結(jié)構(gòu)圖
對(duì)于這三種不同的仿真實(shí)驗(yàn)平臺(tái)的界面設(shè)計(jì),我們采取的設(shè)計(jì)思路和設(shè)計(jì)的基本操作方法都是基本一致的。窗體上部顯示對(duì)應(yīng)實(shí)驗(yàn)的傳遞函數(shù)圖形,至于窗體中間的輸入框的作用,就是用來輸入各種參數(shù)。根據(jù)不同的情況輸入具體的參數(shù),就能夠輕松地實(shí)現(xiàn)對(duì)多種情形的仿真實(shí)驗(yàn)。窗體的下面進(jìn)行按鈕的設(shè)計(jì),一次來響應(yīng)事件的發(fā)生。
我們說這里的自動(dòng)控制仿真實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)是結(jié)合了Visual C++與Matlab,那么我們要如何使這兩者的功能完美的結(jié)合在一起呢,通過大量的研究與實(shí)驗(yàn),我們大致總結(jié)除了三種促使這兩者相結(jié)合的辦法。
Matlab被運(yùn)行之后會(huì)執(zhí)行其強(qiáng)大的計(jì)算功能,它工作的原理就是直接地調(diào)動(dòng)自身原本就具備的Matlab Engine來實(shí)現(xiàn)目的。所以我們?cè)谶M(jìn)行軟件設(shè)計(jì)的時(shí)候,Visual C++在編程的時(shí)候就可以調(diào)動(dòng)這個(gè)引擎,從而將兩者連接起來。換句話說,實(shí)現(xiàn)這個(gè)過程的原理,就相當(dāng)于把Matlab內(nèi)部實(shí)現(xiàn)功能轉(zhuǎn)換到外部。這樣做最大的優(yōu)點(diǎn)在于可以很方便很快捷地到達(dá)我們預(yù)先設(shè)定的目標(biāo)。但是它也繼承了Matlab固有的弱點(diǎn),就是它的運(yùn)行速度非常的慢,占用的資源比較多。所以,如果要采用這種方法,成功的可能性會(huì)比較小。
Matlab原本就具有很強(qiáng)大的功能,自身帶有編譯器,從而能夠?qū)崿F(xiàn)將自身*.m的文件形式,轉(zhuǎn)化成Visual C++編程語言中的*.c/*.cpp的文件形式,這樣就為我們調(diào)用Matlab強(qiáng)大的計(jì)算功能提供了可能。使用這種方法可以讓系統(tǒng)離開Matlab的控制,獨(dú)立的運(yùn)行。并且生成的文件也比較小,這樣的文件就可以更好地被運(yùn)用到系統(tǒng)的設(shè)計(jì)中,這樣程序的運(yùn)行也比較正常。但是,對(duì)于有些圖片的處理就無法達(dá)到理想的狀態(tài)了,在進(jìn)行編譯之后可能無法被Visual C++編程語言識(shí)別,而且在使用這種方法進(jìn)行編程時(shí),有很多的步驟需要進(jìn)行事先的設(shè)置,這樣使用起來就不是很方便。
除了直接使用Matlab的內(nèi)部編譯器來轉(zhuǎn)化文件格式,我們還可以利用Matlab間接調(diào)用MSVC的編譯程序從而將原來的*.m文件轉(zhuǎn)換成*.lib/*.dll文件。這樣一來當(dāng)我們使用Visual C++來進(jìn)行軟件編程時(shí)就可以很輕松地將兩者連接起來。這個(gè)運(yùn)行的過程是獨(dú)立于Matlab之外的,這樣在運(yùn)行時(shí)速度就會(huì)大大地提升;而且使用這種方法轉(zhuǎn)化的*.lib/*.dll文件所占的內(nèi)存也比較小,這樣就可以很好的適用于軟件設(shè)計(jì)的需要,軟件程序的運(yùn)行也會(huì)比較流暢。但是這種方法與第二種存在著同樣的問題,那就是轉(zhuǎn)化的后的文件可能無法被Visual C++的環(huán)境識(shí)別,也是需要實(shí)現(xiàn)進(jìn)行設(shè)置,進(jìn)行具體操作時(shí)就不是很方便。
上面我們簡(jiǎn)要的介紹了三種不同的接口方式,而且這三種方法也是各有千秋,至于具體選擇哪種方法,還需要我們根據(jù)具體的實(shí)際情況進(jìn)行挑選,從而更好地適應(yīng)軟件的開發(fā)。
上面我們介紹了三種實(shí)現(xiàn)接口的方法,由于內(nèi)容的限制,我們?cè)谶@里主要介紹第三種接口方法的具體實(shí)現(xiàn)步驟。
使用這種方法的第一步就是要在系統(tǒng)中有Matlab和Visual C++運(yùn)行環(huán)境的前提下安裝MatlabAdd-in,具體的安裝步驟如下圖2所示。
圖2 安裝MatlabAdd-in的步驟結(jié)構(gòu)圖
然后我們就要設(shè)置MatlabAdd-in,在運(yùn)行Visual C++后,我們選擇“工具”下面的“定制”選項(xiàng),在選擇‘附加項(xiàng)和宏文件’,這樣就完成了對(duì)其的設(shè)置。接著就會(huì)在C++的AppWizard中出現(xiàn)“Matlab Project Wizard”,接下來我們只要按照指示進(jìn)行操作就可以完成接口的工作。
需要補(bǔ)充說明的是,Matlab編譯器要將原來的文件轉(zhuǎn)化成C文件,再由MSVC轉(zhuǎn)化成dll文件,而且在這個(gè)過程中不能夠改變文件的名稱。還有就是要建立一個(gè)*.m文件的動(dòng)態(tài)連接庫(kù),先預(yù)設(shè)一個(gè)圖形顯示函數(shù):function showfigure()
figure(‘numbertitle’‘,off’,‘name’,‘MyFigure’);將名為showfigure.m的文件儲(chǔ)存在相應(yīng)的文件夾中。使用Visual C++中新建一個(gè)Matlab Project Wizard為向?qū)У墓こ?,在接著設(shè)置應(yīng)用程序的類型為SharedM-DLL。然后選擇Use Handle Graphics為Yes,接著選擇目標(biāo)文件進(jìn)行確認(rèn),這樣就完成了動(dòng)態(tài)庫(kù)的設(shè)計(jì)。這樣也就可以順利的生成*.lib,*.dll,*.h文件了,以便運(yùn)用到應(yīng)用程序的設(shè)計(jì)當(dāng)中。
對(duì)于自動(dòng)控制仿真實(shí)現(xiàn)系統(tǒng)的設(shè)計(jì)和研究是非常重要的,我們?cè)诰唧w的實(shí)踐過程中已經(jīng)發(fā)現(xiàn)了許多存在的問題,這些問題都亟待我們?nèi)ソ鉀Q,所以對(duì)其的研究還要加強(qiáng)。Visual C++與Matlab相結(jié)合在很大程度上解決了這一問題,當(dāng)然還會(huì)有很多的其它的辦法,這還需要我們的進(jìn)一步研究。
[1]潘孝勇,等.Visual C++與Matlab的混合編程[J].計(jì)算機(jī)仿真,2004,21(3):140~143.
[2]楊素林,等.一種基于NS2、Visual C++和Matlab的網(wǎng)絡(luò)化控制仿真軟的實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2005,33(12):121~124.
[3]邢輝,等.基于Borland C++Builder和MATLAB混合編程的仿真應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2005(10):54~59.
[4]楊杰,等.基于MATLAB和Visual C++的風(fēng)機(jī)流場(chǎng)分析的可視化研究[J].煤礦機(jī)械,2004(3):44~45.
[5]楊建國(guó),等.在Visual C++中不依賴MATLAB環(huán)境調(diào)用其函數(shù)的方法[J].計(jì)算機(jī)應(yīng)用研究,2001,18(9):98~99.