Level 2 S-Function: ???Input argument "block" is undefined

1 view (last 30 days)
Hi! I'm new in Simulink and I'm trying to find a finally solution for my code. My idea is to select the inputs and to feed all selected inputs in a vector. the outputs will be the row and column from the vector. My Code is:
function Find_Signal(block)
setup(block);
function setup(block)
% Register the number of ports.
block.NumInputPorts = 2;
block.NumOutputPorts = 2;
% Set up the port properties to be inherited or dynamic.
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
% Override the input port properties.
block.InputPort(1).DatatypeID = -1; % double
block.InputPort(1).Complexity = 'Inherited';
block.InputPort(1).DimensionsMode = 'Inherited';
block.InputPort(1).DirectFeedthrough = true ;
block.InputPort(2).DatatypeID = -1; % double
block.InputPort(2).Complexity = 'Inherited';
block.InputPort(2).DimensionsMode = 'Inherited';
block.InputPort(2).DirectFeedthrough = true;
% Override the output port properties.
block.OutputPort(1).DatatypeID = 'double';
block.OutputPort(1).Complexity = 'Real';
block.OutputPort(1).DimensionsMode = 'Variable';
block.OutputPort(2).DatatypeID = 'double';
block.OutputPort(2).Complexity = 'Real';
block.OutputPort(2).DimensionsMode = 'Variable';
block.NumDialogPrms = 2;
block.DialogPrmsTunable = {'Nontunable','Nontunable'};
block.SampleTimes = [-1 0];
block.SetAccelRunOnTLC(false);
block.SimStateCompliance = 'DefaultSimState';
block.RegBlockMethod('CheckParameters', @CheckPrms);
block.RegBlockMethod('SetInputPortDimensionsMode', @SetInputPortDimsMode);
block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);
block.RegBlockMethod('SetInputDimsMode',@SetInputDimsMode);
block.RegBlockMethod('ProcessParameters', @ProcessPrms);
block.RegBlockMethod('InitializeConditions', @InitializeConditions);
block.RegBlockMethod('Start', @Start);
block.RegBlockMethod('Outputs', @Outputs);
block.RegBlockMethod('Update', @Update);
block.RegBlockMethod('SimStatusChange', @SimStatusChange);
block.RegBlockMethod('Terminate', @Terminate);
%endfunction
function CheckPrms(block)
param1= block.DialogPrm(1).Data;
if ~strcmp(class(param1), 'double')
DAStudio.error('Simulink:block:invalidParameter');
end
param2 = block.DialogPrm(2).Data;
if ~strcmp(class(param2), 'double')
DAStudio.error('Simulink:block:invalidParameter');
end
%endfunction
function ProcessPrms(block)
block.AutoUpdateRuntimePrms;
% % endfunction
function DoPostPropSetup(block)
block.NumDworks = 2;
block.Dwork(1).Name = 'x1';
block.Dwork(1).Dimensions = [1 2];
block.Dwork(1).DatatypeID = 0; % double
block.Dwork(1).Complexity = 'Real'; % real
block.Dwork(1).UsedAsDiscState = true;
block.Dwork(2).Name = 'x2';
block.Dwork(2).Dimensions = [block.DialogPrm(2).Data 2] ;
block.Dwork(2).DatatypeID = 0; % double
block.Dwork(2).Complexity = 'Real'; % real
block.Dwork(2).UsedAsDiscState = true;
block.AddOutputDimsDependencyRules(block.Output(1).Data,[block.Input(1).Data...
block.Input(2).Data], @setOutputVarDims);
block.DWorkRequireResetForSignalSize(block.Dwork(2).Data, true);
block.AutoRegRuntimePrms;
%endfunction
function SetInputDimsMode(block, port, dm)
%Set dimension mode
block.OutputPort(port).DimensionsMode = dm;
function setOutputVarDims(block, opIdx, inputIdx)
% Set current (run-time) dimensions of the output
outDimsAfterReset = block.InputPort(inputIdx(1)).CurrentDimensions;
block.OutputPort(opIdx).CurrentDimensions = outDimsAfterReset;
function InitializeConditions(block)
block.Dwork(1).Data=zeros(1,2);
block.Dwork(2).Data=zeros(block.DialogPrm(2).Data,2);
%endfunction
function Start(block)
block.Dwork(1).Data(1) = block.InputPort(1).Data;
block.Dwork(1).Data(2) = block.InputPort(2).Data;
%
% %endfunction
function Outputs(block)
block.OutputPort(1).Data = block.Dwork(2).Data(:,1);
block.OutputPort(2).Data = block.Dwork(2).Data(:,2);
%endfunction
function Update(block)
for i=1:DialogPrm(2).Data
if (block.InputPort(2).Data > block.DialogPrm(1).Data)
block.Dwork(2).Data(i,1) = block.Dwork(1).Data(1);
block.Dwork(2).Data(i,2) = block.Dwork(1).Data(2);
end
end
%endfunction
function Terminate(block)
disp(['Terminating the block with handle ' num2str(block.BlockHandle) '.']);
I hope somebody can help me.
Thanks

Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!