声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3902|回复: 6

[编程技巧] S函数问题求助,“??? Input argument 'flag' is undefined.”

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

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

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

x
按照书上的一个S函数的例子写的,实现阶梯波的功能,可是一运行就会出错,请各位看看是什么问题?


function [sys,x0,str,ts] = jieti(t,x,u,flag,tTime,yStep)
% Dispatch the flag. The switch function controls the calls to
% S-function routines at each simulation stage.
switch flag,

   case 0
     [sys,x0,str,ts] = mdlInitializeSizes; % Initialization

   case 3
     sys = mdlOutputs(t,tTime,yStep); % Calculate outputs

   case { 1, 2, 4, 9 }
     sys = []; % Unused flags

   otherwise
     error(['Unhandled flag = ',num2str(flag)]); % Error handling
end;
% End of function timestwo.
%==============================================================
% Function mdlInitializeSizes initializes the states, sample
% times, state ordering strings (str), and sizes structure.
%==============================================================
function [sys,x0,str,ts] = mdlInitializeSizes
% Call function simsizes to create the sizes structure.
sizes = simsizes;
% Load the sizes structure with the initialization information.
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs=    1;
sizes.NumInputs=     0;
sizes.DirFeedthrough=0;
sizes.NumSampleTimes=1;
% Load the sys vector with the sizes information.
sys = simsizes (sizes);
%
x0 = []; % No continuous states
%
str = []; % No state ordering
%
ts = [0 0]; % Inherited sample time
% End of mdlInitializeSizes.
%==============================================================
% Function mdlOutputs performs the calculations.
%==============================================================
function sys = mdlOutputs(t,tTime,yStep)
i = find(tTime<=t);
sys =yStep(i(end));

% End of mdlOutputs.

错误

错误
回复
分享到:

使用道具 举报

发表于 2008-6-9 10:04 | 显示全部楼层
function [sys,x0,str,ts] = jieti(t,x,u,flag,tTime,yStep)
调用的时候,有没有给它值啊
 楼主| 发表于 2008-6-9 10:27 | 显示全部楼层
这个函数是没有输入的,只有一个输出,调用的时候不用给值吧.
发表于 2008-6-9 11:33 | 显示全部楼层

有输入参数的

jieti(t,x,u,flag,tTime,yStep)
函数里面的参数不都是输入参数吗?
 楼主| 发表于 2008-6-9 14:54 | 显示全部楼层
jieti(t,x,u,flag,tTime,yStep)
中t,x,u分别是时间,状态,输入信号(这个例子里不需要输入),flag是标志位,都不用输入吧。在调用时s-function name 写“jieti”,s-function parameters里面还需要写什么参数吗?
发表于 2008-6-9 16:57 | 显示全部楼层
搞不懂s函数

不过对于m函数文件
这种形式,肯定有输入
要不也不会提示你有参数没有定义了
发表于 2008-6-9 21:39 | 显示全部楼层
不清楚你的系统到底是什么样子的,所以很难下结论你具体那个地方出错。

我用s函数也出现过这个错误,原因是我单独运行了这个s函数。
而实际上,s函数是在某个模块中(我的是simulink模块)被调用的,他的具体参数由在他之前的模块提供。flag不需要自己定义,系统会默认的。

所以建议你运行整个模块看看是否报错。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-3 04:29 , Processed in 0.064692 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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