【Matlab 控制】Simulink仿真+S函数例子
生活随笔
收集整理的這篇文章主要介紹了
【Matlab 控制】Simulink仿真+S函数例子
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Simulink 仿真+S函數(shù)例子
S 函數(shù)代碼如下:
function [sys,x0,str,ts,simStateCompliance] = Eg3_7_SFunction(t,x,u,flag)switch flagcase 0 % 初始化[sys,x0,str,ts,simStateCompliance] = mdlInitializeSizes;case 1 % 計算模塊導(dǎo)數(shù)sys = mdlDerivatives(t,x,u);case 2 % 更新模塊離散狀態(tài)sys = mdlUpdate(t,x,u);case 3 % 計算模塊輸出sys = mdlOutpus(t,x,u);case 4 % 計算下一個采樣時間點sys = mdlGetTimeOfNextVarHit(t,x,u);case 9 % 仿真結(jié)束sys = mdlTerminate(t,x,u);otherwiseDAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); endfunction [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes sizes = simsizes; % 用于設(shè)置模塊參數(shù)的結(jié)構(gòu)體用simsizes來生成 sizes.NumContStates = 0; % 系統(tǒng)中的連續(xù)狀態(tài)變量個數(shù)為0 sizes.NumDiscStates = 0; % 系統(tǒng)中的離散狀態(tài)變量個數(shù)為0 sizes.NumOutputs = 1; % 系統(tǒng)的輸出個數(shù)為1 sizes.NumInputs = 1; % 系統(tǒng)的輸入個數(shù)為1 sizes.DirFeedthrough = 1; % 輸入和輸出間不存在直接比例關(guān)系 sizes.NumSampleTimes = 1; % 只有1個采樣時間 sys = simsizes(sizes); % 設(shè)置完后賦給sys輸出 x0 = []; % 設(shè)置狀態(tài)變量的初始值 str = []; % 固定格式 ts = [0 0]; % 該取值對應(yīng)純連續(xù)函數(shù) simStateCompliance = 'UnknownSimState';% 計算模塊導(dǎo)數(shù)子函數(shù) function sys=mdlDerivatives(t,x,u) sys = [];% 更新模塊離散狀態(tài)子函數(shù) function sys=mdlUpdate(t,x,u) sys = [];% 計算模塊輸出子函數(shù) function sys = mdlOutpus(t,x,u) if u >= 0 && u <= 3sys = 0.4 * u; elseif u >= 3 && u <= 16sys = 0.8 * u + 1.39;end end% 計算下一個采樣時間點子函數(shù) function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; sys = t + sampleTime;% 仿真結(jié)束子函數(shù) function sys=mdlTerminate(t,x,u) sys = [];注意,仿真程序和S函數(shù)不能使用同一個文件名。
仿真器程序如下圖所示:
S-FunctionModel參數(shù)設(shè)置如下:
此處僅需要將S函數(shù)名字改為所編寫的S函數(shù)名字即可。
詳見Github
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的【Matlab 控制】Simulink仿真+S函数例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LaTex 版面设计
- 下一篇: 【Matlab 控制】多智能体一致性收敛