MATLAB: Error in S-function “Error evaluating registered method ‘Start’ of MATLAB S-Function” , Caused by: No method ‘ContStates’ with matching signature found for class ‘Simulink.​​MSFcnRunT​i​meBlock’

s-function

I am describing a dynamic system with 12 states. The error originates from the Initial conditions part , I have tried both start and Initialize conditions methods . Please explain what I am doing wrong!
note : the error message indicates error in the first line after " function start(block)
Here is my code :
if true
% function dynamics2(block)
setup(block);
%endfunction




function setup(block)
% Register number of dialog parameters
block.NumDialogPrms = 17;
% Register number of input and output ports
block.NumInputPorts = 1;
block.NumOutputPorts = 1;
% Setup functional port properties to dynamically be inherited.
% block.SetPreCompInpPortInfoToDynamic;
% block.SetPreCompOutPortInfoToDynamic;
block.InputPort(1).Dimensions = 6;
block.InputPort(1).DirectFeedthrough = false;
block.OutputPort(1).Dimensions = 12;
% Set block sample time to continuous
block.SampleTimes = [0 0];
% Set up the continuous states.
block.NumContStates = 12;
% Set the block simStateCompliance to default (i.e., same as a built-in block)
block.SimStateCompliance = 'DefaultSimState';
% Register block methods
block.RegBlockMethod('InitializeConditions', @InitializeConditions);
block.RegBlockMethod('Derivatives', @Derivatives);
block.RegBlockMethod('Outputs', @Outputs);
block.RegBlockMethod('Terminate', @Terminate);
%endfunction
function Start(block)
block.ContStates(1).Data =block.DialogPrm(6).Data; !-------------Error-------------!
block.ContStates(2).Data =block.DialogPrm(7).Data;
block.ContStates(3).Data =block.DialogPrm(8).Data;
block.ContStates(4).Data =block.DialogPrm(9).Data;
block.ContStates(5).Data =block.DialogPrm(10).Data;
block.ContStates(6).Data =block.DialogPrm(11).Data;
block.ContStates(7).Data =block.DialogPrm(12).Data;
block.ContStates(8).Data =block.DialogPrm(13).Data;
block.ContStates(9).Data =block.DialogPrm(14).Data;
block.ContStates(10).Data =block.DialogPrm(15).Data;
block.ContStates(11).Data =block.DialogPrm(16).Data;
block.ContStates(12).Data =block.DialogPrm(17).Data;
%endfunction
function Derivatives(block)
%-----States definition---------
Pn= block.ContStates(1).Data ;
Pe= block.ContStates(2).Data ;
Pd= block.ContStates(3).Data ;
U= block.ContStates(4).Data ;
V= block.ContStates(5).Data ;
W= block.ContStates(6).Data ;
phi=block.ContStates(7).Data ;
thi=block.ContStates(8).Data ;
psi=block.ContStates(9).Data ;
P= block.ContStates(10).Data;
Q= block.ContStates(11).Data ;
R= block.ContStates(12).Data ;
%-----Inputs definition---------
Fx=block.InputPort(1).Data;
Fy=block.InputPort(2).Data;
Fz=block.InputPort(3).Data;
l =block.InputPort(4).Data;
m =block.InputPort(5).Data;
n =block.InputPort(6).Data;
%-----Block parameters definition---------
M =block.DialogPrm(1).Data;
Ix =block.DialogPrm(2).Data;
Iy =block.DialogPrm(3).Data;
Iz =block.DialogPrm(4).Data;
Ixz=block.DialogPrm(5).Data;
%-----Constants definition---------
G=(Ix*Iz)-(Ixz^2);
G1=(Ixz*(Ix-Iy+Iz))/G;
G2=((Iz*(Iz-Iy))+Ixz^2)/G;
G3=Iz/G;
G4=Ixz/G;
G5=(Iz-Ix)/Iy;
G6=Ixz/Iy;
G7=((Ix*(Ix-Iy))+Ixz^2)/G;
G8=Ix/G;
block.Derivatives(1).Data = (cos(thi)*cos(psi)*U)+(((sin(phi)*sin(thi)*cos(psi))-...
(cos(phi)*sin(psi)))*V)+(((cos(phi)*sin(thi)*cos(psi))+(sin(phi)*sin(psi)))*W);
block.Derivatives(2).Data = (cos(thi)*cos(psi)*U)+(((sin(phi)*sin(thi)*sin(psi))+...
(cos(phi)*cos(psi)))*V)+(((cos(phi)*sin(thi)*sin(psi))-(sin(phi)*cos(psi)))*W);
block.Derivatives(3).Data =(-sin(thi)*U)+((sin(phi)*cos(thi))*V)+...
((cos(phi)*cos(thi))*W);
block.Derivatives(4).Data=((R*V)-(Q*W))+(Fx/M);
block.Derivatives(5).Data=((P*W)-(R*U))+(Fy/M);
block.Derivatives(6).Data=((Q*U)-(P*V))+(Fz/M);
block.Derivatives(7).Data=P+((sin(phi)*tan(thi))*Q)+((cos(phi)*tan(thi))*R);
block.Derivatives(8).Data=(cos(phi)*Q)+(-sin(phi)*R);
block.Derivatives(9).Data=((sin(phi)/cos(thi))*Q)+((cos(phi)/cos(thi))*R);
block.Derivatives(10).Data=(G1*P*Q)-(G2*q*r)+ ((G3*l)+(G4*n));
block.Derivatives(11).Data=(G5*P*R)-(G6*(P^2-R^2))+ (m/Iy);
block.Derivatives(12).Data=(G7*P*Q)-(G1*q*r)+ ((G4*l)+(G8*n));
%endfunction
function Outputs(block)
% y = x
block.OutputPort(1).Data = block.ContStates(1).Data;
block.OutputPort(2).Data = block.ContStates(2).Data;
block.OutputPort(3).Data = block.ContStates(3).Data;
block.OutputPort(4).Data = block.ContStates(4).Data;
block.OutputPort(5).Data = block.ContStates(5).Data;
block.OutputPort(6).Data = block.ContStates(6).Data;
block.OutputPort(7).Data = block.ContStates(7).Data;
block.OutputPort(8).Data = block.ContStates(8).Data;
block.OutputPort(9).Data = block.ContStates(9).Data;
block.OutputPort(10).Data = block.ContStates(10).Data;
block.OutputPort(11).Data = block.ContStates(11).Data;
block.OutputPort(12).Data = block.ContStates(12).Data;
%endfunction
end

Best Answer

change this
block.ContStates(1).Data =block.DialogPrm(6).Data;
to
block.ContStates.Data(1) =block.DialogPrm(6).Data;
and also
block.Derivatives(4).Data TO block.Derivatives.Data(1)
block.OutputPort(1).Data TO block.OutputPort.Data(1)
block.InputPort(1).Data; TO block.InputPort.Data(1);
Related Question