Data types of output ports
[dt_1,dt_2,...,dt_n] = getOutputDataTypeImpl(obj)
[dt_1,dt_2,...,dt_n] = getOutputDataTypeImpl(obj) returns the data
type of each output port as a character vector for built-in data types or as a numeric
object for fixed-point data types. The number of outputs must match the value returned from
getNumOutputsImpl method or the number of
output arguments listed in the
For System objects with one input and one output and where you want the input and output
data types to be the same, you do not need to implement this method. In this case,
getOutputDataTypeImpl assumes the input and output data types are the
same and returns the data type of the input.
If your System object™ has more than one input or output, and you use propagation, you must set the
output data types in the
getOutputDataTypeImpl method. For Simulink®, if the input and output data types are different, you might have to cast the
output value to the data type of the appropriate
dt_n output argument. You
specify this casting in the
stepImpl method. For bus output, you must
specify the name of the output bus in
If needed to determine the output data type, you can use
getOutputDataTypeImpl method to obtain the input type.
getOutputDataTypeImpl is called by the MATLAB System block.
You must set
Access = protected for this method.
You cannot modify any properties in this method.
If you are debugging your code and examine the data types before Simulink completes propagation, you might see outputs with empty, [ ], data types. This occurs because Simulink has not completed setting the output data types.
obj— System object
System object handle used to access properties, states, and methods specific to the object. If
getOutputDataTypeImpl method does not use the object, you can replace this
dt_1,dt_2,...— Property data type
Data type of the property. For built-in data types,
a character vector. For fixed-point data types,
dt is a
numeric type object.
Specify, in your class definition file how to control the output
data type from a MATLAB®
System block. This example shows how to use the
getOutputDataTypeImpl method to change the output data
type from single to double, or propagate the input as a double. It also shows how to
cast the data type to change the output data type in the
classdef DataTypeChange < matlab.System & ... matlab.system.mixin.Propagates properties(Nontunable) Quantize = false end methods(Access = protected) function y = stepImpl(obj,u) if obj.Quantize == true % Cast for output data type to differ from input. y = single(u); else % Propagate output data type. y = u; end end function out = getOutputDataTypeImpl(obj) if obj.Quantize == true out = "single"; else out = propagatedInputDataType(obj,1); end end end end
Specify, in your class definition file, that the System object data type is a bus. You must also include a property to specify the bus name.
properties(Nontunable) OutputBusName = "myBus"; end methods (Access = protected) function out = getOutputDataTypeImpl(obj) out = obj.OutputBusName; end end
The data type of the output bus must be defined upfront. The
propagatedInputDataType method does
not support propagation of bus data types to the output data type.