bird67 发表于 2007-5-20 19:32

请教S-function问题

仿真时出现如下错误提示:S-function system in 'time/S-Function' must have a continuous sample time since it has continuous states
请问应该如何解决。

cdwxg 发表于 2007-5-20 19:47

你ts那里错了应该,你前面如果是设置的连续系统,时间也应该是〔0 0〕
你把你的S函数拿来看下呢?给你的连接你都看了?

bird67 发表于 2007-5-20 20:12

把时间ts改为〔0 0〕后出现如下提示:Sample times (TS) matrix returned by M-File S-function 'system' in 'time1/S-Function' must be empty。论坛上的有关S-function函数的主题我都看过了。
S-function函数如下:(模型在附件里)
function = system(t,x,u,flag)
switch flag,
case 0,
    =mdlInitializeSizes;
case 1,
    sys=mdlDerivatives(t,x,u);
case 3,
    sys=mdlOutputs(t,x,u);
   case {2,4,9}
    sys=[];
otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function =mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 1;
sizes.NumDiscStates= 0;
sizes.NumOutputs   = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0= ;
str = [];
ts= ;
function sys=mdlDerivatives(t,x,u)
sys=;
function sys=mdlOutputs(t,x,u)
if u>0
    sys=10;
else sys=30;
end

yf2002043227 发表于 2007-6-23 23:33

这条语句意思是说至少需要一个采样时间.
sizes.NumSampleTimes = 1;   % at least one sample time is needed
但是下面的函数中没有采样时间的.就是下面这个函数
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;    %Example, set the next hit to be one second later.
sys = t + sampleTime;

解决方法:
1.要么sizes.NumSampleTimes = 0;
2.下面加上这个函数
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;    %Example, set the next hit to be one second later.
sys = t + sampleTime;

zjcln 发表于 2007-7-10 14:13

s函数

请问我想用s函数实现一功能, 他的输入可以是一个视频序列吗 ,谢谢大家了,在s函数立怎样设置呢

lsc989818 发表于 2012-10-11 10:47

刚刚遇到了这个问题,但是我是将系统加上零阶保持器后才出现这个问题。
系统没有加上零阶保持器之前,采用ODE45变步长仿真,有很好的控制性能。问题在于模拟控制器的输出振动太高,实际上的采样控制器或者元件肯定达不到。将仿真步长设置为固定后,系统立马就报错:计算中产生虚数,这和采样定理有关。我就想着能不能加一个零阶保持器,克服一下采样频率的问题。结果就出现了和楼主一样的问题。

kyu16866 发表于 2012-11-9 20:00

学习了。。
页: [1]
查看完整版本: 请教S-function问题