Ограничьте значения свойств конечным списком

Когда необходимо создать свойство System object™ с ограниченным набором допустимых значений, можно использовать перечисления или валидацию свойств.

Для Системного объекта, которая используется в блоке MATLAB System в Simulink® можно использовать перечисления или валидацию свойств. Если вы используете перечисления, перечисления также могут быть выведены из Simulink.IntEnumType. Этот тип перечисления используется для добавления атрибутов (таких как пользовательские заголовки) к входу или выходу системного блока MATLAB. См. Использование перечисленных данных в моделях Simulink (Simulink).

Валидация свойств с помощью mustBeMember

Чтобы ограничить значения свойств с валидацией свойств, вы используете mustBeMember функции валидации.

Этот пример задает Style свойство, которое может иметь значения solid, dash, или dot. Значение по умолчанию solid и (1,1) задает свойство как скаляр.

    properties
        Style (1,1) string {mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end
Для поддержки соответствия без учета регистра используйте matlab.system.mustBeMember вместо этого.
    properties
        Style (1,:) char {matlab.system.mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end

Свойство перечисления

Чтобы использовать перечисленные данные в системном объекте, вы ссылаетесь на перечисления как свойства в определении класса системного объекта и задаете свой перечисленный класс в отдельном файле определения класса.

Чтобы создать перечисленное свойство, вам нужно:

  • A Системного объекта набора свойств к классу перечисления.

  • Связанное определение класса перечисления, которое задает все возможные значения для свойства.

Этот пример задает свойство перечисления цветов для системного объекта. Определение класса перечисления ColorValues является:

classdef ColorValues < int32
    enumeration
        blue (0)
        red (1)
        green (2)
    end
end
The ColorValues класс наследует от int32 для совместимости генерации кода. Значения перечисления должны быть допустимыми идентификаторами MATLAB.

В системном объекте Color свойство определяется как ColorValues объект с blue как значение по умолчанию. The (1,1) задает Color свойство как скаляр:

properties
   Color (1, 1) ColorValues = ColorValues.blue
end

Создайте системный объект доски

Этот пример показывает определение класса Whiteboard Системные object™, два типа свойств конечного списка и как использовать объект. Каждый раз, когда вы запускаете объект доски, он рисует линию на доске.

Определение Whiteboard Системный объект

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

Создайте Системный объект.

greenInk = Whiteboard;
blueInk = Whiteboard; 

Измените цвет и установите стиль синей линии.

greenInk.Color = "green";
blueInk.Color = "blue";
blueInk.Style = "dot";

Нарисуйте несколько линий.

for i=1:3
  greenInk();
  blueInk();
end

Figure contains an axes. The axes contains 6 objects of type line.

Очистить доску

release(greenInk);
release(blueInk);

Figure contains an axes. The axes is empty.

Похожие темы