matlab(Simulink)中S-function函數(shù)編寫規(guī)則

matlab(Simulink)中S-function函數(shù)編寫規(guī)則

ID:46579800

大?。?64.36 KB

頁數(shù):4頁

時(shí)間:2019-11-25

matlab(Simulink)中S-function函數(shù)編寫規(guī)則_第1頁
matlab(Simulink)中S-function函數(shù)編寫規(guī)則_第2頁
matlab(Simulink)中S-function函數(shù)編寫規(guī)則_第3頁
matlab(Simulink)中S-function函數(shù)編寫規(guī)則_第4頁
資源描述:

《matlab(Simulink)中S-function函數(shù)編寫規(guī)則》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、matlab(Simulink)中S-function函數(shù)編寫規(guī)則s函數(shù)是systemFunction的簡稱,用它來寫自己的simulink模塊。(夠簡單吧,^_^,詳細(xì)的概念介紹大伙看幫助吧)可以用matlab、C、C++、Fortran、Ada等語言來寫,這兒我只介紹怎樣用matlab語言來寫吧(主要是它比較簡單)先講講為什么要用s函數(shù),我覺得用s函數(shù)可以利用matlab的豐富資源,而不僅僅局限于simulink提供的模塊,而用c或c++等語言寫的s函數(shù)還可以實(shí)現(xiàn)對(duì)硬件端口的操作,還可以操作windowsAPI等的先介紹一下simulin

2、k的仿真過程(以便理解s函數(shù)),simulink的仿真有兩個(gè)階段:一個(gè)為初始化,這個(gè)階段主要是設(shè)置一些參數(shù),像系統(tǒng)的輸入輸出個(gè)數(shù)、狀態(tài)初值、采樣時(shí)間等;第二個(gè)階段就是運(yùn)行階段,這個(gè)階段里要進(jìn)行計(jì)算輸出、更新離散狀態(tài)、計(jì)算連續(xù)狀態(tài)等等,這個(gè)階段需要反復(fù)運(yùn)行,直至結(jié)束。在matlab的workspace里打editsfuntmpl(這是matlab自己提供的s函數(shù)模板),我們看它來具體分析s函數(shù)的結(jié)構(gòu)。它的第一行是這樣的:function[sys,x0,str,ts]=sfuntmpl(t,x,u,flag)先講輸入與輸出變量的含義:t是采樣時(shí)間

3、,x是狀態(tài)變量,u是輸入(是做成simulink模塊的輸入),flag是仿真過程中的狀態(tài)標(biāo)志(以它來判斷當(dāng)前是初始化還是運(yùn)行等);sys輸出根據(jù)flag的不同而不同(下面將結(jié)合flag來講sys的含義),x0是狀態(tài)變量的初始值,str是保留參數(shù)(mathworks公司還沒想好該怎么用它,嘻嘻,一般在初始化中將它置空就可以了,str=[]),ts是一個(gè)1×2的向量,ts(1)是采樣周期,ts(2)是偏移量。下面結(jié)合sfuntmpl.m中的代碼來講具體的結(jié)構(gòu):switchflag,%判斷flag,看當(dāng)前處于哪個(gè)狀態(tài)case0,[sys,x0,st

4、r,ts]=mdlInitializeSizes;flag=0表示處于初始化狀態(tài),此時(shí)用函數(shù)mdlInitializeSizes進(jìn)行初始化,此函數(shù)在sfuntmpl.m的149行我們找到他,在初始化狀態(tài)下,sys是一個(gè)結(jié)構(gòu)體,用它來設(shè)置模塊的一些參數(shù),各個(gè)參數(shù)詳細(xì)說明如下size=simsizes;%用于設(shè)置模塊參數(shù)的結(jié)構(gòu)體用simsizes來生成sizes.NumContStates=0;%模塊連續(xù)狀態(tài)變量的個(gè)數(shù)sizes.NumDiscStates=0;%模塊離散狀態(tài)變量的個(gè)數(shù)sizes.NumOutputs=0;%模塊輸出變量的個(gè)數(shù)si

5、zes.NumInputs=0;%模塊輸入變量的個(gè)數(shù)sizes.DirFeedthrough=1;%模塊是否存在直接貫通(直接貫通我的理解是輸入能%直接控制輸出)sizes.NumSampleTimes=1;%模塊的采樣時(shí)間個(gè)數(shù),至少是一個(gè)sys=simsizes(sizes);%設(shè)置完后賦給sys輸出舉個(gè)例子,考慮如下模型:dx/dt=fc(t,x,u)也可以用連續(xù)狀態(tài)方程描述:dx/dt=A*x+B*ux(k+1)=fd(t,x,u)也可以用離散狀態(tài)方程描述:x(k+1)=H*x(k)+G*u(k)y=fo(t,x,u)也可以用輸出狀態(tài)方

6、程描述:y=C*x+D*u設(shè)上述模型連續(xù)狀態(tài)變量、離散狀態(tài)變量、輸入變量、輸出變量均為1個(gè),我們就只需改上面那一段代碼為:(一般連續(xù)狀態(tài)與離散狀態(tài)不會(huì)一塊用,我這兒是為了方便說明)sizes.NumContStates=1;sizes.NumDiscStates=1;sizes.NumOutputs=1;sizes.NumInputs=1;其他的可以不變。繼續(xù)在mdlInitializeSizes函數(shù)中往下看:x0=[];%狀態(tài)變量設(shè)置為空,表示沒有狀態(tài)變量,以我們上面的假設(shè),可改%為x0=[0,0](離散和連續(xù)的狀態(tài)變量我們都設(shè)它初值為0)

7、str=[];%這個(gè)就不用說了,保留參數(shù)嘛,置[]就可以了,反正沒什么用,可%能7.0會(huì)給它一些意義ts=[00];%采樣周期設(shè)為0表示是連續(xù)系統(tǒng),如果是離散系統(tǒng)在下面的mdlGet%TimeOfNextVarHit函數(shù)中具體介紹嘻嘻,總算講完了初始化,后面的應(yīng)該快了在sfuntmpl的106行繼續(xù)往下看:case1,sys=mdlDerivatives(t,x,u);flag=1表示此時(shí)要計(jì)算連續(xù)狀態(tài)的微分,即上面提到的dx/dt=fc(t,x,u)中的dx/dt,找到mdlDerivatives函數(shù)(在193行)如果設(shè)置連續(xù)狀態(tài)變量個(gè)數(shù)為

8、0,此處只需sys=[];就可以了(如sfuntmpl中一樣),按我們上述討論的那個(gè)模型,此處改成sys=fc(t,x(1),u)或sys=A*x(1)+B*u%我

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。