Simulink框图和S-函数
生活随笔
收集整理的這篇文章主要介紹了
Simulink框图和S-函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
介紹
創(chuàng)建模型步驟
?
?
模塊集
使用模塊創(chuàng)建框圖:將需要的模塊拖拽出來并連接
?
?
子系統(tǒng)及其封裝
選中并右擊,進(jìn)行子系統(tǒng)封裝
?
?
S-函數(shù)
Level-1 M文件型:創(chuàng)建sfuntest.m文件,實(shí)現(xiàn)y=-x功能
%??sfuntest:S-函數(shù)的函數(shù)名 %t:當(dāng)前仿真時(shí)間 %x:狀態(tài)向量 %u:輸入向量 %flag:用來標(biāo)示仿真步驟,調(diào)用不同的回調(diào)函數(shù) %sys:不同flag意義不同。0-系統(tǒng)描述、1-微分結(jié)果、2-更新結(jié)果、3-輸出結(jié)果、4-下一個(gè)采樣點(diǎn)、9-控制 %x0:輸出狀態(tài)值(只有flag為0時(shí)返回) %str:狀態(tài)字符串(只有flag為0時(shí)返回) %ts:采樣時(shí)間(只有flag為0時(shí)返回) %(level-1的規(guī)定格式,照做就行了,除了函數(shù)名不要去改動(dòng)) function [sys,x0,str,ts,simStateCompliance] = sfuntest(t,x,u,flag) switch flag,case 0,[sys,x0,str,ts,simStateCompliance]=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=mdlTerminate(t,x,u);otherwiseDAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end%初始化 function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes sizes = simsizes; sizes.NumContStates = 0; %連續(xù)狀態(tài)個(gè)數(shù) sizes.NumDiscStates = 0; %離散狀態(tài)個(gè)數(shù) sizes.NumOutputs = 1; %輸出數(shù)目 sizes.NumInputs = 1; %輸入數(shù)目 sizes.DirFeedthrough = 1; %有無直接反饋(輸出=k*輸入,表示有直接反饋;輸出=k*狀態(tài),表示相反) sizes.NumSampleTimes = 1; %采樣時(shí)間個(gè)數(shù),至少一個(gè)采樣時(shí)間 sys = simsizes(sizes); x0 = []; %初始狀態(tài) str = []; %狀態(tài)字符串 ts = [0 0]; %采樣時(shí)間,[0 0]連續(xù)采樣時(shí)間、[0 1]連續(xù)采樣時(shí)間并以最小步長運(yùn)算、%[period offset]采樣時(shí)間Tm=m*period+offset、[-2 0]變步長離散采樣時(shí)間,由flag=4設(shè)置、%[-1 0]最小步長內(nèi)改變的函數(shù)并采用驅(qū)動(dòng)模塊的采樣時(shí)間、[-1 1]最小步長內(nèi)不改變的函數(shù)并采用驅(qū)動(dòng)模塊的采樣時(shí)間 simStateCompliance = 'UnknownSimState';%狀態(tài)導(dǎo)數(shù)函數(shù) function sys=mdlDerivatives(t,x,u) sys = [];%狀態(tài)表示函數(shù) function sys=mdlUpdate(t,x,u) sys = [];%輸出函數(shù) function sys=mdlOutputs(t,x,u) sys = -1 * u;%下一步采樣時(shí)間 function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; %采樣步長 sys = t + sampleTime;%采樣結(jié)束 function sys=mdlTerminate(t,x,u) sys = [];?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Simulink框图和S-函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么“消费降级”突然火了?数字基尼系数
- 下一篇: Ruby 和 Python 分析器是如何