function [sys,x0,str,ts]=s_function(t,x,u,flag)%定义一个连续的系统S函数
%t、x、u分别对应时间、状态、输入信号,flag为标志位,其取值不同,S函数执行的任务和返回的数据也是不同的
%x0为状态初始数值,str在目前为止的matlab版本中并没有什么作用,一般str=[]即可,ts为一个两列的矩阵,包含采样时间和偏移量两个参数,如果设置为[0 0],
%那么每个连续的采样时间步都运行,[-1 0]则表示按照所连接的模块的采样速率进行,[0.25 0.1]表示仿真开始的0.1s后每0.25s运行一次,采样时间点为TimeHit=n*period+offset。
%控制器s函数
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;%初始化
% case 1,
% sys=mdlDerivatives(t,x,u);%微分,系统方程 %flag=1,进行连续状态变量的更新,调用mdlDerivatives函数 连续
case 3,
sys=mdlOutputs(t,x,u);%输出方程 求取系统的输出信号
case {2, 4, 9 }
sys=[];% do nothing
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
%设置期望角q1,q2的运动
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;%生成数据结构
sizes.NumContStates = 0;%连续状态数,默认为0
sizes.NumDiscStates = 0;%离散状态数,默认为0
sizes.NumOutputs = 1; % dynamically sized 输出量个数
sizes.NumInputs = 3; % dynamically sized 输入量个数
sizes.DirFeedthrough = 1; % has direct feedthrough,是否存在代数循环,1——存在,0——不存在,默认为1
sizes.NumSampleTimes = 1;%???采样时间个数,每个系统至少有一个,置1时才可以给ts赋值
sys = simsizes(sizes);%返回size中数据
str = [];
x0 = [];
ts=[0 0]; % inherited sample time采样时间,【采样周期 偏移量】//【-1 0】输入信号的采样周期
function sys=mdlOutputs(t,x,u)
s=u(3)+2*u(2)+u(1);
ut=-s-sign(s)-u(1)-u(2)-2*u(3)-u(2)*u(3);
sys(1)=ut;
% function sys=mdlDerivatives(t,x,u)
% sys=[];
评论0