Level 2 S-Function: ???Input argument "block" is undefined
Show older comments
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)
Categories
Find more on Simulink in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!