S-函數(shù)的建模與應(yīng)用教程(共10頁(yè))_第1頁(yè)
S-函數(shù)的建模與應(yīng)用教程(共10頁(yè))_第2頁(yè)
S-函數(shù)的建模與應(yīng)用教程(共10頁(yè))_第3頁(yè)
S-函數(shù)的建模與應(yīng)用教程(共10頁(yè))_第4頁(yè)
S-函數(shù)的建模與應(yīng)用教程(共10頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上S-Function是system-function的縮寫。當(dāng)Matlab所提供的simulink模型不能完全滿足用戶需要時(shí),就可以通過(guò)S-函數(shù)提供用戶自己編寫程序啦滿足自己要求模型的接口。S-函數(shù)可以用Matlab、C、C+、Ada和Fortran語(yǔ)言編寫,但是后四種語(yǔ)言編寫的S-函數(shù)需要編譯成MEX文件。在同名的M文件和MEX文件的S-函數(shù)情況下,Matlab和simulink優(yōu)先調(diào)用MEX。S-函數(shù)主要用來(lái)實(shí)現(xiàn)下面幾個(gè)方面的功能:(1)向simulink模塊中增加一個(gè)通用目標(biāo)的模型(2)使用S-函數(shù)的模塊來(lái)充當(dāng)硬件的驅(qū)動(dòng)(3)在仿真中嵌入已經(jīng)存在的C代碼(4)將

2、系統(tǒng)表示成一系列的數(shù)學(xué)方程(5)在simulink中使用動(dòng)畫使用S-函數(shù)的一個(gè)優(yōu)點(diǎn)是,你可以建立一個(gè)通用目標(biāo)的模塊,在一個(gè)模型中可以多次調(diào)用,每一個(gè)模塊可以有不同的參數(shù)。本教程的目錄如下2# S-函數(shù)工作原理   2.1 模型的數(shù)學(xué)描述   2.2 S-函數(shù)仿真過(guò)程   2.3 S-函數(shù)回調(diào)方法3# M文件S-函數(shù)的編寫和模板4# M文件S-函數(shù)實(shí)例   4.1簡(jiǎn)單單擺仿真實(shí)驗(yàn)   4.2混合系統(tǒng)M文件S-函數(shù)一、S-函數(shù)工作原理模型的數(shù)學(xué)描述simulink模塊一般由若干輸入、狀態(tài)和輸出組成,

3、其中輸出是時(shí)間、狀態(tài)和輸入的函數(shù)2009-3-25 20:50 上傳 可以通過(guò)下面的幾個(gè)數(shù)學(xué)表達(dá)式來(lái)描述上面的過(guò)程,具體如下:輸出:y=f(x,u,t)狀態(tài):x'=g(x,u,t)S-函數(shù)仿真過(guò)程simulink模型的處理主要有兩個(gè)過(guò)程:1第一個(gè)階段是初始化這時(shí)侯的所有參數(shù)都將被確定,主要完成以下幾個(gè)過(guò)程:(1)傳遞參數(shù)表達(dá)式給Matlab進(jìn)行求解(2)得到的數(shù)值作為實(shí)際的參數(shù)使用(3)展開模型的層次,每個(gè)子系統(tǒng)被它們所包含的模塊替代(4)檢查好相鄰模塊間的連接(5)確定狀態(tài)初值和采樣時(shí)間2第二階段是模型仿真運(yùn)行仿真開始運(yùn)行,仿真過(guò)程是求解器和simulink引擎交互控制的。求解器的作

4、用是傳遞模塊的輸出,對(duì)狀態(tài)導(dǎo)數(shù)進(jìn)行積分,并確定采樣時(shí)間,周而復(fù)始,直到仿真結(jié)束。仿真運(yùn)行階段的工作可以概括為:(1)計(jì)算模型輸出(2)更新模型離散狀態(tài)(3)計(jì)算模型連續(xù)狀態(tài),連續(xù)狀態(tài)的計(jì)算過(guò)程(4)計(jì)算模型輸出,過(guò)零可能被激活(過(guò)零點(diǎn),就是輸出y從正變到負(fù)或從負(fù)變到正)S-函數(shù)回調(diào)方法(具體看后面的實(shí)例)一個(gè)S-函數(shù)有對(duì)應(yīng)的回調(diào)函數(shù),這些回調(diào)函數(shù)(也叫方法)在模型仿真時(shí),告訴simulink如何操作和計(jì)算。S-函數(shù)回調(diào)方法主要完成以下幾個(gè)方面:(1)初始化模型(mdlInitializeSizes)在仿真之前,simulink在這個(gè)階段初始化S-函數(shù),主要有以下幾個(gè)過(guò)程:注意:如果下面字段代表

5、的向量寬度(也就是*的個(gè)數(shù))為動(dòng)態(tài)可變,則必須將它們賦值為1初始化結(jié)構(gòu)體SimStruct,它包含了S-函數(shù)的所有信息設(shè)置輸入(NumOutputs)輸出(NumInputs)端口數(shù),也就是輸入變量的個(gè)數(shù)設(shè)置狀態(tài)變量個(gè)數(shù)(NumStates),注意有連續(xù)和離散之分設(shè)置是否有直接饋通(DirFeedthrough),簡(jiǎn)單的理解就是輸入能否控制輸入出,如果有則為1,否則為0,在以下兩種情況需要直接饋通:a、某一時(shí)刻的系統(tǒng)輸出y中包含某一時(shí)刻的系統(tǒng)輸入ub、系統(tǒng)是一個(gè)變采樣時(shí)間系統(tǒng)(variable sample time system)且采樣時(shí)間計(jì)算與輸入u相關(guān)設(shè)置采樣時(shí)間個(gè)數(shù)(NumSample

6、Times),也就是ts變量的行數(shù),與用戶對(duì)ts的定義有關(guān)(2)計(jì)算下一個(gè)采樣時(shí)間(mdlGetTimeOfNextVarHit)在創(chuàng)建一個(gè)變時(shí)間樣本時(shí),這個(gè)步驟計(jì)算下一個(gè)樣本的時(shí)間點(diǎn),即計(jì)算下一步的仿真步長(zhǎng)(3)計(jì)算下一個(gè)時(shí)間步的輸出(mdlOutputs)當(dāng)這一步完成后,此模塊的所有端口對(duì)于當(dāng)前時(shí)間按步都是合法的(4)更新模塊狀態(tài)(mdlUpdate)此過(guò)程在每一步長(zhǎng)處都要執(zhí)行一次,可以在這個(gè)過(guò)程中添加每一個(gè)仿真都需要更新的內(nèi)容,此過(guò)程離散狀態(tài)的更新(5)對(duì)狀態(tài)變量進(jìn)行積分(mdlDerivatives)用于連續(xù)狀態(tài)的求解和非采樣過(guò)零點(diǎn),如果S-函數(shù)存在連續(xù)狀態(tài),simulink就在min

7、or step time內(nèi)調(diào)用mdlDrivatives和mdlOutput兩個(gè)函數(shù)。如果存在非采樣過(guò)零點(diǎn),則調(diào)用mdlOutput和mdlZeroCrossing函數(shù)二、M文件S-函數(shù)的編寫和模板Matlab中提供了直接的S-函數(shù)的模板,不需要我們直接編寫原始文件,只需要根據(jù)我們的需要修改其中的一部分就可以了只有在Matlab中輸入 1. >>edit sfuntmpl復(fù)制代碼就會(huì)出現(xiàn)源文件,你將源模板另存,在根據(jù)需要編輯S-函數(shù)的參數(shù)形式如下sys,x0,str,ts = system_function_name(t,x,u,flag)t:時(shí)間變量,當(dāng)前的時(shí)間數(shù)值x:狀態(tài)變量,

8、當(dāng)前狀態(tài)變量數(shù)值u:模塊輸入,外界輸入的數(shù)據(jù)flag:所要執(zhí)行的回調(diào),根據(jù)flag決定到底調(diào)用哪個(gè)子函數(shù),具體意義參加下表2009-3-25 21:39 上傳 下面我提供了一個(gè)編輯好的S-函數(shù)模板,里面有詳細(xì)的解釋和使用說(shuō)明,你只要根據(jù)需要更改我指出的那部分就可以了三、簡(jiǎn)單單擺S-函數(shù)仿真實(shí)驗(yàn)使用S-函數(shù)來(lái)對(duì)一個(gè)單擺系統(tǒng)進(jìn)行仿真,主要演示以下三個(gè)方面:(1)利用S-函數(shù)對(duì)單擺系統(tǒng)進(jìn)行建模(2)利用simulink進(jìn)行仿真,研究單擺的位移(3)利用S-函數(shù)動(dòng)畫來(lái)演示單擺的運(yùn)動(dòng)2009-3-31 19:28 上傳 (1)單擺的動(dòng)力學(xué)方程為2009-3-31 19:28 上傳 其中M是擺球質(zhì)量,u是

9、外力,Kd阻尼系數(shù),F(xiàn)g重力(2)將系統(tǒng)動(dòng)力學(xué)方程轉(zhuǎn)換為狀態(tài)方程2009-3-31 19:28 上傳 (3)根據(jù)狀態(tài)方程,在模板的基礎(chǔ)上編寫S-函數(shù)我們根據(jù)狀態(tài)方程并結(jié)合題目分析下輸入:u,故1個(gè)輸入:,故1個(gè)連續(xù)狀態(tài)變量:x1=和x2=',故2個(gè)離散狀態(tài)變量:由于是連續(xù)系統(tǒng),故0個(gè)直通前向饋路:由于輸出與輸入u沒有任何聯(lián)系,故沒有直接饋通,所有為0采樣時(shí)間數(shù)量:在這個(gè)系統(tǒng)中我們統(tǒng)一成一個(gè)就可以了,故1個(gè)狀態(tài)變量初值:也就是x1=和x2='的初值,這里我們?nèi)〕跏冀嵌?0°,速度為0,故x0=x1 x2=60 0采樣時(shí)間:由于是連續(xù)系統(tǒng),故ts=0 0 1. funct

10、ion sys,x0,str,ts = Single_Pendulum_Demo(t,x,u,flag,M,xx0,Kd,g)2. %M=varargin1;%擺球質(zhì)量3. %xx0=varargin2;%狀態(tài)變量初值4. %Kd=varargin3;%阻尼系數(shù)5. %g=varargin4;%重力加速度6.7. switch flag,8.   case 0,9.     sys,x0,str,ts=mdlInitializeSizes(xx0);10.   case 1,11.     sys=mdlDeriv

11、atives(t,x,u,Kd,g,M);12.   case 2,13.     sys=mdlUpdate(t,x,u);14.   case 3,15.     sys=mdlOutputs(t,x,u);16.   case 4,17.     sys=mdlGetTimeOfNextVarHit(t,x,u);18.   case 9,19.     sys=mdlTerminate(t,x,u);20.  

12、0;otherwise21.     DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag);22. end23.24.25. function sys,x0,str,ts=mdlInitializeSizes(xx0)26. sizes = simsizes;27. sizes.NumContStates  = 2;%2個(gè)連續(xù)狀態(tài)28. sizes.NumDiscStates  = 0;%0個(gè)離散狀態(tài)29. sizes.NumOutputs 

13、;    = 1;%1個(gè)輸出變量30. sizes.NumInputs      = 1;%1個(gè)輸入變量31. sizes.DirFeedthrough = 0;%沒有直接饋通,簡(jiǎn)單的說(shuō)就是輸出y中有沒有輸入?yún)?shù)u32. sizes.NumSampleTimes = 1;%采用時(shí)間個(gè)數(shù)33. sys = simsizes(sizes);34. x0  = s0;%狀態(tài)變量初值35. str = ;%Matlab自已預(yù)留的,全部保留空著,不要?jiǎng)?6. ts  = 0 0;%0 0適用于連

14、續(xù)系統(tǒng)37.38. function sys=mdlDerivatives(t,x,u,Kd,g,M)39. %狀態(tài)變量一階導(dǎo)數(shù)表達(dá)式40. sys = x(2);-Kd*x(2)-M*g*sin(x(1)+u;41.42. function sys=mdlUpdate(t,x,u)43. %由于是連續(xù)系統(tǒng),故不需填寫44. sys = ;45.46.47. function sys=mdlOutputs(t,x,u)48. %輸入變量是擺角,即x(1)49. sys = x(1);50.51. function sys=mdlGetTimeOfNextVarHit(t,x,u)52. %由于是連續(xù)系統(tǒng)這個(gè)用不到,可以不理它53. sampleTime = 1; 54. sys = t + sampleTime;55.56. function sys=mdlTerminate(t,x,u)57. %模塊解決沒有什么操作,也不需要理它58. sys = ;復(fù)制代碼(4)使用simulink建模在sink中拖出scop,scouce中拖出sine wave,user-defined function中拖出S-function,并如下如連接三個(gè)模塊2009-3-31 20

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論