Limit Property Values to Finite List
When you want to create a System object™ property with a limited set of acceptable values, you can either use enumerations or property validation.
For a System object that is used in a MATLAB System block in Simulink® you can use enumerations or property validation. If you use enumerations,
enumerations can also derive from Simulink.IntEnumType
. You use this type
of enumeration to add attributes (such as custom headers) to the input or output of the MATLAB
System block. See Use Enumerated Data in Simulink Models (Simulink).
Property Validation with mustBeMember
To limit property values with property validation, you use the mustBeMember
validation function.
This example defines a Style
property that can have the values
solid
, dash
, or dot
. The default
value is solid
and the (1,1)
defines the property as a
scalar.
properties Style (1,1) string {mustBeMember(Style, ["solid","dash","dot"])} = "solid"; end
matlab.system.mustBeMember
instead.properties Style (1,:) char {matlab.system.mustBeMember(Style, ["solid","dash","dot"])} = "solid"; end
Enumeration Property
To use enumerated data in a System object, you refer to the enumerations as properties in your System object class definition and define your enumerated class in a separate class definition file.
To create an enumerated property, you need:
A System object property set to the enumeration class.
The associated enumeration class definition that defines all possible values for the property.
This example defines a color enumeration property for a System object. The definition of the enumeration class ColorValues
is:
classdef ColorValues < int32 enumeration blue (0) red (1) green (2) end end
ColorValues
class inherits from int32
for code
generation compatibility. Enumeration values must be valid MATLAB
identifiers.In the System object, the Color
property is defined as a
ColorValues
object with blue
as the default. The
(1,1)
defines the Color
property as a
scalar:
properties
Color (1, 1) ColorValues = ColorValues.blue
end
Create a Whiteboard System Object
This example shows the class definition of a Whiteboard
System object™, two types of finite list properties, and how to use the object. Each time you run the whiteboard object, it draws a line on a whiteboard.
Definition of the Whiteboard
System Object
type Whiteboard.m
classdef Whiteboard < matlab.System % Whiteboard Draw lines on a figure window % properties(Nontunable) Color (1, 1) ColorValues = ColorValues.blue Style (1,1) string {mustBeMember(Style, ["solid","dash","dot"])} = "solid"; end methods (Access = protected) function stepImpl(obj) h = Whiteboard.getWhiteboard(); switch obj.Style case "solid" linestyle = "-"; case "dash" linestyle = "--"; case "dot" linestyle = ":"; end plot(h, randn([2,1]), randn([2,1]), ... "Color",string(obj.Color), "LineStyle",linestyle); end function releaseImpl(~) cla(Whiteboard.getWhiteboard()); hold on end end methods (Static) function a = getWhiteboard() h = findobj('tag','whiteboard'); if isempty(h) h = figure('tag','whiteboard'); hold on end a = gca; end end end
Construct the System object.
greenInk = Whiteboard; blueInk = Whiteboard;
Change the color and set the blue line style.
greenInk.Color = "green"; blueInk.Color = "blue"; blueInk.Style = "dot";
Draw a few lines.
for i=1:3 greenInk(); blueInk(); end
Clear the whiteboard.
release(greenInk); release(blueInk);