版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第7章:動態(tài)系統(tǒng)Simulink建模與仿真本章內(nèi)容:Simulink工具箱簡介Simulink建模與仿真基本方法 動態(tài)系統(tǒng)Simulink仿真模型的建立 Simulink子系統(tǒng)技術(shù)S-函數(shù)與Simulink仿真 *模糊邏輯工具箱簡介7.1 Simulink工具箱簡介7.1.1 Simulink工具箱簡介 Simulink是Simulation(仿真)與link(連接)的簡寫形式,它提供一個動態(tài)系統(tǒng)建模、仿真和綜合分析的集成環(huán)境 ,是MATLAB最重要的組件之一,也是其它仿真工具箱的可視化仿真平臺 。優(yōu)點:建模方便靈活, 適用面廣, 結(jié)構(gòu)和流程清晰, 效率高等。 1 Simulink啟動(1)在
2、MATLAB命令窗口輸入“simulink”命令。(2)單擊MATLAB主窗口左下角的“Start”按鈕,在彈出的快捷菜單中單擊【Simulink】【Library Browser】命令。(3)單擊MATLAB主窗口工具欄里的工具。7.1.2 Simulink組成組成圖7-1 Simulink窗口界面Commonly Used Blocks(常用模塊庫)Continuous(連續(xù)系統(tǒng)模塊庫)Discontinuous(非連續(xù)系統(tǒng)模塊庫)Discrete(離散系統(tǒng)模塊庫)Logic and Bit Operations(邏輯與位操作模塊庫)Lookup Tables(查詢表模塊庫)Math Op
3、erations(數(shù)學(xué)操作模塊庫)Model Verification(模型驗證模塊庫)2 Simulink模塊庫組件模塊庫組件 Simulink7.1模塊庫共包含16個子模塊庫,它們是:Model-Wide Utility,Ports & Subsystems(接口與子系統(tǒng)模塊庫),Signal Attributes(信號屬性模塊庫)Signal Routing(信號路由模塊庫)Sinks(輸出模塊庫)Sources(信號源模塊庫)User-Defined Functions(用戶自定義模塊庫)Additional Math & Discrete (附加數(shù)學(xué)和離散系統(tǒng)模塊庫)
4、 是為了加快建模速度,節(jié)省建模過程中尋找模塊的時間而將最常用的基本模塊集中放在一起形成的,在初學(xué)Simulink建模與仿真時,是使用最為頻繁的模塊庫。 (1) Commonly Used Blocks(常用模塊庫)圖7-2v常用模塊庫包括總線信號生成器(Bus Creator)模塊、總線信號選擇器(Bus Selector)模塊、常數(shù)模塊(Constant)、數(shù)據(jù)類型轉(zhuǎn)換(Data Type Conversion)模塊,信號分離器(Demux)模塊,離散時間積分(Discrete-Time Integrator)模塊,增益(Gain)模塊,信號地(Ground)模塊,輸入接口(In1)模塊,積
5、分(Integrator)模塊,邏輯操作(Logic Operator)模塊,信號合成器(Mux)模塊,輸出接口(Out1)模塊,乘法(Product)模塊,關(guān)系操作(Relational Operator)模塊,飽和(Saturation)模塊,示波器(Scope)模塊,子系統(tǒng)(Subsystem)模塊,求和模塊(Sum),開關(guān)轉(zhuǎn)換模塊(Switch),信號終端(Terminator)模塊,單位延遲(Unit Delay)模塊。 連續(xù)系統(tǒng)(Continuous)模塊庫提供了連續(xù)系統(tǒng)Simulink建模與仿真的基本模塊,有: 微分環(huán)節(jié)模塊(Derivative),積分環(huán)節(jié)模塊(Integrat
6、or),狀態(tài)空間模型(State-space),傳遞函數(shù)功能模塊(Transfer Fun),傳輸延遲模塊(Transport Delay),可變時間延遲模塊(Veriable Transport Delay),可變傳輸延遲模塊(Veriable Transport Delay)零極點增益模塊(Zero-Pole) (2) 連續(xù)系統(tǒng)模塊庫連續(xù)系統(tǒng)模塊庫 圖7-3v非連續(xù)系統(tǒng)模塊庫(DisContinity)在以前版本中也稱為非線性模塊庫,包含一些常用的非線性運算模塊,主要包括: (3) 非連續(xù)系統(tǒng)模塊庫非連續(xù)系統(tǒng)模塊庫 飽和非線性模塊(Saturation)死區(qū)非線性模塊(Dead Zone)
7、變化率限幅模塊(Rate Limiter)變化率動態(tài)限幅模塊(Rate Limiter Dynamic)用于設(shè)置飽和輸出上下限。動態(tài)飽和非線性模塊(Saturation Danymic)可以根據(jù)輸入端口Up和Lo的設(shè)定值動態(tài)設(shè)置輸出的上限和下限。用于設(shè)定死區(qū)區(qū)間。動態(tài)死區(qū)非線性模塊(Dead Zone Danymic)可以根據(jù)輸入端口Up和Lo的設(shè)定值動態(tài)設(shè)置死區(qū)區(qū)間。用于設(shè)置信號輸出變化率限幅,即:上升變化率限幅(Rising slew rate)和下降變化率限幅(Falling slew rate)??梢愿鶕?jù)輸入端口Up和Lo的設(shè)定值動態(tài)設(shè)置信號上升變化率限幅參數(shù)R和下降變化率限幅參數(shù)L。
8、磁滯回環(huán)模塊(Backlash):建立間隙模型。繼電模塊(Relay)量化模塊(Quantizer):用于輸入信號的量化處理。穿越值檢測模塊(Hit Crossing):庫侖與黏性摩擦(Coulomb & Viscous Friction):返回零模塊(Wrap to Zero)繼電模塊輸出值可以在兩個設(shè)定值之間切換。當繼電器吸合時,它保持吸合狀態(tài)輸出直到輸入信號值小于繼電斷開值(Switch off point)。當繼電器分離時,它保持分離狀態(tài)輸出直到輸入信號值大于繼電吸合值(Switch on point)??砂丛O(shè)定的穿越檢測方向(Hit crossing direction)檢測
9、信號達到設(shè)定值的時間。此時輸出一個正脈沖。在零值為不連續(xù)點,在其它值為連續(xù)線性增益。當輸入信號值超過設(shè)定的極限值(Threshold),輸出信號返回到零值。單位延遲模塊(Unit Delay):延遲一個采樣周期整數(shù)延遲模塊(Integer Delay):延遲輸入N個采樣周期,N為自然數(shù)。觸發(fā)延遲模塊(Tapped Delay):延遲N個采樣周期后并輸出全部的輸入信息。離散時間積分器(Discrete-Time Integrator):離散積分器模塊可以代替積分器用來建立純離散采樣系統(tǒng)。在離散積分器模塊參數(shù)對話框里,可以設(shè)定初始狀態(tài)值、增益值、輸出飽和值。離散傳遞函數(shù)功能模塊(Discrete
10、Transfer Fcn):可以建立離散傳遞函數(shù)模型。離散濾波器模塊(Discrete Filter):用于建立離散系統(tǒng)濾波器仿真模型。離散零極點增益模型(Discrete Zero-Pole):使用零點、極點、增益值建立離散系統(tǒng)的零極點增益模型。離散微分模塊(Difference):輸出當前輸入信號值與前一個采樣值之差。派生離散微分模塊(Discrete Derivative):模塊的輸出值按下式計算:(3)離散系統(tǒng)模塊庫)離散系統(tǒng)模塊庫離散系統(tǒng)模塊庫主要包括用于建立離散采樣系統(tǒng)的模塊 ,包括:圖7-4離散狀態(tài)空間模型(Discrete State-Space):離散狀態(tài)空間模型實現(xiàn)下面系統(tǒng)
11、模型 一階離散傳遞函數(shù)功能模塊(Transfer Fcn First Order):用于建立一階的離散傳遞函數(shù)模型。傳遞函數(shù)引導(dǎo)或終止模塊(Transfer Fcn Lead or Lag):用于實現(xiàn)輸入信號的離散時間引導(dǎo)或終止補償。實數(shù)零點傳遞函數(shù)功能模塊(Transfer Fcn Real Zero):用于實現(xiàn)具有一個實數(shù)零點而無極點的傳遞函數(shù)模型。加權(quán)滑動平均模塊(Weighted Moving Average):模塊采樣并保持最近N個輸入信號,并根據(jù)設(shè)定的權(quán)重參數(shù)值(weights)計算它們的平均值。該模塊適用于SISO系統(tǒng)或SIMO系統(tǒng)模型。記憶模塊(Memory):輸出前一時刻的輸
12、入信號值。一階保持器(First-Order Hold):實現(xiàn)離散采樣系統(tǒng)的一階采樣保持功能。零階保持器(Zero-Order Hold):實現(xiàn)離散采樣系統(tǒng)的零階采樣保持功能。v其它模塊請參考MATLAB軟件!7.2 Simulink建模與仿真基本方法v7.2.1 簡單系統(tǒng)仿真模型的建立簡單系統(tǒng)仿真模型的建立 建立上圖所示系統(tǒng)框圖的Simulink仿真模型的基本方法如下; 1.啟動MATLAB/Simulink工具箱 2.建立Simulink空白模型Simulink空白模型的建立可方法如下:在MATLAB主窗口中選擇菜單File/New/Model。選擇Simulink模塊庫瀏覽器窗口的菜單F
13、ile/New/Model。單擊Simulink模塊庫瀏覽器工具欄的新建圖標“”。3.根據(jù)系統(tǒng)框圖選擇模塊 4.模塊的復(fù)制與刪除操作在模塊庫選中模塊后,按住鼠標左鍵不放并拖動到Simulink模型窗口指定位置,釋放鼠標左鍵,完成模塊的復(fù)制操作。在模塊庫選中模塊后,單擊鼠標右鍵,在彈出的快捷菜單中,單擊“Add to Example_Model”命令將模塊添加到指定模型窗口,完成模塊的復(fù)制操作。在模塊庫選中模塊后,在庫瀏覽器窗口的Edit菜單中選擇Copy命令,用鼠標單擊目標模型窗口中指定位置,再從模型窗口的Edit菜單中選擇Paste,完成模塊的復(fù)制操作。當模型窗口已有所需模塊時,也可以直接從
14、該處復(fù)制模塊,操作方是單擊鼠標右鍵,在彈出的快捷菜單中單擊“Copy”命令,然后用鼠標右鍵單擊模型窗口空白處,在彈出的快進誒菜單中單擊“Paste”命令來完成粘貼任務(wù)。此外,也可以使用編輯菜單進行復(fù)制、粘貼操作。當然還可以用鼠標右鍵按住所需復(fù)制的模塊不放,并拖動到指定位置完成復(fù)制操作,這可大大加快建模速度。5.模塊的連接 將鼠標移動到模塊的輸出端子上,當鼠標出現(xiàn)“十字”符號后,按下鼠標左鍵并拖動到下級模塊的輸入端子上,完成模塊信號的連接。如上圖所示。選中信號輸出模塊,按下鍵盤“Ctrl”鍵并單擊下級模塊完成模塊信號的連接。在已存在的信號線上引出新的信號線時,可用鼠標右鍵單擊源信號線,并按住不放
15、拖動到指定位置,完成信號線的分支連接。如圖所示,在模塊沒有完成連接時,以紅色虛線顯示,當連接完成后以黑色實線顯示。v將各子模塊連接起來后,構(gòu)成如圖所示的系統(tǒng)模型 7.2.2 Simulink仿真模型參數(shù)設(shè)置1.基本模塊參數(shù)設(shè)置 在完成模塊的信號線連接并建立起系統(tǒng)的Simulink仿真模型后,需要設(shè)置模塊的參數(shù)。在Simulink模型里,雙擊需要修改參數(shù)的模塊,彈出參數(shù)設(shè)置對話框。2. 仿真參數(shù)設(shè)置仿真參數(shù)設(shè)置 單擊模型窗口的“Simulation”菜單,在彈出的下拉菜單中單擊“Configuration Parameters”命令,打開“Configuration Parameters”對話框
16、如圖所示。 3. 運行仿真與仿真輸出運行仿真與仿真輸出 雙擊“Scope”模塊,彈出如圖所示仿真輸出結(jié)果 仿真參數(shù)配置完畢后,可運行仿真,方法有三種:單擊模型窗口工具欄 工具單擊“Simulation”菜單,在彈出的下拉菜單中單擊“Start”命令 同時按下快捷鍵“Ctrl+T”。7.3動態(tài)系統(tǒng)Simulink仿真模型的建立v由系統(tǒng)框圖建立由系統(tǒng)框圖建立Simulink仿真模型仿真模型v由傳遞函數(shù)建立由傳遞函數(shù)建立Simulink仿真模型仿真模型v由狀態(tài)方程建立由狀態(tài)方程建立Simulink仿真模型仿真模型v由微分方程建立由微分方程建立Simulink仿真模型仿真模型7.1.1 由系統(tǒng)框圖建立
17、由系統(tǒng)框圖建立Simulink仿真模型仿真模型v在控制領(lǐng)域,控制系統(tǒng)通常以功能框圖的形式進行描述,與在控制領(lǐng)域,控制系統(tǒng)通常以功能框圖的形式進行描述,與Simulink仿真模型在結(jié)構(gòu)上十分相似,因此通過被控系統(tǒng)的仿真模型在結(jié)構(gòu)上十分相似,因此通過被控系統(tǒng)的框圖,很容易建立其框圖,很容易建立其Simulink仿真模型。下面以直流電機雙仿真模型。下面以直流電機雙閉環(huán)調(diào)速系統(tǒng)為例來說明通過系統(tǒng)框圖建立閉環(huán)調(diào)速系統(tǒng)為例來說明通過系統(tǒng)框圖建立Simulink仿真模仿真模型的基本方法。型的基本方法。r(t)為給定輸入,采用階躍信號。y(t)為系統(tǒng)輸出,表示直流電機的轉(zhuǎn)速。ASR和ACR分別為轉(zhuǎn)速調(diào)節(jié)器、電
18、流調(diào)節(jié)器,由PI調(diào)節(jié)器組成。根據(jù)直流雙閉環(huán)調(diào)速系統(tǒng)工程整定方法,進行ASR和ACR的參數(shù)整定時,首先斷開轉(zhuǎn)速環(huán),整定電流調(diào)節(jié)器ACR。然后接通轉(zhuǎn)速環(huán),整定轉(zhuǎn)速環(huán)ASR,同時調(diào)節(jié)電流環(huán)參數(shù)。根據(jù)上述分析,首先建立直流雙閉環(huán)調(diào)速系統(tǒng)的高層仿真模型,其中轉(zhuǎn)速調(diào)節(jié)器和電流調(diào)節(jié)器由空白子系統(tǒng)組成,如圖所示。轉(zhuǎn)速調(diào)節(jié)器子系統(tǒng)Simulink模型 電流調(diào)節(jié)器子系統(tǒng)Simulink模型 7.1.2 由傳遞函數(shù)建立由傳遞函數(shù)建立Simulink仿真模型仿真模型v由系統(tǒng)傳遞函數(shù)建立Simulink仿真模型可直接使用Continue模塊庫的Transfer Fun模塊,下面以實例說明?!纠}】已知某單位負反饋系統(tǒng)開
19、環(huán)傳遞函數(shù)為15 . 22410*521)(2sssssG試建立其Simulink仿真模型并進行仿真。建立模型過程如下:(1)建立一個空白的Simulink仿真模型窗口,如圖 (a)所示。(3)建立傳遞函數(shù)的模型。 (2)選擇系統(tǒng)所需的Simulink模塊 (4)連接模塊并設(shè)置仿真參數(shù) (5)運行仿真7.1.3 由狀態(tài)方程建立由狀態(tài)方程建立Simulink仿真模型仿真模型v由系統(tǒng)狀態(tài)方程建立Simulink仿真模型可直接使用Continue模塊庫的State-space模塊,下面以實例說明?!纠恳阎诚到y(tǒng)狀態(tài)空間模型為: uxx100005221320100001000010 xy0001試
20、建立其simulink仿真模型,并求其單位階躍響應(yīng)。 求解過程如下:(2) 選擇系統(tǒng)所需的Simulink模塊 (1) 建立一個Simulink空白仿真模型窗口 (3) 連接模塊并設(shè)置參數(shù) (4) 設(shè)置仿真參數(shù)并運行仿真 7.1.4 由微分方程建立由微分方程建立Simulink仿真模型仿真模型第一是將系統(tǒng)微分方程轉(zhuǎn)換為傳遞函數(shù)模型,第二是將微分方程轉(zhuǎn)換為狀態(tài)空間模型,第三是由微分方程直接建立第三是由微分方程直接建立Simulink仿真模型。仿真模型。 由微分仿真建立Simulink仿真模型有三種方法,【例】已知某系統(tǒng)數(shù)學(xué)模型是一個高階微分方程: uyyyy3252010 且輸出量y的各階導(dǎo)數(shù)初
21、始值均為零,試建立其Simuink仿真模型。求解過程如下: (1)將高階微分方程轉(zhuǎn)換為一組一階微分方程:設(shè)yx 1yx2輸出方程。則得:21xyx 32xyx uxxxuyyyyx325201032520101233 1xy (2) 建立每個一階微分方程的Simulink仿真模型 這里首先需要知道微分環(huán)節(jié) 的Simulink模型如圖(a)所示 dtxx11dtxx22dtxx33因此可以建立 Simulink仿真模型如圖(b、c、d)所示 (3) 建立微分方程組的simulink仿真模型。 將各個微分單元連接起來就構(gòu)成了整個系統(tǒng)的Simulink仿真模型,結(jié)果如下圖所示。(4) 設(shè)置Simul
22、ink仿真參數(shù)。 上圖中u取單位階躍響應(yīng)信號,Simulink求解器取默認參數(shù)配置。運行仿真得輸出響應(yīng)曲線如圖下圖所示。7.4 Simulink子系統(tǒng)技術(shù) 在使用Simulink進行建模與仿真時,經(jīng)常會遇見很復(fù)雜的系統(tǒng),難以用一個簡單的Simulink框圖模型來進行描述。與軟件開發(fā)方法一樣,此時可將復(fù)雜系統(tǒng)的模型進行功能劃分,將其分割為各個獨立的子系統(tǒng),然后再采用以下兩種策略加以實現(xiàn):(1)自下而上的策略:首先建立復(fù)雜系統(tǒng)中的每一個功能模塊,然后再組合這些模塊,逐漸建立整個系統(tǒng)的模型。(2)自上而下的策略:首先建立復(fù)雜系統(tǒng)的整體結(jié)構(gòu)模型,然后再逐一實現(xiàn)每一部分的模型。無論那種策略,對于復(fù)雜系統(tǒng)
23、模型的建立,都要用到子系統(tǒng)技術(shù)。本節(jié)主要介紹子系統(tǒng)及其封裝技術(shù)。7.4.1子系統(tǒng)的創(chuàng)建方法子系統(tǒng)的創(chuàng)建方法1.通過port&subsystem模塊庫建立子系統(tǒng) 在建立子系統(tǒng)時,比較方便的是首先使用Port&Subsystem的Subsystem模塊建立一個空白子系統(tǒng),然后對空白子系統(tǒng)進行編輯,最后再建立系統(tǒng)整體的Simulink仿真模型。這里以閉環(huán)系統(tǒng)的PID控制為例來說明子系統(tǒng)的建立方法。如圖所示v在已經(jīng)建立好的復(fù)雜系統(tǒng)模型之中建立子系統(tǒng)。其基本方法是:首先選擇將要生成子系統(tǒng)的一組模塊,然后選擇Simulink模型編輯器的菜單【Edit:Create Subsystem】或者
24、單擊鼠標右鍵選擇Create Subsystem選項,都將生成子系統(tǒng)模塊。如圖所示。2.直接建立子系統(tǒng)7.4.2子系統(tǒng)的封裝方法子系統(tǒng)的封裝方法v在上述PID控制的子系統(tǒng)模型中,如果需要修改PID的參數(shù),則需要打開其子系統(tǒng)模型窗口。為了能不打開該子系統(tǒng)模塊窗口而修改其內(nèi)部參數(shù),Simulink提供了子系統(tǒng)封裝技術(shù)。v以上述建立的PID控制器子系統(tǒng)為例來說明子系統(tǒng)封裝的基本步驟。 (1) 選中子系統(tǒng),單擊鼠標右鍵,在彈出的對話框中單擊“Mask Subsystem”命令或者單擊菜單【Edit】【Mask Subsystem】,彈出子系統(tǒng)封裝編輯窗口,如圖所示。在“Drawing commands
25、”編輯窗口,可以給模塊圖標上繪制圖形,如使用plot繪制圖形、disp顯示文字、image顯示已有圖形 (1)子系統(tǒng)圖標設(shè)置,單擊 Icon按鈕,設(shè)置子系統(tǒng)圖標。在“Drawing commands”編輯窗口,可以給模塊圖標上繪制圖形,如使用plot繪制圖形、disp顯示文字、image顯示已有圖形例:使用如下命令可得到如圖所示結(jié)果disp(PID Controller)plot(sin(0:0.1:2*pi),cos(0:0.1:2*pi)/2)image(imread(library.bmp)封裝編輯框基本設(shè)置封裝編輯框基本設(shè)置(2)參數(shù)設(shè)置:單擊Parameters按鈕,建立封裝模塊內(nèi)部
26、變量與封裝對話框之間的聯(lián)系 。單擊按鈕或按鈕可以增加或刪除變量 “Type” 可選擇參數(shù)為:“Edit”表示用文本編輯框輸入?yún)?shù) “Popup”表示以下拉菜單形式輸入?yún)?shù) “checkbox”表示以復(fù)選框形式輸入?yún)?shù) 此處變量名稱要與子系統(tǒng)參數(shù)名稱相同(3)初始化設(shè)置:單擊“Initialization” 按鈕,彈出封裝編輯器參數(shù)初始化設(shè)置對話框。(4)文檔編輯。單擊“Documentation”按鈕,彈出如圖所示的文檔編輯窗口。在這里可建立子系統(tǒng)的文檔說明。 經(jīng)過上述操作,完成對PID子系統(tǒng)的封裝操作,雙擊子系統(tǒng)模塊,彈出參數(shù)設(shè)置對話框如圖所示。7.5 S-函數(shù)與Simulink仿真v7.5
27、.1 S-函數(shù)簡介函數(shù)簡介 S-函數(shù)是系統(tǒng)函數(shù)(System Function)的簡稱,是指用指定語言描述的一個非圖形化功能模塊(以區(qū)別Simulink的系統(tǒng)模塊),是Matlab為用戶提供的一個擴展功能接口。用戶可以采用MATLAB語言,C、C+,F(xiàn)ortran或者Ada等語言編寫S函數(shù)。S-函數(shù)由一種特定的語法構(gòu)成,用來描述并實現(xiàn)連續(xù)系統(tǒng)、離散系統(tǒng)、混合系統(tǒng)等模型。S函數(shù)可接收來自Simulink求解器的相關(guān)信息,并對求解器發(fā)出的命令作出響應(yīng),這種交互作用類似Smulink系統(tǒng)模塊與求解器的交互作用。7.5.2.S-函數(shù)的用法v在動態(tài)系統(tǒng)設(shè)計、仿真與分析中,用戶可以使用Simulink瀏覽
28、器里用戶自定義模塊庫中的S-Functiong模塊來調(diào)用已編寫的S-函數(shù)。S-Function模塊默認為一個單輸入單輸出的系統(tǒng)模塊,如果有多個輸入或者輸出信號,可以采用Mux模塊和Demux模塊對信號進行組合和分離操作。在Simulink空白模板里粘貼“S-Function”模塊,雙擊該模塊彈出參數(shù)設(shè)置對話框,如圖所示。創(chuàng)建S-函數(shù)源文件。在Simulink模型框圖中添加S-Function模塊,并進行正確的參數(shù)設(shè)置。在Simulink模塊框圖中按照定義好的功能連接輸入輸出端口進行基本仿真參數(shù)設(shè)置,單擊工具欄工具,運行仿真。一般而言,使用S-函數(shù)的基本步驟如下: 創(chuàng)建S-函數(shù)源文件的方法有很多
29、,用戶可以按照S-函數(shù)語法格式自行編寫每一行代碼,但是這樣做既費時費力,又容易出錯。Simulink為用戶提供了很多S-函數(shù)的模板和例子,我們可以根據(jù)自己的需要修改相應(yīng)的模板或者例子即可。詳細的Simulink模板文件在后面介紹。7.5.3 S-函數(shù)模板v單擊Simulink Library的“User-Defined Function”前的擴展按鈕,再雙擊“S-function Examples”模塊彈出如圖7-477所示的S-函數(shù)實例模塊庫。圖中包括用M文件、C語言、C+、Ada、和Fortran語言編寫的S-函數(shù)實例?!纠}】以S-函數(shù)完成對輸入信號的運算:y3*u+2。解:基本步驟如下
30、:(1)建立Simulink仿真模型,如圖所示 2)打開S-函數(shù)模板源文件如下function sys,x0,str,ts = sfuntmpl(t,x,u,flag)switch flag, case 0, sys,x0,str,ts=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTermina
31、te(t,x,u); otherwise DAStudio.error(Simulink:blocks:unhandledFlag, num2str(flag); endfunction sys,x0,str,ts=mdlInitializeSizessizes = simsizes;sizes.NumContStates = 0;sizes.NumDiscStates = 0;sizes.NumOutputs = 0;sizes.NumInputs = 0;sizes.DirFeedthrough = 1;sizes.NumSampleTimes = 1; 定義采用周期的個數(shù)sys = si
32、msizes(sizes); x0 = ; str = ; ts = 0 0;function sys=mdlDerivatives(t,x,u) sys = ;function sys=mdlUpdate(t,x,u) sys = ;function sys=mdlOutputs(t,x,u)sys = ;function sys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime = 1; sys = t + sampleTime;function sys=mdlTerminate(t,x,u)sys = ;ts是一個12的向量,ts(1)定義采樣周期,ts(2
33、)是偏移量。當ts(1)=0表示系統(tǒng)為連續(xù)系統(tǒng),當ts(1)=-2表示系統(tǒng)采樣時間由flag4的mdlGetTimeOfNextVarHit函數(shù)決定。 輸入變量中,t是采樣時間,x是狀態(tài)變量,u是輸入變量(從Simulink輸入來的變量信息,當有多個輸入時,u為一個行向量,flag是仿真過程中的狀態(tài)標志或稱之為控制變量,由它來判斷當前將要調(diào)用的回調(diào)函數(shù);輸出變量sys根據(jù)flag的不同而返回不同的內(nèi)容。 ) 在本例題中,為了完成設(shè)定的函數(shù)功能y=3*u+2,可將上述S-函數(shù)的模板進行如下修改(這里只列出需要修改的部分):首先將S函數(shù)文件首行修改為:function sys,x0,str,ts
34、=Mysfun(t,x,u,flag),并將文件另存為Mysfun。其次,找到function sys,x0,str,ts=mdlInitializeSizes,作如下修改: sizes.NumOutputs= 1; sizes.NumInputs= 1;然后,再找到function sys=mdlOutputs(t,x,u),作如下修改: sys =3*u+2;最后,將該文件保存到當前目錄下的Mysfun.m文件中。(3)雙擊仿真模型中的S-function模塊打開參數(shù)設(shè)置對話框,并修改S-function的名稱為“Mysfun”。(4)修改仿真參數(shù),完成仿真。這里仿真求解器參數(shù)取系統(tǒng)默認值
35、,運行仿真,可得如圖所示仿真結(jié)果?!纠恳阎诚到y(tǒng)狀態(tài)方程為:uxx20223300020001xy111試用S-函數(shù)建立其仿真模型,并求其單位階躍響應(yīng)曲線。解:首先打開S-函數(shù)模板文件。打開S-函數(shù)模板文件除了按照上述介紹的方法,也可以在Command Windows中輸入命令: open sfuntmpl或者 edit sfuntmpl執(zhí)行命令后系統(tǒng)彈出M文件的S-函數(shù)編輯窗口。實現(xiàn)上述系統(tǒng)的S-函數(shù)程序代碼如下所示:function sys,x0,str,ts = Mysfun01(t,x,u,flag)switch flag,case 0, % 初始化% sys,x0,str,ts=m
36、dlInitializeSizes;case 1, %求導(dǎo)數(shù) sys=mdlDerivatives(t,x,u);case 2, % 狀態(tài)更新% sys=mdlUpdate(t,x,u);case 3, %計算輸出% sys=mdlOutputs(t,x,u);%計算下一個采樣時刻%case 4, sys=mdlGetTimeOfNextVarHit(t,x,u);case 9, % 結(jié)束處理 % sys=mdlTerminate(t,x,u);otherwise%錯誤處理 % DAStudio.error(Simulink:blocks:unhandledFlag, num2str(flag
37、); endfunction sys,x0,str,ts=mdlInitializeSizessizes = simsizes; sizes.NumContStates = 3;% 系統(tǒng)有三個連續(xù)狀態(tài)變量sizes.NumDiscStates = 0;sizes.NumOutputs = 1;% 系統(tǒng)有一個輸出變量sizes.NumInputs = 1;% 系統(tǒng)有一個輸入變量sizes.DirFeedthrough = 0;%系統(tǒng)不存在直通環(huán)節(jié)sizes.NumSampleTimes = 1; % 只有一種采樣時間sys = simsizes(sizes);x0 = 0;0;0; %str =
38、 ;ts = 0 0;function sys=mdlDerivatives(t,x,u)x(1)=-1*x(1)+3*u;x(2)=-2*x(2)-22*u;x(3)=-3*x(3)+20*u;sys =x;function sys=mdlUpdate(t,x,u)sys = ;function sys=mdlOutputs(t,x,u)sys = -x(1)-x(2)-x(3);function sys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime = 1; % 設(shè)置采樣周期sys = t + sampleTime;function sys=mdlTerm
39、inate(t,x,u)sys = ;將上述S-函數(shù)在當前目錄下保存為M文件Mysfun01,再建立Simulink仿真模型如圖所示,并設(shè)置S-function模塊的參數(shù)為S-function name,仿真參數(shù)取默認值,運行仿真可得仿真結(jié)果如圖所示。7.5.4 添加用戶參數(shù)的S-函數(shù)v 當S-函數(shù)需要添加用戶參數(shù)時,要注意兩點。第一,在S-函數(shù)源代碼中,用到該參數(shù)的各個子函數(shù),在函數(shù)聲明部分均應(yīng)添加該參數(shù),第二,在Simulink模型中設(shè)置“S-function”模塊參數(shù)時,參數(shù)的名稱和順序必須與S-函數(shù)源代碼中的參數(shù)名稱和順序完全一致。下面以建立一個三角波函數(shù)發(fā)生器為例來說明帶參數(shù)項的S-
40、函數(shù)的建立與使用?!纠吭嚱imulink下三角波函數(shù)發(fā)生器,且三角波頻率幅值可調(diào)。解:首先編寫生成三角波S-函數(shù)的M文件,打開M文件模板程序,做如下所改:function sys,x0,str,ts = sanjiaobo(t,x,u,flag,A,Freq)%輸入?yún)?shù)A為三角波幅值,F(xiàn)req為三角波頻率switch flag, case 0, sys,x0,str,ts=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t
41、,x,u,A,Freq);%注意在輸出函數(shù)部分用到附加參數(shù) case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTerminate(t,x,u); otherwise error(Unhandled flag = ,num2str(flag);endfunction sys,x0,str,ts=mdlInitializeSizessizes = simsizes;sizes.NumContStates = 0;sizes.NumDiscStates = 0;sizes.NumOutputs = 1; sizes.NumInputs
42、 = 1;sizes.DirFeedthrough = 1;sizes.NumSampleTimes = 1; %只有一種采樣時間sys = simsizes(sizes);x0 = ;str = ;% initialize the array of sample timests = 0 0;function sys=mdlDerivatives(t,x,u)sys = ;function sys=mdlUpdate(t,x,u)sys = ;function sys=mdlOutputs(t,x,u,A,Freq)T=1/Freq; %求三角波周期m=rem(u,T); %u為外部輸入時間信
43、息,rem為求余函數(shù)K=floor(u/T); %floor為向零取整r=4*A*Freq; c=T/2;if (m=0)&(m=c)&(m=T)sys=-r*(u-(K+0.75)*T);else sys=A;endfunction sys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime =1; sys = t + sampleTime;function sys=mdlTerminate(t,x,u)sys = ; % 仿真結(jié)束 將上述M文件的S函數(shù)在當前目錄下保存為sanjiaobo.m文件,建立Simulink仿真模型如圖(a)所示。雙擊“
44、S-function”模塊,在彈出的參數(shù)設(shè)置對話框種,設(shè)置“S-functionname”為“saniaobo”,設(shè)置“S-function Parameter”為“1,1500”,如圖(b)所示。Simulink求解器參數(shù)“Max step size”設(shè)置為1e-5,“Stop time”設(shè)置為0.2s,其它取系統(tǒng)默認值。單擊Simulink模型窗口工具,運行仿真得如圖7-56所示結(jié)果(圖中顯示時間范圍為07e-3s)。7.5.5離散系統(tǒng)的S-函數(shù) 【例】已知離散PID表達式為:u(k)=Kp*e(k)+Ki*T*kmke0)(+Kd*e(k-1)-e(k-2)/T試使用S-函數(shù)實現(xiàn)離散PI
45、D控制器,并建立Simulink仿真模型。v解:首先打開S-函數(shù)M-文件的模板程序,建立離散PID的 S-函數(shù)源文件。結(jié)果如下:function sys,x0,str,ts = sfuntmpl(t,x,u,flag,Kp,Ki,Kd)switch flag,case 0, sys,x0,str,ts=mdlInitializeSizes;case 1, sys=mdlDerivatives(t,x,u);case 2, sys=mdlUpdate(t,x,u,Kp,Ki,Kd);case 3, sys=mdlOutputs(t,x,u);case 4, sys=mdlGetTimeOfNex
46、tVarHit(t,x,u);case 9, sys=mdlTerminate(t,x,u);otherwise DAStudio.error(Simulink:blocks:unhandledFlag, num2str(flag); end % end sfuntmplfunction sys,x0,str,ts=mdlInitializeSizessizes = simsizes; sizes.NumContStates = 0;sizes.NumDiscStates = 4;sizes.NumOutputs = 1;sizes.NumInputs = 1;sizes.DirFeedthrough = 0;sizes.NumSampleTimes = 1; % 只有一種采樣時間 sys = simsizes(sizes);x0 = 0;0;0;0; %在此定義系統(tǒng)狀態(tài)變量的初始值str = ;ts = -2 0
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年銷售經(jīng)理年終個人工作總結(jié)4篇
- 《采用合理的論證方法》課件 2024-2025學(xué)年統(tǒng)編版高中語文選擇性必修上冊
- 2025年春九年級物理下冊 第十七、十八章綜合測試卷(蘇科版)
- 石河子大學(xué)《文化遺產(chǎn)概論》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《攝影》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《機械原理》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《專題產(chǎn)品設(shè)計》2021-2022學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《線性控制系統(tǒng)》2022-2023學(xué)年期末試卷
- 沈陽理工大學(xué)《熱工與流體力學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《計算機網(wǎng)絡(luò)技術(shù)基礎(chǔ)》2022-2023學(xué)年期末試卷
- 中醫(yī)減肥藥方-超有效分類型
- 論現(xiàn)代外科技術(shù)的發(fā)展趨勢
- 辦公樓室外地面維修改造施工組織設(shè)計樣本
- 小學(xué)科學(xué)試卷分析存在問題及整改措施4篇-
- 合同訂立前的風(fēng)險告知與防范
- 電梯使用安全風(fēng)險日管控周排查月調(diào)度管理制度及清單表
- 架構(gòu)師轉(zhuǎn)正述職報告
- 2023年廣東省普通高中學(xué)業(yè)水平合格性考試數(shù)學(xué)真題試卷含詳解
- 管道支架安裝圖集
- 保護眼睛-家長進課堂課件
- 肛門疾病知識講座
評論
0/150
提交評論