Simulink에서 새롭고 S-function을 사용하는 모델을 가지고 있습니다. mdlDerivatives의 출력이 mdlOutputs의 출력과 어떤 관련이 있는지 이해할 수 없습니까? 다른 말로하면, (시뮬링크를 사용하지 않고) mfile을 쓰고 싶다면 상태는 무엇이고 출력은 무엇입니까? 나는 MFILE를 작성하고 DDQ, DQ와 q를 찾을 수 있지만,이 두 부분의 상태는 출력을 어떻게 얻을하지 않습니다 싶어? (파일 첨부) 비선형 상태 공간 모델이 구성되어S-function Simulink에서 mdlDerivatives 출력과 mdlOutputs 사이의 관계를 설명하는 방법
function [sys,x0,str,ts]=s_function(t,x,u,flag)
switch flag,
case 0,
e[sys,x0,str,ts]=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 [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 4;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 4;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 0;
sys=simsizes(sizes);
x0=[0;0;0;0];
str=[];
ts=[];
function sys=mdlDerivatives(t,x,u)
q1=x(1);dq1=x(2);
q2=x(3);dq2=x(4);
dq=[dq1;dq2];
% The model is given by Slotine and Weiping Li(MIT 1987)
alfa=6.7;beta=3.4;
epc=3.0;eta=0;
m1=1;l1=1;
lc1=1/2;I1=1/12;
g=9.8;
e1=m1*l1*lc1-I1-m1*l1^2;
e2=g/l1;
H=[alfa+2*epc*cos(q2)+2*eta*sin(q2),beta+epc*cos(q2)+eta*sin(q2);
beta+epc*cos(q2)+eta*sin(q2),beta];
C=[(-2*epc*sin(q2)+2*eta*cos(q2))*dq2,(-epc*sin(q2)+eta*cos(q2))*dq2;
(epc*sin(q2)-eta*cos(q2))*dq1,0];
G=[epc*e2*cos(q1+q2)+eta*e2*sin(q1+q2)+(alfa-beta+e1)*e2*cos(q1);
epc*e2*cos(q1+q2)+eta*e2*sin(q1+q2)];
tol(1)=u(1);
tol(2)=u(2);
ddq=inv(H)*(tol'-C*dq-G);
sys(1)=x(2);
sys(2)=ddq(1);
sys(3)=x(4);
sys(4)=ddq(2);
function sys=mdlOutputs(t,x,u)
sys(1)=x(1);
sys(2)=x(2);
sys(3)=x(3);
sys(4)=x(4);
이 블록의 출력은 상태와 일치합니다. 'mdlOutputs'는 두 번째 인자'x'를받습니다 (이 x는 시스템의 상태입니다). 그리고 그것을'sys'에 반환합니다. – AVK