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

Когда это необходимо, чтобы создать Систему object™ свойство с ограниченным набором приемлемых значений, вы используете перечисления. Чтобы использовать перечисленные данные в Системном объекте в MATLAB® или Simulink®, вы обращаетесь к ним в вашем определении класса Системного объекта и задаете свой перечислимый класс в отдельном файле определения класса.

Перечисления могут вывести от любого целого типа, меньшего, чем, или равняться int32. Например,

classdef Bearing < uint8
   enumeration
      North (0)
      East  (90)
      South (180)
      West  (270)
   end
end

Для Системного объекта, который используется в MATLAB только, смотрите Предельные Значения свойств к Конечному Списку и Перечислениям.

Для Системного объекта, который используется в блоке MATLAB System в Simulink, смотрите Использование Перечислимые Данные в Моделях Simulink (Simulink).

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

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

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

Перечисления могут также вывести от Simulink.IntEnumType. Вы используете этот тип перечисления, чтобы добавить атрибуты, такие как пользовательские заголовки, к вводу или выводу блока MATLAB System. Смотрите Использование Перечислимые Данные в Моделях Simulink (Simulink).

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

Определение класса перечисления ColorValues:

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

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

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

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

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

type('Whiteboard.m');
classdef Whiteboard < matlab.System
    % Whiteboard Draw lines on a figure window
    %
    
    
    properties(Nontunable)
        Color (1, 1) ColorValues = ColorValues.blue
    end

    methods (Access = protected)
        function stepImpl(obj)
            h = Whiteboard.getWhiteboard();
            plot(h, ...
                randn([2,1]), randn([2,1]), ...
                'Color',char(obj.Color));
        end
        
        function releaseImpl(obj)
            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';

Проведите несколько линий.

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

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

release(greenInk);
release(blueInk);

Похожие темы

Была ли эта тема полезной?