This example shows how to set the number of inputs for a System object™ with and without using getNumInputsImpl
.
If you have a variable number of inputs or outputs and you intend to use the System object in Simulink®, you must include the getNumInputsImpl
or getNumOutputsImpl
method in your class definition.
These examples show modifications for the number of inputs. If you want to change the number of outputs, the same principles apply.
As with all System object Impl
methods, you always set the getNumInputsImpl
and getNumOutputsImpl
method's access to protected
because they are internal methods that are never called directly.
This example shows how to write a System object that allows the number of inputs to vary.
Update the stepImpl
method to accept up to three inputs by adding code to handle one, two, or three inputs. If you are only using this System object in MATLAB, getNumInputsImpl
and getNumOutputsImpl
are not required.
Full Class Definition
classdef AddTogether < matlab.System % Add inputs together methods (Access = protected) function y = stepImpl(~,x1,x2,x3) switch nargin case 2 y = x1; case 3 y = x1 + x2; case 4 y = x1 + x2 + x3; otherwise y = []; end end end end
Run this System object with one, two, and three inputs.
addObj = AddTogether; addObj(2)
ans = 2
addObj(2,3)
ans = 5
addObj(2,3,4)
ans = 9
This example shows how to write a System object that allows changes to the number of inputs and outputs before running the object. Use this method when your System object will be included in Simulink:
Add a nontunable property NumInputs
to control the number of inputs.
Implement the associated getNumInputsImpl
method to specify the number of inputs.
Full Class Definition
classdef AddTogether2 < matlab.System % Add inputs together. The number of inputs is controlled by the % nontunable property |NumInputs|. properties (Nontunable) NumInputs = 3; % Default value end methods (Access = protected) function y = stepImpl(obj,x1,x2,x3) switch obj.NumInputs case 1 y = x1; case 2 y = x1 + x2; case 3 y = x1 + x2 + x3; otherwise y = []; end end function validatePropertiesImpl(obj) if ((obj.NumInputs < 1) ||... (obj.NumInputs > 3)) error("Only 1, 2, or 3 inputs allowed."); end end function numIn = getNumInputsImpl(obj) numIn = obj.NumInputs; end end end
Run this System object with one, two, and three inputs.
addObj = AddTogether2; addObj.NumInputs = 1; addObj(2)
ans = 2
release(addObj); addObj.NumInputs = 2; addObj(2,3)
ans = 5
release(addObj); addObj.NumInputs = 3; addObj(2,3,4)
ans = 9
getNumInputsImpl
| getNumOutputsImpl