目录
一、Simulink 知多少
二、S-Function
三、零阶保持器
四、Model Advisor模型建议器
1.1 记录每次运行结果
1.2 子系统封装
右击子系统,点击Mask,Create Mask 创建并编辑
数字信号处理X——EasySimulink封装和库_simulink函数封装库_注释远方的博客-CSDN博客
找实例, demo----->输入关键字
1.3 代码生成
打开设置齿轮
在命令行中输入demo并搜索s function examples,打开level1中的csfunc获得模板。
function [sys,x0,str,ts] = sfunc(t,x,u,flag,para1)
%CSFUNC An example MATLAB file S-function for defining a continuous system.
% Example MATLAB file S-function implementing continuous equations:
% x' = Ax + Bu
% y = Cx + Du
%
% See sfuntmpl.m for a general S-function template.
%
% See also SFUNTMPL.
% Copyright 1990-2009 The MathWorks, Inc.
% t表示仿真时间,x当前的状态值,u当前系统的输入,flag是阶段标志位
A=[-0.09 -0.01
1 0];
B=[ 1 -7
0 -2];
C=[ 0 2
1 -5];
D=[-3 0
1 0];
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D);
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys=mdlDerivatives(t,x,u,A,B,C,D);
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
sys=mdlOutputs(t,x,u,A,B,C,D,para1);
%%%%%%%%%%%%%%%%%%%
% Unhandled flags %
%%%%%%%%%%%%%%%%%%%
case { 2, 4, 9 },
sys = [];
%%%%%%%%%%%%%%%%%%%%
% Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
% end csfunc
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D)
sizes = simsizes;
sizes.NumContStates = 2;%连续系统状态的数量,A
sizes.NumDiscStates = 0;%离散系统
sizes.NumOutputs = 2;% C D
sizes.NumInputs = 2;% B
sizes.DirFeedthrough = 1;%直馈0/1,如果输入直接影响输出为1(y=Cx+Du),否则为0(y=Cx)
sizes.NumSampleTimes = 1;%采样时间的个数
sys = simsizes(sizes);
x0 = zeros(2,1);%初始状态的定义
str = [];
ts = [0 0];%[采样间隔 采样截止时间],连续系统为[0 0],离散系统[0.1 0]
% end mdlInitializeSizes
%
%=============================================================================
% mdlDerivatives
% Return the derivatives for the continuous states.
%=============================================================================
%
function sys=mdlDerivatives(t,x,u,A,B,C,D)
sys = A*x + B*u;%实际上为x' = Ax + Bu
% end mdlDerivatives
%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u,A,B,C,D,para1)
sys = C*x + D*u; % 实际为 y= Cx +Du
disp(para1);
% end mdlOutputs
MATLAB Simulink中零阶保持器(ZOH,Zero-Order Hold)是将输入信号每过一个采样时间更新一次,并保持到下一次采样,多用于将连续信号离散化。
零阶保持器设置为0.1s
model advisor是simulink自带的静态模型检查器,能够根据设定的规则对模型进行检查,并且能够进行部分错误的自动修改。
参考:
如何使用Simulink Model Advisor创建自定义检查项?_哔哩哔哩_bilibili
Simulink代码生成(五)——代码生成文件的结构_simulink代码_b_Rlover_star的博客-CSDN博客
S-function入门及案例详解(1)——S-function基础介绍及基本案例_wendy_ya的博客-CSDN博客
Simulink 中 model advisor 检查规则自定义_simulink model advisor_Tomato-的博客-CSDN博客