|
|
| Tutorial17_SFunction(block)
|
% Tutorial17_SFunction.m:
% Level 2 M-File S-Function que implementa integral 'limitada'
%%%%%%%%%%%%% Definio funo principal %%%%%%%%%%%%%%%%%%%%%%
function Tutorial17_SFunction(block)
% Configura parmetros inicials:
Tutorial17_Setup(block)
% Define condiao inicial: Integral = 0
block.RegBlockMethod('InitializeConditions',@Tutorial17_InitConditions);
% Calcula a integral do sinal
block.RegBlockMethod('Outputs' ,@Tutorial17_Outputs);
% Calcula a integral limitada (utiliza a derivada)
block.RegBlockMethod('Derivatives' ,@Tutorial17_Derivatives);
%%%%%%%%%%%%% Definio das subfunes callback %%%%%%%%%%%%%%%%
% Configura parmetros inicials:
function Tutorial17_Setup(block)
block.NumInputPorts = 1;
block.NumOutputPorts = 1;
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
block.InputPort(1).Dimensions = 1;
block.InputPort(1).DirectFeedthrough = false;
block.OutputPort(1).Dimensions = 1;
block.SampleTimes = [0 0];
block.NumContStates = 1;
% Define condiao inicial: Integral = 0
function Tutorial17_InitConditions(block)
block.ContStates.Data = 0;
% Calcula a integral do sinal
function Tutorial17_Outputs(block)
block.OutputPort(1).Data = block.ContStates.Data;
% Calcula a integral limitada (utiliza a derivada)
function Tutorial17_Derivatives (block)
% Define os limites
LimiteInferior = -0.5;
LimiteSuperior = 0.5;
% u = dado de entrada
u = block.InputPort(1).Data;
if (block.ContStates.Data < LimiteInferior && u < 0) || ...
(block.ContStates.Data >= LimiteSuperior && u > 0)
block.Derivatives.Data = 0;
else
block.Derivatives.Data = u;
end
|
|
Contact us at files@mathworks.com