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

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

Для Системного объекта, который используется в блоке MATLAB System в Simulink® можно использовать валидация свойства или перечисления. Если вы используете перечисления, перечисления могут также вывести из Simulink.IntEnumType. Вы используете этот тип перечисления, чтобы добавить атрибуты (такие как пользовательские заголовки) к вводу или выводу блока MATLAB System. Смотрите Использование Перечислимые Данные в Моделях 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

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

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

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

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

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

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

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

В Системном объекте, Color свойство задано как ColorValues объект с blue как значение по умолчанию. (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 object. The axes object contains 6 objects of type line.

Очистите электронную доску

release(greenInk);
release(blueInk);

Figure contains an axes object. The axes object is empty.

Похожие темы