版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
8.1Simulink基礎(chǔ)8.2Simulink的模塊庫8.3子系統(tǒng)及封裝技術(shù)8.4仿真運行與分析
8.5S-函數(shù)的設(shè)計與應(yīng)用
8.1.1Simulink的啟動
要啟動Simulink,首先必須啟動MATLAB。當(dāng)MATLAB啟動之后,可以通過以下兩種途徑打開Simulink模塊庫瀏覽器:
●單擊MATLAB工具欄上的Simulink按鈕。
●在MATLAB命令窗輸入simulink命令。
運行結(jié)果如圖8-1所示。8.1Simulink基礎(chǔ)圖8-1Simulink模塊庫瀏覽器
Simulink模塊庫瀏覽器打開之后,可以通過以下兩種途徑新建一個模型文件:
●單擊Simulink模塊庫瀏覽器工具欄按鈕。
●在Simulink模塊庫瀏覽器主菜單選擇File>New>Model。
打開新建模型文件,出現(xiàn)如圖8-2所示的窗口。
新建模型文件名默認(rèn)為untitled.mdl,用戶可根據(jù)需要對文件重命名。圖8-2模型編輯窗口8.1.2Simulink工作環(huán)境
Simulink模塊庫瀏覽器的操作界面不難掌握,本小節(jié)主要介紹圖8-2所示的模型編輯窗口的菜單功能,其中包括主菜單和工具欄。
主菜單位于模型編輯窗口下方,包括File、Edit、View、Simulation、Format、Tools、Help七個功能菜單。
1.File菜單
●?New:新建模型、庫文件。
●?Open:打開已有的模型文件。
●?Close:關(guān)閉當(dāng)前模型編輯窗口。
●?Save:保存當(dāng)前模型文件。
●?SaveAs:將當(dāng)前模型文件另存為。
●?SourceControl:設(shè)置Simulink與資源控制系統(tǒng)接口。
●?ModelProperties:模型屬性?!?Preferences:環(huán)境設(shè)置。
●?ExporttoWeb:輸出模型文件到Web。
●?Print:打印模型文件。
●?PrintDetails:打印成為HTML格式的詳細(xì)描述文件。
●?PrintSetup:打印設(shè)置。
●?EnableTiledPrinting:平鋪打印設(shè)置選項。
●?ExitMATLAB:退出MATLAB。
2.Edit菜單
●?Undo:撤消。
●?Redo:恢復(fù)。
●Cut、Copy、Paste、Delete、SelectAll、Find:分別實現(xiàn)模塊的剪切、復(fù)制、粘貼、刪除、全選、查找操作。
●?CopyModelToClipboard:將模型圖復(fù)制到剪切板?!?CreatSubsystem:創(chuàng)建子系統(tǒng)。
●?MaskSubsystem:封裝子系統(tǒng)。
●?LookUnderMask:查看子系統(tǒng)構(gòu)成。
●?LinkOptions:鏈接選項。
●?RefreshModelBlocks:刷新所有模塊的輸入/輸出口和參數(shù)。
●?UpdateDiagram:刷新顯示。
3.View菜單
View菜單的部分功能與Windows中View菜單的功能類似,這里只介紹模型編輯窗口的特殊功能菜單。
●?Back:后退。
●?Forward:前進(jìn)。
●?GoToParent:返回子系統(tǒng)上一級。
●?ModelBrowserOptions:模型瀏覽器選項。
●?BlockDataTipsOptions:模塊數(shù)據(jù)提示選項。
●?SystemRequirments:系統(tǒng)要求。
●?LibraryBrowser:打開Simulink模塊庫瀏覽器。
●?ModelExplorer:打開模塊資源管理器。
●?MATLABDesktop:進(jìn)入MATLAB主界面。
●?ShowPageBoundaries:顯示頁面邊界。
4.Simulation菜單
●?Start:啟動仿真。
●?Stop:停止仿真。
●?ConfigurationParameters:仿真參數(shù)設(shè)置。
●?Normal:標(biāo)準(zhǔn)仿真模式。
●?Accelerator:加速仿真模式。
●?External:外部仿真模式。
5.Format菜單
●?Font:設(shè)置字體。
●?TextAlignment:設(shè)置文字對齊方式。
●?EnableTeXCommands:在注釋中解釋TeX命令。
●?FlipName:翻轉(zhuǎn)模塊名。
●?FlipBlock:翻轉(zhuǎn)模塊。
●?RotateBlock:旋轉(zhuǎn)模塊。
●?ShowName:顯示模塊名?!?ShowDropShadow:顯示模塊陰影。
●?ShowPortLabels:端口標(biāo)簽顯示模式。
●?ForegroundColor:設(shè)置模塊前景顏色。
●?BackgroundColor:設(shè)置模塊背景顏色。
●?ScreenColor:設(shè)置窗口屏幕顏色。
●?Port/SignalDisplay:端口/信號信息顯示設(shè)置。
●?BlockDisplay:模塊信息顯示設(shè)置。
●?LibraryLinkDisplay:庫鏈接信息顯示設(shè)置。6.Tools菜單
●?SimulinkDebugger:打開Simulink調(diào)試器。
●?Fixed-PointSettings:打開定點設(shè)置對話框。
●?ModelAdvisor:打開模型咨詢工具。
●?ModelDependencies:使用模型文件清單。
●?LookupTableEditor:打開查表編輯器?!?DataClassDesigner:打開Simulink數(shù)據(jù)類型設(shè)計器。
●?BusEditor:打開總線編輯器查看或編輯總線對象。
●?Profiler:觸發(fā)Simulink優(yōu)化工具。
●?CoverageSettings:打開模型設(shè)置對話框。
●?Signal&ScopeManager:打開信號與示波器管理器。
●?Real-TimeWorkshop:實時工作區(qū)間選項。
●?ExternalModeControlPanel:打開外部模式控制面板。
●?ControlDesign:用于控制設(shè)計。●?ParameterEstimation:用于參數(shù)估計。
●?ReportGenerator:打開報告產(chǎn)生器。
●?HDLCoder:HDL代碼選項。
●?LinkforTASKING:TASKING鏈接選項。
●?DataObjectWizard:打開數(shù)據(jù)對象向?qū)А?/p>
●?SystemTest:系統(tǒng)測試。
●?MPlayVideoViewer:打開MPlay視頻觀察器。
7.Help菜單
●?UsingSimulink:在MATLAB幫助瀏覽器中顯示Simulink用戶指導(dǎo)。
●?Blocks:在幫助瀏覽器中顯示選中模塊或所有模塊的幫助。
●?Blocksets:分類選擇查看幫助。
●?BlockSupportTable:查看Simulink各模塊支持的數(shù)據(jù)類型表。
●?Shortcuts:在幫助瀏覽器中顯示Simulink命令的快捷鍵。●?S-Functions:在幫助瀏覽器中顯示S-函數(shù)的幫助。
●?Demos:在幫助瀏覽器中顯示Demos標(biāo)簽頁的Simulink部分。
●?TermsofUse:打開Licence.txt文件。
●?Patents:打開patents.txt文件。
●?AboutSimulink:顯示Simulink版本信息。
工具欄位于主菜單之下,為用戶提供了快捷的功能操作。由于主菜單中都包含了工具欄的基本功能,這里就不再重復(fù)介紹了。8.1.3Simulink模塊的基本操作
有關(guān)模塊的操作都可以通過主菜單、鼠標(biāo)或右鍵菜單來完成。本小節(jié)將介紹最重要且最基本的模塊操作。
1.模塊的添加和重命名
建立系統(tǒng)框圖時首先需要添加模塊。用戶可以從模塊庫瀏覽器中選中某個模塊并選擇菜單中的AddtotheCurrentModel項,將其添加到當(dāng)前模型編輯窗口,或者直接將模塊庫瀏覽器中的模塊拖放到模型編輯窗口的某個位置。默認(rèn)情況下,添加的模塊名為模塊庫瀏覽器中的模塊名。在模型編輯窗口單擊模塊名可以對模塊進(jìn)行重命名。
2.模塊的移動和縮放
為調(diào)整模型編輯窗口內(nèi)模塊的位置,可以用鼠標(biāo)左鍵拖動模塊到指定位置,也可以選中模塊后通過鍵盤的上、下、左、右鍵調(diào)整模塊的位置。
為調(diào)整模塊的大小,可以先選中模塊,然后將鼠標(biāo)移動到該模塊的四個角中的任意一個角,這時鼠標(biāo)變成雙向斜箭頭,按下鼠標(biāo)左鍵就可以對模塊的大小進(jìn)行調(diào)整了。
3.模塊的剪切、復(fù)制和粘貼
選中一個模塊或一塊區(qū)域后,可以通過主菜單、工具欄或右鍵菜單對其進(jìn)行剪切(Cut)或復(fù)制(Copy)操作。當(dāng)剪貼板中有內(nèi)容時,可以進(jìn)行粘貼(Paste)操作。
在一個模型文件內(nèi)還有更為快捷的復(fù)制和粘貼操作,即選中需要復(fù)制的部分,使用右鍵或Ctrl+左鍵拖動該部分,在指定位置松開右鍵或Ctrl+左鍵后,則將該部分復(fù)制并粘貼到該位置。
4.模塊的旋轉(zhuǎn)與翻轉(zhuǎn)
為了布局設(shè)計和連線方便,常常需要對模塊進(jìn)行旋轉(zhuǎn)或翻轉(zhuǎn)操作??梢韵冗x中模塊,然后在右鍵菜單或主菜單中的Format選項內(nèi)選擇RotateBlock或FlipBlock,對模塊進(jìn)行旋轉(zhuǎn)或翻轉(zhuǎn)操作。
5.模塊的參數(shù)設(shè)置
當(dāng)添加一個模塊后,還需要對該模塊的相關(guān)參數(shù)進(jìn)行設(shè)置。雙擊需要設(shè)置參數(shù)的模塊,彈出一個參數(shù)設(shè)置對話框,可以將參數(shù)設(shè)置為常量,也可以設(shè)置為變量(運行前先對變量賦值)。采樣時間(Sampletime)通常設(shè)為?-1(繼承與輸入相連的模塊的采樣時間),?如圖8-3所示。圖8-3模塊參數(shù)設(shè)置對話框
6.模塊的連接
模塊之間信號線的連接可以用鼠標(biāo)來完成。光標(biāo)在輸入端(或輸出端)變?yōu)槭中螤顣r,按下鼠標(biāo)左鍵并拖動鼠標(biāo)至輸出端(或輸入端),松開左鍵即可完成一條信號線的連接。
如果要在一條信號線上引出分支線并連接到其他模塊,可以在需要引出分支處按下鼠標(biāo)右鍵或Ctrl+左鍵,拖動支線的箭頭到指定位置或其他模塊的輸入端口,然后松開右鍵或Ctrl+左鍵即可。
7.信號線的彎折、移動和刪除
如果需要彎折信號線,則拖動信號線時在需要彎折處松開鼠標(biāo),再按下鼠標(biāo)繼續(xù)拖動即可。
如果需要移動已有的信號線,則將鼠標(biāo)指向該信號線,按下左鍵進(jìn)行移動,然后松開即可。
如果需要刪除已有的信號線,則選中該信號線,通過主菜單或右鍵菜單選擇Delete,或者在鍵盤上按下Delete鍵即可。8.1.4Simulink仿真步驟
Simulink仿真步驟通常由以下幾個部分組成。
1.創(chuàng)建系統(tǒng)模型
要仿真一個系統(tǒng),首先要新建一個模型文件并打開Simulink模型庫瀏覽器,然后在模型編輯窗口添加系統(tǒng)模塊并以適當(dāng)?shù)姆绞綄⑦@些模塊連接起來,形成系統(tǒng)模型。一個仿真模型應(yīng)該至少有一個輸入(Sources庫)和一個輸出(Sinks庫),創(chuàng)建完畢后應(yīng)將模型文件保存在當(dāng)前路徑下。
2.設(shè)置模塊參數(shù)
用戶可以根據(jù)特定需要設(shè)置系統(tǒng)各模塊的參數(shù)。雙擊需要進(jìn)行參數(shù)設(shè)置的模塊,在彈出的對話框中填寫模塊參數(shù),單擊OK按鈕即可完成設(shè)置。填入的參數(shù)可以是常數(shù),也可以是變量。如果是變量,在仿真該模型前應(yīng)先對參數(shù)變量賦值。
3.設(shè)置仿真參數(shù)
仿真前應(yīng)根據(jù)仿真需要設(shè)置仿真參數(shù)。在主菜單中選擇Simulation>ConfigurationParameters,彈出一個如圖8-4所示的仿真參數(shù)設(shè)置對話框。在對話框左側(cè)可以對Solver、DataImport/Export、Optimization、Diagnostics、HardwareImplementation、ModelReferencing、Real-TimeWorkshop、HDLCoder等選項進(jìn)行設(shè)置。通常情況下,仿真主要設(shè)置的是Solver選項。圖8-4仿真參數(shù)設(shè)置對話框
Solver選項的主要設(shè)置項如下:
●?Simulationtime:Starttime(起始時間)和Stoptime(終止時間)。
●?Solveroptions:
■?Type(是否采用變步長算法)。
■?Maxstepsize(最大時間步長)和Minstepsize(最小時間步長)。
■?Solver(求解器)。
■?Relativetolerance(相對允許誤差)和Absolutetolerance(絕對允許誤差)。
■?Initialstepsize(初始步長)。
■?Zerocrossingcontrol(過零控制選項)。●?Solverdiagnosticcontrols:
■?Numberofconsecutiveminstepsizeviolationsallowed(允許違反連續(xù)最小步長的最大次數(shù))。
■?Consecutivezerocrossingsrelativetolerance(連續(xù)過零相對允許誤差)。
■?Numberofconsecutivezerocrossingsallowed(連續(xù)過零允許次數(shù))。
4.運行仿真
以上操作步驟完成后就可以對模型進(jìn)行仿真了。選擇主菜單中的Simulation>Start或單擊工具欄按鈕啟動仿真。仿真進(jìn)行時,模型編輯窗口狀態(tài)欄上會顯示仿真的進(jìn)度,用戶可以等待仿真進(jìn)行到終止時間或單擊工具欄按鈕暫停仿真(暫停之后可以恢復(fù)仿真),甚至可以單擊工具欄按鈕強(qiáng)行終止仿真。
5.仿真結(jié)果分析
仿真終止后即可對仿真結(jié)果進(jìn)行觀察和分析。通常的做法是使用示波器(Scope)觀測,即雙擊示波器觀察波形,再利用波形縮放工具實現(xiàn)更進(jìn)一步的觀察。另外,還可以將仿真得到的數(shù)據(jù)輸出到MATLAB工作區(qū)間,然后對這些數(shù)據(jù)進(jìn)行觀察或分析。
下面通過實例來說明仿真的具體步驟。
【例】
二階振蕩環(huán)節(jié)的階躍響應(yīng)仿真。
(1)新建一個模型文件,保存并命名為untitled.mdl。從模塊庫瀏覽器中選擇Step(階躍輸入)、TransferFcn(振蕩環(huán)節(jié)傳遞函數(shù))、Scope(示波器)并添加到模型編輯窗口,然后連接各模塊,如圖8-5所示。圖8-5二階振蕩系統(tǒng)連接框圖
(2)設(shè)置各模塊的參數(shù)。其中,Step模塊的參數(shù)設(shè)置如圖8-6所示,TransferFcn模塊的參數(shù)設(shè)置如圖8-7所示,Scope模塊的參數(shù)設(shè)置如圖8-8所示。
(3)設(shè)置仿真參數(shù)。打開仿真參數(shù)設(shè)置對話框,將Stoptime設(shè)置為3,Maxstepsize設(shè)置為0.01,其他參數(shù)保留默認(rèn)值。設(shè)置結(jié)果如圖8-9所示。
圖8-6Step模塊的參數(shù)設(shè)置
圖8-7TransferFcn模塊的參數(shù)設(shè)置圖8-8Scope模塊的參數(shù)設(shè)置圖8-9仿真參數(shù)設(shè)置
(4)單擊工具欄按鈕運行仿真,階躍輸入信號(下)及振蕩環(huán)節(jié)的輸出信號(上)的波形如圖8-10所示??梢钥闯?,系統(tǒng)輸出經(jīng)過一段振蕩后輸出幅值穩(wěn)定在1/100。圖8-10示波器顯示的波形結(jié)果8.1.5Simulink求解算法
Simulink仿真是通過求解器來計算下一個時刻及其狀態(tài)的。Simulink的求解器可分為兩類:固定步長求解器和變步長求解器。對于固定步長求解器,在仿真期間步長保持為常數(shù);而對于變步長求解器,步長的大小取決于模型的動力學(xué)特性。當(dāng)模型的狀態(tài)變化迅速時,變步長求解器將減小步長以保證計算精度;當(dāng)模型的狀態(tài)變化緩慢時,變步長求解器將增大步長以避免不必要的計算。求解器的選擇取決于模型的動力學(xué)特性和用戶的配置計劃。如果用戶需要生成模型代碼并在實時計算機(jī)系統(tǒng)上運行該代碼,則應(yīng)該選擇固定步長求解器來仿真模型,這是因為實時計算機(jī)系統(tǒng)以固定的信號采樣率運行,而變步長求解器可能導(dǎo)致實時計算機(jī)系統(tǒng)的仿真丟失誤差條件。如果不需要生成代碼,則求解器的選擇取決于系統(tǒng)模型的動力學(xué)特性。
如果模型的狀態(tài)變化迅速或包含不連續(xù)性,則變步長求解器可以減小模型仿真所用的時間步長。這是因為對于一個模型,變步長求解器比固定步長求解器需要更短的時間步長以達(dá)到可接受的精度級別。
1.固定步長求解器
如果仿真參數(shù)設(shè)置對話框的Solveroptions選項區(qū)中的Type選項為Fixed-step,則可以選擇Solver右側(cè)下拉列表框列出的固定步長求解器。這類固定步長求解器由離散求解器和連續(xù)求解器兩部分組成。固定步長求解器有如下幾種:
●?discrete:無連續(xù)狀態(tài)的離散狀態(tài)模型算法;
●?ode1:歐拉法;
●?ode2:Heun法;
●?ode3:Bogacki-Shampine公式;
●?ode4:四階Runge-Kutta法;
●?ode5:Dormand-Prince公式;
●?ode14x:結(jié)合牛頓法與外推法。固定步長求解器的選擇方法通常采用二進(jìn)制查找法,即如果ode1不能給出精確的計算結(jié)果,測試ode3,如果ode3滿足精度要求,測試ode2,如果ode2滿足精度要求,則選擇ode2作為求解器,否則選擇ode3作為求解器;如果ode3不能滿足精度要求,測試ode5,如果ode5能滿足精度要求,測試ode4,如果ode4滿足精度要求,則選擇ode4作為求解器,否則選擇ode5作為求解器。
2.變步長求解器
如果仿真參數(shù)設(shè)置對話框的Solveroptions選項區(qū)中的Type選項為Variable-step,則可以選擇Solver右側(cè)下拉列表框列出的變步長求解器。這類變步長求解器由一個離散求解器和幾個連續(xù)求解器組成。變步長求解器的步長選擇取決于模型狀態(tài)的變化快慢程度。離散求解器或連續(xù)求解器的選取取決于模型中是否定義了狀態(tài)以及所定義的狀態(tài)類型。如果模型定義無狀態(tài)或者只定義了離散狀態(tài),則應(yīng)當(dāng)選擇離散求解器。事實上,即使這種情況下選擇的是連續(xù)求解器,Simulink仍會使用離散求解器來求解。變步長求解器有如下幾種:
●?discrete:無連續(xù)狀態(tài)的離散狀態(tài)模型算法?!?ode45:基于顯式Runge-Kutta(4,5)公式和Dormand-Prince的單步算法。例如,計算y(tn),只需要知道前一個時刻處的解y(tn-1)。通常ode45是大多數(shù)問題首選的最佳求解器,因此ode45也是Simulink連續(xù)狀態(tài)模型的默認(rèn)求解器。
●?ode23:基于顯式Runge-Kutta(2,3)與Bogacki和Shampine的單步算法。在處理粗略允許誤差和弱剛性問題時較ode45有效。
●?ode113:變階Adams-Bashforth-MoultonPECE多步算法。在允許誤差有嚴(yán)格要求時較ode45有效。多步算法在計算當(dāng)前時刻的值時需要知道之前多個時刻的解。●?ode15s:基于數(shù)值微分公式(NDFs)的變階多步求解算法。它比反向微分公式(BDFs或Gear法)更有效。對于一個可能為剛性的問題,或者ode45不能有效解決的問題,可以嘗試采用ode15s進(jìn)行求解。
●?ode23s:基于改進(jìn)的二階Rosenbrock公式的單步算法。ode23s在處理粗略允許誤差問題時較ode15s有效。它還可以求解一些ode15s不能有效解決的剛性問題。
●?ode23t:使用“自由”內(nèi)插式實現(xiàn)的梯形算法。如果問題為適度剛性且希望得到一個不存在數(shù)值阻尼的解,則使用該求解器?!?ode23tb:由二階反向微分公式的梯形法(TR-BDF2),即第一階段采用梯形法而第二階段采用二階反向微分公式的隱式Runge-Kutta公式實現(xiàn)的算法。從構(gòu)造上講,兩個階段的估計都使用了相同的迭代矩陣。類似ode23s,ode23tb在處理粗略允許誤差問題時較ode15s有效。8.2.1CommonlyUsedBlocks模塊庫
CommonlyUsedblocks模塊庫中包含了仿真最常用的模塊,這些模塊在其他模塊庫中都可以找到,但是CommonlyUsedBlocks模塊庫提供了快捷的模塊選取方法。該模塊庫中的各模塊描述如表8-1所示。8.2Simulink的模塊庫表8-1CommonlyUsedBlocks模塊庫8.2.2Continuous模塊庫
Continuous模塊庫中主要包含了連續(xù)系統(tǒng)的仿真模塊。該模塊庫中的各模塊描述如表8-2所示。表8-2Continuous模塊庫8.2.3Discontinuities模塊庫
Discontinuities模塊庫中主要包含了不連續(xù)系統(tǒng)的仿真模塊。該模塊庫中的各模塊描述如表8-3所示。表8-3Discontinuities模塊庫8.2.4Discrete模塊庫
Discrete模塊庫中主要包含了不連續(xù)系統(tǒng)的仿真模塊。該模塊庫中的各模塊描述如表8-4所示。表8-4Discrete模塊庫8.2.5LogicandBitOperations模塊庫
LogicandBitOperations模塊庫中的仿真模塊主要用于實現(xiàn)邏輯運算和位運算。該模塊庫中的各模塊描述如表8-5所示。表8-5LogicandBitOperations模塊庫8.2.6LookupTables模塊庫
LookupTables模塊庫提供了各種用于查表運算的模塊。該模塊庫中的各模塊描述如表8-6所示。表8-6LookupTables模塊庫8.2.7MathOperations模塊庫
MathOperations模塊庫中包含了大量的用于實現(xiàn)數(shù)學(xué)運算的模塊。該模塊庫中的各模塊描述如表8-7所示。表8-7MathOperations模塊庫續(xù)表8.2.8ModelVerification模塊庫
ModelVerification模塊庫主要用于實現(xiàn)信號的檢測。該模塊庫中的各模塊描述如表8-8所示。表8-8ModelVerification模塊庫8.2.9Model-WideUtilities模塊庫
Model-WideUtilities模塊庫中的各模塊描述如表8-9所示。表8-9Model-WideUtilities模塊庫8.2.10Ports&Subsystems模塊庫
Ports&Subsystems模塊庫主要用于端口和子系統(tǒng)的設(shè)計。該模塊庫中的各模塊描述如表8-10所示。表8-10Ports&Subsystems模塊庫8.2.11SignalAttributes模塊庫
SignalAttributes模塊庫主要用于信號和數(shù)據(jù)類型的轉(zhuǎn)換。該模塊庫中的各模塊描述如表8-11所示。表8-11SignalAttributes模塊庫8.2.12SignalRouting模塊庫
SignalRouting模塊庫主要用于實現(xiàn)信號路徑的控制。該模塊庫中的各模塊描述如表8-12所示。表8-12SignalRouting模塊庫8.2.13Sinks模塊庫
Sinks模塊庫主要提供信號的顯示或信號的輸出連接。該模塊庫中的各模塊描述如表8-13所示。表8-13Sinks模塊庫8.2.14Sources模塊庫
Sources模塊庫提供了大量的信號發(fā)生器模塊。該模塊庫中的各模塊描述如表8-14所示。表8-14Sources模塊庫8.2.15User-DefinedFunctions模塊庫
User-DefinedFunctions模塊庫主要用于實現(xiàn)自定義函數(shù)功能,包括MATLAB函數(shù)和S-函數(shù)。該模塊庫中的各模塊描述如表8-15所示。表8-15User-DefinedFunctions模塊庫8.3.1創(chuàng)建子系統(tǒng)
當(dāng)模型的規(guī)模和復(fù)雜性增加時,可以通過將模塊組成子系統(tǒng)來簡化模型。使用子系統(tǒng)有如下優(yōu)點:
●減小模型窗口內(nèi)顯示的模塊數(shù);
●可將功能關(guān)系密切的模塊集合在一起;
●實現(xiàn)層次化的模型圖,子系統(tǒng)處于某一層,組成該子系統(tǒng)的模塊處于另一層。8.3子系統(tǒng)及封裝技術(shù)創(chuàng)建一個子系統(tǒng)通常有以下兩種方法:
●在模型內(nèi)添加一個Subsystem模塊,打開該模塊并在該子系統(tǒng)窗口內(nèi)添加模塊;
●在模型內(nèi)添加構(gòu)成子系統(tǒng)的模塊,然后由這些模塊創(chuàng)建組成子系統(tǒng)。
1.通過添加Subsystem模塊創(chuàng)建子系統(tǒng)
在添加組成子系統(tǒng)的各模塊之前,首先在模型內(nèi)添加一個子系統(tǒng),然后再在子系統(tǒng)中添加組成子系統(tǒng)的模塊。具體操作步驟如下:
(1)從Ports&Subsystems庫將Subsystem模塊復(fù)制到當(dāng)前模型內(nèi)。
(2)雙擊打開Subsystem模塊。
(3)在子系統(tǒng)窗口內(nèi)創(chuàng)建子系統(tǒng),使用輸入端模塊和輸出端模塊分別表示子系統(tǒng)的外部輸入和外部輸出。
【例】利用Subsystem模塊創(chuàng)建子系統(tǒng)。
創(chuàng)建一個名為untitled.mdl的模型文件,添加信號源、示波器和子系統(tǒng)模塊,如圖8-11所示。圖8-11系統(tǒng)模塊連接打開子系統(tǒng)模塊,在子系統(tǒng)中添加傳遞函數(shù)模塊,如圖8-12所示。圖8-12子系統(tǒng)模塊連接
2.通過模型中已有模塊創(chuàng)建組成子系統(tǒng)
如果模型中存在一些相關(guān)模塊,并且希望將這些模塊組成子系統(tǒng),則可以通過選中這些模塊來創(chuàng)建子系統(tǒng)。具體操作步驟如下:
(1)按下鼠標(biāo)左鍵,拖動鼠標(biāo)形成包圍框,框中用于創(chuàng)建子系統(tǒng)的模塊以及相關(guān)連接線,松開鼠標(biāo)完成選定。需要注意的是,不可以一個接一個地選擇模塊或者使用SelectAll命令。
(2)從右鍵菜單或Edit菜單中選擇CreateSubsystem,Simulink則使用子系統(tǒng)模塊取代所選中的這些模塊。
【例】通過模型中已有模塊創(chuàng)建子系統(tǒng)。
創(chuàng)建一個名為untitled.mdl的模型文件,添加如圖8-13所示的各模塊,并用鼠標(biāo)選中需要創(chuàng)建生成子系統(tǒng)的部分。
松開鼠標(biāo)左鍵,在Edit菜單下選擇CreateSubsystem,生成的子系統(tǒng)模塊如圖8-14所示。圖8-13選中部分模塊圖8-14生成的子系統(tǒng)模塊8.3.2封裝子系統(tǒng)
子系統(tǒng)封裝是自定義的用戶界面,用于隱藏子系統(tǒng)內(nèi)容,并且使子系統(tǒng)具有類似Simulink原型模塊的外部特性,如顯示子系統(tǒng)圖標(biāo)、參數(shù)設(shè)置對話框等。Simulink的子系統(tǒng)封裝編輯器提供了以下封裝功能:
●只需要用一個參數(shù)對話框就可以實現(xiàn)對整個子系統(tǒng)的描述、參數(shù)設(shè)置以及幫助信息的顯示?!袷褂米远x圖標(biāo)取代標(biāo)準(zhǔn)子系統(tǒng)圖標(biāo)來表示子系統(tǒng)。
●隱藏子系統(tǒng)的內(nèi)部模塊構(gòu)成。
●通過在封裝子系統(tǒng)中定義模塊的行為來創(chuàng)建自定義模塊,并將封裝后的子系統(tǒng)放入一個模塊庫。
通常封裝一個子系統(tǒng)的步驟如下:
(1)選擇需要封裝的子系統(tǒng)模塊。
(2)通過模型右鍵菜單或者模型編輯器的Edit菜單選擇MaskSubsystem,出現(xiàn)如圖8-15所示的封裝編輯器窗口。圖8-15封裝編輯器窗口(3)設(shè)置封裝編輯器的各項標(biāo)簽頁,實現(xiàn)如下功能:
●創(chuàng)建自定義子系統(tǒng)圖標(biāo);
●創(chuàng)建子系統(tǒng)參數(shù)選項;
●初始化封裝后的子系統(tǒng)參數(shù);
●為子系統(tǒng)創(chuàng)建在線使用文檔說明。
(4)單擊Apply(應(yīng)用)按鈕,或者單擊OK(確定)按鈕并退出封裝編輯器。
如果想取消封裝,單擊圖8-15所示封裝編輯器窗口中的Unmask按鈕即可。下面通過封裝一個離散PID控制器子系統(tǒng)的實例來說明封裝編輯器的基本用法。
【例】封裝子系統(tǒng)。
創(chuàng)建一個模型,其中包含名為Subsystem的子系統(tǒng),如圖8-16、圖8-17所示。圖8-16系統(tǒng)模塊連接
圖8-17子系統(tǒng)模塊連接打開封裝編輯器,將比例器、離散時間積分器、離散微分器的增益分別設(shè)為Kp、Ki、Kd,如圖8-18所示。
打開封裝編輯器,在Icon標(biāo)簽頁的Drawingcommands文本命令區(qū)輸入命令disp('PID'),則子系統(tǒng)的圖標(biāo)變成居中顯示的文字“PID”,如圖8-19所示。圖8-18模塊參數(shù)設(shè)置圖8-19更改圖標(biāo)在Parameters標(biāo)簽頁下設(shè)置參數(shù)Kp、Ki、Kd,它們在參數(shù)對話框中的名稱分別為Proportion、Integral、Derivative,如圖8-20所示。
在Initialization標(biāo)簽頁的Initializationcommands文本命令區(qū)輸入仿真運行參數(shù)初始化代碼,如圖8-21所示。每行命令后無分號,運行時MATLAB命令窗中會顯示這些命令的運行結(jié)果。圖8-20設(shè)置參數(shù)名稱圖8-21設(shè)置仿真運行參數(shù)初始值在Documentation標(biāo)簽頁的Masktype、Maskdescription、Maskhelp等文本區(qū)分別輸入模塊的封裝類型信息、描述信息和幫助信息,如圖8-22所示。
運行后的仿真結(jié)果如圖8-23所示。圖8-22設(shè)置模塊封裝類型信息、描述信息和幫助信息圖8-23系統(tǒng)仿真波形結(jié)果8.3.3自定義模塊庫
Simulink允許用戶創(chuàng)建自己的模塊庫,并將封裝好的子系統(tǒng)模塊放入其中。創(chuàng)建一個模塊庫時,首先要通過File菜單新建一個模塊庫文件,接下來將顯示一個標(biāo)題為Library:untitled的窗口。如果已經(jīng)存在名為untitled的窗口,則創(chuàng)建的文件名后按順序附加數(shù)字。模塊庫名不得與模型文件重名。
當(dāng)創(chuàng)建好一個庫文件時,可以將模型或其他模塊庫中的模塊拖動到新建的庫文件中。這個自定義模塊庫中包含了所有經(jīng)常用到的模塊或子系統(tǒng),將這個模塊庫保存后,如果需要新建一個系統(tǒng)模型,不需要打開Simulink模塊庫瀏覽器,而只需要打開自定義模塊庫,直接從自定義的模塊庫中選擇模塊并拖到模型編輯器中就可以實現(xiàn)模型的創(chuàng)建。8.4.1仿真的運行控制
通過使用Simulink仿真界面主菜單、工具欄可以方便地實現(xiàn)仿真的啟動、停止和暫停,這在8.1.4小節(jié)中已經(jīng)作過簡要的介紹。本小節(jié)主要介紹使用模塊實現(xiàn)仿真運行控制的方法。8.4仿真運行與分析
1.使用仿真停止模塊
使用StopSimulation模塊可以實現(xiàn)有條件的仿真停止。當(dāng)該模塊的輸入不為零時,仿真將會終止。使用該模塊的步驟如下:
(1)從Sinks模型庫中選中StopSimulation模塊并添加到當(dāng)前模型內(nèi)。
(2)將控制信號接入該模塊的輸入端,當(dāng)信號非零時,仿真停止。如果輸入為向量,只要有一個元素不為零,仿真都會停止。圖8-24使用StopSimulation模塊
2.使用仿真暫停模塊
使用Assertion模塊可以可以實現(xiàn)有條件的仿真暫停。當(dāng)該模塊的輸入為零時,仿真將會暫停。使用該模塊的步驟如下:
(1)從ModelVerification模型庫中選中Assertion模塊并添加到當(dāng)前模型內(nèi)。
(2)將控制信號接入該模塊的輸入端,當(dāng)信號為零時,仿真暫停。
(3)打開Assertion模塊參數(shù)對話框,在Simulationcallbackwhenassertionfails項下輸入如下命令:
set_param(bdroot,‘SimulationCommand’,‘pause’),
disp(sprintf(‘\nSimulationpaused.’))圖8-25使用Assertion模塊不選中Stopsimulationwhenassertionfails選項。
(4)單擊OK完成設(shè)置。
例如,Assertion模塊的使用如圖8-25所示,模型設(shè)置如上。當(dāng)運行時間等于5時,仿真將會暫停,并且MATLAB命令窗會顯示如下信息:
Simulationpaused.
Warning:Assertiondetectedin‘stop/Assertion’attime5.000000.
仿真暫停之后,從模型編輯器主菜單的Simulation菜單中選擇Continue或在工具欄上按下Continue按鈕可以繼續(xù)完成仿真。圖8-25使用Assertion模塊8.4.2仿真數(shù)據(jù)的輸入和輸出
Simulink允許用戶由MATLAB工作區(qū)間輸入信號和初始狀態(tài),并且可以在仿真期間將信號和狀態(tài)數(shù)據(jù)輸出到MATLAB工作區(qū)間。本小節(jié)將通過實例介紹Simulink仿真數(shù)據(jù)和狀態(tài)的輸入和輸出方法。
1.?dāng)?shù)據(jù)輸入
以數(shù)組數(shù)據(jù)形式輸入的方法是最常用的數(shù)據(jù)輸入方法,其中的數(shù)據(jù)必須是double類型的實數(shù)矩陣。矩陣的第一列是按升序排列的時間向量,其余的列為對應(yīng)時間向量的輸入值向量。這些輸入值向量分別代表按數(shù)字順序排列的In1模塊的輸入值,而矩陣的行則代表某個時刻的輸入值。
如果n為總的輸入端數(shù)目,則矩陣的列數(shù)等于n+1。
默認(rèn)的輸入表達(dá)式為[t,u],默認(rèn)的輸入形式為數(shù)組??梢栽O(shè)置輸入模塊的維數(shù),使輸入數(shù)據(jù)為數(shù)組。下面通過一個具體例子來說明。
【例】數(shù)組的輸入。
在命令窗輸入:
>>t=(0:0.01:10)‘;
>>u=[sin(t),cos(3*t),cos(5*t)];
創(chuàng)建一個模型文件,系統(tǒng)框圖如圖8-26所示。圖8-26系統(tǒng)模塊連接將In1模塊參數(shù)設(shè)置對話框中SignalSpecification標(biāo)簽頁的Portdimensions項設(shè)置為2,如圖8-27所示。
在參數(shù)設(shè)置對話框中選擇DataImport/Export,選中Input,具體設(shè)置如圖8-28所示。
運行仿真,結(jié)果如圖8-29所示。
除過數(shù)組輸入之外,還有時間序列輸入、時間表達(dá)式輸入、結(jié)構(gòu)輸入等數(shù)據(jù)輸入方法。具體用法可以參考Help文件。圖8-27In1模塊參數(shù)設(shè)置圖8-28DataImport/Export參數(shù)設(shè)置圖8-29系統(tǒng)仿真波形結(jié)果
2.?dāng)?shù)據(jù)輸出
Simulink允許用戶將模型狀態(tài)和數(shù)據(jù)輸出到MATLAB工作區(qū)間。首先要在參數(shù)設(shè)置對話框的DataImport/Export頁面的Savetoworkspace選項區(qū)中選擇需要輸出的類型以及保存到工作區(qū)間的變量名稱,然后可在Saveoptions選項區(qū)指定輸出數(shù)據(jù)的保存格式和數(shù)量,數(shù)據(jù)格式可以是數(shù)組、結(jié)構(gòu)或包含時間字段的結(jié)構(gòu)。
輸出的數(shù)組數(shù)據(jù)默認(rèn)以tout表示時間、以xout表示狀態(tài)、以yout表示輸出。下面通過一個例子來說明輸出數(shù)據(jù)的方法。
【例】輸出數(shù)組。
創(chuàng)建一個模型文件,系統(tǒng)框圖如圖8-30所示。
Out1模塊采用默認(rèn)設(shè)置,打開其參數(shù)對話框,選擇DataImport/Export項,不選中Input,選中Output,如圖8-31所示。
運行仿真,結(jié)果如圖8-32所示。圖8-30系統(tǒng)模塊連接圖8-31DataImport/Export參數(shù)設(shè)置圖8-32系統(tǒng)仿真波形結(jié)果
MATLAB工作區(qū)間中會出現(xiàn)tout、yout等變量,在命令窗輸入:
>>plot(tout,yout)
運行結(jié)果如圖8-33所示。圖8-33利用輸出數(shù)據(jù)繪圖結(jié)果
3.狀態(tài)輸入和輸出
Simulink允許用戶在仿真之前輸入系統(tǒng)的初始狀態(tài)值,并且允許用戶在仿真結(jié)束后輸出系統(tǒng)的末狀態(tài)值。利用該功能可以將穩(wěn)態(tài)解保存并且以已知狀態(tài)重新啟動仿真。
要保存模型末狀態(tài)的值,首先在參數(shù)設(shè)置對話框中選擇DataImport/Export,在Savetoworkspace選項區(qū)選中Finalstates項,并在相鄰編輯框內(nèi)輸入數(shù)據(jù)保存后的名稱,然后在Saveoptions選項區(qū)指定數(shù)據(jù)的保存格式。要載入模型的初始狀態(tài)值,在參數(shù)設(shè)置對話框中選擇DataImport/Export,在Loadfromworkspace選項區(qū)選中Initialstate項,并指定相應(yīng)的變量名稱。例如一個變量包含了前一個仿真保留下來的狀態(tài)值,使用工作區(qū)間變量作為當(dāng)前仿真的狀態(tài)初值,將覆蓋模型中各模塊設(shè)置過的仿真初值。
如果需要完成如下功能,則可以使用結(jié)構(gòu)或包含時間字段的結(jié)構(gòu)來指定初始狀態(tài)值:
●將初始狀態(tài)值直接與狀態(tài)的完全路徑名相關(guān)聯(lián),這樣可以避免可能發(fā)生于模型狀態(tài)重新排序而初始狀態(tài)數(shù)組卻未重新排序的錯誤。
●賦給初始狀態(tài)不同數(shù)據(jù)類型的值。
●給狀態(tài)的一個子集賦初始值。8.4.3錯誤診斷
如果仿真期間發(fā)生了錯誤,打開導(dǎo)致錯誤的子系統(tǒng),在仿真診斷閱覽器中會顯示出錯誤信息。本小節(jié)將介紹如何使用該閱讀器檢查錯誤,以及如何創(chuàng)建自定義錯誤信息。
1.仿真診斷閱覽器
仿真診斷閱覽器由錯誤摘要頁面和錯誤信息頁面構(gòu)成,如圖8-34所示。圖8-34仿真診斷閱覽器錯誤摘要頁面位于仿真診斷閱覽器的上半部分,其上列出了導(dǎo)致Simulink仿真終止的錯誤。該頁面將顯示每個錯誤的信息:
●?Message:信息類型(如模塊錯誤、警告、日志)。
●?Source:導(dǎo)致錯誤發(fā)生的模型元素名稱(如一個模塊)。
●?Reportedby:報告錯誤的組件(如Simulink、Stateflow、Real-TimeWorkshop等)。
●?Summary:錯誤信息。
通過View菜單可以選擇顯示或不顯示其中的某列信息。
錯誤信息頁面位于仿真診斷閱覽器的下半部分,其上顯示的是對應(yīng)錯誤摘要條目的錯誤摘要,單擊錯誤摘要頁面上的其他錯誤條目可以瀏覽每個錯誤的摘要。
如果錯誤存在于子系統(tǒng)中,Simulink將打開存在第一個出錯源的子系統(tǒng)并突出顯示該錯誤源。
點擊以藍(lán)色突出顯示的錯誤信息超鏈接或者單擊Open按鈕將定位到出錯源。
2.創(chuàng)建自定義錯誤信息
在回調(diào)S-函數(shù)或MATLABFcn模塊中使用MATLAB的error函數(shù)可以創(chuàng)建自定義錯誤信息,其方法有以下幾種:
●顯示文本字符串;
●包含對象的超鏈接;
●鏈接到HTML文件。如果要在出錯時顯示文本字符串,則將字符串用引號包括起來,作為error函數(shù)的輸入?yún)⒘?。下面通過一個具體的例子來說明。
【例】出錯時顯示字符串Signaliszero。
創(chuàng)建一個模型文件,模塊連接如圖8-35所示。
設(shè)置MATLABFcn模塊參數(shù),如圖8-36所示。圖8-35系統(tǒng)模塊連接圖8-36MATLABFcn模塊參數(shù)設(shè)置新建一個名為check_zero.m的函數(shù)文件,輸入如下代碼:
functiony=check_zero(x)
ifx==0
error(‘Signaliszero’);
else
y=x;
end
運行仿真,彈出錯誤信息,如圖8-37所示。圖8-37錯誤信息8.4.4改善仿真性能和精度
仿真的性能和精度是包括模型的設(shè)計和參數(shù)的設(shè)置等許多因素共同決定的結(jié)果。改變求解器的默認(rèn)參數(shù)設(shè)置可以得到理想的結(jié)果。如果將模型的動力學(xué)行為信息提供給求解器,那么可以得到更理想的仿真結(jié)果。
1.提高仿真速度
仿真速度緩慢可能由多種因素引起,下面給出了其中的一部分因素:
●模型中存在MATLABFcn模塊。當(dāng)模型中存在MATLABFcn模塊時,每個時間步長都將調(diào)用MATLAB解釋器,因而使仿真速度變慢。如果可能的話,建議盡量使用內(nèi)建函數(shù)模塊或數(shù)學(xué)函數(shù)模塊?!衲P椭写嬖贛文件或S-函數(shù)。M文件、S-函數(shù)同樣在每個時間步長處調(diào)用MATLAB解釋器??梢钥紤]將S-函數(shù)轉(zhuǎn)化為子系統(tǒng)或C-MEX文件S-函數(shù)。
●模型中存在存儲器模塊。使用存儲器模塊將導(dǎo)致變階求解器(ode15s和ode113)在每個時間步長處復(fù)位為1階。
●最大步長設(shè)置得太小。如果改變了最大步長,嘗試使用默認(rèn)最大步長設(shè)置(auto)運行仿真?!窬纫筮^高。通常默認(rèn)相對允許誤差(0.1%)已經(jīng)足夠了。對于存在狀態(tài)可變化到零的模型,如果絕對允許誤差太小,仿真則會在零狀態(tài)附近耗費大量的步進(jìn)。
●時間標(biāo)度過長,可減小時間間隔。
●使用非剛性求解器求解可能為剛性的問題,可嘗試使用ode15s。
●模型使用的各采樣時間之間不存在倍數(shù)關(guān)系?;旌喜蓸訒r間將導(dǎo)致求解器使用足夠小的步長以保證采樣時間滿足模型中所有的采樣時間。
●模型中存在代數(shù)環(huán)。代數(shù)環(huán)是通過在每個時間步長處迭代計算得出解,因此會嚴(yán)重地降低仿真性能。
●模型中存在隨機(jī)數(shù)模塊饋入積分模塊,對于連續(xù)系統(tǒng),建議使用Sources模塊庫中的Band-LimitedWhiteNoise模塊。
2.提高仿真精度
為選擇仿真精度,應(yīng)該以合理的時間間隔運行仿真。將相對允許誤差減小到1e-4或者減小絕對允許誤差,再次運行仿真,然后比較兩次仿真的結(jié)果,如果兩次的結(jié)果沒有太大的差異,則可以確認(rèn)解是收斂的。
如果仿真在啟動時就丟失了關(guān)鍵行為,應(yīng)減小初始步長以確保仿真沒有跳過關(guān)鍵行為。
如果仿真結(jié)果隨著時間變化到不穩(wěn)定狀態(tài),則
●系統(tǒng)可能是不穩(wěn)定的?!袢绻褂玫氖莖de15s求解器,可能需要限制最大階數(shù)為2或者嘗試使用ode23s求解器。
如果仿真結(jié)果不能滿足精度要求,則
●對于一個狀態(tài)值接近零的模型,如果絕對允許誤差參數(shù)太大,仿真則會在狀態(tài)值接近零的區(qū)域使用過少的步進(jìn)。因此要減小該參數(shù)值,或者在Integrator對話框中將其調(diào)整為獨立狀態(tài)。●如果減小絕對允許誤差不能完全改善精度,則應(yīng)減小相對允許誤差以減少可以接受的錯誤并實現(xiàn)更小的步長和更多的步進(jìn)。
特定建模結(jié)構(gòu)也可以產(chǎn)生不能滿足精度要求的仿真結(jié)果:
●一個Source模塊繼承自身的采樣時間可能產(chǎn)生不同的仿真結(jié)果。
●代數(shù)環(huán)中的一個Derivative模塊可能導(dǎo)致求解器失去精度。8.4.5使用命令運行仿真
在MATLAB命令窗或M文件中輸入一個仿真命令,可以實現(xiàn)仿真模型的自動運行。通過隨機(jī)改變參數(shù)和循環(huán)運行仿真還可以實現(xiàn)MonteCarlo分析。使用sim命令或set_param命令可以有計劃地進(jìn)行仿真。
1.使用sim命令
sim命令用于控制仿真的運行,其調(diào)用格式如下:
[t,x,y]=sim(model,timespan,options,ut);
模型的參數(shù)不能通過該命令設(shè)置,而要通過參數(shù)對話框來實現(xiàn)。參數(shù)options是一個提供附加參數(shù)設(shè)置的結(jié)構(gòu),包含求解器名稱和允許誤差。使用simset命令可以定義options結(jié)構(gòu)中的參數(shù)。
2.使用set_param命令
使用set_param命令可以實現(xiàn)仿真的啟動、停止、暫停、繼續(xù)、模塊圖更新或者將所有記錄變量寫入基本工作區(qū)間,其調(diào)用格式如下:
?set_param(‘sys’,‘SimulationCommand’,‘cmd’)
其中,'sys'為系統(tǒng)名稱,'cmd'可以為'start'、'stop'、'pause'、'continue'、'update'、'WriteDataLogs'。
類似地,可以使用get_param命令檢測仿真狀態(tài),其調(diào)用格式如下:
?get_param(‘sys’,‘SimulationStatus’)
Simulink將返回‘stopped’、‘initializing’、‘running’、‘paused’、‘updating’、‘terminating’、‘external’等信息。
S-函數(shù)中可以使用set_param命令來控制仿真的執(zhí)行。一個CMEXS-函數(shù)可以使用mexCallMatlab宏來調(diào)用set_param命令。8.4.6觀察輸出軌跡
Simulink的輸出軌跡可以通過以下幾種方法繪制:
●將信號接到Scope模塊或XYGraph模塊的輸入端。
●將輸出寫入返回變量并使用MATLAB繪圖命令。
●使用ToWorkspace模塊將輸出寫入工作區(qū)間,使用繪圖命令繪制結(jié)果。
1.使用Scope模塊
使用Scope示波器模塊可以直接顯示仿真輸出的波形。Scope模塊不但可以顯示輸出軌跡,還可以放大或縮小波形圖。用戶也可以利用Scope模塊將輸出數(shù)據(jù)保存到MATLAB工作區(qū)間。
利用XYGraph模塊可以實現(xiàn)相圖軌跡的顯示。
這些模塊的應(yīng)用實例在前面已經(jīng)作過介紹,此處不再重復(fù)。
2.使用返回變量
使用返回變量可以保存輸出數(shù)據(jù),還可以使用MATLAB繪圖命令以各種形式顯示輸出軌跡。從Ports&Subsystems模塊庫中選擇Out1模塊添加到當(dāng)前模型并打開參數(shù)設(shè)置對話框進(jìn)行設(shè)置,具體操作參見8.4.2小節(jié)。
3.使用ToWorkspace模塊
利用ToWorkspace模塊可以將輸出軌跡返回到MATLAB工作區(qū)間,下面通過一個實例來說明。
【例】使用ToWorkspace模塊觀察輸出。
創(chuàng)建一個模型文件,系統(tǒng)連接框圖如圖8-38所示。圖8-38系統(tǒng)模塊連接打開ToWorkspace模塊的參數(shù)設(shè)置對話框,按圖8-39所示設(shè)置參數(shù)。
運行仿真,MATLAB工作區(qū)間中則會增加t和y兩個變量,在命令窗輸入:
?>>plot(t,y)
運行結(jié)果如圖8-40所示。圖8-39ToWorkspace模塊參數(shù)設(shè)置對話框圖8-40利用輸出數(shù)據(jù)繪圖8.4.7線性化模型
Simulink提供了linmod、linmod2以及dlinmod等函數(shù),用于提取以狀態(tài)空間矩陣A、B、C、D表示的線性系統(tǒng)的模型。狀態(tài)空間矩陣描述系統(tǒng)輸入輸出關(guān)系如下:
x、u、y分別為狀態(tài)向量、輸入向量、輸出向量。
【例】
使用linmod命令獲取線性模型。
創(chuàng)建一個名為state_space.mdl的模型文件,系統(tǒng)連接框圖如圖8-41所示。圖8-41系統(tǒng)模塊連接在命令窗輸入:
>>[A,B,C,D]=linmod(‘state_space’)
運行結(jié)果:
A=
-101
1-1-1
010
B=
0
1
0C=
100
001
D=
1
0
當(dāng)模型為非線性系統(tǒng)時,需要選擇一個運行點來提取線性化的模型,即在linmod函數(shù)的輸入?yún)⒘恐屑尤脒\行點:
?[A,B,C,D]=linmod(‘sys’,x,u)
對于離散系統(tǒng)或連續(xù)離散混合型系統(tǒng),可以使用dlinmod函數(shù)實現(xiàn)線性化。dlinmod函數(shù)的調(diào)用格式與linmod函數(shù)的調(diào)用格式類似,不同的是第二個輸入?yún)⒘勘仨毎蓸訒r間。8.4.8尋找穩(wěn)態(tài)工作點
利用Simulink的trim函數(shù)可以在指定輸入、輸出和狀態(tài)條件的前提下尋找動力學(xué)系統(tǒng)的穩(wěn)態(tài)工作點。本小節(jié)將通過一個實例來說明穩(wěn)態(tài)工作點的尋找方法。
【例】尋找穩(wěn)態(tài)工作點。
創(chuàng)建一個名為steady_state.mdl的模型文件,系統(tǒng)連接框圖如圖8-42所示。圖8-42系統(tǒng)模塊連接使用trim函數(shù)尋找使輸出均為1的輸入和狀態(tài)。首先對狀態(tài)變量x和輸入量u進(jìn)行猜測,然后設(shè)置輸出量y的值:
>>x=[0;0;0];
>>u=0;
>>y=[1;1];
使用索引變量表示哪些變量(iy)需要固定,哪些變量(ix、iu)不需要固定:
ix=[];
iu=[];
iy=[1;2];調(diào)用trim函數(shù)求解,在命令窗輸入:
>>[x,u,y,dx]=trim(‘steady_state’,x,u,y,ix,iu,iy)
運行結(jié)果:
x=
0.0000
1.0000
1.0000
u=
2.0000
y=
1.0000
1.0000
dx=
1.0e-015*
0.3331
0.1586
-0.3331
需要注意的是,有些問題可能不存在穩(wěn)態(tài)工作點,如果出現(xiàn)這種情況,trim函數(shù)將在初次設(shè)置導(dǎo)數(shù)為零之后,從需要的解中返回最小的最大偏差解。8.5.1S-函數(shù)的概念
S-函數(shù)是Simulink模塊的計算機(jī)描述語言。S-函數(shù)可以通過MATLAB、C、C++、Ada或Fortran語言來編寫。C、C++、Ada以及Fortran語言編寫的S-函數(shù)將通過mex應(yīng)用程序編譯成為MEX文件,就像其他MEX文件一樣,在需要時會動態(tài)鏈接到MATLAB。
S-函數(shù)使用一種特定的調(diào)用格式與Simulink方程求解器相互作用。這種交互作用與求解器和內(nèi)建Simulink模塊之間的交互作用非常類似。S-函數(shù)的形式非常通用,而且S-函數(shù)適用于連續(xù)、離散以及混合系統(tǒng)。8.5S-函數(shù)的設(shè)計與應(yīng)用使用S-函數(shù)可以將用戶自定義模塊加入到Simulink模型之中。用戶可以通過MATLAB、C、C++、Fortran或Ada語言來創(chuàng)建自定義模塊。只要遵循一系列的規(guī)則,就可以通過S-函數(shù)實現(xiàn)自定義的算法。編寫完一個S-函數(shù)并將它的名稱放入S-函數(shù)模塊(User-DefinedFunctions模塊庫中)之后,可以通過封裝模塊實現(xiàn)自定義用戶界面。
Real-TimeWorkshop可與S-函數(shù)結(jié)合使用。此外還可以通過編寫一個TargetLanguageCompiler(TLC)文件自定義由Real-TimeWorkshop生成的S-函數(shù)代碼。8.5.2S-函數(shù)的使用
要想添加一個S-函數(shù)模塊,首先要從User-DefinedFunctions模塊庫中選取S-Function模塊并將其拖動到當(dāng)前模型窗口內(nèi),然后再在S-Function模塊對話框的S-functionname字段指定S-函數(shù)文件名,如圖8-43所示。圖8-43S-Function模塊及其參數(shù)設(shè)置對話框
S-Function模塊對話框的S-functionparameters字段用于指定傳遞到相應(yīng)的S-函數(shù)的參數(shù)值。要填寫這個字段,首先要知道S-函數(shù)中所需的參數(shù)以及這些參數(shù)在S-函數(shù)中的排列順序,然后再按照這個順序填寫這些參數(shù),并用逗號隔開。參數(shù)可以是常數(shù)、MATLAB工作區(qū)間變量或者M(jìn)ATLAB表達(dá)式。
S-函數(shù)一般用于創(chuàng)建自定義Simulink模塊。S-函數(shù)還有以下多種應(yīng)用場合:
●為Simulink添加一個新的通用模塊。●添加代表硬件設(shè)備驅(qū)動的模塊。
●將已有的C代碼并入仿真當(dāng)中。
●以一系列數(shù)學(xué)方程來描述系統(tǒng)。
●使用圖形動畫。
S-函數(shù)的優(yōu)點是可以幫助用戶創(chuàng)建一個通用模塊,以便在模型中多次使用,甚至不斷地改變模塊的參數(shù)值。8.5.3S-函數(shù)的工作方式
創(chuàng)建一個S-函數(shù),首先需要理解S-函數(shù)的工作方式。而理解S-函數(shù)的工作方式,就需要理解Simulink如何仿真一個模型,以及理解模塊之間的數(shù)學(xué)關(guān)系。
1.模塊之間的數(shù)學(xué)關(guān)系
一個Simulink模塊由一系列的輸入、狀態(tài)和輸出組成,如圖8-44所示,輸出是采樣時間、輸入和模塊狀態(tài)的函數(shù)。圖8-44Simulink模塊數(shù)學(xué)關(guān)系模塊輸入、狀態(tài)和輸出之間的數(shù)學(xué)關(guān)系如下:
2.仿真進(jìn)程
仿真的執(zhí)行是按照階段進(jìn)行的。首先是初始化階段,Simulink將模塊庫并入模型,傳遞寬度、數(shù)據(jù)類型以及采樣時間,估計模塊參數(shù),確定模塊的執(zhí)行順序,以及分配存儲空間。接下來,Simulink進(jìn)入一個仿真循環(huán),每次循環(huán)為一個仿真步。每個仿真步期間,Simulink按照初始化時確定的順序執(zhí)行模型的每個模塊。對于每個模塊,Simulink調(diào)用計算模塊當(dāng)前采樣時刻的狀態(tài)、導(dǎo)數(shù)以及輸出的函數(shù),直到仿真結(jié)束。
Simulink的仿真流程如圖8-45所示。圖8-45Simulink仿真流程
3.S-函數(shù)回調(diào)方法
一個S-函數(shù)由一系列在每個仿真階段執(zhí)行任務(wù)需求的S-函數(shù)回調(diào)方法組成。仿真一個模型時,在每一個仿真階段,Simulink調(diào)用適當(dāng)?shù)姆椒ㄌ幚砟P椭械拿恳粋€S-函數(shù)模塊。S-函數(shù)方法的執(zhí)行任務(wù)包括:
●初始化:第一次仿真循環(huán)前執(zhí)行,初始化S-函數(shù),該階段Simulink將執(zhí)行以下操作:
■初始化SimStract(一個包含S-函數(shù)信息的仿真結(jié)構(gòu))?!鲈O(shè)置輸入端和輸出端的數(shù)目和維數(shù)。
■設(shè)置模塊采樣時間。
■分配存儲空間和sizes數(shù)組。
●計算下一個時間點:如果創(chuàng)建了一個可變采樣時間模塊,該階段將計算下一個采樣點的時間,即計算下一個步長。
●計算主要時間步的輸出:該調(diào)用完成后,所有模塊輸出端在當(dāng)前時間步有效。
●更新主要時間步的離散狀態(tài):該調(diào)用中所有模塊應(yīng)當(dāng)在每一個時間步執(zhí)行一次,如在仿真循環(huán)內(nèi)更新下一個時刻的離散狀態(tài)?!穹e分:用于包含連續(xù)狀態(tài)以及非采樣過零的模型。如果S-函數(shù)中包含連續(xù)狀態(tài),Simulink將以次要時間步調(diào)用S-函數(shù)的輸出和導(dǎo)數(shù)部分。這就是Simulink能夠計算S-函數(shù)狀態(tài)的原因。如果S-函數(shù)(只有CMEX)包含非采樣過零,Simulink將以次要時間步調(diào)用S-函數(shù)的輸出和過零部分,以實現(xiàn)過零定位。8.5.4編寫S-函數(shù)
S-函數(shù)可以通過多種格式的文件來實現(xiàn),如M文件和MEX文件。本小節(jié)將介紹如何使用MATLAB語言編寫M文件S-函數(shù)。
1.Level-1M文件S-函數(shù)
一個Level-1M文件S-函數(shù)由如下形式的MATLAB函數(shù)組成:
[sys,x0,str,ts]=f(t,x,u,flag,p1,p2,…)
其中,f為S-函數(shù)名,t為當(dāng)前時間,x為相應(yīng)S-函數(shù)模塊的狀態(tài)向量,u為模塊的輸入,flag表示將要執(zhí)行的任務(wù),p1,p2,…為模塊的參數(shù)。在模型的仿真期間,Simulink將重復(fù)調(diào)用f,使用flag來表示特定調(diào)用中將要執(zhí)行的任務(wù)。每當(dāng)S-函數(shù)執(zhí)行任務(wù)時,將返回一個結(jié)構(gòu)。
在MATLAB根目錄下的toolbox\simulink\blocks文件夾中有一個M文件S函數(shù)模板文件sfuntmpl.m。該模板由一個最高級主函數(shù)和一系列稱作S-函數(shù)回調(diào)方法的框架函數(shù)構(gòu)成,每個子函數(shù)對應(yīng)一個flag值。在仿真期間最高級主函數(shù)調(diào)用由flag指示的子函數(shù),由子函數(shù)執(zhí)行S-函數(shù)的實際任務(wù)。模板文件sfuntmpl.m的內(nèi)容如下(為簡潔起見,刪除了注釋和空行):function[sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
switchflag,
case0,
[sys,x0,str,ts]=mdlInitializeSizes;
case1,
sys=mdlDerivatives(t,x,u);
case2,
sys=mdlUpdate(t,x,u);
case3,
sys=mdlOutputs(t,x,u);
case4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case9,
sys=mdlTerminate(t,x,u);
otherwise
error(['Unhandledflag=',num2str(flag)]);
end
function[sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;sizes.NumContStates ?=0;
sizes.NumDiscStates ?=0;
sizes.NumOutputs ?=0;
sizes.NumInputs ?=0;
sizes.DirFeedthrough ?=1;
sizes.NumSampleTimes=1;
sys=simsizes(sizes);
x0=[];
str=[];
ts=[00];functionsys=mdlDerivatives(t,x,u)
sys=[];
functionsys=mdlUpdate(t,x,u)
sys=[];
functionsys=mdlOutputs(t,x,u)
sys=[];
functionsys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime=1;
sys=t+sampleTime;
functionsys=mdlTerminate(t,x,u)
sys=[];
表8-16列出了flag的可能取值及其對應(yīng)于模板中的方法。表8-16flag的取值及對應(yīng)方法
S-函數(shù)的輸出向量為sys、x0、str和ts,它們的含義如下:
●?sys:通用返回變量,返回值取決于flag的值。
●?x0:初始狀態(tài)值,除flag=0外x0將被忽略。
●?str:保存值,以便將來應(yīng)用。M文件S-函數(shù)必須令其為空矩陣[]。
●?ts:包含模塊采樣時間和偏移的二列矩陣。如果希望S-函數(shù)每個時間步運行一次,設(shè)為[00];如果希望S-函數(shù)繼承其他模塊的采樣時間,設(shè)為[-10];如果希望S-函數(shù)每0.2秒運行一次并且在仿真啟動后0.1秒開始運行,設(shè)為[0.20.1];如果希望S-函數(shù)以[00.10.250.50.7511.1…]時間序列運行,設(shè)為[.250;1.0.1]。要讓Simulink認(rèn)出一個M文件S-函數(shù),必須提供S-函數(shù)的指定信息,包括輸入數(shù)、輸出數(shù)、狀態(tài)數(shù)以及模塊的其他特性。
如果要給Simulink提供這些信息,則需在mdlInitializeSizes的開頭調(diào)用simsizes函數(shù):
sizes=simsizes;
該函數(shù)返回一個未初始化的sizes結(jié)構(gòu),其各字段描述如表8-17所示。表8-17sizes結(jié)構(gòu)各字段描述首先對結(jié)構(gòu)的每個字段進(jìn)行初始化,然后再調(diào)用simsizes函數(shù):
?sys=simsizes(sizes);
該命令將sizes結(jié)構(gòu)的信息傳遞給向量sys。
將Level-1S-函數(shù)各flag代碼映射到Leve
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版:供應(yīng)鏈管理服務(wù)合同
- 2024年特種門采購合同范本3篇
- 2024年某企業(yè)關(guān)于知識產(chǎn)權(quán)許可的合同
- 馬鞍山職業(yè)技術(shù)學(xué)院《安裝工程計量計價實訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年文化產(chǎn)業(yè)融資借款合同范本大全6篇
- 2025年貨運從業(yè)資格證模擬試題題庫及答案解析
- 2025年貨運從業(yè)資格證考試題目和答案
- 2025年昆明考貨運從業(yè)資格證考試題目
- 2024事業(yè)單位聘用合同教師(附教育質(zhì)量監(jiān)控與管理)3篇
- 2025建筑工程民工勞動合同范文
- GSP對藥品經(jīng)營企業(yè)計算機(jī)系統(tǒng)的要求
- 課堂-可以這么有聲有色
- 京瓷哲學(xué)培訓(xùn)課件
- 天貓電子商務(wù)案例分析
- 2022年1201廣東選調(diào)生考試《綜合行政能力測驗》真題
- 有機(jī)肥料采購項目售后服務(wù)方案
- 綜合實踐活動(1年級下冊)第3課時 感恩卡設(shè)計與制作-課件
- 2023河南省科學(xué)院招聘144人筆試參考題庫(共500題)答案詳解版
- (完整版)小學(xué)生英語百科知識競賽題及答案
- 肥料、農(nóng)藥采購服務(wù)方案(技術(shù)方案)
- 腦卒中后吞咽障礙患者進(jìn)食護(hù)理(2023年中華護(hù)理學(xué)會團(tuán)體標(biāo)準(zhǔn))
評論
0/150
提交評論