




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
動態(tài)系統(tǒng)建模與仿真第1頁,共65頁,2023年,2月20日,星期三7.1Simulink工具箱簡介
7.1.1Simulink工具箱簡介
Simulink是Simulation(仿真)與link(連接)的簡寫形式,它提供一個動態(tài)系統(tǒng)建模、仿真和綜合分析的集成環(huán)境,是MATLAB最重要的組件之一,也是其它仿真工具箱的可視化仿真平臺。優(yōu)點:建模方便靈活,適用面廣,結構和流程清晰,效率高等。
第2頁,共65頁,2023年,2月20日,星期三1Simulink啟動(1)在MATLAB命令窗口輸入“simulink”命令。(2)單擊MATLAB主窗口左下角的“Start”按鈕,在彈出的快捷菜單中單擊【Simulink】→【LibraryBrowser】命令。(3)單擊MATLAB主窗口工具欄里的工具。7.1.2Simulink組成圖7-1Simulink窗口界面第3頁,共65頁,2023年,2月20日,星期三CommonlyUsedBlocks(常用模塊庫)Continuous(連續(xù)系統(tǒng)模塊庫)Discontinuous(非連續(xù)系統(tǒng)模塊庫)Discrete(離散系統(tǒng)模塊庫)LogicandBitOperations(邏輯與位操作模塊庫)LookupTables(查詢表模塊庫)MathOperations(數(shù)學操作模塊庫)ModelVerification(模型驗證模塊庫)2Simulink模塊庫組件
Simulink7.1模塊庫共包含16個子模塊庫,它們是:第4頁,共65頁,2023年,2月20日,星期三Model-WideUtility,Ports&Subsystems(接口與子系統(tǒng)模塊庫),SignalAttributes(信號屬性模塊庫)SignalRouting(信號路由模塊庫)Sinks(輸出模塊庫)Sources(信號源模塊庫)User-DefinedFunctions(用戶自定義模塊庫)AdditionalMath&Discrete(附加數(shù)學和離散系統(tǒng)模塊庫)第5頁,共65頁,2023年,2月20日,星期三
是為了加快建模速度,節(jié)省建模過程中尋找模塊的時間而將最常用的基本模塊集中放在一起形成的,在初學Simulink建模與仿真時,是使用最為頻繁的模塊庫。(1)CommonlyUsedBlocks(常用模塊庫)圖7-2第6頁,共65頁,2023年,2月20日,星期三常用模塊庫包括總線信號生成器(BusCreator)模塊、總線信號選擇器(BusSelector)模塊、常數(shù)模塊(Constant)、數(shù)據(jù)類型轉換(DataTypeConversion)模塊,信號分離器(Demux)模塊,離散時間積分(Discrete-TimeIntegrator)模塊,增益(Gain)模塊,信號地(Ground)模塊,輸入接口(In1)模塊,積分(Integrator)模塊,第7頁,共65頁,2023年,2月20日,星期三邏輯操作(LogicOperator)模塊,信號合成器(Mux)模塊,輸出接口(Out1)模塊,乘法(Product)模塊,關系操作(RelationalOperator)模塊,飽和(Saturation)模塊,示波器(Scope)模塊,子系統(tǒng)(Subsystem)模塊,求和模塊(Sum),開關轉換模塊(Switch),信號終端(Terminator)模塊,單位延遲(UnitDelay)模塊。第8頁,共65頁,2023年,2月20日,星期三
連續(xù)系統(tǒng)(Continuous)模塊庫提供了連續(xù)系統(tǒng)Simulink建模與仿真的基本模塊,有:微分環(huán)節(jié)模塊(Derivative),積分環(huán)節(jié)模塊(Integrator),狀態(tài)空間模型(State-space),傳遞函數(shù)功能模塊(TransferFun),傳輸延遲模塊(TransportDelay),可變時間延遲模塊(VeriableTransportDelay),可變傳輸延遲模塊(VeriableTransportDelay)零極點增益模塊(Zero-Pole)(2)連續(xù)系統(tǒng)模塊庫
圖7-3第9頁,共65頁,2023年,2月20日,星期三非連續(xù)系統(tǒng)模塊庫(DisContinity)在以前版本中也稱為非線性模塊庫,包含一些常用的非線性運算模塊,主要包括:
(3)非連續(xù)系統(tǒng)模塊庫
飽和非線性模塊(Saturation)死區(qū)非線性模塊(DeadZone)變化率限幅模塊(RateLimiter)變化率動態(tài)限幅模塊(RateLimiterDynamic)用于設置飽和輸出上下限。動態(tài)飽和非線性模塊(SaturationDanymic)可以根據(jù)輸入端口Up和Lo的設定值動態(tài)設置輸出的上限和下限。用于設定死區(qū)區(qū)間。動態(tài)死區(qū)非線性模塊(DeadZoneDanymic)可以根據(jù)輸入端口Up和Lo的設定值動態(tài)設置死區(qū)區(qū)間。用于設置信號輸出變化率限幅,即:上升變化率限幅(Risingslewrate)和下降變化率限幅(Fallingslewrate)??梢愿鶕?jù)輸入端口Up和Lo的設定值動態(tài)設置信號上升變化率限幅參數(shù)R和下降變化率限幅參數(shù)L。第10頁,共65頁,2023年,2月20日,星期三磁滯回環(huán)模塊(Backlash):建立間隙模型。繼電模塊(Relay)量化模塊(Quantizer):用于輸入信號的量化處理。穿越值檢測模塊(HitCrossing):庫侖與黏性摩擦(Coulomb&ViscousFriction):返回零模塊(WraptoZero)繼電模塊輸出值可以在兩個設定值之間切換。當繼電器吸合時,它保持吸合狀態(tài)輸出直到輸入信號值小于繼電斷開值(Switchoffpoint)。當繼電器分離時,它保持分離狀態(tài)輸出直到輸入信號值大于繼電吸合值(Switchonpoint)。可按設定的穿越檢測方向(Hitcrossingdirection)檢測信號達到設定值的時間。此時輸出一個正脈沖。在零值為不連續(xù)點,在其它值為連續(xù)線性增益。當輸入信號值超過設定的極限值(Threshold),輸出信號返回到零值。第11頁,共65頁,2023年,2月20日,星期三單位延遲模塊(UnitDelay):延遲一個采樣周期整數(shù)延遲模塊(IntegerDelay):延遲輸入N個采樣周期,N為自然數(shù)。觸發(fā)延遲模塊(TappedDelay):延遲N個采樣周期后并輸出全部的輸入信息。離散時間積分器(Discrete-TimeIntegrator):離散積分器模塊可以代替積分器用來建立純離散采樣系統(tǒng)。在離散積分器模塊參數(shù)對話框里,可以設定初始狀態(tài)值、增益值、輸出飽和值。離散傳遞函數(shù)功能模塊(DiscreteTransferFcn):可以建立離散傳遞函數(shù)模型。離散濾波器模塊(DiscreteFilter):用于建立離散系統(tǒng)濾波器仿真模型。離散零極點增益模型(DiscreteZero-Pole):使用零點、極點、增益值建立離散系統(tǒng)的零極點增益模型。離散微分模塊(Difference):輸出當前輸入信號值與前一個采樣值之差。派生離散微分模塊(DiscreteDerivative):模塊的輸出值按下式計算:(3)離散系統(tǒng)模塊庫離散系統(tǒng)模塊庫主要包括用于建立離散采樣系統(tǒng)的模塊,包括:圖7-4第12頁,共65頁,2023年,2月20日,星期三離散狀態(tài)空間模型(DiscreteState-Space):離散狀態(tài)空間模型實現(xiàn)下面系統(tǒng)模型一階離散傳遞函數(shù)功能模塊(TransferFcnFirstOrder):用于建立一階的離散傳遞函數(shù)模型。傳遞函數(shù)引導或終止模塊(TransferFcnLeadorLag):用于實現(xiàn)輸入信號的離散時間引導或終止補償。實數(shù)零點傳遞函數(shù)功能模塊(TransferFcnRealZero):用于實現(xiàn)具有一個實數(shù)零點而無極點的傳遞函數(shù)模型。加權滑動平均模塊(WeightedMovingAverage):模塊采樣并保持最近N個輸入信號,并根據(jù)設定的權重參數(shù)值(weights)計算它們的平均值。該模塊適用于SISO系統(tǒng)或SIMO系統(tǒng)模型。記憶模塊(Memory):輸出前一時刻的輸入信號值。一階保持器(First-OrderHold):實現(xiàn)離散采樣系統(tǒng)的一階采樣保持功能。零階保持器(Zero-OrderHold):實現(xiàn)離散采樣系統(tǒng)的零階采樣保持功能。第13頁,共65頁,2023年,2月20日,星期三其它模塊請參考MATLAB軟件!第14頁,共65頁,2023年,2月20日,星期三7.2Simulink建模與仿真基本方法7.2.1簡單系統(tǒng)仿真模型的建立
建立上圖所示系統(tǒng)框圖的Simulink仿真模型的基本方法如下;
1.啟動MATLAB/Simulink工具箱
2.建立Simulink空白模型Simulink空白模型的建立可方法如下:在MATLAB主窗口中選擇菜單File/New/Model。選擇Simulink模塊庫瀏覽器窗口的菜單File/New/Model。單擊Simulink模塊庫瀏覽器工具欄的新建圖標“”。第15頁,共65頁,2023年,2月20日,星期三3.根據(jù)系統(tǒng)框圖選擇模塊4.模塊的復制與刪除操作在模塊庫選中模塊后,按住鼠標左鍵不放并拖動到Simulink模型窗口指定位置,釋放鼠標左鍵,完成模塊的復制操作。在模塊庫選中模塊后,單擊鼠標右鍵,在彈出的快捷菜單中,單擊“AddtoExample_Model”命令將模塊添加到指定模型窗口,完成模塊的復制操作。在模塊庫選中模塊后,在庫瀏覽器窗口的Edit菜單中選擇Copy命令,用鼠標單擊目標模型窗口中指定位置,再從模型窗口的Edit菜單中選擇Paste,完成模塊的復制操作。當模型窗口已有所需模塊時,也可以直接從該處復制模塊,操作方是單擊鼠標右鍵,在彈出的快捷菜單中單擊“Copy”命令,然后用鼠標右鍵單擊模型窗口空白處,在彈出的快進誒菜單中單擊“Paste”命令來完成粘貼任務。此外,也可以使用編輯菜單進行復制、粘貼操作。當然還可以用鼠標右鍵按住所需復制的模塊不放,并拖動到指定位置完成復制操作,這可大大加快建模速度。第16頁,共65頁,2023年,2月20日,星期三5.模塊的連接將鼠標移動到模塊的輸出端子上,當鼠標出現(xiàn)“十字”符號后,按下鼠標左鍵并拖動到下級模塊的輸入端子上,完成模塊信號的連接。如上圖所示。選中信號輸出模塊,按下鍵盤“Ctrl”鍵并單擊下級模塊完成模塊信號的連接。在已存在的信號線上引出新的信號線時,可用鼠標右鍵單擊源信號線,并按住不放拖動到指定位置,完成信號線的分支連接。如圖所示,在模塊沒有完成連接時,以紅色虛線顯示,當連接完成后以黑色實線顯示。第17頁,共65頁,2023年,2月20日,星期三將各子模塊連接起來后,構成如圖所示的系統(tǒng)模型第18頁,共65頁,2023年,2月20日,星期三7.2.2Simulink仿真模型參數(shù)設置1.基本模塊參數(shù)設置在完成模塊的信號線連接并建立起系統(tǒng)的Simulink仿真模型后,需要設置模塊的參數(shù)。在Simulink模型里,雙擊需要修改參數(shù)的模塊,彈出參數(shù)設置對話框。2.仿真參數(shù)設置
單擊模型窗口的“Simulation”菜單,在彈出的下拉菜單中單擊“ConfigurationParameters”命令,打開“ConfigurationParameters”對話框如圖所示。
第19頁,共65頁,2023年,2月20日,星期三3.運行仿真與仿真輸出
雙擊“Scope”模塊,彈出如圖所示仿真輸出結果仿真參數(shù)配置完畢后,可運行仿真,方法有三種:①單擊模型窗口工具欄工具②單擊“Simulation”菜單,在彈出的下拉菜單中單擊“Start”命令③同時按下快捷鍵“Ctrl+T”。第20頁,共65頁,2023年,2月20日,星期三7.3動態(tài)系統(tǒng)Simulink仿真模型的建立由系統(tǒng)框圖建立Simulink仿真模型由傳遞函數(shù)建立Simulink仿真模型由狀態(tài)方程建立Simulink仿真模型由微分方程建立Simulink仿真模型第21頁,共65頁,2023年,2月20日,星期三7.1.1由系統(tǒng)框圖建立Simulink仿真模型在控制領域,控制系統(tǒng)通常以功能框圖的形式進行描述,與Simulink仿真模型在結構上十分相似,因此通過被控系統(tǒng)的框圖,很容易建立其Simulink仿真模型。下面以直流電機雙閉環(huán)調(diào)速系統(tǒng)為例來說明通過系統(tǒng)框圖建立Simulink仿真模型的基本方法。第22頁,共65頁,2023年,2月20日,星期三r(t)為給定輸入,采用階躍信號。y(t)為系統(tǒng)輸出,表示直流電機的轉速。ASR和ACR分別為轉速調(diào)節(jié)器、電流調(diào)節(jié)器,由PI調(diào)節(jié)器組成。根據(jù)直流雙閉環(huán)調(diào)速系統(tǒng)工程整定方法,進行ASR和ACR的參數(shù)整定時,首先斷開轉速環(huán),整定電流調(diào)節(jié)器ACR。然后接通轉速環(huán),整定轉速環(huán)ASR,同時調(diào)節(jié)電流環(huán)參數(shù)。根據(jù)上述分析,首先建立直流雙閉環(huán)調(diào)速系統(tǒng)的高層仿真模型,其中轉速調(diào)節(jié)器和電流調(diào)節(jié)器由空白子系統(tǒng)組成,如圖所示。轉速調(diào)節(jié)器子系統(tǒng)Simulink模型電流調(diào)節(jié)器子系統(tǒng)Simulink模型第23頁,共65頁,2023年,2月20日,星期三7.1.2由傳遞函數(shù)建立Simulink仿真模型由系統(tǒng)傳遞函數(shù)建立Simulink仿真模型可直接使用Continue模塊庫的TransferFun模塊,下面以實例說明?!纠}】已知某單位負反饋系統(tǒng)開環(huán)傳遞函數(shù)為試建立其Simulink仿真模型并進行仿真。第24頁,共65頁,2023年,2月20日,星期三建立模型過程如下:(1)建立一個空白的Simulink仿真模型窗口,如圖(a)所示。(3)建立傳遞函數(shù)的模型。(2)選擇系統(tǒng)所需的Simulink模塊(4)連接模塊并設置仿真參數(shù)(5)運行仿真第25頁,共65頁,2023年,2月20日,星期三7.1.3由狀態(tài)方程建立Simulink仿真模型由系統(tǒng)狀態(tài)方程建立Simulink仿真模型可直接使用Continue模塊庫的State-space模塊,下面以實例說明?!纠恳阎诚到y(tǒng)狀態(tài)空間模型為:試建立其simulink仿真模型,并求其單位階躍響應。第26頁,共65頁,2023年,2月20日,星期三求解過程如下:(2)選擇系統(tǒng)所需的Simulink模塊(1)建立一個Simulink空白仿真模型窗口(3)連接模塊并設置參數(shù)(4)設置仿真參數(shù)并運行仿真第27頁,共65頁,2023年,2月20日,星期三7.1.4由微分方程建立Simulink仿真模型第一是將系統(tǒng)微分方程轉換為傳遞函數(shù)模型,第二是將微分方程轉換為狀態(tài)空間模型,第三是由微分方程直接建立Simulink仿真模型。
由微分仿真建立Simulink仿真模型有三種方法,【例】已知某系統(tǒng)數(shù)學模型是一個高階微分方程:且輸出量y的各階導數(shù)初始值均為零,試建立其Simuink仿真模型。第28頁,共65頁,2023年,2月20日,星期三求解過程如下:
(1)將高階微分方程轉換為一組一階微分方程:設輸出方程。則得:第29頁,共65頁,2023年,2月20日,星期三(2)建立每個一階微分方程的Simulink仿真模型這里首先需要知道微分環(huán)節(jié)的Simulink模型如圖(a)所示因此可以建立Simulink仿真模型如圖(b、c、d)所示第30頁,共65頁,2023年,2月20日,星期三(3)建立微分方程組的simulink仿真模型。
將各個微分單元連接起來就構成了整個系統(tǒng)的Simulink仿真模型,結果如下圖所示。第31頁,共65頁,2023年,2月20日,星期三(4)設置Simulink仿真參數(shù)。上圖中u取單位階躍響應信號,Simulink求解器取默認參數(shù)配置。運行仿真得輸出響應曲線如圖下圖所示。第32頁,共65頁,2023年,2月20日,星期三7.4Simulink子系統(tǒng)技術
在使用Simulink進行建模與仿真時,經(jīng)常會遇見很復雜的系統(tǒng),難以用一個簡單的Simulink框圖模型來進行描述。與軟件開發(fā)方法一樣,此時可將復雜系統(tǒng)的模型進行功能劃分,將其分割為各個獨立的子系統(tǒng),然后再采用以下兩種策略加以實現(xiàn):(1)自下而上的策略:首先建立復雜系統(tǒng)中的每一個功能模塊,然后再組合這些模塊,逐漸建立整個系統(tǒng)的模型。(2)自上而下的策略:首先建立復雜系統(tǒng)的整體結構模型,然后再逐一實現(xiàn)每一部分的模型。無論那種策略,對于復雜系統(tǒng)模型的建立,都要用到子系統(tǒng)技術。本節(jié)主要介紹子系統(tǒng)及其封裝技術。第33頁,共65頁,2023年,2月20日,星期三7.4.1子系統(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)的建立方法。如圖所示第34頁,共65頁,2023年,2月20日,星期三在已經(jīng)建立好的復雜系統(tǒng)模型之中建立子系統(tǒng)。其基本方法是:首先選擇將要生成子系統(tǒng)的一組模塊,然后選擇Simulink模型編輯器的菜單【Edit:CreateSubsystem】或者單擊鼠標右鍵選擇CreateSubsystem選項,都將生成子系統(tǒng)模塊。如圖所示。2.直接建立子系統(tǒng)第35頁,共65頁,2023年,2月20日,星期三7.4.2子系統(tǒng)的封裝方法在上述PID控制的子系統(tǒng)模型中,如果需要修改PID的參數(shù),則需要打開其子系統(tǒng)模型窗口。為了能不打開該子系統(tǒng)模塊窗口而修改其內(nèi)部參數(shù),Simulink提供了子系統(tǒng)封裝技術。以上述建立的PID控制器子系統(tǒng)為例來說明子系統(tǒng)封裝的基本步驟。
(1)選中子系統(tǒng),單擊鼠標右鍵,在彈出的對話框中單擊“MaskSubsystem”命令或者單擊菜單【Edit】→【MaskSubsystem】,彈出子系統(tǒng)封裝編輯窗口,如圖所示。在“Drawingcommands”編輯窗口,可以給模塊圖標上繪制圖形,如使用plot繪制圖形、disp顯示文字、image顯示已有圖形第36頁,共65頁,2023年,2月20日,星期三
(1)子系統(tǒng)圖標設置,單擊Icon按鈕,設置子系統(tǒng)圖標。在“Drawingcommands”編輯窗口,可以給模塊圖標上繪制圖形,如使用plot繪制圖形、disp顯示文字、image顯示已有圖形例:使用如下命令可得到如圖所示結果disp(‘PIDController‘)plot(sin(0:0.1:2*pi),cos(0:0.1:2*pi)/2)image(imread('library.bmp'))封裝編輯框基本設置第37頁,共65頁,2023年,2月20日,星期三(2)參數(shù)設置:單擊Parameters按鈕,建立封裝模塊內(nèi)部變量與封裝對話框之間的聯(lián)系。單擊按鈕或按鈕可以增加或刪除變量“Type”可選擇參數(shù)為:“Edit”表示用文本編輯框輸入?yún)?shù)“Popup”表示以下拉菜單形式輸入?yún)?shù)“checkbox”表示以復選框形式輸入?yún)?shù)
此處變量名稱要與子系統(tǒng)參數(shù)名稱相同第38頁,共65頁,2023年,2月20日,星期三(3)初始化設置:單擊“Initialization”按鈕,彈出封裝編輯器參數(shù)初始化設置對話框。第39頁,共65頁,2023年,2月20日,星期三(4)文檔編輯。單擊“Documentation”按鈕,彈出如圖所示的文檔編輯窗口。在這里可建立子系統(tǒng)的文檔說明。第40頁,共65頁,2023年,2月20日,星期三
經(jīng)過上述操作,完成對PID子系統(tǒng)的封裝操作,雙擊子系統(tǒng)模塊,彈出參數(shù)設置對話框如圖所示。第41頁,共65頁,2023年,2月20日,星期三7.5S-函數(shù)與Simulink仿真7.5.1S-函數(shù)簡介
S-函數(shù)是系統(tǒng)函數(shù)(SystemFunction)的簡稱,是指用指定語言描述的一個非圖形化功能模塊(以區(qū)別Simulink的系統(tǒng)模塊),是Matlab為用戶提供的一個擴展功能接口。用戶可以采用MATLAB語言,C、C++,F(xiàn)ortran或者Ada等語言編寫S函數(shù)。S-函數(shù)由一種特定的語法構成,用來描述并實現(xiàn)連續(xù)系統(tǒng)、離散系統(tǒng)、混合系統(tǒng)等模型。S函數(shù)可接收來自Simulink求解器的相關信息,并對求解器發(fā)出的命令作出響應,這種交互作用類似Smulink系統(tǒng)模塊與求解器的交互作用。第42頁,共65頁,2023年,2月20日,星期三7.5.2.S-函數(shù)的用法在動態(tài)系統(tǒng)設計、仿真與分析中,用戶可以使用Simulink瀏覽器里用戶自定義模塊庫中的S-Functiong模塊來調(diào)用已編寫的S-函數(shù)。S-Function模塊默認為一個單輸入單輸出的系統(tǒng)模塊,如果有多個輸入或者輸出信號,可以采用Mux模塊和Demux模塊對信號進行組合和分離操作。在Simulink空白模板里粘貼“S-Function”模塊,雙擊該模塊彈出參數(shù)設置對話框,如圖所示。第43頁,共65頁,2023年,2月20日,星期三創(chuàng)建S-函數(shù)源文件。在Simulink模型框圖中添加S-Function模塊,并進行正確的參數(shù)設置。在Simulink模塊框圖中按照定義好的功能連接輸入輸出端口進行基本仿真參數(shù)設置,單擊工具欄工具,運行仿真。一般而言,使用S-函數(shù)的基本步驟如下:
創(chuàng)建S-函數(shù)源文件的方法有很多,用戶可以按照S-函數(shù)語法格式自行編寫每一行代碼,但是這樣做既費時費力,又容易出錯。Simulink為用戶提供了很多S-函數(shù)的模板和例子,我們可以根據(jù)自己的需要修改相應的模板或者例子即可。詳細的Simulink模板文件在后面介紹。第44頁,共65頁,2023年,2月20日,星期三7.5.3S-函數(shù)模板單擊SimulinkLibrary的“User-DefinedFunction”前的擴展按鈕,再雙擊“S-functionExamples”模塊彈出如圖7-477所示的S-函數(shù)實例模塊庫。圖中包括用M文件、C語言、C++、Ada、和Fortran語言編寫的S-函數(shù)實例。第45頁,共65頁,2023年,2月20日,星期三【例題】以S-函數(shù)完成對輸入信號的運算:y=3*u+2。解:基本步驟如下:(1)建立Simulink仿真模型,如圖所示
第46頁,共65頁,2023年,2月20日,星期三2)打開S-函數(shù)模板源文件如下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
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=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=[];ts是一個1×2的向量,ts(1)定義采樣周期,ts(2)是偏移量。當ts(1)=0表示系統(tǒng)為連續(xù)系統(tǒng),當ts(1)=-2表示系統(tǒng)采樣時間由flag=4的mdlGetTimeOfNextVarHit函數(shù)決定。輸入變量中,t是采樣時間,x是狀態(tài)變量,u是輸入變量(從Simulink輸入來的變量信息,當有多個輸入時,u為一個行向量,flag是仿真過程中的狀態(tài)標志或稱之為控制變量,由它來判斷當前將要調(diào)用的回調(diào)函數(shù);輸出變量sys根據(jù)flag的不同而返回不同的內(nèi)容。)第47頁,共65頁,2023年,2月20日,星期三在本例題中,為了完成設定的函數(shù)功能y=3*u+2,可將上述S-函數(shù)的模板進行如下修改(這里只列出需要修改的部分):首先將S函數(shù)文件首行修改為:function[sys,x0,str,ts]=Mysfun(t,x,u,flag),并將文件另存為Mysfun。其次,找到function[sys,x0,str,ts]=mdlInitializeSizes,作如下修改:
sizes.NumOutputs=1;
sizes.NumInputs=1;然后,再找到functionsys=mdlOutputs(t,x,u),作如下修改:
sys=3*u+2;最后,將該文件保存到當前目錄下的Mysfun.m文件中。第48頁,共65頁,2023年,2月20日,星期三(3)雙擊仿真模型中的S-function模塊打開參數(shù)設置對話框,并修改S-function的名稱為“Mysfun”。(4)修改仿真參數(shù),完成仿真。這里仿真求解器參數(shù)取系統(tǒng)默認值,運行仿真,可得如圖所示仿真結果。第49頁,共65頁,2023年,2月20日,星期三【例】已知某系統(tǒng)狀態(tài)方程為:試用S-函數(shù)建立其仿真模型,并求其單位階躍響應曲線。解:首先打開S-函數(shù)模板文件。打開S-函數(shù)模板文件除了按照上述介紹的方法,也可以在CommandWindows中輸入命令:>>opensfuntmpl或者
>>editsfuntmpl執(zhí)行命令后系統(tǒng)彈出M文件的S-函數(shù)編輯窗口。實現(xiàn)上述系統(tǒng)的S-函數(shù)程序代碼如下所示:第50頁,共65頁,2023年,2月20日,星期三function[sys,x0,str,ts]=Mysfun01(t,x,u,flag)switchflag,case0,
%初始化%[sys,x0,str,ts]=mdlInitializeSizes;case1,%求導數(shù)sys=mdlDerivatives(t,x,u);case2,%狀態(tài)更新%sys=mdlUpdate(t,x,u);case3,%計算輸出%sys=mdlOutputs(t,x,u);%計算下一個采樣時刻%case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,%結束處理%sys=mdlTerminate(t,x,u);otherwise%錯誤處理%DAStudio.error('Simulink:blocks:unhandledFlag',num2str(flag));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=[];ts=[00];functionsys=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;第51頁,共65頁,2023年,2月20日,星期三functionsys=mdlUpdate(t,x,u)sys=[];functionsys=mdlOutputs(t,x,u)sys=-x(1)-x(2)-x(3);functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;%設置采樣周期sys=t+sampleTime;functionsys=mdlTerminate(t,x,u)sys=[];將上述S-函數(shù)在當前目錄下保存為M文件Mysfun01,再建立Simulink仿真模型如圖所示,并設置S-function模塊的參數(shù)為S-functionname,仿真參數(shù)取默認值,運行仿真可得仿真結果如圖所示。第52頁,共65頁,2023年,2月20日,星期三7.5.4添加用戶參數(shù)的S-函數(shù)
當S-函數(shù)需要添加用戶參數(shù)時,要注意兩點。第一,在S-函數(shù)源代碼中,用到該參數(shù)的各個子函數(shù),在函數(shù)聲明部分均應添加該參數(shù),第二,在Simulink模型中設置“S-function”模塊參數(shù)時,參數(shù)的名稱和順序必須與S-函數(shù)源代碼中的參數(shù)名稱和順序完全一致。下面以建立一個三角波函數(shù)發(fā)生器為例來說明帶參數(shù)項的S-函數(shù)的建立與使用?!纠吭嚱imulink下三角波函數(shù)發(fā)生器,且三角波頻率幅值可調(diào)。解:首先編寫生成三角波S-函數(shù)的M文件,打開M文件模板程序,做如下所改:第53頁,共65頁,2023年,2月20日,星期三function[sys,x0,str,ts]=sanjiaobo(t,x,u,flag,A,Freq)%輸入?yún)?shù)A為三角波幅值,F(xiàn)req為三角波頻率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,A,Freq);%注意在輸出函數(shù)部分用到附加參數(shù)
case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,sys=mdlTerminate(t,x,u);otherwiseerror(['Unhandledflag=',num2str(flag)]);end第54頁,共65頁,2023年,2月20日,星期三function[sys,x0,str,ts]=mdlInitializeSizessizes=simsizes;sizes.NumContStates=0;sizes.NumDiscStates=0;sizes.NumOutputs=1;sizes.NumInputs=1;sizes.DirFeedthrough=1;sizes.NumSampleTimes=1;%只有一種采樣時間sys=simsizes(sizes);x0=[];str=[];%initializethearrayofsampletimests=[00];functionsys=mdlDerivatives(t,x,u)sys=[];functionsys=mdlUpdate(t,x,u)sys=[];functionsys=mdlOutputs(t,x,u,A,Freq)T=1/Freq;%求三角波周期m=rem(u,T);%u為外部輸入時間信息,rem為求余函數(shù)K=floor(u/T);%floor為向零取整r=4*A*Freq;c=T/2;if((m>=0)&(m<c))sys=r*(u-(K+0.25)*T);elseif((m>=c)&(m<=T))sys=-[r*(u-(K+0.75)*T)];elsesys=A;endfunctionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;sys=t+sampleTime;functionsys=mdlTerminate(t,x,u)sys=[];
%仿真結束第55頁,共65頁,2023年,2月20日,星期三
將上述M文件的S函數(shù)在當前目錄下保存為sanjiaobo.m文件,建立Simulink仿真模型如圖(a)所示。雙擊“S-function”模塊,在彈出的參數(shù)設置對話框種,設置“S-functionname”為“saniaobo”,設置“S-functionParameter”為“1,1500”,如圖(b)所示。Simulink求解器參數(shù)“Maxstepsize”設置為1e-5,“Stoptime”設置為0.2s,其它取系統(tǒng)默認值。第56頁,共65頁,2023年,2月20日,星期三單擊Simulink模型窗口工具,運行仿真得如圖7-56所示結果(圖中顯示時間范圍為0~7e-3s)。第57頁,共65頁,2023年,2月20日,星期三7.5.5離散系統(tǒng)的S-函數(shù)
【例】已知離散PID表達式為:u(k)=Kp*e(k)+Ki*T*+Kd*[e(k-1)-e(k-2)]/T試使用S-函數(shù)實現(xiàn)離散PID控制器,并建立Simulink仿真模型。解:首先打開S-函數(shù)M-文件的模板程序,建立離散PID的
S-函數(shù)源文件。結果如下:第58頁,共65頁,2023年,2月20日,星期三function[sys,x0,str,ts]=sfuntmpl(t,x,u,flag,Kp,Ki,Kd)switchflag,case0,[sys,x0,str,ts]=mdlInitializeSizes;case1,sys=mdlDerivatives(t,x,u);case2,sys=mdlUpdate(t,x,u,Kp,Ki,Kd);case3,sys=mdlOutputs(t,x,u);case4,sys=mdlGetTimeOfNextVarHit(t,x,u);case9,sys=mdlTerminate(t,x,u);otherwiseDAStudio.error('Simulink:blocks:unhandledFlag',num2str(flag));end%endsfuntmpl第59頁,共65頁,2023年,2月20日,星期三function[sys,x0,str,ts]=mdlInitia
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 壓緊氣缸采購合同范本
- 縣勞務輸出合同范本
- 化肥賒欠合同范例
- 辦公電腦訂購合同范本
- 出國出境勞務合同范本
- 北京土方備案合同范本
- 廠房水電安裝合同范本
- 副食進貨合同范本
- 合同范本模板收費
- 南園新村租房合同范本
- 2024-2025年江蘇專轉本英語歷年真題(含答案)
- 永磁滾筒設備操作規(guī)程
- 2024解析:第五章透鏡及其應用-講核心(解析版)
- 《子宮肉瘤》課件
- 地熱能利用技術的原理與應用考核試卷
- 《機器人驅動與運動控制》全套教學課件
- 大班科學活動小實驗
- 新能源汽車概論課件 2.1認知新能源汽車動力電池技術
- 湖南財政經(jīng)濟學院《中國文化史》2021-2022學年第一學期期末試卷
- 2024屆清華大學強基計劃數(shù)學學科筆試試題(附答案)
- 偵查學總論學習通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論