lxl4025539 发表于 2007-5-11 15:05

急啊!请教高手simulink的仿真问题

本人做了一个神经元PID的s函数,但运行后老是显示错误。请高手帮帮忙,看是什么问题,应该怎么修改
s函数如下:
function = neuro(t,x,u,flag,P,I,D)
switch flag,
case 0,
    =mdlInitializeSizes;
case 2,
    sys=mdlUpdate(t,x,u,P,I,D);
case 3,
    sys=mdlOutputs(t,x,u);
case{1,4,9}
    sys=[];
otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function =mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 3;
sizes.NumOutputs   = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0= ;
str = [];
ts= [-1 0];

function sys=mdlUpdate(t,x,u,P,I,D)
sys(1,1) = x(1)+P*u(1)*u(1);
sys(2,1) = x(2)+I*u(1)*u(2);
sys(3,1) = x(3)+D*u(1)*u(3);

function sys=mdlOutputs(t,x,u)
sys =1.1*(x(1)*u(1)+x(2)*u(2)+x(3)*u(3))/(x(1)+x(2)+x(3));
end

其显示的错误是:Output returned by S-function 'neuro' in block 'shenjingyuanPID/S-Function' during flag=3 call must be a real vector of length 1

spare 发表于 2007-5-11 15:15

回复 #1 lxl4025539 的帖子

将DirFeedthrough设置为1试试

lxl4025539 发表于 2007-5-11 15:23

“将DirFeedthrough设置为1试试”
怎么设置啊
在哪里能找到啊

spare 发表于 2007-5-11 15:34

回复 #3 lxl4025539 的帖子

程序初始化里面不是有吗?在输入参数的下面

lxl4025539 发表于 2007-5-11 15:36

谢谢,成功了!

YZ350 发表于 2007-5-14 17:29

若是在输出中直接调用输入值,或通过状态变量间接调用的话,你要将直通设定为1

cdwxg 发表于 2007-5-14 17:35

原帖由 YZ350 于 2007-5-14 17:29 发表 http://www.chinavib.com/forum/images/common/back.gif
若是在输出中直接调用输入值,或通过状态变量间接调用的话,你要将直通设定为1
这个直通为1,应该表示的是有直接反馈吧?

YZ350 发表于 2007-5-14 17:52

表示是直接贯通
即y=u或x=u,y=x这样输出调用输入。就要将直接贯通设置为1

suyuntian 发表于 2012-12-10 19:29

Error evaluating parameter 'P' in 'shenjingyuanPID/S-Function': Undefined function or variable 'P'.是怎么回事
页: [1]
查看完整版本: 急啊!请教高手simulink的仿真问题