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