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