yp970704 2019-12-12 21:23 采纳率: 0%
浏览 1759

求解决S-Function运行提示error:flag=3 at time 0.0 输入参数不足,附代码

function [sys,x0,str,ts] = control(t,x,u,flag,par)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 3,
sys=mdlOutputs(t,x,u,par);
case {2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);

end;
function [sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 6;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0,0];

function sys=mdlOutputs(t,x,u,par)
x(1) = u(1);
x(2) = u(2);
x(3) = u(3);
fkp = u(4);
fki = u(5);
fkd = u(6);

kp = par(1);
ki = par(2);
kd = par(3);
k = par(4);
fkp1 = par(5);
fki1 = par(6);
fkd1 = par(7);

delta_fkp = fkp*fkp1;
delta_fki = 0;
delta_fkd = fkd*fkd1;

M = par(8);
if M==1 %%x(1) <-100

ut =k*( kp*x(1)+ki*x(2)+kd*x(3)); %%PID

else
ut =k*( (kp+delta_fkp)*x(1)+(ki+delta_fki)*x(2)+(kd+delta_fkd)*x(3));
%%fuzzyPID
delta_fki = fki*fki1;
A=(kp+delta_fkp);
B=(ki+delta_fki);
C=(kd+delta_fkd);
x(1),A,B,C
end
if ut>=6000
ut=6000;
end
sys=ut;

  • 写回答

4条回答 默认 最新

  • huangjingzhu 2021-02-25 10:33
    关注

    楼主解决了吗?能告诉我是为什么吗?

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站