本系列教程來源于出版書籍《基于MATLAB編程基礎(chǔ)與典型應(yīng)用書籍》,如涉及版權(quán)問題,請聯(lián)系:156204968@qq.com。 出版社:人民郵電出版社, 頁數(shù):525。
本系列教程目前基于MATLABR2006a,可能對于更高級版本的功能和函數(shù)有差異,教程中如有問題,請聯(lián)系:156204968@qq.com
Simulink工具箱包含大量的動(dòng)態(tài)仿真庫,能夠?qū)?shí)際系統(tǒng)進(jìn)行動(dòng)態(tài)仿真,而且可以非常方便地實(shí)現(xiàn)Simulink與Matlab之間的交互操作,使用Matlab命令行進(jìn)行Simulink模型的仿真,數(shù)據(jù)交換等。同時(shí)可以編寫M函數(shù)或者S函數(shù)進(jìn)行復(fù)雜系統(tǒng)的Simulink仿真。本章主要介紹Simulink建模與仿真的基本知識以及應(yīng)用實(shí)例分析。
15.1 Simulink簡介
Simulink是一個(gè)用來進(jìn)行動(dòng)態(tài)系統(tǒng)建模、仿真和分析的軟件包。Simulink提供了大量的仿真元件庫,非常方便搭建、分析和仿真各種動(dòng)態(tài)系統(tǒng),包括連續(xù)系統(tǒng)、離散系統(tǒng)和混合系統(tǒng)。Simulink交互式的開發(fā)界面方便用戶直接拖放,連接元件,設(shè)置模塊屬性和仿真參數(shù),實(shí)現(xiàn)動(dòng)態(tài)系統(tǒng)的建模仿真。同時(shí),Simulink強(qiáng)大的擴(kuò)展功能,包括M文件編程技術(shù),S-函數(shù)編程級數(shù),子系統(tǒng)創(chuàng)建封裝技術(shù)等方便用戶開發(fā)自己的仿真工具箱;Simulink中集成了大量的專業(yè)模塊庫,包括信號處理DSP模塊庫,電力系統(tǒng)仿真模塊庫,通信系統(tǒng)模塊庫等,廣泛地應(yīng)用與社會(huì)各領(lǐng)域中。綜合起來,Simulink工具箱具備以下強(qiáng)大的功能。
(1)優(yōu)越的交互式界面,操作簡單
Simulink模塊庫瀏覽窗口提供了大量的仿真元件庫以及其他專業(yè)模塊庫,用戶只需要啟動(dòng)Simulink仿真環(huán)境,在Simulink Library Browser的窗口選擇需要的模塊,用鼠標(biāo)拖放元件,然后連接,就可以建立仿真模型,同時(shí)子系統(tǒng)概念可以幫助用戶對獨(dú)立的仿真功能模塊進(jìn)行封裝,使系統(tǒng)模型更加簡潔清晰。這種簡單的元件拖放,連接,仿真的過程,使Simulink建模變得非常容易直觀。
(2)豐富的模塊庫,應(yīng)用領(lǐng)域廣泛
Simulink仿真環(huán)境下提供了大量的模塊庫,包括連續(xù)模塊庫、離散模塊庫、非線性模塊庫、信號與系統(tǒng)模塊庫、數(shù)學(xué)模塊庫、子系統(tǒng)模塊庫、輸入輸出模塊庫和函數(shù)查表模塊庫。通過使用這些模塊庫,能夠非常輕松地描述實(shí)際物理模型。除了Simulink工具箱外,Simulink仿真開發(fā)環(huán)境集成了大量專業(yè)模塊庫,包括數(shù)字信號處理模塊庫、通信系統(tǒng)模塊庫、控制系統(tǒng)模塊庫、神經(jīng)網(wǎng)絡(luò)系統(tǒng)模塊庫、電力系統(tǒng)仿真模塊庫等,使Simulink的應(yīng)用領(lǐng)域幾乎擴(kuò)展到工業(yè)生產(chǎn)的各行各業(yè),包括通訊衛(wèi)星系統(tǒng)、航空航天系統(tǒng)、汽車系統(tǒng)、金融系統(tǒng)、電機(jī)系統(tǒng)和控制系統(tǒng)等。
(3)模塊庫易于擴(kuò)展,移植性好
Simulink仿真平臺中集成了大量的模塊庫,能夠滿足一般用戶的仿真需求。同時(shí)Simulink子系統(tǒng)的概念可以方便地實(shí)現(xiàn)模塊庫擴(kuò)展。在一些大型系統(tǒng)仿真中,仿真模型元件眾多,此時(shí)需要建立各種獨(dú)立功能模塊子系統(tǒng),并進(jìn)行封裝,使之成為一個(gè)獨(dú)立的功能子模塊,用戶可以將自己建立的子系統(tǒng)組成模塊庫,并添加到Simulink仿真平臺的庫瀏覽窗口中,方便使用。對于一些復(fù)雜系統(tǒng),Simulink仿真環(huán)境下可以使用S-函數(shù)來實(shí)現(xiàn),它可以使用Matlab,C,C++,F(xiàn)ortran和Ada等語言來編寫,實(shí)現(xiàn)連續(xù)系統(tǒng)、離散系統(tǒng)和混合系統(tǒng)等,這些不同語言下的相關(guān)數(shù)值算法,不用修改就可以直接移植到Simulink開發(fā)環(huán)境下,因此模塊庫的移植性非常好。
(4)仿真手段靈活,接口豐富
在Simulink仿真環(huán)境下,仿真手段靈活,一方面可以通過交互式界面菜單按鈕的使用進(jìn)行系統(tǒng)模型仿真,同時(shí)也可以通過命令行形式進(jìn)行模型仿真。交互式界面的仿真方法簡單快捷,但是當(dāng)需要對仿真模型進(jìn)行重復(fù)仿真,或者仿真模型中模塊參數(shù)動(dòng)態(tài)變化等情況下,這種交互式操作的仿真手段帶來極大不便,于是命令行仿真手段凸現(xiàn)優(yōu)勢,通過命令行仿真,可以實(shí)現(xiàn)動(dòng)態(tài)改變模型參數(shù),進(jìn)行多次模型的重復(fù)仿真和數(shù)據(jù)分析等。在Simulink仿真環(huán)境下,與Matlab數(shù)據(jù)交換方式靈活,非常方便用戶對仿真結(jié)果進(jìn)行數(shù)據(jù)整理分析。
15.2 Simulink啟動(dòng)和文件建立
在了解了Simulink基本組成和功能介紹后,可以利用Simulink仿真平臺建立仿真模型對實(shí)際物理模型進(jìn)行仿真。本節(jié)將主要介紹Simulink仿真平臺的啟動(dòng),仿真模型的建立以及Simulink庫文件的建立。
15.2.1 Simulink的啟動(dòng)
在啟動(dòng)Simulink仿真環(huán)境前,應(yīng)該首先啟動(dòng)Matlab。在Matlab工作環(huán)境中,啟動(dòng)Simulink主要有以下三種方法。
(1)用命令行Simulink啟動(dòng)Simulink開發(fā)環(huán)境,在Matlab的命令行窗口(Command Window)中直接鍵入命令:
>> simulink
回車(Enter)后就會(huì)新開啟一個(gè)Simulink Library Browser的窗口,如圖15.2所示。

(2) 第二種方法是使用Matlab工具欄按鈕

啟動(dòng)Simulink仿真平臺。如圖15.2所示.

(3)用命令行Simulink3啟動(dòng)Simulink開發(fā)環(huán)境,在Matlab的命令窗口(Command Window)中直接鍵入命令:
>> Simulink3回車(Enter)后就會(huì)啟動(dòng)一個(gè)標(biāo)題為Library: Simulink3的新窗口,如圖15.3所示。從圖中可以看到Simulink庫中的一些主要模塊庫,雙擊模塊庫,即可看到對應(yīng)模塊庫中的元件列表。例如鼠標(biāo)左鍵雙擊連續(xù)模塊庫(Continuous),或者用鼠標(biāo)右鍵的菜單中單擊【Open Block】選項(xiàng),,就可以在新窗口中看到連續(xù)模塊庫中所包含的模塊元件,如圖15.4所示。


15.2.2 Mdl文件的建立
如圖15.2所示,啟動(dòng)了Matlab/Simulink仿真平臺后,需要建立一個(gè)空白的仿真模型,即.mdl文件。新建一個(gè)空白的系統(tǒng)仿真模型可以有以下幾個(gè)方法:
(1)如圖15.2所示,單擊主窗口【File】菜單下的【New】,選擇【Model】選項(xiàng),或者在Simulink主窗口下按CTRL+N的快捷鍵同樣可以創(chuàng)立空白的仿真模型。
(2)在Simulink主窗口中工具欄中的建立一個(gè)空白的仿真文檔,用打開一個(gè)當(dāng)前路徑下保存過的仿真模型。
(3)在Matlab主窗口的菜單欄【File】下的【New】,選擇【Model】選項(xiàng)。

圖15.5為新建的仿真模型,按CTRL+S快捷鍵或者選擇菜單欄【File】菜單下的【Save】選項(xiàng),,輸入仿真模型的文件名,然后設(shè)置模塊參數(shù)與系統(tǒng)的仿真參數(shù),就可以完成一個(gè)簡單系統(tǒng)的仿真了。在這個(gè)仿真模型中,使用了輸入源模塊庫(Sources)中的正弦波發(fā)生器模塊(Sine Wave),數(shù)學(xué)模塊庫(Math operations)中的絕對值模塊(Abs),以及輸出模塊庫(Sink)中的示波器模塊(Scope)。三個(gè)模塊的功能敘述以及參數(shù)設(shè)置如下:
(1)正弦波發(fā)生器模塊(Sine Wave):用來產(chǎn)生一定幅值和一定頻率的正弦波信號

(2)取絕對值模塊(Abs):實(shí)現(xiàn)絕對值功能,屬性設(shè)置使用默認(rèn)設(shè)置。
(3)示波器模塊(Scope):示波器默認(rèn)情況下只有一個(gè)輸入端,但很多情況下為了觀測多路不同的輸出信號,需要增加示波器的輸入端口,這時(shí)需要設(shè)置示波器的屬性。雙擊Scope模塊,單擊工具欄按鈕,彈出如圖15.7所示的示波器參數(shù)設(shè)置窗口。


在【General】屬性頁,根據(jù)需要輸入端口數(shù)量設(shè)置Number of axes。Time Range編輯框中輸入示波器時(shí)間軸的顯示范圍。在【Data history】屬性頁中,去掉Limit data points to last選項(xiàng),使信號能夠完全顯示與示波器中。如果需要對示波器的數(shù)據(jù)進(jìn)行處理,可以選擇Save data to workspace選項(xiàng),定義保存變量的名稱,以及數(shù)據(jù)類型。在保存示波器數(shù)據(jù)時(shí),提供三種不同的數(shù)據(jù)格式:第一種是Structure with time;第二種是Struct;第三種是Array。下面章節(jié)中將詳細(xì)介紹這三種不同數(shù)據(jù)類型保存的數(shù)據(jù)形式以及它們之間的差異。
(4)當(dāng)完成了仿真模型所有模塊的參數(shù)設(shè)置后,并且正確設(shè)置系統(tǒng)仿真參數(shù),就可以進(jìn)行模型的仿真。在模型窗口(圖15.5所示)中,單擊菜單欄【Simulation】下的【Configuration parameters】選項(xiàng),或者按CTRL+E快捷鍵,即可彈出仿真參數(shù)設(shè)置對話框,如圖15.8所示。首先在仿真時(shí)間組件中設(shè)置仿真的起始時(shí)間和終止時(shí)間。在求解組合框中,首先選擇仿真算法,采用變步長算法或者定步長算法,變步長算法包括離散算法(discrete)、ode45、 ode23,、ode113,、ode15s、 ode23s,、ode23t和ode23tb算法;在定步長仿真中,包括離散算法、ode1、ode2、ode3、ode4、ode5算法。然后設(shè)置仿真算法步長,包括初始步長,最小步長和最大步長設(shè)置,以及誤差容忍度的設(shè)置,包括絕對誤差和相對誤差設(shè)置。

當(dāng)仿真模型所有模塊參數(shù)和仿真參數(shù)設(shè)置完成后,就可以進(jìn)行仿真系統(tǒng)的仿真。單擊模型窗口(圖15.5所示)中菜單欄【Simulation】下的【Start】選項(xiàng),或者按快捷鍵CTRL+T,或者單擊工具欄按鈕進(jìn)行模型仿真,結(jié)果如圖15.9所示。
示波器在不同保存數(shù)據(jù)格式下,數(shù)據(jù)結(jié)構(gòu)不盡相同。當(dāng)數(shù)據(jù)格式設(shè)置為Structure with time時(shí),仿真結(jié)束后,在命令窗口中輸入:
>> compare_sine
compare_sine =
time: [200001x1 double]
signals: [1x2 struct]
blockName: 'sim_book_1/Scope'
可以看出,示波器保存的是包含時(shí)間和信號數(shù)據(jù)的結(jié)構(gòu)體,同時(shí)還有示波器模塊的名稱。而信號數(shù)據(jù)也是一個(gè)結(jié)構(gòu)體。在命令窗口中輸入:
>> signals_struct=compare_sine.signals
signals_struct =
1x2 struct array with fields:
values
dimensions
label
title
plotStyle
如果要獲取時(shí)間和信號的數(shù)據(jù)可以分別用以下的命令:
>> time=compare_sine.time;%獲取仿真時(shí)間數(shù)據(jù)
>> pre_signal=compare_sine.signals(1).values;%獲取第一個(gè)信號的數(shù)據(jù)
>> aft_signal=compare_sine.signals(2).values; %獲取第二個(gè)信號的數(shù)據(jù)

當(dāng)數(shù)據(jù)格式設(shè)置為Struct時(shí),仿真結(jié)束后,在命令窗口中輸入:
>> compare_sine
compare_sine =
time: []
signals: [1x2 struct]
blockName: 'sim_book_1/Scope'
發(fā)現(xiàn)此時(shí)示波器數(shù)據(jù)中時(shí)間數(shù)據(jù)為空集,并沒有保存時(shí)間的數(shù)據(jù)。信號數(shù)據(jù)同第一種數(shù)據(jù)格式一種為1x2 struct結(jié)構(gòu)體數(shù)據(jù)。
第三種數(shù)據(jù)結(jié)構(gòu)Array必須是示波器為單輸入時(shí)才能保存為數(shù)組。在多輸入情況下,必須以結(jié)構(gòu)體形式保存數(shù)據(jù)。
1.示波器圖形編輯和數(shù)據(jù)處理方法
從圖15.9可以看出,示波器仿真結(jié)果無法直接進(jìn)行編輯,而且以黑色為圖形背景,不利于工程論文圖形美觀需求。因此需要對示波器圖形或者數(shù)據(jù)進(jìn)行重新處理。以下提供5種基本的處理方式。
(1)按下鍵盤的屏幕打印按鈕【PrintScreen】,然后粘貼到Windows位圖編輯器,即Windows下自帶的畫圖板軟件,選擇圖像單擊右鍵,選擇【反色】即可;
(2)在Scope屬性頁中的Data history屬性頁,選中 Save Data to Workplace單選框,然后在Variable Name編輯框中指定變量名,F(xiàn)ormat下拉按鈕下選擇示波器保存數(shù)據(jù)類型,將仿真數(shù)據(jù)保存在工作窗口下,使用plot命令繪制仿真結(jié)果如圖15.10示;

(3)直接在模型的輸出信號線上添加To Workplace模塊,在工作窗口中將仿真數(shù)據(jù)使用plot命令繪制出來;
(4)直接在模型的輸出信號線上添加Outport模塊,用plot命令繪制tout和yout;
(5)仿真模型仿真結(jié)束后,等示波器Scope顯示出來圖像以后,在Matlab的命令行窗口中輸入:
>> set(0,'ShowHiddenHandles','On')
>> set(gcf,'menubar','figure')
單擊菜單欄的【Insert】選項(xiàng),鼠標(biāo)會(huì)變成十字形狀,然后再圖像的任意一處雙擊左鍵出現(xiàn)一個(gè)對話框PropertyEditor,選中style在窗口的右邊會(huì)出現(xiàn)color選項(xiàng),就可以任意修改波形背景顏色,同時(shí)也可以對曲線顏色以及坐標(biāo)軸進(jìn)行設(shè)置,結(jié)果如圖15.11所示。

在命令行窗口中輸入以下繪圖命令,結(jié)果如圖15.10所示。
>> subplot(2,1,1)
>> time=compare_sine.time;
>> pre_signal=compare_sine.signals(1).values;
>> aft_signal=compare_sine.signals(2).values;
>> plot(time,pre_signal)
>> grid on
>> xlabel('Time(sec)');ylabel('original signal')
>> subplot(2,1,2)
>> plot(time,aft_signal)
>> grid on
>> xlabel('Time(sec)');ylabel('absolute signal')
以上通過一個(gè)簡單的系統(tǒng)模型演示了Simulink建模與仿真的基本步驟。相信讀者通過這一部分的學(xué)習(xí)能夠大致了解一個(gè)Simulink仿真模型建立的步驟,示波器數(shù)據(jù)圖像化顯示的基本方法,以及仿真數(shù)據(jù)的交互式處理。在后續(xù)章節(jié)中,會(huì)更加詳細(xì)地介紹Simulink模塊庫各模塊的功能,使用方法和應(yīng)用場所,通過更加深入的學(xué)習(xí),相信讀者能夠輕松地建立相對簡單的Simulink仿真模型。對于復(fù)雜系統(tǒng),離散-連續(xù)混合系統(tǒng)的仿真,在介紹完命令行仿真技術(shù),S-function建模仿真后,相信讀者能夠針對一些綜合的復(fù)雜系統(tǒng),進(jìn)行建模和仿真。
作者:德特?cái)?shù)據(jù)
聯(lián)系方式:156204968@qq.com