cjclj 发表于 2007-5-9 09:35

求助!关于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都关不掉!
请问这是什么回事,我的操作哪儿出错了,或是说我的使用是不是出了问题??

spare 发表于 2007-5-9 11:49

回复 #1 cjclj 的帖子

u=1时,你的输出只是一个,初始化输出是3个,而且你使用了demux模块,还有就是那个输出子函数的名字是否可以那样写,我觉得刚开始时候还是按照例子写比较好

cdwxg 发表于 2007-5-10 19:04

另外说个简单的错误:)
function sys=selectstep-outputs(t,x,u)

cdwxg 发表于 2007-5-10 19:08

另外我们来分析下死机的原因
if u=0
    sys=zeros(1,3);
else
    for t=1:u
    sys(t)=1;
    end
首先,我不知道这个输入u是否可以小于0,如果小于0怎么办?
另外,这个输入u是否是整数?如果不是整数,而且你上面程序表示的是连续系统,那么他会在每个采样时刻采一个点相信你的采样时间很短,那么势必有很多输出了。自然死机。
当然我只是从表面来看,可能你做的不存在这个问题。

YZ350 发表于 2007-5-14 17:46

错误:
(1)if u==0:
(2)在t为1s和2s时输出分别1个和两个,但是你的输出设定是3个。要不就将输出设为-1让它继承。要不就将其他的输出值保持。
页: [1]
查看完整版本: 求助!关于SIMULINK中S-Fcn的运行中出错的问题!