exponenta event banner

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

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

Для объекта System, используемого в системном блоке MATLAB в 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

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

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

Для создания перечисляемого свойства необходимо:

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

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

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

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

В объекте System, 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

Создайте объект System.

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.

Связанные темы