Перечисляемые данные - это данные, которые ограничены конечным набором значений. Перечисляемый тип данных - это класс MATLAB ®, который определяет набор перечисляемых значений. Каждое перечисляемое значение состоит из перечисляемого имени и базового целого числа, которое программное обеспечение использует внутри и в сгенерированном коде.
Перед началом использования перечислений в контексте моделирования следует ознакомиться с информацией, представленной в разделе Перечисления.
Чтобы определить перечисление для использования в моделях Simulink ®, выберите один из следующих методов:
Используйте функцию Simulink.defineIntEnumType. Перечисление существует в течение сеанса MATLAB.
Создайте постоянный класс перечисления путем подкласса одного из следующих встроенных классов:
Многие встроенные целочисленные типы данных, такие как int8 и uint16
Simulink.IntEnumType
Используйте функцию Simulink.importExternalCTypes для создания представления Simulink перечисляемого типа данных (enum), который определяет внешний код C.
Используйте этот метод, чтобы помочь вам:
Замените существующий код C моделью Simulink.
Интегрируйте существующий код C для моделирования в Simulink (например, с помощью инструмента Legacy Code Tool).
Создайте код C (Simulink Coder™), который можно скомпилировать с существующим кодом C в одном приложении.
Дополнительные сведения см. в разделе Определение перечислений Simulink.
В следующих примерах показано, как использовать перечисления в Simulink и Stateflow ®.
| Пример | Показывает, как использовать... |
|---|---|
| Ввод данных в Simulink | Типы данных в Simulink, включая перечислимые типы данных |
| Проигрыватель Model Media с помощью перечисляемых данных (поток состояний) | Перечислимые типы данных в модели Simulink, содержащей диаграмму Stateflow |
Сведения об использовании перечислений в Stateflow см. в разделе Перечисляемые данные (Stateflow).
В целом, все инструменты и конструкции Simulink поддерживают перечисляемые типы, для которых поддержка имеет смысл, учитывая назначение перечисляемых типов: представлять состояния программ и управлять логикой программ. Simulink Editor, Simulink Debugger, Port Value Display, ссылочные модели, подсистемы, маски, шины, протоколирование данных и большинство других возможностей Simulink поддерживают перечисленные типы, не предъявляя особых требований.
Перечисляемые типы не предназначены для математических вычислений, поэтому ни один блок, вычисляющий числовые выходные данные (в отличие от передачи числовых входных данных в выходные данные), не поддерживает перечисляемые типы. Таким образом, перечисляемый тип не считается числовым, даже если перечисляемое значение имеет нижележащее целое число. Дополнительные сведения см. в разделе Перечисляемые значения в вычислениях.
Большинство возможностей, не поддерживающих перечисляемые типы, очевидно, не могут их поддерживать. Поэтому в документации Simulink перечисленный тип обычно не поддерживается только в тех случаях, когда это необходимо для предотвращения неправильного представления или описания исключения. Сведения о некоторых конструкциях, которые могут поддерживать перечисляемые типы, но не поддерживают, см. в разделе Ограничения перечисления Simulink.
Следующие блоки Simulink поддерживают перечисляемые типы:
Константа (но перечисляемая константа является предпочтительной)
Зонд (только вход)
Реле (только выход)
Все члены следующих категорий блоков Simulink поддерживают перечисляемые типы:
Блоки с поддержкой шины (см. Блоки с поддержкой шины)
Проходные блоки:
С состоянием, как блоки памяти хранилища данных и задержки блока.
Без состояния, как блок Mux.
Многие блоки Simulink в дополнение к названным выше поддерживают перечисляемые типы, но они либо относятся к одной из перечисленных выше категорий, либо редко используются с перечисляемыми типами. В разделе «Поддержка типов данных» каждой страницы ссылок на блоки описываются все типы данных, поддерживаемые блоком.
Следующие классы Simulink поддерживают перечисляемые типы:
Simulink.Signal
Simulink.Parameter
Simulink.AliasType
Simulink.BusElement
Выходные порты модели верхнего уровня, блоки в рабочую область и блоки области могут экспортировать перечисляемые значения. Регистрация сигналов и состояний выполняется с использованием перечисленных данных так же, как и с любыми другими данными. Поддерживаются все форматы ведения журнала. Блок «» Из файла «» не поддерживает перечисляемые данные. Вместо этого используйте блок «Из рабочей области» в сочетании с некоторым способом передачи данных между файлом и рабочей областью. Дополнительные сведения см. в разделе Сохранение данных времени выполнения из моделирования.
Входные порты модели верхнего уровня и блоки из рабочей области могут выводить перечислимые сигналы во время моделирования. Данные должны быть предоставлены в Structure, Structure with Time, или TimeSeries объект. Интерполяция перечисленных значений между указанными временами моделирования не выполняется. Блоки Из файла создают только данные типа doubleпоэтому они не поддерживают перечислимые типы. Дополнительные сведения см. в разделе Загрузка данных сигналов для моделирования.
Когда в блоке «Область» отображается перечисляемый сигнал, вертикальная ось отображает имена перечисляемых значений только в том случае, если область была открыта во время моделирования. При первом открытии блока «Область» перед моделированием или между моделированием в блоке отображаются только числовые значения. При начале моделирования перечисляемые имена заменяют числовые значения и после этого появляются при каждом открытии блока «Область».
Когда блок плавающей области отображает несколько сигналов, имена перечисляемых значений появляются на оси Y только в том случае, если все сигналы имеют один и тот же перечисляемый тип. Если в блоке «Плавающая область» отображается более одного типа перечисляемого сигнала или любого числового сигнала, имена не отображаются, а любые перечисляемые значения представлены их базовыми целыми числами.
Управляющий вход блока Switch может быть любого типа данных, поддерживаемого Simulink. Тем не менее, u2 ~=0 не поддерживается для перечислений. Если управляющий ввод имеет перечисление, выберите один из следующих методов, чтобы указать критерии для передачи первого ввода:
Выбрать u2 >= Threshold или u2 > Threshold и укажите пороговое значение того же перечисляемого типа, что и управляющий вход.
Используйте блок Relational Operator для сравнения, а затем отправьте логический результат этого сравнения в порт управления блока Switch.
При использовании перечисляемых типов данных с Simulink существуют следующие ограничения:
Пакеты не могут содержать определения классов перечисления.
Блок «» Если действие «» не поддерживает перечисления.
Созданный код не поддерживает ведение журнала перечисляемых данных.
Целевые объекты настраиваемого потока состояний не поддерживают перечисляемые типы.
enumeration | Simulink.data.getEnumTypeInfo | Simulink.defineIntEnumType