Property attributes, which add details to a property, provide a
layer of control to your properties. In addition to the MATLAB® property attributes and property validation, System objects can use
Nontunable
or DiscreteState
. To specify multiple
attributes, separate them with commas.
By default all properties are tunable, meaning the value of the property can change at any time.
Use the Nontunable
attribute for a property when the algorithm
depends on the value being constant once data processing starts. Defining a property as
nontunable may improve the efficiency of your algorithm by removing the need to check for or
react to values that change. For code generation, defining a property as nontunable allows
the memory associated with that property to be optimized. You should define all properties
that affect the number of input or output ports as nontunable.
When you use the System object™, you can only change nontunable properties before calling the object or after
calling the release
function. For example, you define the
InitialValue
property as nontunable and set its value to 0.
properties (Nontunable)
InitialValue = 0;
end
If your algorithm uses properties that hold state, you can assign those properties the
DiscreteState
attribute. Properties with this attribute display their
state values via the getDiscreteStateImpl
when users call
getDiscreteState
. The following restrictions apply to a property with
the DiscreteState
attribute,
Numeric, logical, or fi value, but not a scaled double fi value
Does not have any of these attributes: Nontunable
,
Dependent
, Abstract
,
Constant
.
No default value
Not publicly settable
GetAccess = Public
by default
Value set only via the setupImpl
when the System object is called. (See Summary of Call Sequence)
For example, you define the Count
property as a discrete
state:
properties (DiscreteState)
Count;
end
This example shows two nontunable properties, a discrete state property, and also MATLAB class property validation to set property attributes.
classdef Counter < matlab.System % Counter Increment a counter to a maximum value % These properties are nontunable. They cannot be changed % after the setup method has been called or while the % object is running. properties (Nontunable) % The initial value of the counter InitialValue = 0 % The maximum value of the counter, must be a positive integer scalar MaxValue (1, 1) {mustBePositive, mustBeInteger} = 3 end properties % Whether to increment the counter, must be a logical scalar Increment (1, 1) logical = true end properties (DiscreteState) % Count state variable Count end methods (Access = protected) % Increment the counter and return its value % as an output function c = stepImpl(obj) if obj.Increment && (obj.Count < obj.MaxValue) obj.Count = obj.Count + 1; else disp(['Max count, ' num2str(obj.MaxValue) ' ,reached']) end c = obj.Count; end % Setup the Count state variable function setupImpl(obj) obj.Count = 0; end % Reset the counter to one. function resetImpl(obj) obj.Count = obj.InitialValue; end end end