simulink動(dòng)態(tài)系統(tǒng)建模仿真_第1頁(yè)
simulink動(dòng)態(tài)系統(tǒng)建模仿真_第2頁(yè)
simulink動(dòng)態(tài)系統(tǒng)建模仿真_第3頁(yè)
simulink動(dòng)態(tài)系統(tǒng)建模仿真_第4頁(yè)
simulink動(dòng)態(tài)系統(tǒng)建模仿真_第5頁(yè)
已閱讀5頁(yè),還剩259頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第7章高級(jí)仿真概念7.1過(guò)零檢測(cè)7.2處理代數(shù)循環(huán)7.3高級(jí)積分器7.4仿真診斷選項(xiàng)設(shè)置7.5仿真性能優(yōu)化設(shè)置 7.1過(guò)零檢測(cè)

7.1.1過(guò)零檢測(cè)的工作方式

狀態(tài)變量中的不連續(xù)常常表征了動(dòng)態(tài)系統(tǒng)的重要事件,例如,當(dāng)彈球撞擊地板時(shí),撞擊的位置是不連續(xù)的。由于不連續(xù)性常常表示動(dòng)態(tài)系統(tǒng)的一個(gè)重大改變,因此對(duì)不連續(xù)點(diǎn)進(jìn)行精確仿真是非常重要的,否則,仿真可能會(huì)導(dǎo)致錯(cuò)誤的結(jié)論。還以仿真小彈球?yàn)槔?,如果在兩次仿真步之間小球撞擊了地板,那么被仿真的小球在半空中就會(huì)翻轉(zhuǎn)方向,這就會(huì)使研究人員對(duì)小球的物理運(yùn)動(dòng)得出錯(cuò)誤的結(jié)論。為了避免這樣的錯(cuò)誤,對(duì)不連續(xù)點(diǎn)進(jìn)行仿真是非常重要的,當(dāng)然,完全依賴仿真算法來(lái)確定仿真時(shí)間是不能滿足這樣的要求的。以定步長(zhǎng)算法為例,定步長(zhǎng)算法在固定步長(zhǎng)的整數(shù)倍時(shí)刻計(jì)算狀態(tài)變量的值,但是,誰(shuí)也不能保證不連續(xù)點(diǎn)的出現(xiàn)時(shí)刻就在定步長(zhǎng)的整數(shù)倍時(shí)刻。用戶也可以減小步長(zhǎng)以增大撞擊到不連續(xù)點(diǎn)的可能性,但這無(wú)疑會(huì)增加仿真的執(zhí)行時(shí)間。這樣看來(lái),變步長(zhǎng)算法似乎可以解決這樣的問(wèn)題。變步長(zhǎng)算法會(huì)動(dòng)態(tài)地調(diào)整步長(zhǎng),當(dāng)狀態(tài)變量變化緩慢時(shí)增大步長(zhǎng),而當(dāng)狀態(tài)變量變化快速時(shí)減小步長(zhǎng),在不連續(xù)點(diǎn)處,變量的變化是非常迅速的。這樣,從理論上來(lái)說(shuō),變步長(zhǎng)算法應(yīng)該可以準(zhǔn)確地找到不連續(xù)點(diǎn),而存在的問(wèn)題是定位不連續(xù)點(diǎn)的精確性。為了找到不連續(xù)點(diǎn),變步長(zhǎng)算法必須采用越來(lái)越小的步長(zhǎng),這樣就大大降低了仿真的效率。雖然這會(huì)放慢仿真的速度,但這樣做對(duì)有些模塊來(lái)講是至關(guān)重要的,因?yàn)檫@些模塊的輸出可能表示了一個(gè)物理值,它的零值有著非常重要的意義,也有可能這些模塊用來(lái)控制另外的一些模塊。事實(shí)上,只有少數(shù)模塊能夠發(fā)出事件通知,而且可能與不止一個(gè)類型的事件發(fā)生關(guān)聯(lián),當(dāng)一個(gè)模塊通知說(shuō)前一個(gè)時(shí)間步上發(fā)生了過(guò)零,那么變步長(zhǎng)求解器就會(huì)縮小步長(zhǎng),即使絕對(duì)誤差和相對(duì)誤差是可以接受的,它也會(huì)告知系統(tǒng)有事件發(fā)生。這個(gè)事件的通知過(guò)程如圖7-1所示。圖7-1Simulink利用過(guò)零檢測(cè)來(lái)解決這樣的問(wèn)題。它是在系統(tǒng)和求解器之間建立一種對(duì)話工作方式,對(duì)話包含的一個(gè)內(nèi)容就是事件通知,Simulink將消息由系統(tǒng)傳送到求解器,即系統(tǒng)告知求解器在前一個(gè)時(shí)間步上發(fā)生了一個(gè)事件,一個(gè)重要的事件就是“發(fā)生了一個(gè)過(guò)零!”,事件都由過(guò)零表示。過(guò)零通常在下面兩個(gè)條件下產(chǎn)生:

(1)信號(hào)在上一個(gè)時(shí)間步改變了符號(hào),即由正變負(fù)或者由負(fù)變正,包含變?yōu)?和離開(kāi)0;

(2)模塊在上一個(gè)時(shí)間步改變了模式,例如積分器進(jìn)入了飽和區(qū)段。使用Simulink中的過(guò)零檢測(cè)后,模塊在仿真開(kāi)始時(shí)注冊(cè)一組過(guò)零變量,其中的每個(gè)變量都是可能含有不連續(xù)狀態(tài)變量的函數(shù),當(dāng)發(fā)生不連續(xù)時(shí),過(guò)零函數(shù)會(huì)從正值或負(fù)值穿越零。在每個(gè)仿真步結(jié)束時(shí),Simulink會(huì)要求每個(gè)已注冊(cè)過(guò)零變量的模塊更新變量,然后檢查在仿真時(shí)間步的結(jié)束時(shí)刻是否有變量改變了符號(hào),如果有,則表示在當(dāng)前這個(gè)時(shí)間步上系統(tǒng)出現(xiàn)了不連續(xù)點(diǎn)。

如果檢測(cè)到過(guò)零,則Simulink會(huì)對(duì)每個(gè)改變符號(hào)的變量在前一時(shí)間步和當(dāng)前時(shí)間步之間進(jìn)行插值,以估算過(guò)零的準(zhǔn)確時(shí)刻;然后,Simulink再逐漸增加時(shí)間步,并依次越過(guò)過(guò)零點(diǎn)進(jìn)行仿真。利用這種方法,Simulink避免了對(duì)不連續(xù)點(diǎn)的仿真,而在很多情況下,這些不連續(xù)點(diǎn)處的狀態(tài)變量的值可能都沒(méi)有定義。7.1.2過(guò)零檢測(cè)的實(shí)現(xiàn)方式

過(guò)零檢測(cè)可以使Simulink精確地仿真不連續(xù)點(diǎn),而不必過(guò)多地選用小步長(zhǎng)。實(shí)際上,Simulink中的許多模塊都支持過(guò)零檢測(cè),在實(shí)際建模仿真中,如果用戶對(duì)所有的系統(tǒng),包括含有不連續(xù)環(huán)節(jié)的系統(tǒng)都利用過(guò)零檢測(cè)進(jìn)行仿真,那么不僅仿真過(guò)程的速度更快,而且精度也會(huì)提高。

雖然Simulink中的許多模塊都能夠產(chǎn)生過(guò)零,但各個(gè)模塊的過(guò)零類型是有差異的。下面舉例說(shuō)明帶有過(guò)零的Simulink模塊的過(guò)零檢測(cè)方式。例如,對(duì)于Abs模塊來(lái)說(shuō),當(dāng)輸入信號(hào)改變符號(hào)時(shí)將產(chǎn)生一個(gè)過(guò)零事件;而對(duì)于Saturation(飽和)模塊來(lái)說(shuō),當(dāng)過(guò)零檢測(cè)功能檢測(cè)到Saturation模塊中的如下事件時(shí)產(chǎn)生過(guò)零:輸入信號(hào)到達(dá)上限;

輸入信號(hào)離開(kāi)上限;

輸入信號(hào)到達(dá)下限;

輸入信號(hào)離開(kāi)下限。

狀態(tài)事件的檢測(cè)依賴于模型內(nèi)部過(guò)零信號(hào)的結(jié)構(gòu),這個(gè)信號(hào)并不受方塊圖的影響。對(duì)于Saturation模塊,用來(lái)檢測(cè)上限過(guò)零的信號(hào)為zcSignal=UpperLimit-u,這里,u是輸入信號(hào),UpperLimit是信號(hào)上限。此外,過(guò)零信號(hào)還具有方向?qū)傩裕瑤в蟹较虻倪^(guò)零通常用來(lái)驅(qū)動(dòng)其他模塊。這個(gè)方向?qū)傩灾蛋ǎ?/p>

rising(上升沿R)—當(dāng)信號(hào)上升穿越零時(shí),或者信號(hào)由零值到正值時(shí),產(chǎn)生過(guò)零;

falling(下降沿F)—當(dāng)信號(hào)下降穿越零時(shí),或者信號(hào)由零值到負(fù)值時(shí),產(chǎn)生過(guò)零;

either(雙邊沿E)—當(dāng)上升沿或下降沿發(fā)生時(shí),產(chǎn)生過(guò)零。

圖7-2說(shuō)明了過(guò)零信號(hào)的方向?qū)傩?。?duì)于Saturation模塊的上限,過(guò)零的方向就是either,這樣,使用相同的過(guò)零信號(hào)就可以檢測(cè)到上升沿和下降沿飽和事件。圖7-2如果誤差容限太大,則Simulink也有可能無(wú)法檢測(cè)到過(guò)零。例如,如果過(guò)零在一個(gè)時(shí)間步內(nèi)發(fā)生,而時(shí)間步的起始時(shí)刻值和終止時(shí)刻值并沒(méi)有指示出符號(hào)變化,那么求解器有可能越過(guò)過(guò)零時(shí)刻而沒(méi)有檢測(cè)到過(guò)零。

圖7-3表示的是一個(gè)過(guò)零信號(hào),左圖中的積分器越過(guò)了過(guò)零,右圖中的求解器則檢測(cè)到了過(guò)零事件。如果用戶擔(dān)心會(huì)出現(xiàn)這樣的問(wèn)題,則可以減小誤差容限,以保證仿真算法的步長(zhǎng)足夠小。圖7-3這里,把定義模塊自身狀態(tài)事件的Simulink模塊看做具有內(nèi)在過(guò)零的模塊,如果用戶需要明確地通知過(guò)零事件,則可以使用HitCrossing模塊,這個(gè)模塊在輸入穿過(guò)零點(diǎn)時(shí)會(huì)產(chǎn)生一個(gè)過(guò)零,可以用它為不帶過(guò)零能力的模塊提供過(guò)零檢測(cè)的能力。

把仿真參數(shù)對(duì)話框DataImport/Export選項(xiàng)面板中的Outputoptions選項(xiàng)設(shè)置為Refine

output或Produceadditionaloutput對(duì)于定位錯(cuò)過(guò)的過(guò)零檢測(cè)是沒(méi)有幫助的,但這兩個(gè)選項(xiàng)有助于減少錯(cuò)過(guò)過(guò)零檢測(cè)的機(jī)會(huì)。為了避免在檢測(cè)時(shí)錯(cuò)過(guò)過(guò)零,用戶應(yīng)該改變最大步長(zhǎng)或輸出點(diǎn)的個(gè)數(shù)。7.1.3使用過(guò)零檢測(cè)

對(duì)于某些模型,模型在不連續(xù)點(diǎn)處有可能會(huì)出現(xiàn)高頻抖動(dòng)。還以彈跳小球?yàn)槔?,將小球拋向空中,然后反?fù)地撞擊地面,每一次小球撞擊地面時(shí),Simulink在小球的速度和位置上都會(huì)遇到一個(gè)不連續(xù)點(diǎn),由于這種撞擊反復(fù)地出現(xiàn)過(guò)零檢測(cè),因此Simulink的仿真步長(zhǎng)會(huì)變得越來(lái)越小。從本質(zhì)上來(lái)說(shuō),這種仿真結(jié)果也不是很完善。

在Simulink的仿真參數(shù)設(shè)置對(duì)話框中,對(duì)話框的Solver選項(xiàng)面板和Diagnostics選項(xiàng)面板都提供了對(duì)過(guò)零進(jìn)行的檢測(cè)設(shè)置,用戶可以根據(jù)需要對(duì)模型進(jìn)行相應(yīng)的設(shè)置。圖7-4是仿真參數(shù)對(duì)話框中的Diagnostics選項(xiàng)面板,其中的Consecutivezerocrossingsviolation(連續(xù)過(guò)零檢測(cè))選項(xiàng)有兩個(gè)選項(xiàng)供用戶選擇,即warning和error,當(dāng)Simulink在仿真過(guò)程中檢測(cè)到連續(xù)過(guò)零時(shí),它會(huì)根據(jù)用戶的設(shè)置在MATLAB工作區(qū)中顯示警告信息或錯(cuò)誤信息。圖7-4如果發(fā)生兩個(gè)過(guò)零事件的時(shí)間小于某個(gè)特定的間隔,那么Simulink會(huì)認(rèn)為這兩個(gè)過(guò)零是連續(xù)的。圖7-5描述的是Simulink在連續(xù)時(shí)間步t1和t2上檢測(cè)過(guò)零ZC1和ZC2之間的仿真時(shí)間線,如果dt<RelTolZC*t2,則Simulink會(huì)定義這兩個(gè)過(guò)零是連續(xù)的,其中,dt是兩個(gè)過(guò)零之間的時(shí)間,RelTolZC是Consecutivezerocrossingrelativetolerance(連續(xù)過(guò)零檢測(cè)的相對(duì)誤差)。Consecutivezerocrossingrelativetolerance參數(shù)在仿真參數(shù)對(duì)話框的Solver選項(xiàng)面板中進(jìn)行設(shè)置,如圖7-6所示。同時(shí),用戶還可以設(shè)置Numberofconsecutivezerocrossingsallowed(允許的連續(xù)過(guò)零的數(shù)目),如果Simulink檢測(cè)到的連續(xù)過(guò)零的數(shù)目超過(guò)了限制值,那么它會(huì)根據(jù)用戶在圖7-4中指定的Consecutivezerocrossingsviolation診斷選項(xiàng)來(lái)顯示警告消息或錯(cuò)誤消息。當(dāng)Simulink檢測(cè)到非連續(xù)過(guò)零時(shí),即連續(xù)過(guò)零已不再滿足上述條件時(shí),它會(huì)對(duì)過(guò)零重新進(jìn)行計(jì)數(shù)。圖7-6當(dāng)選擇變步長(zhǎng)算法仿真模型時(shí),Solveroptions選項(xiàng)區(qū)中的Zerocrossingcontrol選項(xiàng)可以控制是否啟動(dòng)過(guò)零檢測(cè),如圖7-7所示。對(duì)于大多數(shù)模型來(lái)說(shuō),當(dāng)選擇較大步長(zhǎng)仿真模型時(shí),啟動(dòng)過(guò)零檢測(cè)會(huì)加速仿真過(guò)程。但是,如果模型有極大的動(dòng)態(tài)變化,則關(guān)閉過(guò)零檢測(cè)會(huì)加速仿真過(guò)程,但會(huì)降低仿真結(jié)果的精確度。圖7-7對(duì)于模型中的某些模塊,用戶可以在模塊的參數(shù)對(duì)話框中不選擇Enablezerocrossingdetection選項(xiàng)來(lái)關(guān)閉模塊的過(guò)零檢測(cè),并設(shè)置Zerocrossingcontrol選項(xiàng)為Use

localsettings,表示只對(duì)模型進(jìn)行局部過(guò)零檢測(cè)。局部過(guò)零檢測(cè)可以減少Simulink頻繁地對(duì)模型進(jìn)行過(guò)零檢測(cè),而模型中的其他模塊同樣可以獲得使用過(guò)零檢測(cè)帶來(lái)的高精度。

表7-1列出了Simulink中具有過(guò)零的模塊,每個(gè)模塊的過(guò)零類型是不同的,有的過(guò)零只是用來(lái)通知求解器的模式是否發(fā)生了改變,另外一些過(guò)零類型則與信號(hào)有關(guān),用來(lái)驅(qū)動(dòng)其他模塊。

例7-1使用過(guò)零檢測(cè)。

圖7-8中的模型是一個(gè)帶有過(guò)零檢測(cè)功能的模型。該模型采用Function模塊和Abs模塊計(jì)算對(duì)應(yīng)輸入的絕對(duì)值,由于Function模塊不支持過(guò)零,因此有一些拐角點(diǎn)被漏掉了,而Abs模塊由于能夠產(chǎn)生過(guò)零,因此每當(dāng)它的輸入改變符號(hào)時(shí),都能夠精確地得到零點(diǎn)的結(jié)果。圖7-8這里將SineWave模塊中的Frequency(rad/sec)值設(shè)置為2,把模型中的輸出數(shù)據(jù)傳送到MATLAB工作區(qū),在工作區(qū)中利用plot(tout,yout)命令繪制輸出結(jié)果曲線,可得到如圖7-9所示的結(jié)果。從圖中可以看到,實(shí)線是Function模塊的輸出,該模塊未檢測(cè)到過(guò)零事件,因此輸出曲線在拐點(diǎn)處漏掉了一些點(diǎn),正弦波的絕對(duì)值輸出不完全正確;虛線是Abs模塊的輸出,該模塊檢測(cè)到了過(guò)零事件,在MATLAB工作區(qū)中輸入下列命令:

semilogy(tout(1:end-1),diff(tout))

該命令繪制了Abs模塊在仿真過(guò)程中采樣步長(zhǎng)的變化曲線,如圖7-10所示,從圖中可以看到,該模型采用的是常規(guī)步長(zhǎng)10-1進(jìn)行仿真,當(dāng)發(fā)生過(guò)零時(shí)步長(zhǎng)縮小至10-14。圖7-9圖7-107.1.4關(guān)閉過(guò)零檢測(cè)

如果用戶想要在Simulink中建立用來(lái)表現(xiàn)不連續(xù)點(diǎn)的高頻振蕩模型,幾乎是不可能的,實(shí)際上,這樣的系統(tǒng)在物理上也是不可能實(shí)現(xiàn)的,如無(wú)質(zhì)量的彈簧、帶有零延遲的氣壓系統(tǒng)等。因?yàn)樵谶@些系統(tǒng)中,顫振會(huì)產(chǎn)生反復(fù)的過(guò)零檢測(cè),仿真的步長(zhǎng)會(huì)變得非常小,以致于會(huì)終止仿真。因此,如果用戶不希望在模型中添加過(guò)零檢測(cè),則可以關(guān)閉過(guò)零檢測(cè)。具體做法是:在圖7-7所示的Solveroptions選項(xiàng)區(qū)中,設(shè)置Zerocrossingcontrol選項(xiàng)為Disableall,這樣就完全避免了Simulink對(duì)模型進(jìn)行頻繁的過(guò)零檢測(cè)。雖然關(guān)閉過(guò)零檢測(cè)可以減少這樣的問(wèn)題,但用戶也不會(huì)再獲得過(guò)零檢測(cè)提供的高精度。比較好的解決辦法是確定模型中可能存在問(wèn)題的原因。對(duì)用戶來(lái)說(shuō),如果創(chuàng)建的模型在一個(gè)極小的區(qū)間內(nèi)幾次都通過(guò)零點(diǎn),導(dǎo)致在同一個(gè)時(shí)間內(nèi)系統(tǒng)會(huì)幾次檢測(cè)到過(guò)零,最終終止仿真,那么對(duì)于這樣的系統(tǒng),過(guò)零檢測(cè)應(yīng)當(dāng)關(guān)閉。但如果此時(shí)有些模塊的過(guò)零非常重要,則可以使用HitCrossing模塊通知過(guò)零。當(dāng)過(guò)零檢測(cè)關(guān)閉后,系統(tǒng)的仿真速度有可能會(huì)得到很大的提高,而此時(shí)用HitCrossing模塊產(chǎn)生的過(guò)零不會(huì)受影響。

例7-2關(guān)閉過(guò)零檢測(cè)。

過(guò)零事件不僅表示信號(hào)穿過(guò)了零點(diǎn),還意味著尖峰值的產(chǎn)生和飽和。

圖7-11是一個(gè)精確檢測(cè)過(guò)零信號(hào)的模型。模型中的正弦波信號(hào)分別送到Abs絕對(duì)值模塊和Saturation飽和模塊,在t=5時(shí),Switch模塊的輸出從絕對(duì)值模塊轉(zhuǎn)換到飽和模塊,Simulink中的過(guò)零功能自動(dòng)檢測(cè)出Switch模塊改變輸出的準(zhǔn)確時(shí)間,而且求解器也會(huì)步進(jìn)到過(guò)零事件發(fā)生的時(shí)刻,這種改變可以從輸出波形中觀察到。

在這個(gè)模型中,模型的輸出根據(jù)時(shí)間的變化由輸入的絕對(duì)值跳變到輸入的飽和值,這個(gè)現(xiàn)象通過(guò)使用帶有過(guò)零支持的模塊進(jìn)行描述,在系統(tǒng)響應(yīng)中得到了理想的陡沿。如果這樣的結(jié)果對(duì)用戶來(lái)說(shuō)意義不大,則可以關(guān)閉過(guò)零。圖7-11雙擊Comtime模塊,打開(kāi)模塊的內(nèi)部結(jié)構(gòu)圖,如圖7-12所示,這是一個(gè)時(shí)鐘判斷模型,Clock模塊作為仿真時(shí)間與Constant模塊的參數(shù)值進(jìn)行比較;RelationalOperator是關(guān)系操作符模塊,用來(lái)判斷兩個(gè)輸入信號(hào)之間的關(guān)系。

分別在SimulationParameters對(duì)話框內(nèi)打開(kāi)和關(guān)閉過(guò)零檢測(cè),運(yùn)行仿真。打開(kāi)過(guò)零檢測(cè)后的模型輸出曲線如圖7-13所示,Simulink自動(dòng)檢測(cè)出過(guò)零;關(guān)閉過(guò)零檢測(cè)后模型的輸出曲線如圖7-14所示,這次得到的結(jié)果在t=5s時(shí)不是很理想,而且在達(dá)到飽和后還帶有一些拐角。圖7-11雙擊Comtime模塊,打開(kāi)模塊的內(nèi)部結(jié)構(gòu)圖,如圖7-12所示,這是一個(gè)時(shí)鐘判斷模型,Clock模塊作為仿真時(shí)間與Constant模塊的參數(shù)值進(jìn)行比較;RelationalOperator是關(guān)系操作符模塊,用來(lái)判斷兩個(gè)輸入信號(hào)之間的關(guān)系。

分別在SimulationParameters對(duì)話框內(nèi)打開(kāi)和關(guān)閉過(guò)零檢測(cè),運(yùn)行仿真。打開(kāi)過(guò)零檢測(cè)后的模型輸出曲線如圖7-13所示,Simulink自動(dòng)檢測(cè)出過(guò)零;關(guān)閉過(guò)零檢測(cè)后模型的輸出曲線如圖7-14所示,這次得到的結(jié)果在t?=?5s時(shí)不是很理想,而且在達(dá)到飽和后還帶有一些拐角。圖7-12圖7-13圖7-14 7.2處理代數(shù)循環(huán)

Simulink中的代數(shù)環(huán)與數(shù)學(xué)意義上的代數(shù)循環(huán)是一樣的,因?yàn)橛行㏒imulink模塊帶有直接饋通(directfeedthrough)的輸入端口,直接饋通定義為輸出直接依賴于輸入。換句話說(shuō),如果模塊的輸出方程中包含輸入,那么這個(gè)模塊就具備直接饋通特性,這就意味著這些模塊的輸出在未知進(jìn)入輸入端口信號(hào)值的情況下是無(wú)法計(jì)算出來(lái)的。下面列出了帶有直接饋通輸入端口的Simulink模塊:MathFunction模塊;

Gain模塊;

Integrator模塊的初始條件端口;

Product模塊;

有非零D矩陣的State-Space模塊;

Sum模塊;

分子與分母具有相同階次的TransferFcn模塊;

具有相同零點(diǎn)和極點(diǎn)數(shù)的Zero-Pole模塊。7.2.1代數(shù)約束

Simulink中的某些模塊是不具有直接饋通特性的,如Discretes模塊庫(kù)中的UnitDelay模塊。當(dāng)具有直接饋通輸入端口的模塊直接由同一模塊類型的輸出所驅(qū)動(dòng),或者由其他具有直接饋通端口的模塊反饋到其輸入端時(shí),這時(shí)就構(gòu)成了一個(gè)代數(shù)循環(huán)。在一個(gè)代數(shù)環(huán)中,由于它們之間是相互依賴的,所有的模塊都要求在同一時(shí)刻計(jì)算輸出,這與通常意義上仿真的順序概念相抵觸,因此最好能通過(guò)手工的方法對(duì)方程進(jìn)行求解。以圖7-15這個(gè)簡(jiǎn)單的標(biāo)量代數(shù)環(huán)模型為例。從數(shù)學(xué)角度來(lái)說(shuō),Sum模塊的輸出z等于輸入u減z,即z?=?u-z。為了計(jì)算求和塊的輸出,Simulink需要知道它的輸入,但是輸入恰恰是它自己!對(duì)于這個(gè)代數(shù)環(huán),我們知道從數(shù)學(xué)的角度上可以解算出輸出z,也就是z=u/2。但是,對(duì)于大多數(shù)代數(shù)循環(huán)則無(wú)法這樣簡(jiǎn)單地求解。

在圖7-16所示的模型中,向量代數(shù)循環(huán)中存在兩個(gè)狀態(tài)變量z1和z2,這需要解方程組,若狀態(tài)變量更多的話,則用手工求解方程就不是很合適了。圖7-15Simulink自帶了一個(gè)內(nèi)置的代數(shù)環(huán)求解器,用以求解代數(shù)環(huán)問(wèn)題。也可以用MathOperations庫(kù)中的AlgebraicConstraint(代數(shù)約束)模塊,該模塊可以方便地建立代數(shù)方程的模型,并在模塊對(duì)話框內(nèi)指定初始狀態(tài)的估計(jì)值,該模塊強(qiáng)制輸入信號(hào)F(z)為零,并輸出一個(gè)代數(shù)狀態(tài)z,由于這個(gè)模塊的輸出必須經(jīng)過(guò)反饋回路影響輸入,因此,模塊會(huì)調(diào)整其輸出使其輸入為零。

標(biāo)量代數(shù)循環(huán)表示的是一個(gè)標(biāo)量代數(shù)方程或F(z)=0方程,其中,z是循環(huán)中某一模塊的輸出,函數(shù)F由模塊輸出到輸入的循環(huán)組成。在圖7-12所示的模型中,F(xiàn)(z)=?z-(u?-?z);在圖7-16所示的模型中,方程為圖7-16當(dāng)模型中包含了約束方程F(z)=?0時(shí),模型中就存在了代數(shù)循環(huán)。如果用戶建立的模型中有一系列內(nèi)在相互制約的系統(tǒng),或者用戶想要建立微分/代數(shù)系統(tǒng)(Differential/Algebraicsystem,DAE),則需要約束方程。

當(dāng)模型中包含了代數(shù)循環(huán)時(shí),Simulink在每個(gè)時(shí)間步都會(huì)調(diào)用循環(huán)算法進(jìn)行求解,循環(huán)算法會(huì)反復(fù)進(jìn)行求解以確定最終結(jié)果。因此,具有代數(shù)循環(huán)的模型與不具有代數(shù)循環(huán)的模型相比,仿真速度要慢得多。為了求解F(z)=0,Simulink循環(huán)求解器使用Newton法(牛頓法)進(jìn)行求解,雖然這個(gè)方法很有效,但對(duì)有些代數(shù)環(huán),如代數(shù)狀態(tài)z未給定一個(gè)較好的初始狀態(tài)值,這時(shí)使用Newton法可能造成代數(shù)環(huán)不收斂。用戶可以在代數(shù)循環(huán)的連線上放置一個(gè)IC模塊,該模塊通常用來(lái)指定信號(hào)的初始值,在其他時(shí)刻則使用當(dāng)前值。另一個(gè)在代數(shù)環(huán)中指定初始估計(jì)值的方法就是使用AlgebraicConstraint模塊。圖7-17中的模型使用AlgebraicConstraint模塊為代數(shù)狀態(tài)變量提供了一個(gè)初始估計(jì)值,用戶可以在模塊對(duì)話框內(nèi)給出代數(shù)狀態(tài)的初始估計(jì)值,以改進(jìn)代數(shù)循環(huán)算法的效率,不同的初始估計(jì)給出了不同的結(jié)果。模型中的狀態(tài)變量x滿足方程(x-2)(x+1)=0,即x2-x-2=0。圖7-177.2.2非代數(shù)的直接饋通環(huán)

通常,由直接饋通模塊組成的循環(huán)是代數(shù)循環(huán),但也有一些例外,如包含觸發(fā)子系統(tǒng)的循環(huán)和由輸出到積分器重置端口的循環(huán)。

觸發(fā)子系統(tǒng)在兩次觸發(fā)事件之間保持其輸出為常值,因此,求解器可以利用系統(tǒng)前一時(shí)刻的輸出來(lái)計(jì)算當(dāng)前時(shí)刻的輸入。事實(shí)上,當(dāng)求解器遇到包含觸發(fā)子系統(tǒng)的循環(huán)時(shí),就不必再使用代數(shù)循環(huán)算法。注意:由于求解器利用觸發(fā)子系統(tǒng)的上一次輸出來(lái)計(jì)算反饋輸入、子系統(tǒng)和反饋通道上的所有模塊,因此可能在其輸入端產(chǎn)生一個(gè)采樣間隔的延遲,這樣,當(dāng)仿真一個(gè)帶有觸發(fā)反饋環(huán)的系統(tǒng)時(shí),Simulink會(huì)顯示警告信息,以提示用戶產(chǎn)生這樣的延遲。

以圖7-18中的系統(tǒng)模型為例,觸發(fā)子系統(tǒng)TriggeredSubsystem的輸出直接反饋到輸入,構(gòu)成了非代數(shù)的直接饋通環(huán)。圖7-18系統(tǒng)求解方程為z=u1?+?u2=1?+?u這里,u是上一次觸發(fā)子系統(tǒng)輸出的z值。系統(tǒng)的輸出是一個(gè)階梯函數(shù),如圖7-19所示。圖7-19現(xiàn)在,從系統(tǒng)模型中刪除觸發(fā)器,系統(tǒng)如圖7-20所示,這時(shí),加法子系統(tǒng)u2端口的輸入等于當(dāng)前時(shí)間步上子系統(tǒng)的輸出,系統(tǒng)的數(shù)學(xué)表達(dá)式為z=z+1,這樣的系統(tǒng)在數(shù)學(xué)上是無(wú)解的。圖7-207.2.3切斷代數(shù)環(huán)

在有些情況下,Simulink能夠有效地求解代數(shù)環(huán),但也要考慮速度因素。解算代數(shù)環(huán)的Newton法需要進(jìn)行多次迭代,而且在每個(gè)時(shí)間步上都要運(yùn)行這種迭代運(yùn)算,這必然會(huì)造成帶有代數(shù)環(huán)的模型仿真速度減慢。因此,通過(guò)手工求解或利用MATLAB中的符號(hào)工具箱進(jìn)行推導(dǎo)是首選的方法。

還有一個(gè)常用的技巧就是在反饋回路中加入存儲(chǔ)單元或延遲單元以“切斷”代數(shù)環(huán)。盡管這種方法很容易操作,但是不推薦這樣做,因?yàn)樗淖兞讼到y(tǒng)的動(dòng)態(tài),而且若設(shè)置了一個(gè)不好的初始估計(jì)值,則有可能還會(huì)造成系統(tǒng)不穩(wěn)定。如圖7-21中的模型,第一個(gè)模型在代數(shù)環(huán)中沒(méi)有加入存儲(chǔ)模塊,第二個(gè)模型在代數(shù)環(huán)中加入了一個(gè)存儲(chǔ)模塊而斷開(kāi)了代數(shù)環(huán),兩個(gè)模型運(yùn)行后得到了完全不同的結(jié)果,第二個(gè)模型的輸出數(shù)據(jù)被放大了。圖7-21對(duì)于這樣的模型,比較好的解決辦法就是解算出模型中代數(shù)環(huán)環(huán)節(jié)中輸出與輸入的比例系數(shù)。這里z=Az+Bu,則可以得到(1-A)z=Bu,那么z=(1?-?A)-1*B*u,其中,A、B是矩陣,因此可以重新建立模型,模型中增益模塊的增益值設(shè)置為inv(eye(2)-A)*B*u,如圖7-22所示。這時(shí)再運(yùn)行模型得到的結(jié)果將與第一個(gè)模型中的結(jié)果相同。圖7-227.2.4消除代數(shù)環(huán)

如果Simulink模型中的代數(shù)環(huán)包含了下面幾種模塊,那么Simulink會(huì)消除某些代數(shù)環(huán):

AtomicSubsystem模塊;

EnabledSubsystem模塊;

Model模塊。對(duì)于包含AtomicSubsystem模塊或EnabledSubsystem模塊的代數(shù)環(huán),若要啟動(dòng)代數(shù)環(huán)消除功能,可選擇模塊參數(shù)對(duì)話框中的Minimizealgebraicloopoccurrences選項(xiàng)。如果代數(shù)環(huán)中包含了Model模塊,則要啟動(dòng)代數(shù)環(huán)消除功能時(shí),可在模型的ConfigurationParameters對(duì)話框中ModelReferencing選項(xiàng)面板上選擇Minimizealgebraicloopoccurrences選項(xiàng),如圖7-23所示。圖7-23

ConfigurationParameters對(duì)話框中Diagnostics選項(xiàng)面板中的MinimizealgebraicloopOccurrences選項(xiàng)可以用來(lái)指定當(dāng)模型中出現(xiàn)代數(shù)環(huán)時(shí)Simulink所采取的動(dòng)作,可以選擇的選項(xiàng)為none、warning和error,如圖7-24所示。如果選擇warning或error選項(xiàng),并在模型中設(shè)置了自動(dòng)消除代數(shù)環(huán)功能,那么當(dāng)模型中出現(xiàn)代數(shù)環(huán)時(shí),若Simulink無(wú)法消除代數(shù)環(huán),它會(huì)在MATLAB工作區(qū)中顯示警告信息或錯(cuò)誤信息。圖7-24缺省時(shí),代數(shù)環(huán)最小化功能是關(guān)閉的,因?yàn)樗cSimulink中的條件輸入分支的優(yōu)化處理及實(shí)時(shí)工作區(qū)中的單輸出/更新函數(shù)的優(yōu)化不兼容。如果用戶需要對(duì)代數(shù)環(huán)中包含的AtomicSubsystem模塊和EnabledSubsystem模塊進(jìn)行優(yōu)化,那么必須手動(dòng)消除代數(shù)環(huán)。

這里以圖7-25所示的模型為例說(shuō)明Simulink中消除代數(shù)環(huán)的功能是如何實(shí)現(xiàn)的。模型中的AtomicSubsystem模塊和Gain模塊構(gòu)成了代數(shù)環(huán),因?yàn)锳tomicSubsystem模塊的輸出是輸入的函數(shù),受輸入信號(hào)的影響。圖7-25如果把ConfigurationParameters對(duì)話框中Diagnostics選項(xiàng)面板中的Algebraicloop選項(xiàng)設(shè)置為error,則當(dāng)仿真模型時(shí),模型中的代數(shù)環(huán)就會(huì)以紅色高亮顯示,并同時(shí)顯示錯(cuò)誤對(duì)話框,如圖7-26所示。這是因?yàn)橛脩絷P(guān)閉了代數(shù)環(huán)求解器,Simulink無(wú)法求解模型中出現(xiàn)的代數(shù)環(huán)。圖7-26用鼠標(biāo)右鍵單擊AtomicSubsystem模塊,選擇SubsystemParameters命令,在打開(kāi)的AtomicSubsystem參數(shù)對(duì)話框中選擇Minimizealgebraicloopoccurrences選項(xiàng),如圖7-27(a)所示。選擇模型窗口中Tools菜單下的Signal&ScopeManager命令,打開(kāi)信號(hào)與示波器管理器,將Scope示波器與AtomicSubsystem模塊的輸出信號(hào)關(guān)聯(lián)。然后單擊啟動(dòng)仿真命令開(kāi)始仿真,示波器中AtomicSubsystem模塊的輸出信號(hào)如圖7-27(b)所示。此時(shí)Simulink在模型編譯時(shí)消除了代數(shù)環(huán),使仿真正常進(jìn)行。(a)(b)圖7-277.2.5高亮顯示代數(shù)環(huán)

對(duì)于包含代數(shù)環(huán)的系統(tǒng),用戶可以在更新、仿真或調(diào)試模型時(shí)高亮顯示代數(shù)環(huán)。

如果要使Simulink在更新或仿真系統(tǒng)模型時(shí)高亮顯示模型中的代數(shù)環(huán),那么用戶可以在ConfigurationParameters對(duì)話框中的Diagnostics選項(xiàng)頁(yè)內(nèi)將Algebraicloop(代數(shù)環(huán))診斷選項(xiàng)設(shè)置為error,如圖7-28所示。這會(huì)使Simulink在仿真過(guò)程中顯示錯(cuò)誤對(duì)話框(即DiagnosticViewer,診斷查看器),并重新繪制表示代數(shù)環(huán)的方塊圖的顏色。Simulink通常使用紅色來(lái)表示構(gòu)成代數(shù)環(huán)的模塊和連線,以突出顯示代數(shù)環(huán);當(dāng)關(guān)閉錯(cuò)誤對(duì)話框時(shí),系統(tǒng)會(huì)恢復(fù)方塊圖的原色。圖7-28如果用戶在調(diào)試模型,那么可以在MATLAB命令窗口中利用Simulink中的ashow命令高亮顯示代數(shù)環(huán)。

例如,圖7-29是用原色顯示的hydcyl演示模型的方塊圖,模型中各子系統(tǒng)模塊的前景色和背景色利用Format菜單下的Foregroundcolor和Backgroundcolor命令設(shè)置了不同的顏色。圖7-29將該模型中ConfigurationParameters對(duì)話框中Diagnostics選項(xiàng)頁(yè)下的Algebraicloop選項(xiàng)設(shè)置為error后,Simulink在仿真系統(tǒng)時(shí)打開(kāi)錯(cuò)誤對(duì)話框,提示用戶模型中出現(xiàn)了代數(shù)環(huán),同時(shí)重新更新方塊圖的顏色。這里Simulink將代數(shù)環(huán)繪制為紅色,以突出顯示模型方塊圖中的代數(shù)環(huán),如圖7-30所示。圖7-30 7.3高?級(jí)?積?分?器

Simulink的Continues庫(kù)中的Integrator模塊是積分器模塊,它對(duì)輸入信號(hào)進(jìn)行積分,并輸出當(dāng)前時(shí)間步上輸入的積分值。下面的方程說(shuō)明了模塊的輸出y是其輸入u和初始狀態(tài)y0的函數(shù),這里,y和u都是當(dāng)前仿真時(shí)間t的向量函數(shù)。Simulink可以用多種不同的數(shù)值積分方法來(lái)計(jì)算積分器模塊的輸出,每種方法在特定的應(yīng)用環(huán)境下各有優(yōu)缺點(diǎn)。實(shí)際上,Simulink把Integrator模塊看做一個(gè)具有一個(gè)狀態(tài)和輸入的動(dòng)態(tài)系統(tǒng),它的輸入是狀態(tài)的時(shí)間導(dǎo)數(shù),即用戶可以在ConfigurationParameters對(duì)話框中的Solver選項(xiàng)頁(yè)內(nèi)選擇最適合自己應(yīng)用程序的積分算法,所選擇的求解器會(huì)用當(dāng)前時(shí)刻的輸入值和前一個(gè)時(shí)間步的狀態(tài)值來(lái)計(jì)算當(dāng)前時(shí)間步上Integrator模塊的輸出值。為了支持這種計(jì)算模式,Integrator模塊必須保存當(dāng)前時(shí)間步的輸出值以備求解器計(jì)算下一個(gè)時(shí)間步的輸入值,同時(shí),模塊也提供給求解器一個(gè)初始條件,用來(lái)在仿真開(kāi)始執(zhí)行時(shí)計(jì)算模塊的初始狀態(tài),初始條件的缺省值為0。模塊的參數(shù)對(duì)話框也允許用戶為初始條件指定其他的值,或者在模塊中創(chuàng)建一個(gè)初始值輸入端口。7.3.1積分器模塊參數(shù)對(duì)話框

雙擊Integrator模塊,可打開(kāi)Integrator模塊的參數(shù)對(duì)話框,如圖7-31所示。在該對(duì)話框內(nèi),用戶可以進(jìn)行下列設(shè)置:

定義積分的上限和下限。

創(chuàng)建一個(gè)將模塊的輸出(狀態(tài))重新設(shè)置為模塊初始值的輸入,這取決于輸入的變化情況。

創(chuàng)建一個(gè)可選的狀態(tài)輸出,該輸出允許用戶使用模塊的輸出值來(lái)觸發(fā)模塊的重置功能。圖7-31

1.定義初始條件

用戶可以在對(duì)話框內(nèi)將初始條件定義為參數(shù),或者選擇從外部信號(hào)輸入初始條件,如圖7-32(a)所示。

若要把初始條件定義為模塊參數(shù),可在Initialconditionsource列表中選擇internal,并在Initialcondition參數(shù)文本框內(nèi)輸入數(shù)值。

若要從外部提供初始條件,可在Initialconditionsource列表中選擇external,則在Integrator模塊的輸入端出現(xiàn)一個(gè)附加的輸入端口,如圖7-32(b)所示。(a)(b)圖7-322.限制積分

為了防止輸出超過(guò)指定的范圍,用戶可以選擇Limitoutput復(fù)選框,并在下面的參數(shù)文本框內(nèi)輸入適當(dāng)?shù)姆秶担@個(gè)操作可以使模塊作為一個(gè)受限積分器,如圖7-33(a)所示。當(dāng)輸出到達(dá)限制值時(shí),Simulink會(huì)關(guān)閉積分動(dòng)作。在仿真過(guò)程中,用戶可以改變這個(gè)限制,但是不能改變輸出是否受限,因?yàn)槟K的輸出是按照下面的規(guī)則來(lái)確定的:

當(dāng)積分小于或等于Lowersaturationlimit參數(shù)值,而且輸入是負(fù)值時(shí),輸出被限制在Lowersaturationlimit范圍內(nèi)。(a)(b)圖7-33為了生成一個(gè)指示狀態(tài)受限時(shí)間的信號(hào),可選擇Showsaturationport復(fù)選框,那么會(huì)有一個(gè)飽和端口出現(xiàn)在模塊輸出端口的下方,如圖7-33(b)中的Integrator模塊所示。這個(gè)信號(hào)有三個(gè)值:1表示應(yīng)用上限;0表示積分不受限制;-1表示應(yīng)用下限。當(dāng)用戶選擇這個(gè)選項(xiàng)時(shí),模塊有三個(gè)過(guò)零:一個(gè)用來(lái)檢測(cè)模塊何時(shí)進(jìn)入上飽和限;一個(gè)用來(lái)檢測(cè)模塊何時(shí)進(jìn)入下飽和限;一個(gè)用來(lái)檢測(cè)模塊何時(shí)離開(kāi)飽和區(qū)。3.重新設(shè)置狀態(tài)

Integrator模塊可以根據(jù)外部信號(hào)重新把狀態(tài)設(shè)置為指定的初始條件。為了使模塊重新設(shè)置其狀態(tài),可選擇Externalreset參數(shù)列表中的一個(gè)選項(xiàng)值,那么會(huì)在模塊輸入端口的下方出現(xiàn)一個(gè)觸發(fā)端口,同時(shí)標(biāo)出所選值的觸發(fā)類型,如圖7-34所示。

選擇rising,當(dāng)重置信號(hào)有上升沿時(shí)觸發(fā)狀態(tài)重置;

選擇falling,當(dāng)重置信號(hào)有下降沿時(shí)觸發(fā)狀態(tài)重置;

選擇either,當(dāng)有上升信號(hào)或下降信號(hào)出現(xiàn)時(shí)觸發(fā)狀態(tài)重置;

選擇level,當(dāng)重置信號(hào)為非零時(shí),觸發(fā)重置并保持輸出為初始條件。圖7-344.關(guān)于狀態(tài)端口

選擇Integrator模塊參數(shù)對(duì)話框中的Showstateport選項(xiàng)后,將在積分器模塊的頂部出現(xiàn)一個(gè)附加的輸出端口,即狀態(tài)端口,如圖7-35所示。

狀態(tài)端口的輸出與模塊的標(biāo)準(zhǔn)輸出端口一樣,但不具有下列特性:如果模塊在當(dāng)前時(shí)間步上重置,那么狀態(tài)端口的輸出值是模塊還沒(méi)有被重置時(shí)標(biāo)準(zhǔn)輸出端口的值,狀態(tài)端口的輸出比Integrator模塊輸出端口的輸出早一個(gè)時(shí)間步。因此,可以使用戶在創(chuàng)建下列模型時(shí)避免代數(shù)環(huán)的出現(xiàn):圖7-35圖7-367.3.2創(chuàng)建自重置積分器

如果用戶需要?jiǎng)?chuàng)建這樣一個(gè)積分器,也就是積分器根據(jù)其輸出值重新設(shè)置初始值,那么最好使用Integrator模塊的狀態(tài)端口實(shí)現(xiàn)這個(gè)功能,因?yàn)檫@樣可以使用戶避免在模型中創(chuàng)建代數(shù)環(huán)。以圖7-37中的模型為例,這個(gè)模型試圖利用積分器的輸出創(chuàng)建一個(gè)自重置積分器,也就是把輸出減1,再反饋回積分器的重置端口,但是,這樣會(huì)使模型建立一個(gè)代數(shù)環(huán)。當(dāng)仿真這個(gè)模型時(shí),仿真過(guò)程在T=1.41421356237311時(shí)停止,仿真錯(cuò)誤診斷器提示在積分器模塊內(nèi)出現(xiàn)了一個(gè)代數(shù)環(huán)。Simulink無(wú)法判斷積分器的輸出值,因?yàn)槿粢?jì)算積分器模塊的輸出,Simulink需要知道模塊的重置信號(hào)值,反之亦然,由于這兩個(gè)值是相互依賴的,因而Simulink無(wú)法確定其中的任何一個(gè)值。因此,如果用戶試圖仿真或更新這個(gè)模型,Simulink會(huì)發(fā)出一個(gè)錯(cuò)誤信號(hào)。圖7-37現(xiàn)在改進(jìn)圖7-37中的模型,在積分器模塊中利用狀態(tài)端口重置積分器,從而使模型避免了代數(shù)環(huán)的出現(xiàn),如圖7-38(a)所示。

在這個(gè)模型中,重置信號(hào)的值依賴于狀態(tài)端口的值,狀態(tài)端口的值在當(dāng)前時(shí)間步上比積分器模塊輸出端口的值提前得到,這樣,Simulink可以確定在計(jì)算模塊的輸出之前是否需要重新設(shè)置模塊,因此也就避免了代數(shù)環(huán)。運(yùn)行仿真后,示波器模塊顯示的模型的輸出信號(hào)如圖7-38(b)所示。圖7-38例7-3積分器重置。

要求建立一個(gè)積分器,輸入為1,初始條件為-50,如果輸出超過(guò)20,則重置為-100。

在這個(gè)例子中,模塊的輸出驅(qū)動(dòng)模塊自身的重置端,這樣當(dāng)輸出超過(guò)20時(shí),積分器重置到初始條件值。由于在同一個(gè)時(shí)間步內(nèi)需要用輸出值來(lái)確定是否需要重置,因此就產(chǎn)生了一個(gè)直接饋通環(huán)。可以利用狀態(tài)端口來(lái)解決這樣的問(wèn)題,因?yàn)闋顟B(tài)值(與輸出值相同)在進(jìn)行判斷時(shí)已經(jīng)在輸出之前計(jì)算得到了。初始條件通過(guò)外部源確定,當(dāng)初始條件由外部給出時(shí),必須使用一個(gè)IC模塊為信號(hào)提供一個(gè)初始值。

在這個(gè)例子中,IC模塊的值設(shè)置為-50,其他時(shí)間的重置值由常值模塊提供,等于-100,積分器的輸入是一個(gè)常數(shù)1。建立的積分器重置模型如圖7-39(a)所示。圖7-39在ConfigurationParameters對(duì)話框內(nèi)設(shè)置仿真時(shí)間為250s,觀察到的示波器輸出波形如圖7-39(b)所示,可以看到輸出信號(hào)的初始值為-50,當(dāng)輸出超過(guò)20時(shí),重新設(shè)置輸出值為-100。

例7-4重置彈力球。

一個(gè)彈力球以15m/s的速度從距水平位置10m的高度拋向空中,球的彈力為0.8,當(dāng)球到達(dá)地面時(shí),重新設(shè)置其初始速度為0.8*x,x是重置時(shí)刻球的速度,即積分器的狀態(tài)。

球的拋物線運(yùn)動(dòng)滿足下列公式:其中:v為球的速度;v0為球的初始速度;g為重力加速度;h為球從起始位置開(kāi)始的高度;h0為球的初始高度,即球距地面的高度,因此球距地面的實(shí)際高度為h+h0。利用重置積分器建立的系統(tǒng)模型如圖7-40(a)所示,其輸出波形如圖7-40(b)所示。

設(shè)置Velocity積分器的Externalreset參數(shù)為falling,Initialconditionsource參數(shù)為external,即初始條件由外部給定,并選擇Showstateport復(fù)選框顯示狀態(tài)端口,設(shè)置IC模塊的初始值為15。設(shè)置Position積分器的Initialcondition為10,設(shè)置Initialconditionsource參數(shù)為internal。

在仿真參數(shù)對(duì)話框內(nèi)選擇變步長(zhǎng)ode23求解器,設(shè)置Maxstepsize為0.1,運(yùn)行仿真,在示波器中觀察波形。球的速度顯示在示波器上面的窗口,球的位置顯示在示波器下面的窗口,這個(gè)系統(tǒng)使用重置積分器,當(dāng)彈力球到達(dá)地面時(shí)改變球的方向。圖7-40(a)(b)7.3.3在使能子系統(tǒng)間傳遞狀態(tài)

當(dāng)用戶需要在兩個(gè)使能子系統(tǒng)之間傳遞狀態(tài)時(shí),利用狀態(tài)端口可以避免在模型中出現(xiàn)代數(shù)環(huán),以圖7-41所示的模型為例。圖7-41在這個(gè)模型中,由Constant常值模塊輸入信號(hào)來(lái)驅(qū)動(dòng)兩個(gè)使能子系統(tǒng)A和B,這兩個(gè)子系統(tǒng)可對(duì)輸入信號(hào)進(jìn)行積分。PulseGenerator模塊能夠生成一個(gè)使能信號(hào),用來(lái)在兩個(gè)子系統(tǒng)之間進(jìn)行切換,以交替執(zhí)行子系統(tǒng)A和子系統(tǒng)B。每個(gè)子系統(tǒng)的使能端口都被設(shè)置為重置,這樣,當(dāng)子系統(tǒng)被激活時(shí),兩個(gè)子系統(tǒng)都將重新設(shè)置其積分器。重置積分器可以使積分器讀取積分器初始條件端口的數(shù)值,每個(gè)子系統(tǒng)內(nèi)積分器的初始條件端口都與另一個(gè)子系統(tǒng)內(nèi)積分器的輸出端口相連。這種連接的目的是為了使輸入信號(hào)的連續(xù)積分在兩個(gè)子系統(tǒng)之間交替執(zhí)行,但是,這樣的連接產(chǎn)生了一個(gè)代數(shù)環(huán)。為了計(jì)算子系統(tǒng)A的輸出,Simulink需要知道子系統(tǒng)B的輸出,反之亦然,因?yàn)檫@兩個(gè)輸出是相互依賴的,Simulink無(wú)法給出任何一個(gè)子系統(tǒng)的輸出值。因此,如果用戶試圖更新或仿真這個(gè)模型,則Simulink都會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

可對(duì)這個(gè)模型進(jìn)行改造,即在模型中使用積分器的狀態(tài)端口,當(dāng)傳遞狀態(tài)時(shí),避免了在模型中產(chǎn)生代數(shù)環(huán),如圖7-42所示。圖7-42在圖7-42中的模型中,子系統(tǒng)A中的積分器的初始條件依賴于子系統(tǒng)B中的狀態(tài)端口,反之亦然。在同一個(gè)時(shí)間步內(nèi),狀態(tài)端口的數(shù)值比積分器輸出端口的數(shù)值更新的要早,這樣,Simulink可以計(jì)算出任何一個(gè)積分器的初始條件,而不必知道另一個(gè)積分器的最終輸出值。

對(duì)圖7-42中的模型進(jìn)行仿真,觀察示波器的波形,仿真結(jié)果如圖7-43所示。圖7-43 7.4仿真診斷選項(xiàng)設(shè)置

7.4.1仿真算法診斷設(shè)置

選擇ConfigurationParameters對(duì)話框中Select樹(shù)狀列表中的Diagnostics選項(xiàng),初始時(shí)顯示的是Solver(仿真算法診斷)選項(xiàng)面板,如圖7-44所示,這個(gè)面板用來(lái)設(shè)置與算法有關(guān)的某些診斷選項(xiàng)。圖7-441.?Algebraicloop

當(dāng)Simulink編譯模型時(shí),如果檢測(cè)到模型中有代數(shù)環(huán),則指定Simulink對(duì)代數(shù)環(huán)采取的處理方式。如果設(shè)置該選項(xiàng)為error,則Simulink會(huì)顯示錯(cuò)誤消息,并高亮顯示模型中包含代數(shù)環(huán)的方塊圖。關(guān)于代數(shù)環(huán)的詳細(xì)內(nèi)容,參看第7.2節(jié)。2.?Minimizealgebraicloop

如果代數(shù)環(huán)中包含了特定的子系統(tǒng)(如AtomicSubsystem或EnabledSubsystem),而且子系統(tǒng)的輸入端口具有直接饋通特性,那么當(dāng)子系統(tǒng)中至少有一個(gè)模塊的輸入端口不具有直接饋通特性時(shí),Simulink可以消除代數(shù)環(huán)。如果Simulink消除代數(shù)環(huán)操作失敗,則使用該選項(xiàng)可以設(shè)置Simulink或者忽略這種操作,或者顯示警告消息,或者顯示錯(cuò)誤消息。關(guān)于消除代數(shù)環(huán)的詳細(xì)內(nèi)容,參看第7.2.4節(jié)。3.?Blockpriorityviolation

當(dāng)Simulink在編譯模型時(shí)檢測(cè)到模塊優(yōu)先級(jí)指定錯(cuò)誤時(shí),使用該選項(xiàng)可以設(shè)置Simulink或者忽略這種錯(cuò)誤,或者顯示警告消息,或者顯示錯(cuò)誤消息。

4.?Minstepsizeviolation

如果Simulink檢測(cè)到下一個(gè)仿真步長(zhǎng)小于為模型指定的最小步長(zhǎng),那么使用該選項(xiàng)可以設(shè)置Simulink或者忽略這個(gè)問(wèn)題,或者顯示警告消息,或者顯示錯(cuò)誤消息。如果為模型指定的誤差容限要求步長(zhǎng)小于指定的最小步長(zhǎng),則有可能會(huì)出現(xiàn)這個(gè)問(wèn)題。5.?Samplehittimeadjusting

如果Simulink在運(yùn)行模型時(shí)對(duì)采樣時(shí)間進(jìn)行了微弱的調(diào)整,那么使用該選項(xiàng)可以設(shè)置Simulink或者忽略這個(gè)問(wèn)題,或者顯示警告消息,或者顯示錯(cuò)誤消息。如果Simulink的采樣時(shí)間與模型中其他任務(wù)的采樣時(shí)間接近,則Simulink有可能會(huì)改變這個(gè)采樣時(shí)間。如果Simulink認(rèn)為這種差別僅僅是由于數(shù)值錯(cuò)誤(例如,精度問(wèn)題或四舍五入問(wèn)題)產(chǎn)生的,那么它會(huì)把變化速度較快的任務(wù)的采樣時(shí)間改變到與變化速度較慢的任務(wù)的采樣時(shí)間相匹配。

需要注意的是,隨著仿真時(shí)間的繼續(xù),這些采樣時(shí)間的改變有可能會(huì)在數(shù)值仿真結(jié)果和實(shí)際的理論結(jié)果之間產(chǎn)生矛盾。在把該選項(xiàng)設(shè)置為warning且Simulink檢測(cè)到采樣時(shí)間改變時(shí),MATLAB命令窗口會(huì)顯示如下警告消息:

Warning:Timingenginewarning:Changingthehittimefor…

如果該選項(xiàng)設(shè)置為none,則Simulink不會(huì)顯示任何消息。6.?Consecutivezerocrossingviolation

如果Simulink檢測(cè)到連續(xù)過(guò)零的數(shù)目已經(jīng)達(dá)到允許的最大值,那么使用該選項(xiàng)可以設(shè)置Simulink或者忽略這個(gè)問(wèn)題,或者顯示警告消息,或者顯示錯(cuò)誤消息。當(dāng)Simulink檢測(cè)到這個(gè)約束時(shí),它會(huì)報(bào)告當(dāng)前的仿真時(shí)間,累計(jì)的連續(xù)過(guò)零的數(shù)目,以及檢測(cè)到的過(guò)零模塊的類型和名稱。關(guān)于過(guò)零檢測(cè)的詳細(xì)內(nèi)容,參看第7.1節(jié)。7.?Unspecifiedinheritabilityofsampletime

如果模型中包含S-函數(shù),而S-函數(shù)未指定它們是否繼承來(lái)自父模型的采樣時(shí)間,那么使用該選項(xiàng)可以設(shè)置Simulink或者忽略這個(gè)問(wèn)題,或者顯示警告消息,或者顯示錯(cuò)誤消息。只有當(dāng)仿真算法設(shè)置為定步長(zhǎng)離散算法,而且Periodicsampletimeconstraint選項(xiàng)設(shè)置為Ensuresampletimeindependent時(shí),Simulink才會(huì)檢測(cè)這個(gè)條件。8.?Solverdatainconsistency

一致性檢驗(yàn)是一個(gè)調(diào)試工具,它可以用來(lái)驗(yàn)證Simulink中ODE算法中的某些假設(shè)條件,它的主要作用是確保S-函數(shù)與Simulink的內(nèi)嵌模塊遵守相同的規(guī)則。由于一致性檢驗(yàn)會(huì)在性能上造成重大損失(最高會(huì)降低40%),因此它通常被設(shè)置為none。當(dāng)然,使用一致性檢驗(yàn)可以驗(yàn)證S-函數(shù),并有助于用戶查找和確定仿真過(guò)程中造成某些不希望結(jié)果的原因。這里介紹一下一致性檢驗(yàn)的執(zhí)行方式。在對(duì)模型進(jìn)行仿真時(shí),為了執(zhí)行高效積分運(yùn)算,Simulink會(huì)存儲(chǔ)時(shí)間步上的特定值(也就是把數(shù)值存儲(chǔ)在緩沖區(qū)中),以備下一個(gè)時(shí)間步使用。例如,在一個(gè)仿真時(shí)間步結(jié)束時(shí)的微分值通常在下一個(gè)時(shí)間步的起始時(shí)刻被重新使用,因此,Simulink的仿真算法利用這種方法就可以避免冗余的積分運(yùn)算。那么,當(dāng)使能一致性檢驗(yàn)時(shí),Simulink會(huì)在時(shí)間步的起始時(shí)刻重新計(jì)算數(shù)值,并與緩存中的數(shù)值相比較,如果數(shù)值不相同,就會(huì)產(chǎn)生一致性錯(cuò)誤。Simulink通常會(huì)在如下方面比較計(jì)算的數(shù)值:

輸出;

過(guò)零;

微分;

狀態(tài)。一致性檢驗(yàn)的另一個(gè)目的就是當(dāng)在給定的t時(shí)刻調(diào)用模塊時(shí),可以確保模塊產(chǎn)生常值輸出。這對(duì)于鋼體算法(ode23s和ode15s)是非常重要的,因?yàn)楫?dāng)計(jì)算Jacobian(雅可比)矩陣時(shí),模塊的輸出函數(shù)在同一時(shí)刻t處可能會(huì)被多次調(diào)用。9.?Automaticsolverparameterselection

如果Simulink改變了仿真算法中的參數(shù)設(shè)置,那么使用該選項(xiàng)可以設(shè)置Simulink或者忽略這個(gè)問(wèn)題,或者顯示警告消息,或者顯示錯(cuò)誤消息。例如,假設(shè)用戶用連續(xù)算法來(lái)仿真離散模型,并設(shè)置這個(gè)選項(xiàng)為warning,那么當(dāng)Simulink把算法類型改變?yōu)殡x散算法時(shí),在MATLAB命令窗口中會(huì)顯示警告消息。10.?Extraneousdiscretederivativesignals

Model模塊可以把模型作為模塊包含在另一個(gè)模型中,模塊的輸入端口和輸出端口對(duì)應(yīng)于模型頂層的輸入端口和輸出端口。模型中的離散信號(hào)通過(guò)Model模塊傳遞到帶有連續(xù)狀態(tài)的模塊的輸入端,如Integrator模塊,但Simulink無(wú)法確定它為了解決模型精度問(wèn)題而用來(lái)重置算法的最小速率的位置。因此,如果將這個(gè)選項(xiàng)設(shè)置為error,則當(dāng)編譯模型時(shí),Simulink會(huì)終止仿真過(guò)程,并顯示一個(gè)錯(cuò)誤消息;如果將這個(gè)選項(xiàng)設(shè)置為none或warning,則無(wú)論何時(shí)當(dāng)離散信號(hào)值改變時(shí),Simulink都會(huì)重新設(shè)置仿真算法。假設(shè)離散信號(hào)的確是輸入到帶有連續(xù)狀態(tài)的模塊的信號(hào)源,那么這樣做可以確保模型仿真的精度。但是,如果離散信號(hào)不是輸入到帶有連續(xù)狀態(tài)的模塊的實(shí)際信號(hào)源,那么在離散信號(hào)改變的速率上重置算法可能會(huì)導(dǎo)致模型的算法會(huì)頻繁地重新設(shè)置,而這可能并不是必需的,因此這樣就會(huì)使仿真速度造成不必要的降低。圖7-45中的模型說(shuō)明了這個(gè)診斷選項(xiàng)的基本原理。在圖7-45中,信號(hào)s有可能但不是必然要經(jīng)過(guò)Model模塊進(jìn)入到Integrator模塊,從Model模塊輸出的信號(hào)被標(biāo)記為s?則表示這是不可能的。僅通過(guò)檢查頂層模型就能確定Integrator模塊的信號(hào)源實(shí)際是s,因?yàn)閟是連續(xù)信號(hào)和離散信號(hào)的和,不連續(xù)點(diǎn)以離散模塊A的采樣速率出現(xiàn)在信號(hào)s上,也就是,一秒鐘出現(xiàn)一次。假設(shè)s?實(shí)際就是s,為了解決頂層模型的精度問(wèn)題,Simulink必須一秒鐘就重置一次算法,但是,檢查模型后會(huì)發(fā)現(xiàn)信號(hào)s?實(shí)際是圖7-46中的信號(hào)X。圖7-45圖7-46這里,信號(hào)X與信號(hào)s類似,都是連續(xù)信號(hào)與離散信號(hào)的和,但是,在X上的不連續(xù)點(diǎn)每?jī)擅氤霈F(xiàn)一次,而s上的不連續(xù)點(diǎn)每一秒出現(xiàn)一次,因此,為了準(zhǔn)確地仿真頂層模型,Simulink需要每隔兩秒重置算法。但是,由于在編譯頂層模型時(shí),Simulink無(wú)法進(jìn)入到Model模塊中的模型,因此也就無(wú)法確定用于求解模型時(shí)需要重置算法的最小速率。正因如此,如果將這個(gè)選項(xiàng)設(shè)置為error,則當(dāng)用戶試圖更新或仿真模型時(shí),Simulink會(huì)顯示錯(cuò)誤消息。如果將這個(gè)選項(xiàng)設(shè)置為none或warning,則無(wú)論何時(shí)當(dāng)s值發(fā)生改變時(shí),Simulink都會(huì)重置算法。11.?Statenameclash

該選項(xiàng)用來(lái)檢測(cè)狀態(tài)名沖突,可以設(shè)置為none或warning,如果設(shè)置為warning,則當(dāng)出現(xiàn)狀態(tài)名沖突時(shí),Simulink會(huì)顯示警告消息;如果設(shè)置為none,則忽略對(duì)狀態(tài)名的檢測(cè)。7.4.2采樣時(shí)間診斷設(shè)置

選擇Diagnostics選項(xiàng)下的SampleTime命令,將顯示如圖7-47所示的SampleTime選項(xiàng)面板,這個(gè)面板用來(lái)設(shè)置當(dāng)Simulink檢測(cè)到與模型采樣時(shí)間有關(guān)的編譯錯(cuò)誤時(shí)可以采取的不同處理方式。圖7-471.Sourceblockspecifies-1sampletime

信號(hào)源模塊(例如,SineWave模塊)指定的采樣時(shí)間為-1。若將該選項(xiàng)設(shè)置為none,則可以讓Simulink忽略這個(gè)問(wèn)題;若設(shè)置為warning,則顯示警告消息;若設(shè)置為error,則顯示錯(cuò)誤消息。

2.Discreteusedascontinuous

作為離散模塊的UnitDelay模塊繼承了與其輸入端相連模塊的連續(xù)采樣時(shí)間。若將該選項(xiàng)設(shè)置為none,則可以讓Simulink忽略這個(gè)問(wèn)題;若設(shè)置為warning,則顯示警告消息;若設(shè)置為error,則顯示錯(cuò)誤消息。3.Multitaskratetransition

在運(yùn)行多任務(wù)模式下的兩個(gè)模塊之間出現(xiàn)了無(wú)效的速率轉(zhuǎn)換。若將該選項(xiàng)設(shè)置為none,則可以讓Simulink忽略這個(gè)問(wèn)題;若設(shè)置為warning,則顯示警告消息;若設(shè)置為error,則顯示錯(cuò)誤消息。

4.Singletaskratetransition

在運(yùn)行單任務(wù)模式下的兩個(gè)模塊之間出現(xiàn)了無(wú)效的速率轉(zhuǎn)換。若將該選項(xiàng)設(shè)置為none,則可以讓Simulink忽略這個(gè)問(wèn)題;若設(shè)置為warning,則顯示警告消息;若設(shè)置為error,則顯示錯(cuò)誤消息。5.Multitaskconditionallyexecutedsubsystem

如果Simulink檢測(cè)到模型滿足下面的任一條件,那么使用該選項(xiàng)可以設(shè)置Simulink或者忽略這個(gè)問(wèn)題,或者顯示警告消息,或者顯示錯(cuò)誤消息。

模型中使用了多任務(wù)處理算法,并且模型中包含了運(yùn)行在多速率模式下的使能子系統(tǒng);

模型中包含了能夠重置狀態(tài)的條件執(zhí)行子系統(tǒng),而且這個(gè)子系統(tǒng)本身又包含了一個(gè)異步子系統(tǒng)。

這樣的子系統(tǒng)在實(shí)時(shí)系統(tǒng)中由模型生成代碼的過(guò)程中可能會(huì)產(chǎn)生壞數(shù)據(jù)或不確定的動(dòng)作,在第一種情況下,考慮使用單任務(wù)處理算法,或者使用單速率使能子系統(tǒng);在第二種情況下,考慮把異步子系統(tǒng)移到條件執(zhí)行子系統(tǒng)的外部。6.Taskswithequalpriority

由模型表示的目標(biāo)的異步任務(wù)與其他目標(biāo)的異步任務(wù)具有相同的優(yōu)先級(jí),如果目標(biāo)允許各個(gè)任務(wù)之間具有不同的優(yōu)先級(jí),則這個(gè)選項(xiàng)必須設(shè)置為error。7.EnforcesampletimesspecifiedbySignalSpecificationblocks

SignalSpecification模塊允許用戶指定與其輸入端口和輸出端口相連的信號(hào)的屬性。如果指定的屬性與其端口連接模塊指定的屬性相沖突,那么當(dāng)編譯模型時(shí),Simulink會(huì)顯示錯(cuò)誤消息。對(duì)于這個(gè)選項(xiàng),當(dāng)SignalSpecification模塊指定的信號(hào)源端口的采樣時(shí)間與信號(hào)目的端口的采樣時(shí)間不同時(shí),將該選項(xiàng)設(shè)置為none,可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。7.4.3數(shù)據(jù)驗(yàn)證診斷設(shè)置

選擇Diagnostics選項(xiàng)下的DataValidity命令,將顯示如圖7-48所示的DataValidity選項(xiàng)面板,這個(gè)面板用來(lái)設(shè)置當(dāng)Simulink檢測(cè)到模型定義的數(shù)據(jù)的完整性受到威脅時(shí)可以采取的處理方式。圖7-481.信號(hào)有效性診斷設(shè)置

圖7-49中的Signals選項(xiàng)區(qū)是與信號(hào)有關(guān)的檢驗(yàn)設(shè)置選項(xiàng)。圖7-491)?Signalresolution

Signalresolution(信號(hào)解析)就是把基本工作間中已有的Simulink.Signal對(duì)象與模型中命名的信號(hào)關(guān)聯(lián)起來(lái)的過(guò)程,如果信號(hào)與信號(hào)對(duì)象有相同的名稱,則Simulink可以把信號(hào)與對(duì)象關(guān)聯(lián)起來(lái),然后將信號(hào)解析為對(duì)象。對(duì)于某些模塊,如UnitDelay模塊和DataStoreMemory模塊,用戶可以把這些模塊中命名的狀態(tài)解析為Simulink.Signal對(duì)象,也就是說(shuō),這個(gè)過(guò)程不但可以解析信號(hào),也可以解析狀態(tài)。

當(dāng)信號(hào)被解析為信號(hào)對(duì)象時(shí),信號(hào)對(duì)象就指定了信號(hào)的屬性,多個(gè)信號(hào)可能會(huì)有相同的名稱,所有的同名信號(hào)可以被解析為同名的信號(hào)對(duì)象,并且具有對(duì)象指定的屬性,改變信號(hào)對(duì)象的任何參數(shù)值也就改變了解析為該對(duì)象的所有信號(hào)的同樣參數(shù)值。把信號(hào)解析為信號(hào)對(duì)象的必要條件是對(duì)象必須存在于基本工作間,并且與信號(hào)有相同的名稱。但是,信號(hào)無(wú)法解析為同名對(duì)象,只是因?yàn)閷?duì)象有這樣的要求:用戶必須為解析提供某些說(shuō)明,除非這些說(shuō)明已經(jīng)存在,否則解析無(wú)法進(jìn)行。局部信號(hào)解析控制:為了控制單個(gè)信號(hào)的解析,可右鍵單擊信號(hào)來(lái)打開(kāi)信號(hào)屬性對(duì)話框,在Signalname文本框內(nèi)輸入希望的信號(hào)對(duì)象的名稱,并選擇Signalnamemustresolvetoasignalobject選項(xiàng),如果Signalname中輸入的是有效的信號(hào)對(duì)象,那么該選項(xiàng)將指定這個(gè)信號(hào)進(jìn)行局部解析,而不會(huì)進(jìn)行全局解析。局部解析也稱為顯式解析,因?yàn)閱蝹€(gè)信號(hào)明確地描述了它要求的解析。若不希望進(jìn)行指定的局部解析,可不選擇Signalnamemustresolvetoasignalobject選項(xiàng)。全局信號(hào)解析控制:用戶可以指定Simulink自動(dòng)解析任何已命名的沒(méi)有進(jìn)行局部解析的信號(hào)。這種解析也稱為隱式解析,因?yàn)闆](méi)有明確描述進(jìn)行的解析,所以這種解析在匹配的信號(hào)名和對(duì)象名之間進(jìn)行隱式定義。

缺省時(shí),Simulink不會(huì)使用隱式信號(hào)解析,用戶必須明確指定使用隱式信號(hào)解析。通過(guò)設(shè)置Signals選項(xiàng)區(qū)中Signalresolution選項(xiàng)的值,用戶可以控制全局信號(hào)解析,這個(gè)選項(xiàng)的可選值如下:

Explicitonly:不執(zhí)行隱式信號(hào)解析,只執(zhí)行指定的顯式(局部)信號(hào)解析。

Explicitandwarnimplicit:執(zhí)行隱式信號(hào)解析,并為每個(gè)隱式解析記錄一個(gè)警告信息。

Explicitandimplicit:執(zhí)行隱式信號(hào)解析,但不記錄警告。

2)?Divisionbysingularmatrix

Simulink中Product模塊的作用是對(duì)輸入信號(hào)進(jìn)行乘或除。當(dāng)該模塊參數(shù)對(duì)話框中的Multiplication參數(shù)設(shè)置為Matrix(*)時(shí),模塊的輸出是對(duì)標(biāo)記為“*”的輸入矩陣的乘積和標(biāo)記為“/”的輸入矩陣的求逆。在這種矩陣乘積模式下,當(dāng)模塊的輸入在求逆時(shí),Product模塊將檢測(cè)到奇異矩陣(不可逆),如果是這樣,則把該選項(xiàng)設(shè)置為none時(shí),可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。3)?Underspecifieddatatypes

Simulink在模型的數(shù)據(jù)類型傳遞過(guò)程中無(wú)法推斷出信號(hào)的數(shù)據(jù)類型。如果出現(xiàn)這個(gè)問(wèn)題,那么將該選項(xiàng)設(shè)置為none時(shí),可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。

4)?Detectoverflow

當(dāng)信號(hào)值或參數(shù)值發(fā)生溢出,也就是信號(hào)值或參數(shù)值太大時(shí),將使信號(hào)或參數(shù)的數(shù)據(jù)類型無(wú)法表示這些數(shù)據(jù)。如果出現(xiàn)這個(gè)問(wèn)題,那么將該選項(xiàng)設(shè)置為none時(shí),可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。5)?InforNaNblockoutput

在當(dāng)前時(shí)間步上,模塊的輸出值是Inf或NaN,將該選項(xiàng)設(shè)置為none時(shí),可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。

6)?“rt”prefixforidentifiers

如果在代碼生成過(guò)程中,參數(shù)名、模塊名或者信號(hào)名的前面出現(xiàn)了rt字符,也就是Simulink的對(duì)象名,則該選項(xiàng)的缺省設(shè)置會(huì)使代碼生成過(guò)程終止,并顯示錯(cuò)誤消息。這個(gè)設(shè)置可以防止用戶無(wú)意中在生成的標(biāo)識(shí)符名稱前使用了rt,從而造成與Simulink對(duì)象名的不必要沖突。2.參數(shù)有效性診斷設(shè)置

圖7-50中的Parameters選項(xiàng)區(qū)是與參數(shù)有關(guān)的檢驗(yàn)設(shè)置選項(xiàng)。圖7-501)?Detectdowncast

模塊的輸出計(jì)算要求把參數(shù)的指定類型轉(zhuǎn)換為較小數(shù)值范圍的類型,例如,從uint32類型轉(zhuǎn)換為uint8類型,這個(gè)選項(xiàng)只對(duì)可選參數(shù)有效。如果出現(xiàn)這個(gè)問(wèn)題,那么用戶可以利用該選項(xiàng)或者忽略這個(gè)問(wèn)題,或者顯示警告信息,或者顯示錯(cuò)誤信息。2)?Detectoverflow

對(duì)于指定的數(shù)據(jù)類型,該數(shù)據(jù)類型范圍內(nèi)的參數(shù)值無(wú)法滿足模型對(duì)數(shù)值的要求,也就是希望的數(shù)值對(duì)于給定的數(shù)據(jù)類型來(lái)說(shuō),或者范圍太大,或者范圍太小,實(shí)際數(shù)值超過(guò)了邊界范圍。例如,假設(shè)參數(shù)值是200,而設(shè)定的參數(shù)數(shù)據(jù)類型是uint8,由于uint8類型的最大可表示值是127,因此就會(huì)出現(xiàn)數(shù)值溢出。需要注意的是,參數(shù)溢出與參數(shù)的精度降低是不同的,當(dāng)理想的參數(shù)值處在數(shù)據(jù)類型允許的范圍內(nèi)能夠進(jìn)行縮放而無(wú)法準(zhǔn)確表示時(shí),這種情況下會(huì)造成數(shù)據(jù)的精度降低。參數(shù)溢出和數(shù)值精度降低都是量化誤差,兩者之間的差別非常微小,Detectoverflow選項(xiàng)可以報(bào)告所有的量化誤差。如果出現(xiàn)這個(gè)問(wèn)題,那么用戶可以利用該選項(xiàng)或者忽略這個(gè)問(wèn)題,或者顯示警告信息,或者顯示錯(cuò)誤信息。3)?Detectunderflow

如果希望的參數(shù)值非常小,而參數(shù)的數(shù)據(jù)類型沒(méi)有足夠的精度來(lái)表示這個(gè)數(shù)值,那么就會(huì)出現(xiàn)數(shù)值下溢,在這種情況下,參數(shù)值可能會(huì)變?yōu)榱悖@就與希望的數(shù)值存在了差別。如果出現(xiàn)數(shù)值下溢,那么用戶可以利用這個(gè)選項(xiàng)或者忽略這個(gè)問(wèn)題,或者顯示警告信息,或者顯示錯(cuò)誤信息。4)?Detectprecisionloss

Simulink檢測(cè)到的模型中參數(shù)的數(shù)據(jù)類型不具備足夠的精度來(lái)準(zhǔn)確地表示參數(shù)值,從而使數(shù)據(jù)損失了一定的精度。參數(shù)的精度降低與參數(shù)溢出是不同的。如果出現(xiàn)數(shù)值精度降低,那么用戶可以利用這個(gè)選項(xiàng)或者忽略這個(gè)問(wèn)題,或者顯示警告信息,或者顯示錯(cuò)誤信息。5)?Detectlossoftunability

如果可調(diào)的工作區(qū)變量被封裝初始化代碼修改,或者被用于含有Simulink不支持的運(yùn)算符或函數(shù)的算術(shù)表達(dá)式中,那么這個(gè)變量就不再可調(diào)。用戶可以利用這個(gè)選項(xiàng)來(lái)報(bào)告損失了這種可調(diào)性,選擇none,則不報(bào)告這個(gè)問(wèn)題;選擇warning,則顯示警告消息(缺省值);選擇error,則顯示錯(cuò)誤消息。3.?dāng)?shù)據(jù)存儲(chǔ)有效性診斷設(shè)置

圖7-51中的DataStoreMemoryBlock選項(xiàng)區(qū)是與DataStoryMemory模塊和Simulink.Signal對(duì)象有關(guān)的檢驗(yàn)設(shè)置選項(xiàng)。圖7-511)?Detectreadbeforewrite

模型試圖在還未存儲(chǔ)數(shù)據(jù)的時(shí)間步上讀取數(shù)據(jù)。在該設(shè)置選項(xiàng)中,可以選擇的選項(xiàng)如下:

Uselocalsettings:對(duì)于DataStoreMemory模塊定義的每個(gè)數(shù)據(jù)存儲(chǔ),使用模塊定義的設(shè)置。這個(gè)選項(xiàng)會(huì)對(duì)全局?jǐn)?shù)據(jù)的存儲(chǔ)進(jìn)行檢測(cè)。

DisableAll:關(guān)閉對(duì)模型可以訪問(wèn)的所有數(shù)據(jù)存儲(chǔ)的檢測(cè)。

EnableAllAsWarning:在MATLAB命令行顯示警告信息。

EnableAllAsErrors:終止仿真,并在錯(cuò)誤診斷對(duì)話框中顯示錯(cuò)誤消息。

2)?Detectwriteafterread

在當(dāng)前時(shí)間步上,模型從數(shù)據(jù)存儲(chǔ)區(qū)中先讀取數(shù)據(jù),然后再把數(shù)據(jù)重新存儲(chǔ)到數(shù)據(jù)存儲(chǔ)區(qū)。這個(gè)選項(xiàng)的可選內(nèi)容與上個(gè)選項(xiàng)相同。

3)?Detectwriteafterwrite

在當(dāng)前時(shí)間步上,模型試圖連續(xù)存儲(chǔ)兩次數(shù)據(jù)。這個(gè)選項(xiàng)的可選內(nèi)容與上個(gè)選項(xiàng)相同。4)?Multitaskdatastore

一個(gè)任務(wù)是從DataStoreMemory模塊中讀取數(shù)據(jù),另一個(gè)任務(wù)是向DataStoreMemory模塊寫數(shù)據(jù),如果兩個(gè)任務(wù)之間互不干擾,那么這個(gè)操作是安全的。如果出現(xiàn)多任務(wù)數(shù)據(jù)操作情況,那么用戶可以利用這個(gè)選項(xiàng)或者關(guān)閉檢測(cè),或者顯示警告信息,或者顯示錯(cuò)誤信息。

5)?Duplicatedatastorenames

如果模型中包含了多個(gè)DataStoreMemory模塊,而且這些模塊都指定的是相同的數(shù)據(jù)存儲(chǔ)名稱,那么在這種情況下,用戶可以利用這個(gè)選項(xiàng)或者忽略這個(gè)問(wèn)題,或者顯示警告信息,或者顯示錯(cuò)誤信息。4.調(diào)試數(shù)據(jù)有效性診斷設(shè)置

圖7-52中的Debugging選項(xiàng)區(qū)是與模型調(diào)試有關(guān)的檢驗(yàn)設(shè)置選項(xiàng)。圖7-521)?Arrayboundsexceeded

這個(gè)參數(shù)是邊界檢驗(yàn)選項(xiàng),它可以使Simulink執(zhí)行這樣的檢驗(yàn):在仿真運(yùn)行過(guò)程中,當(dāng)模塊存儲(chǔ)數(shù)據(jù)時(shí),檢驗(yàn)是否把數(shù)據(jù)寫在了分配給模型的內(nèi)存之外。如果模型中包含了用戶編寫的存在錯(cuò)誤的S函數(shù),那么這種情況是有可能發(fā)生的。通常,只有在模型中包含了用戶編寫的S函數(shù)時(shí)才執(zhí)行這個(gè)檢驗(yàn)。這是因?yàn)椋绻鼓苓@個(gè)檢驗(yàn),則當(dāng)每次執(zhí)行模塊時(shí),Simulink都會(huì)對(duì)模型中的每個(gè)模塊執(zhí)行邊界檢驗(yàn)。這當(dāng)然會(huì)減慢模型的執(zhí)行速度。為了避免模型執(zhí)行速度的不必要降低,最好是當(dāng)用戶懷疑模型中所包含的用戶編寫的S函數(shù)中含有bug時(shí),再使能這個(gè)選項(xiàng)。在許多情況下,這個(gè)檢驗(yàn)并不是必需的,因?yàn)檫@個(gè)檢驗(yàn)是十分耗時(shí)的。但是,如果模型中加入了用戶編寫的模塊(例如S函數(shù)),那么這些檢驗(yàn)應(yīng)當(dāng)打開(kāi)以避免出現(xiàn)性能或內(nèi)存使用方面的問(wèn)題。2)?ModelVerificationblockenabling

這個(gè)參數(shù)允許用戶使能或關(guān)閉在當(dāng)前模型中的模型驗(yàn)證模塊。在該設(shè)置選項(xiàng)中,可以選擇下面的選項(xiàng):

Uselocalsettings:根據(jù)每個(gè)模塊中的Enableassertion參數(shù)的值使能或關(guān)閉模塊,如果模塊的Enableassertion參數(shù)是on,則使能模塊,否則關(guān)閉模塊。

Enableall:不管模塊中的Enableassertion參數(shù)的值為何值,使能模型中所有的模型驗(yàn)證模塊。

Disableall:不管模塊中的Enableassertion參數(shù)的值為何值,關(guān)閉模型中所有的模型驗(yàn)證模塊。7.4.4類型轉(zhuǎn)換診斷設(shè)置

選擇Diagnostics選項(xiàng)下的TypeConversion命令,將顯示如圖7-53所示的TypeConversion選項(xiàng)面板。當(dāng)Simulink在模型編譯過(guò)程中檢測(cè)到數(shù)據(jù)類型轉(zhuǎn)換問(wèn)題時(shí),利用這個(gè)選項(xiàng)面板中的三個(gè)選項(xiàng)可以設(shè)置Simulink對(duì)這個(gè)問(wèn)題采取的處理方式。圖7-531)?Unnecessarytypeconversions

DataTypeConversion模塊可以把任何Simulink數(shù)據(jù)類型的輸入信號(hào)轉(zhuǎn)換為模塊中Outputdatatypemode參數(shù)、Outputdatatype參數(shù)和/或Outputscaling參數(shù)指定的數(shù)據(jù)類型。輸入可以是實(shí)數(shù)信號(hào)或復(fù)數(shù)信號(hào),如果輸入是實(shí)數(shù),則輸出也是實(shí)數(shù);如果輸入是復(fù)數(shù),則輸出也是復(fù)數(shù)。但是在模型中添加DataTypeConversion模塊進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換是沒(méi)有必要的。這個(gè)參數(shù)項(xiàng)提供的功能就是當(dāng)Simulink檢測(cè)到模型中出現(xiàn)了這種不必要的類型轉(zhuǎn)換時(shí),選擇none選項(xiàng)則忽略這個(gè)問(wèn)題,選擇warning選項(xiàng)則顯示警告信息。2)?Vector/matrixblockinputconversion

Simulink按照下列規(guī)則把向量轉(zhuǎn)換為行矩陣或列矩陣,或者把行矩陣或列矩陣轉(zhuǎn)換為向量。

如果與向量信號(hào)連接的輸入要求一個(gè)矩陣信號(hào),那么Simulink會(huì)把向量轉(zhuǎn)換為行矩陣或列矩陣;

如果與行矩陣或列矩陣連接的輸入要求一個(gè)向量信號(hào),那么Simulink會(huì)把矩陣轉(zhuǎn)換為向量;

如果模塊的輸入信號(hào)既有向量信號(hào),也有矩陣信號(hào),而且所有的矩陣輸入都是一行矩陣或一列矩陣,那么Simulink會(huì)把向量一個(gè)個(gè)轉(zhuǎn)換為行矩陣或列矩陣。3)?32-bitintegertosingleprecisionfloatconversion

如果Simulink在仿真過(guò)程中檢測(cè)到模型中有32位的整數(shù)數(shù)值被轉(zhuǎn)換為浮點(diǎn)數(shù)值,那么選擇none選項(xiàng)可以忽略這個(gè)問(wèn)題,選擇warning選項(xiàng)可以顯示警告信息。用戶可以根據(jù)實(shí)際情況選擇是否打開(kāi)這個(gè)檢驗(yàn),因?yàn)檫@種數(shù)值轉(zhuǎn)換可能會(huì)降低數(shù)值的精度。7.4.5連接診斷設(shè)置

選擇Diagnostics選項(xiàng)下的Connectivity命令,將顯示如圖7-54所示的Connectivity選項(xiàng)面板。當(dāng)Simulink在模型編譯過(guò)程中檢測(cè)到模塊連接問(wèn)題時(shí),利用這個(gè)選項(xiàng)面板中的選項(xiàng)可以設(shè)置Simulink對(duì)這個(gè)問(wèn)題采取的處理方式。圖7-541.Signals(信號(hào))診斷設(shè)置

Signals選項(xiàng)區(qū)中的選項(xiàng)用來(lái)設(shè)置與信號(hào)有關(guān)的檢測(cè)。

1)?Signallabelmismatch

Simulink在仿真過(guò)程中檢測(cè)到純虛信號(hào)有共同的源信號(hào),但卻用了不同的標(biāo)簽。將該選項(xiàng)設(shè)置為none時(shí),可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。

2)?Unconnectedblockinputports

Simulink在仿真過(guò)程中檢測(cè)到模型中包含了沒(méi)有連接輸入的模塊。將該選項(xiàng)設(shè)置為none時(shí),可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。3)?Unconnectedblockoutputports

Simulink在仿真過(guò)程中檢測(cè)到模型中包含了沒(méi)有連接輸出的模塊。將該選項(xiàng)設(shè)置為none時(shí),可以讓Simulink忽略這個(gè)問(wèn)題;設(shè)置為warning時(shí),顯示警告消息;設(shè)置為error時(shí),顯示錯(cuò)誤消息。

4)?Unconnectedline

Simulink在仿真過(guò)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論