邵曉娟
(陜西工業(yè)職業(yè)技術(shù)學(xué)院,陜西咸陽,712000)
Matlab是一個常用的仿真計算軟件,它能夠快速的進(jìn)行數(shù)值計算和圖片顯示,而且它的編程環(huán)境也相對要簡單。到目前為止,Matlab的運(yùn)用范圍十分的廣泛,我們的數(shù)值計算、建立仿真模型、分析顯示數(shù)據(jù)、制作專業(yè)的圖形以及軟件的開發(fā)等都需要使用它。
Matlab有著全面強(qiáng)大的功能,所以一直以來我們的自動控制仿真實(shí)驗(yàn)的設(shè)計都是采用的這種仿真計算軟件。但是性能再強(qiáng)大的軟件也會有一定的缺點(diǎn),Matlab在運(yùn)行時速度比較慢,而且要操作Matlab的研究人員必須要對其有相當(dāng)?shù)牧私猓@樣才能夠自如的使用。所以為了解決這一問題,我們嘗試著將Visual C++與Matlab相結(jié)合,進(jìn)而來研究自動控制仿真系統(tǒng)。下面我們將會詳細(xì)地介紹兩者相結(jié)合后的研究開發(fā)過程。
在本文中我們向大家介紹的自動控制仿真實(shí)驗(yàn)系統(tǒng)的設(shè)計原理都是在實(shí)踐中被廣泛運(yùn)用的,比較具有典型意義的實(shí)驗(yàn)。
(1)如何設(shè)計系統(tǒng)菜單和仿真實(shí)驗(yàn)平臺
我們在進(jìn)行系統(tǒng)菜單設(shè)計的編程語言是Visual C++6.0,這種編程語言自帶了有許多的控件,我們只需要根據(jù)具體的要求來添加控件,進(jìn)行系統(tǒng)菜單的設(shè)計。這個系統(tǒng)設(shè)計主要是根據(jù)時域分析、頻域分析和根軌跡分析來做出仿真實(shí)驗(yàn),換句話說,這三個就是仿真實(shí)驗(yàn)的實(shí)現(xiàn)平臺。所以,我們在正式開始軟件設(shè)計的時候,要先采取措施來促成這三個仿真實(shí)驗(yàn)平臺的實(shí)現(xiàn),至于具體的實(shí)現(xiàn)措施我們可以采用建立菜單或者是下拉列表框點(diǎn)選方式,從而選擇仿真實(shí)驗(yàn)平臺。
(2) 仿真平臺的界面設(shè)計

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