franny4611 发表于 2007-5-12 14:19

应该是很简单的问题,求助大家的帮助,在线等(急)

在simulink里写的s function 运行程序的时候总是出现Input argument 'flag' is undefined.的错误,用matlab自带的demo也是一样,哪位知道的麻烦告诉一下是什么原因,不胜感激!

franny4611 发表于 2007-5-12 14:31

看到的帮个忙啊,实在是急啊

franny4611 发表于 2007-5-12 15:10

怎么没人理啊

franny4611 发表于 2007-5-12 15:46

把程序贴上来,希望有人能找出问题



[ 本帖最后由 franny4611 于 2007-5-12 15:47 编辑 ]

franny4611 发表于 2007-5-12 15:46

把程序贴上来,希望有人能找出问题

function =area_sel(t,x,u,flag)
switch flag,
    case 0,
      = mdlInitializeSizes;
   
    case 2,
      sys=[];
      
    case 3,
      sys=mdlOutputs(t,x,u);
    case 4,
      sys=[];
      
    case 9,
      sys=[];
      
      otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end

function=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 2;
sizes.NumDiscStates= 0;
sizes.NumOutputs   = 1;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   
sys = simsizes(sizes);
x0= [];


function sys=mdIOutputs(t,x,u)
if(u(1)>0)
    if(u(2)/u(1)<1/sqrt(3)&&u(2)/u(1)>-1/sqrt(3))
      sys=1;
    end
    if(u(2)/u(1)>1/sqrt(3))
      sys=2;
    end
    if(u(2)/u(1)<-1/sqrt(3))
      sys=6;
    end
end
if(u(1)<0)
    if(u(2)/u(1)<-1/sqrt(3))
      sys=3;
    end
    if(u(2)/u(1)<1/sqrt(3)&&u(2)/u(1)>-1/sqrt(3))
      sys=4;
    end
    if(u(2)/u(1)>1/sqrt(3))
      sys=5;
    end
end
    if(u(1)==0)
      if(u(2)>0)
            sys=3;
      else
            sys=6;
      end
    end

spare 发表于 2007-5-12 16:47

回复 #5 franny4611 的帖子

你是直接运行这个程序吗?要是那样的话一般都会提示这个错误

cdwxg 发表于 2007-5-12 20:52

原帖由 franny4611 于 2007-5-12 15:46 发表 http://forum.vibunion.com/forum/images/common/back.gif
function =area_sel(t,x,u,flag)
switch flag,
    case 0,
      = mdlInitializeSizes;
   
    case 2,
      sys=[];
      
    case 3,
      sys=mdlOutpu ...
你这个是S函数的格式,如果直接当成普通M文件运行,永远报这个错的
你要把它用在系统中就不是错误了。
flag的0,1,3等值的不同代表了不同的情况
看下帮助里面的simulink里面的writing S-functions 里面的相关介绍你就明白了哈:)
页: [1]
查看完整版本: 应该是很简单的问题,求助大家的帮助,在线等(急)