Перечисляемые данные - это данные, которые ограничены конечным множеством значений. Перечисленный тип данных является MATLAB® класс, который задает набор перечисленных значений. Каждое перечисленное значение состоит из перечисляемого имени и базового целого числа, которое программное обеспечение использует внутренне и в сгенерированном коде.
Прежде чем вы начнете использовать перечисления в контексте моделирования, вы должны понять информацию, представленную в Перечислениях.
Чтобы задать перечисление для использования в Simulink® модели, выберите один из следующих методов:
Используйте функцию Simulink.defineIntEnumType
. Перечисление существует для длительности вашего Сеанса работы с MATLAB.
Создайте постоянный класс перечисления путем подкласса одного из следующих встроенных классов:
Многие встроенные целочисленные типы данных, такие как int8
и uint16
Simulink.IntEnumType
Используйте функцию Simulink.importExternalCTypes
чтобы создать представление Simulink перечисленного типа данных (enum
), который определяет ваш внешний код С
Используйте этот метод, чтобы помочь вам:
Замените существующий код С на модель Simulink.
Интеграция существующих Кодов С для симуляции в Simulink (для примера, с помощью Legacy Code Tool).
Сгенерируйте Коды С ( Simulink Coder™), которые можно скомпилировать с существующими Кодами С в одно приложение.
Для получения дополнительной информации смотрите Задать перечисления Simulink.
Следующие примеры показывают, как использовать перечисления в Simulink и Stateflow®.
Пример | Показывает, как использовать... |
---|---|
Набор данных в Simulink | Типы данных в Simulink, включая перечисленные типы данных |
Моделируйте медиаплеер при помощи перечисленных данных (Stateflow) | Перечисленные типы данных в модели Simulink, которая содержит диаграмму Stateflow |
Для получения информации об использовании перечислений в Stateflow, смотрите Перечисленные данные (Stateflow).
В целом все инструменты и конструкции Simulink поддерживают перечисленные типы, для которых поддержка имеет смысл с учетом цели перечисленных типов: представлять состояния программы и управлять логикой программы. Редактор Simulink, Simulink Debugger, Port Значения Отображений, ссылочные модели, подсистемы, маски, шины, логгирование данных и большинство других возможностей Simulink поддержки перечисляемыми типами, не предъявляя особых требований.
Перечисляемые типы не предназначены для математических расчетов, поэтому ни один блок, который вычисляет числовой выход (в отличие от передачи числового входа в выход), не поддерживает перечисляемые типы. Таким образом, перечисляемый тип не рассматривается как числовой тип, даже если перечисляемое значение имеет базовое целое число. Смотрите Перечисленные значения в Расчетах для получения дополнительной информации.
Большинство возможностей, которые не поддерживают перечисленные типы, очевидно, не могли их поддержать. Поэтому документация Simulink обычно упоминает перечисленный тип без поддержки только там, где это необходимо, чтобы предотвратить заблуждение или описать исключение. Смотрите Ограничения перечисления Simulink для получения информации о некоторых конструкциях, которые могут поддерживать перечисляемые типы, но нет.
Следующие блоки Simulink поддерживают перечисленные типы:
Constant (но Enumerated Constant лучше)
Probe (только вход)
Relay (только вывод)
Все представители следующих категорий блоков Simulink поддерживают перечисленные типы:
Блоки с поддержкой шины (см. «Блоки с поддержкой шины»)
Проходные блоки:
С состоянием, как блоки Data Store Memory и Unit Delay.
Без состояния, как и Mux блок.
Многие блоки Simulink в дополнение к названным выше поддерживают перечисленные типы, но они либо относятся к одной из перечисленных выше категорий, либо редко используются с перечисленными типами. Раздел Поддержки типа данных каждого блока страницы с описанием описывает все типы данных, поддерживаемые блоком.
Перечисленные типы поддерживаются следующими классами Simulink:
Simulink.Signal
Simulink.Parameter
Simulink.AliasType
Simulink.BusElement
Выходные порты модели верхнего уровня, блоки To Workspace и блоки Scope могут все экспортировать перечисленные значения. Логгирования сигнала и состояния работают с перечисленными данными так же, как и с любыми другими данными. Поддерживаются все форматы логгирования. Блок From File не поддерживает перечисленные данные. Используйте вместо этого блок From Workspace в сочетании с некоторым методом передачи данных между файлом и рабочей областью. Дополнительные сведения см. в разделе Сохранение данных во время выполнения из симуляции.
Входные порты модели верхнего уровня и блоки From Workspace могут выводить перечисленные сигналы во время симуляции. Данные должны быть предоставлены в Structure
, Structure with Time
, или TimeSeries
объект. Интерполяция не происходит для перечисленных значений между заданными временами симуляции. From File блоки выдают только данные типа double
поэтому они не поддерживают перечисленные типы. Смотрите Загрузку Данных Сигнала для Симуляции для получения дополнительной информации.
Когда блок Scope отображает перечисленный сигнал, вертикальная ось отображает имена перечисленных значений только, если возможности была открыта во время симуляции. Если вы открываете блок Scope впервые до того, как произошло какое-либо моделирование или между симуляциями, блок отображает только числовые значения. Когда симуляция начинается, перечисленные имена заменяют числовые значения и затем появляются всякий раз, когда Scope блок открыт.
Когда блок Floating Scope отображает несколько сигналов, имена перечисленных значений появляются на оси Y, только если все сигналы имеют одинаковый тип перечисления. Если блок Floating Scope отображает более одного типа перечисленного сигнала или любого числового сигнала, имена не появляются, и любые перечисленные значения представляются базовыми целыми числами.
Управляющий вход блока Switch может быть любого типа данных, поддерживаемых Simulink. Однако u2 ~=0
режим не поддерживается для перечислений. Если вход управления имеет перечисление, выберите один из следующих методов, чтобы задать критерии для передачи первого входа:
Выберите u2 >= Threshold
или u2 > Threshold
и задайте пороговое значение того же перечисленного типа, что и вход управления.
Используйте блок Relational Operator для сравнения и затем передайте логический результат этого сравнения в порт управления блока Switch.
При использовании перечисленных типов данных в Simulink существуют следующие ограничения:
Пакеты не могут содержать определения классов перечисления.
Блок If Action не поддерживает перечисления.
Сгенерированный код не поддерживает логгирование перечисленных данных.
Пользовательские цели Stateflow не поддерживают перечисленные типы.
enumeration
| Simulink.data.getEnumTypeInfo
| Simulink.defineIntEnumType