Main Content

Define Property Attributes

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.

Specify Property as Nontunable

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

Specify Property as DiscreteState

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

Example Class with Various Property Attributes

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

Related Topics