马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
始终不是很明白s函数的运行原理,本来我的目的是想使用s函数得到差值一定的输出,就如下面脚本文件输出一样:
global m
m=0;
while m<20
sys=(m+1)*0.05;
m=m+1;
for i=0:50000000;
d=i;
end
end
运行这个脚本文件,输出是以0.05递增的值,直到sys=1为止
如果使用s函数,如下所示:
function [sys,x0,str,ts]=ercichazhi(t,x,u,flag)
global P m D1 D2 D3 P1 P2 P3 D
P=0;
m=0;
D=0.5;
D1=0;D2=0.5;D3=1;P1=0;P3=0;
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(P,m,D1,D2,D3,P1,P2,P3,D);
case 3,
sys=mdlOutputs(t,x,u,P,m,D1,D2,D3,P1,P2,P3,D);
case 4
sys=mdlGetTimeOfNextVarHit(t,x,u);
case {1,2,9}
sys=[];
otherwise
error(['Unhandled flag=',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes(P,m,D1,D2,D3,P1,P2,P3,D)
sizes=simsizes; % 调用simsizes获得一个用于存放长度信息的结构
sizes.NumContStates=0; %设置连续状态的个数
sizes.NumDiscStates=0; %设置离散状态的个数
sizes.NumOutputs=1; %设置输出信号的个数
sizes.NumInputs=0; %设置输入信号的个数
sizes.DirFeedthrough=0;
%设置直接反馈的状态:0表示没有直接反馈,1表示存在直接反馈
sizes.NumSampleTimes=1; %设置抽样时间的个数(大于等于1)
sys=simsizes(sizes); %通过simsizes把sizes结构返还给sys
x0=[]; %设置S函数的初始状态x0
str=[]; %设置S函数的保留参数str(应该设置为空向量)
ts=[1 0]; %初始化抽样时间
%========================================================
function sys=mdlOutputs(t,x,u,P,m,D1,D2,D3,P1,P2,P3,D)
while m<20
for i=0:50000000;%延时循环
d=i;
end
m=m+1
sys=m*0.05;
end
%计算S函数的输出信号并且通过sys参数返还给Simulink
%========================================================
function sys=mdlGetTimeOfNextVarHit
%sys=[];
sampleTime=0.025;
sys=t+sampleTime;
结果输出就是一个恒定的值,是不是我采样的时间有问题啊,麻烦高手帮忙看看啊
谢谢!! |