声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6690|回复: 6

[基本模块类] 请教S-function问题

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

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

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

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

使用道具 举报

发表于 2007-5-20 19:47 | 显示全部楼层
你ts那里错了应该,你前面如果是设置的连续系统,时间也应该是〔0 0〕
你把你的S函数拿来看下呢?给你的连接你都看了?
 楼主| 发表于 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 [sys,x0,str,ts] = system(t,x,u,flag)
switch flag,
  case 0,
    [sys,x0,str,ts]=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 [sys,x0,str,ts]=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  = [0];
str = [];
ts  = [0 0];
function sys=mdlDerivatives(t,x,u)
sys=[0];
function sys=mdlOutputs(t,x,u)
if u>0
    sys=10;
else sys=30;
end

time.mdl

14.74 KB, 下载次数: 23

发表于 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;

评分

1

查看全部评分

发表于 2007-7-10 14:13 | 显示全部楼层

s函数

请问我想用s函数实现一功能, 他的输入可以是一个视频序列吗 ,谢谢大家了,在s函数立怎样设置呢
发表于 2012-10-11 10:47 | 显示全部楼层
刚刚遇到了这个问题,但是我是将系统加上零阶保持器后才出现这个问题。
系统没有加上零阶保持器之前,采用ODE45变步长仿真,有很好的控制性能。问题在于模拟控制器的输出振动太高,实际上的采样控制器或者元件肯定达不到。将仿真步长设置为固定后,系统立马就报错:计算中产生虚数,这和采样定理有关。我就想着能不能加一个零阶保持器,克服一下采样频率的问题。结果就出现了和楼主一样的问题。
发表于 2012-11-9 20:00 | 显示全部楼层
学习了。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-24 23:24 , Processed in 0.079056 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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