SIMULINK仿真的運(yùn)行
構(gòu)建好一個(gè)系統(tǒng)的模型之后,接下來(lái)的事情就是運(yùn)行模型,得出仿真結(jié)果。運(yùn)行一個(gè)仿真的完整過(guò)程分成三個(gè)步驟:設(shè)置仿真參數(shù),啟動(dòng)仿真和仿真結(jié)果分析。
一、設(shè)置仿真參數(shù)和選擇解法器
設(shè)置仿真參數(shù)和選擇解法器,選擇Simulation菜單下的Parameters命令,就會(huì)彈出一個(gè)仿真參數(shù)對(duì)話框,它主要用三個(gè)頁(yè)面來(lái)管理仿真的參數(shù)。
Solver頁(yè),它允許用戶設(shè)置仿真的開(kāi)始和結(jié)束時(shí)間,選擇解法器,說(shuō)明解法器參數(shù)及選擇一些輸出選項(xiàng)。
Workspace I/O頁(yè),作用是管理模型從MATLAB工作空間的輸入和對(duì)它的輸出。
Diagnostics頁(yè),允許用戶選擇Simulink在仿真中顯示的警告信息的等級(jí)。
1、Solver頁(yè)
此頁(yè)可以進(jìn)行的設(shè)置有:選擇仿真開(kāi)始和結(jié)束的時(shí)間;選擇解法器,并設(shè)定它的參數(shù);選擇輸出項(xiàng)。
仿真時(shí)間:注意這里的時(shí)間概念與真實(shí)的時(shí)間并不一樣,只是計(jì)算機(jī)仿真中對(duì)時(shí)間的一種表示,比如10秒的仿真時(shí)間,如果采樣步長(zhǎng)定為0.1,則需要執(zhí)行100步,若把步長(zhǎng)減小,則采樣點(diǎn)數(shù)增加,那么實(shí)際的執(zhí)行時(shí)間就會(huì)增加。一般仿真開(kāi)始時(shí)間設(shè)為0,而結(jié)束時(shí)間視不同的因素而選擇??偟恼f(shuō)來(lái),執(zhí)行一次仿真要耗費(fèi)的時(shí)間依賴于很多因素,包括模型的復(fù)雜程度、解法器及其步長(zhǎng)的選擇、計(jì)算機(jī)時(shí)鐘的速度等等。
仿真步長(zhǎng)模式:用戶在Type后面的第一個(gè)下拉選項(xiàng)框中指定仿真的步長(zhǎng)選取方式,可供選擇的有Variable-step(變步長(zhǎng))和Fixed-step(固定步長(zhǎng))方式。變步長(zhǎng)模式可以在仿真的過(guò)程中改變步長(zhǎng),提供誤差控制和過(guò)零檢測(cè)。固定步長(zhǎng)模式在仿真過(guò)程中提供固定的步長(zhǎng),不提供誤差控制和過(guò)零檢測(cè)。用戶還可以在第二個(gè)下拉選項(xiàng)框中選擇對(duì)應(yīng)模式下仿真所采用的算法。
變步長(zhǎng)模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。
ode45:缺省值,四/五階龍格-庫(kù)塔法,適用于大多數(shù)連續(xù)或離散系統(tǒng),但不適用于剛性(stiff)系統(tǒng)。它是單步解法器,也就是,在計(jì)算y(tn)時(shí),它僅需要最近處理時(shí)刻的結(jié)果y(tn-1)。一般來(lái)說(shuō),面對(duì)一個(gè)仿真問(wèn)題最好是首先試試ode45。
ode23:二/三階龍格-庫(kù)塔法,它在誤差限要求不高和求解的問(wèn)題不太難的情況下,可能會(huì)比ode45更有效。也是一個(gè)單步解法器。
ode113:是一種階數(shù)可變的解法器,它在誤差容許要求嚴(yán)格的情況下通常比ode45有效。ode113是一種多步解法器,也就是在計(jì)算當(dāng)前時(shí)刻輸出時(shí),它需要以前多個(gè)時(shí)刻的解。
ode15s:是一種基于數(shù)字微分公式的解法器(NDFs)。也是一種多步解法器。適用于剛性系統(tǒng),當(dāng)用戶估計(jì)要解決的問(wèn)題是比較困難的,或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。ode23s:它是一種單步解法器,專門(mén)應(yīng)用于剛性系統(tǒng),在弱誤差允許下的效果好于ode15s。它能解決某些ode15s所不能有效解決的stiff問(wèn)題。
ode23t:是梯形規(guī)則的一種自由插值實(shí)現(xiàn)。這種解法器適用于求解適度stiff的問(wèn)題而用戶又需要一個(gè)無(wú)數(shù)字振蕩的解法器的情況。
ode23tb:是TR-BDF2的一種實(shí)現(xiàn), TR-BDF2 是具有兩個(gè)階段的隱式龍格-庫(kù)塔公式。
discrtet:當(dāng)Simulink檢查到模型沒(méi)有連續(xù)狀態(tài)時(shí)使用它。固定步長(zhǎng)模式解法器有:ode5,ode4,ode3,ode2,ode1和discrete。
ode5:缺省值,是ode45的固定步長(zhǎng)版本,適用于大多數(shù)連續(xù)或離散系統(tǒng),不適用于剛性系統(tǒng)。
ode4:四階龍格-庫(kù)塔法,具有一定的計(jì)算精度。
ode3:固定步長(zhǎng)的二/三階龍格-庫(kù)塔法。
ode2:改進(jìn)的歐拉法。
ode1:歐拉法。
discrete:是一個(gè)實(shí)現(xiàn)積分的固定步長(zhǎng)解法器,它適合于離散無(wú)連續(xù)狀態(tài)的系統(tǒng)。步長(zhǎng)參數(shù):對(duì)于變步長(zhǎng)模式,用戶可以設(shè)置最大的和推薦的初始步長(zhǎng)參數(shù),缺省情況下,步長(zhǎng)自動(dòng)地確定,它由值auto表示。
Maximum step size(最大步長(zhǎng)參數(shù)):它決定了解法器能夠使用的最大時(shí)間步長(zhǎng),它的缺省值為“仿真時(shí)間/50”,即整個(gè)仿真過(guò)程中至少取50個(gè)取樣點(diǎn),但這樣的取法對(duì)于仿真時(shí)間較長(zhǎng)的系統(tǒng)則可能帶來(lái)取樣點(diǎn)過(guò)于稀疏,而使仿真結(jié)果失真。一般建議對(duì)于仿真時(shí)間不超過(guò)15s的采用默認(rèn)值即可,對(duì)于超過(guò)15s的每秒至少保證5個(gè)采樣點(diǎn),對(duì)于超過(guò)100s的,每秒至少保證3個(gè)采樣點(diǎn)。
Initial step size(初始步長(zhǎng)參數(shù)):一般建議使用“auto”默認(rèn)值即可。
仿真精度的定義(對(duì)于變步長(zhǎng)模式)
Relative tolerance(相對(duì)誤差):它是指誤差相對(duì)于狀態(tài)的值,是一個(gè)百分比,缺省值為1e-3,表示狀態(tài)的計(jì)算值要精確到0.1%。
Absolute tolerance(絕對(duì)誤差):表示誤差值的門(mén)限,或者是說(shuō)在狀態(tài)值為零的情況下,可以接受的誤差。如果它被設(shè)成了auto,那么simulink為每一個(gè)狀態(tài)設(shè)置初始絕對(duì)誤差為1e-6。
Mode(固定步長(zhǎng)模式選擇)
Multitasking:選擇這種模式時(shí),當(dāng)simulink檢測(cè)到模塊間非法的采樣速率轉(zhuǎn)換,它會(huì)給出錯(cuò)誤提示。所謂的非法采樣速率轉(zhuǎn)換指兩個(gè)工作在不同采樣速率的模塊之間的直接連接。在實(shí)時(shí)多任務(wù)系統(tǒng)中,如果任務(wù)之間存在非法采樣速率轉(zhuǎn)換,那么就有可能出現(xiàn)一個(gè)模塊的輸出在另一個(gè)模塊需要時(shí)卻無(wú)法利用的情況。通過(guò)檢查這種轉(zhuǎn)換,Multitasking將有助于用戶建立一個(gè)符合現(xiàn)實(shí)的多任務(wù)系統(tǒng)的有效模型。
?????? 使用速率轉(zhuǎn)換模塊可以減少模型中的非法速率轉(zhuǎn)換。Simulink提供了兩個(gè)這樣的模塊:unit delay模塊和zero-order hold模塊。對(duì)于從慢速率到快速率的非法轉(zhuǎn)換,可以在慢輸出端口和快輸入端口插入一個(gè)單位延時(shí)unit delay模塊。而對(duì)于快速率到慢速率的轉(zhuǎn)換,則可以插入一個(gè)零階采樣保持器zero-order hold。
Singletasking:這種模式不檢查模塊間的速率轉(zhuǎn)換,它在建立單任務(wù)系統(tǒng)模型時(shí)非常有用,在這種系統(tǒng)就不存在任務(wù)同步問(wèn)題。
Auto:這種模式,simulink會(huì)根據(jù)模型中模塊的采樣速率是否一致,自動(dòng)決定切換到multitasking和singletasking。
輸出選項(xiàng)
Refine output:這個(gè)選項(xiàng)可以理解成精細(xì)輸出,其意義是在仿真輸出太稀松時(shí),simulink會(huì)產(chǎn)生額外的精細(xì)輸出,這一點(diǎn)就像插值處理一樣。用戶可以在refine factor設(shè)置仿真時(shí)間步間插入的輸出點(diǎn)數(shù)。
?????? 產(chǎn)生更光滑的輸出曲線,改變精細(xì)因子比減小仿真步長(zhǎng)更有效。精細(xì)輸出只能在變步長(zhǎng)模式中才能使用,并且在ode45效果最好。
Produce additional output:它允許用戶直接指定產(chǎn)生輸出的時(shí)間點(diǎn)。一旦選擇了該項(xiàng),則在它的右邊出現(xiàn)一個(gè)output times編輯框,在這里用戶指定額外的仿真輸出點(diǎn),它既可以是一個(gè)時(shí)間向量,也可以是表達(dá)式。與精細(xì)因子相比,這個(gè)選項(xiàng)會(huì)改變仿真的步長(zhǎng)。
Produce specified output only:它的意思是讓simulink只在指定的時(shí)間點(diǎn)上產(chǎn)生輸出。為此解法器要調(diào)整仿真步長(zhǎng)以使之和指定的時(shí)間點(diǎn)重合。這個(gè)選項(xiàng)在比較不同的仿真時(shí)可以確保它們?cè)谙嗤臅r(shí)間輸出。
此頁(yè)主要用來(lái)設(shè)置SIMULINK與MATLAB工作空間交換數(shù)值的有關(guān)選項(xiàng)。
Load from workspace:選中前面的復(fù)選框即可從MATLAB工作空間獲取時(shí)間和輸入變量,一般時(shí)間變量定義為t,輸入變量定義為u。 Initial state用來(lái)定義從MATLAB工作空間獲得的狀態(tài)初始值的變量名。
Save to workspace:用來(lái)設(shè)置存往MATLAB工作空間的變量類(lèi)型和變量名,選中變量類(lèi)型前的復(fù)選框使相應(yīng)的變量有效。一般存往工作空間的變量包括輸出時(shí)間向量(Time)、狀態(tài)向量(States)和輸出變量(Output)。 Final state用來(lái)定義將系統(tǒng)穩(wěn)態(tài)值存往工作空間所使用的變量名。
Save option:用來(lái)設(shè)置存往工作空間的有關(guān)選項(xiàng)。Limit rows to last用來(lái)設(shè)定SIMULINK仿真結(jié)果最終可存往MATLAB工作空間的變量的規(guī)模,對(duì)于向量而言即其維數(shù),對(duì)于矩陣而言即其秩;Decimation設(shè)定了一個(gè)亞采樣因子,它的缺省值為1,也就是對(duì)每一個(gè)仿真時(shí)間點(diǎn)產(chǎn)生值都保存,而若為2,則是每隔一個(gè)仿真時(shí)刻才保存一個(gè)值。Format用來(lái)說(shuō)明返回?cái)?shù)據(jù)的格式,包括矩陣matrix、結(jié)構(gòu)struct及帶時(shí)間的結(jié)構(gòu)struct with time。3、Diagnostics頁(yè)
此頁(yè)分成兩個(gè)部分:仿真選項(xiàng)和配置選項(xiàng)。配置選項(xiàng)下的列表框主要列舉了一些常見(jiàn)的事件類(lèi)型,以及當(dāng)SIMULINK檢查到這些事件時(shí)給予的處理。仿真選項(xiàng)options主要包括是否進(jìn)行一致性檢驗(yàn)、是否禁用過(guò)零檢測(cè)、是否禁止復(fù)用緩存、是否進(jìn)行不同版本的SIMULINK的檢驗(yàn)等幾項(xiàng)。
除了上述3個(gè)主要的頁(yè)外,仿真參數(shù)設(shè)置窗口還包括real-time workshop頁(yè),主要用于與C語(yǔ)言編輯器的交換,通過(guò)它可以直接從SIMULINK模型生成代碼并且自動(dòng)建立可以在不同環(huán)境下運(yùn)行的程序,這些環(huán)境包括實(shí)時(shí)系統(tǒng)和單機(jī)仿真。
二、啟動(dòng)仿真
設(shè)置仿真參數(shù)和選擇解法器之后,就可以啟動(dòng)仿真而運(yùn)行。
選擇Simulink菜單下的start選項(xiàng)來(lái)啟動(dòng)仿真,如果模型中有些參數(shù)沒(méi)有定義,則會(huì)出現(xiàn)錯(cuò)誤信息提示框。如果一切設(shè)置無(wú)誤,則開(kāi)始仿真運(yùn)行,結(jié)束時(shí)系統(tǒng)會(huì)發(fā)出一鳴叫聲。
除了直接在SIMULINK環(huán)境下啟動(dòng)仿真外,還可以在MATLAB命令窗口中通過(guò)函數(shù)進(jìn)行,格式如下:
???????? [t,x,y]=sim(‘模型文件名’,[to tf],simset(‘參數(shù)1’,參數(shù)值1,‘參數(shù)2’,參數(shù)值2, …))
其中to為仿真起始時(shí)間,tf為仿真終止時(shí)間。[t,x,y]為返回值,t為返回的時(shí)間向量值,x為返回的狀態(tài)值,y為返回的輸出向量值。simset定義了仿真參數(shù),包括以下一些主要參數(shù):
AbsTol:默認(rèn)值為1e-6設(shè)定絕對(duì)誤差范圍。
Decimation:默認(rèn)值為1,決定隔多少個(gè)點(diǎn)返回狀態(tài)和輸出值。
Solver:解法器的選擇。
MaxRows:默認(rèn)值為0,表示不限制。若為大于零的值,則表示限制輸?? 出和狀態(tài)的規(guī)模,使其最大行數(shù)等于該數(shù)值。
InitialState:一個(gè)向量值,用于設(shè)定初始狀態(tài)。
FixedStep:用一個(gè)正數(shù)表示步階的大小,僅用于固定步長(zhǎng)模式。
MaxStep:默認(rèn)值為auto。用于變步長(zhǎng)模式,表示最大的步階大小。
如果知道模型文件名稱,可以用以下命令得到該模型的仿真參數(shù):
simget(‘模型文件名’)
評(píng)論