034100643 发表于 2007-5-4 14:46

求助:出现错误

错误是:Output returned by S-function 'chap_1s' in block 'chap10_1/S-Function' during flag=3 call must be a real vector of length 1
S函数控制程序是:chap_1s.m
function = spacemodel(t,x,u,flag)
switch flag,
    case 0,
       =mdlInitializeSizes;
    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 = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs    = 1;
sizes.NumInputs   = 3;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes =1; % At least one sample time is needed
sys = simsizes(sizes);
x0 = [];
str = [];
ts = ;
function sys=mdlOutputs(t,x,u)
g=9.8;
m=1;
l=0.25;
d=2.0;
a=20.0;b=15.0;
I=4/3*m*l^2;
A=1.0;F=1.0;
r=u(1);
x1=u(2);
x2=u(3);
dr=A*F*2*pi*cos(F*2*pi*t);
ddr=-A*(F*2*pi)^2*sin(2*pi*t);
e=x1-r;
de=x2-dr;
tol=(d-a*I)*de-b*I*e+I*ddr+d*dr+m*g*l*cos(x1);
sys(1)=tol;
S函数被控制程序是:chap_1plant.m
function = spacemodel(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 =2;
sizes.NumDiscStates =0;
sizes.NumOutputs    =2;
sizes.NumInputs    =1;
sizes.DirFeedthrough =0;
sizes.NumSampleTimes =1;
sys = simsizes(sizes);
x0 = ;
str = [];
ts = ;
function sys=mdlDerivatives(t,x,u)
g=9.8;
m=1;
l=0.25;
d=2.0;
I=4/3*m*l^2;
tol=u;
sys(1)=x(2);
sys(2)=1/I*(-d*x(2)-m*g*l*cos(x(1))+tol);
function sys=mdlOutputs(t,x,u)
sys(1)=x(1);
sys(2)=x(2);
模型如下:

[ 本帖最后由 xinyuxf 于 2007-5-4 19:42 编辑 ]

spare 发表于 2007-5-4 17:37

回复 #1 034100643 的帖子

将chap_1s.m
当中的初始化中Dirreedthrough设置为1好像可以仿真,但是不知道结果是不是对的,你试试

034100643 发表于 2007-5-4 18:15

作图程序出问题了

我按你说了试了,刚才的错误是不见了.但是作图程序出错,错误是??? Error using ==> plot
Data may not have more than 2 dimensions.,作图程序如下:
>>close all;
>> figure(1);
>> plot(t,e,'r');
>>xlable('time(s)');yable('error');
感觉是向量矩阵前后不符合!!

spare 发表于 2007-5-4 19:10

回复 #3 034100643 的帖子

你的作图程序是单独的吗

034100643 发表于 2007-5-4 19:18

回复

不是!是和这个模型一起的,其实这些程序我是照<<先进PID控制>>这本书上原样写下来的,是一个确定性机械手的PD+前馈控制,但是就是调试没有通过.刚才的作图只是其中一个关于误差的,还有几个对应于几个WORKSPACE的.有点心急!!希望能再解答下!!

spare 发表于 2007-5-4 19:29

回复 #5 034100643 的帖子

你输出的t是仿真时间,e是什么啊?是刚才输出的变量吗

034100643 发表于 2007-5-4 19:33

回复

e是输出误差,,y是正弦位置跟踪,dy是正弦速度跟踪,而tol是控制器输出.要不你加我QQ一起谈下,希望你能指点我一下,这样稍微有点不方便:handshake .

034100643 发表于 2007-5-4 19:34

QQ271638963

QQ是271638963

spare 发表于 2007-5-4 19:47

回复 #8 034100643 的帖子

你可以设置程序使之输出e的值,看看输出的情况和你要求的是不是一样

034100643 发表于 2007-5-4 19:54

回复

e已经是一个输出值了啊!!在模型最后面的workspace中就包括e啊,就表示是输出误差.可能因为我是菜鸟,请你稍微讲的详细点.我感觉这里不是输出的问题,感觉是向量问题,就是找不到具体原因.

spare 发表于 2007-5-4 20:33

回复 #10 034100643 的帖子

是啊,但是你要看输出是不是合理的啊,我的模型有时候也可以跑,但是输出的是NaN,所以这个时候需要看看你的输出的值的情况啊

034100643 发表于 2007-5-5 18:27

回复

e的值感觉不对,误差出现了负值,其他模型方面就e这个跟踪误差是错误的!!希望高手指点帮忙下!!!
页: [1]
查看完整版本: 求助:出现错误