声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1536|回复: 4

求助!关于SIMULINK中S-Fcn的运行中出错的问题!

[复制链接]
发表于 2007-5-9 09:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求助!关于SIMULINK中S-Fcn的运行中出错的问题!
我的函数名是selectstep,程序如下:
function[sys,x0,str,ts]=selectstep(t,x,u,flag)
  switch flag,
    case 0,
        [sys,x0,str,ts]=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[sys,x0,str,ts]=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=[0,0];
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都关不掉!
请问这是什么回事,我的操作哪儿出错了,或是说我的使用是不是出了问题??

S-Fcn使用仿真图

S-Fcn使用仿真图
回复
分享到:

使用道具 举报

发表于 2007-5-9 11:49 | 显示全部楼层

回复 #1 cjclj 的帖子

u=1时,你的输出只是一个,初始化输出是3个,而且你使用了demux模块,还有就是那个输出子函数的名字是否可以那样写,我觉得刚开始时候还是按照例子写比较好
发表于 2007-5-10 19:04 | 显示全部楼层
另外说个简单的错误:)
function sys=selectstep-outputs(t,x,u)
发表于 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是否是整数?如果不是整数,而且你上面程序表示的是连续系统,那么他会在每个采样时刻采一个点相信你的采样时间很短,那么势必有很多输出了。自然死机。
当然我只是从表面来看,可能你做的不存在这个问题。
发表于 2007-5-14 17:46 | 显示全部楼层
错误:
(1)  if u==0:
(2)  在t为1s和2s时输出分别1个和两个,但是你的输出设定是3个。要不就将输出设为-1让它继承。要不就将其他的输出值保持。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 16:32 , Processed in 0.059069 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表