求助!关于SIMULINK中S-Fcn的运行中出错的问题!
求助!关于SIMULINK中S-Fcn的运行中出错的问题!我的函数名是selectstep,程序如下:
function=selectstep(t,x,u,flag)
switch flag,
case 0,
=mdlInitializeSizes(t,x,u);
case 3,
sys=selectstep-Outputs(t,x,u);
case {1,2,4,9},
sys=[];
otherwise
error('Unhandled flag=',num2str(flag));
end
function=mdlInitializeSizes(t,x,u)
sizes=simsizes;
sizes.NumContStates=1; %模块连续状态变量的个数
sizes.NumDiscStates =0; %模块离散状态变量的个数
sizes.NumOutputs =3; %模块输出变量的个数
sizes.NumInputs =1; %模块输入变量的个数
sizes.DirFeedthrough =0;%模块是否存在直接贯通
sizes.NumSampleTimes=1; %模块的采样时间个数,至少是一个
sys=simsizes(sizes); %设置完后赋给sys输出
x0=[];
str=[];
ts=;
sys=zeros(1,3);
function sys=selectstep-output(t,x,u)
if u=0
sys=zeros(1,3);
else
for t=1:u
sys(t)=1;
end
end
前面的信号给的是一个阶跃,1S前是1,1S后是3.
每次一运行就一直在initialing然后就等于死机了,连MATLAB都关不掉!
请问这是什么回事,我的操作哪儿出错了,或是说我的使用是不是出了问题??
回复 #1 cjclj 的帖子
u=1时,你的输出只是一个,初始化输出是3个,而且你使用了demux模块,还有就是那个输出子函数的名字是否可以那样写,我觉得刚开始时候还是按照例子写比较好 另外说个简单的错误:)function sys=selectstep-outputs(t,x,u) 另外我们来分析下死机的原因
if u=0
sys=zeros(1,3);
else
for t=1:u
sys(t)=1;
end
首先,我不知道这个输入u是否可以小于0,如果小于0怎么办?
另外,这个输入u是否是整数?如果不是整数,而且你上面程序表示的是连续系统,那么他会在每个采样时刻采一个点相信你的采样时间很短,那么势必有很多输出了。自然死机。
当然我只是从表面来看,可能你做的不存在这个问题。 错误:
(1)if u==0:
(2)在t为1s和2s时输出分别1个和两个,但是你的输出设定是3个。要不就将输出设为-1让它继承。要不就将其他的输出值保持。
页:
[1]