what's wrong with my MATLAB LEVEL2 S-FUNCTION

the original math function is continuous state-space function,not in the form of standard type.
dx denotes dx/dt.
State-space function:
dx1=-c*x1+a*u1+0*u2+a/b*x2*u3
dx2=-d*x2+0*u1+b*u2-(b/a*x1+b*e)*u3
dx3= 0*x3+0*u1+0*u2+u3
Output function:
y1=x1
y2=x2
y3=x3 state viables:x1,x2,x3;input viables:u1,u2,u3;output viables:y1,y2,y3
dialog parameters: a,b,c,d,e my MATLAB version: R2013b matlab level2 s-function code:
if true
function pm(block)
% The setup method is used to set up the basic attributes.
setup(block);
% end pmsm
function setup(block)
% (1)Register number of input and output ports
block.NumInputPorts = 3;
block.NumOutputPorts = 3;
% (2)Setup port properties to dynamically inherited
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
% (5)Register parameters
block.NumDialogPrms = 5;
% Set up the continuous states
block.NumContStates = 3;
% (6)Set block to Continuous sample time
block.SampleTimes = [0 0];
% (7)Set the block simStateCompliance to default
block.SimStateCompliance = 'DefaultSimState';
% (8)Use an internal registry for block methods.
block.RegBlockMethod('Start', @Start);
block.RegBlockMethod('Outputs', @Outputs);
block.RegBlockMethod('Derivatives', @Derivatives);
% end setup
function Start(block)
block.ContStates.Data(1) = 0;
block.ContStates.Data(2) = 0;
block.ContStates.Data(3) = 0;
a=block.DialogPrm(1).Data;
b=block.DialogPrm(2).Data;
c=block.DialogPrm(3).Data;
d=block.DialogPrm(4).Data;
e=block.DialogPrm(5).Data;
x=block.ContStates.Data;
u=block.InputPort.Data;
% end Start
function Outputs(block)
block.OutputPort(1).Data =block.ContStates.Data(1);
block.OutputPort(2).Data =block.ContStates.Data(2);
block.OutputPort(3).Data =block.ContStates.Data(3);
% end Outputs
function Derivatives(block)
block.Derivatives.Data(1)=-c*x(1)+a*u(1)+a/b*x(2)*u(3);
block.Derivatives.Data(2)=-d*x(2)+b*u(2)-(b/a*x(1)+b*e)*u(3);
block.Derivatives.Data(3)=u(3);
% end Derivatives
end
compile errors:

Respuestas (0)

La pregunta está cerrada.

Etiquetas

Aún no se han introducido etiquetas.

Preguntada:

el 21 de Sept. de 2014

Cerrada:

el 20 de Ag. de 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by