我是靠谱客的博主 要减肥可乐,最近开发中收集的这篇文章主要介绍【Matlab 控制】Simulink仿真+S函数例子Simulink 仿真+S函数例子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Simulink 仿真+S函数例子

S 函数代码如下:

function [sys,x0,str,ts,simStateCompliance] = Eg3_7_SFunction(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 = mdlOutpus(t,x,u);
    case 4                                                        % 计算下一个采样时间点
        sys = mdlGetTimeOfNextVarHit(t,x,u);
    case 9                                                        % 仿真结束
        sys = mdlTerminate(t,x,u);
    otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end


function [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 <= 3
    sys = 0.4 * u;
else
    if u >= 3 && u <= 16
        sys = 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

最后

以上就是要减肥可乐为你收集整理的【Matlab 控制】Simulink仿真+S函数例子Simulink 仿真+S函数例子的全部内容,希望文章能够帮你解决【Matlab 控制】Simulink仿真+S函数例子Simulink 仿真+S函数例子所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部