Перечислимые данные являются данными, который ограничивается конечным множеством значений. Перечислимый тип данных является классом MATLAB®, который задает набор перечисляемых значений. Каждое перечисляемое значение состоит из перечислимого имени и базового целого числа, которое программное обеспечение использует внутренне и в сгенерированном коде.
Прежде чем вы начнете использовать перечисления в контексте моделирования, необходимо понять информацию, предоставленную в Перечислениях (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, включая перечислимые типы данных |
Моделирование Проигрывателя компакт-дисков / Радио Используя Перечислимые Типы данных | Перечислимые типы данных в модели Simulink, которая содержит диаграмму Stateflow |
Для получения информации об использовании перечислений в Stateflow смотрите Перечислимые Данные (Stateflow).
В целом все инструменты Симулинка и построения поддерживают перечислимые типы, для которых поддержка целесообразна, учитывая цель перечислимых типов: представлять состояния программы и логике управляющей программы. Редактор Симулинка, Симулинк Дебуггер, Отображения Значения Порта, сослался на модели, подсистемы, маски, шины, регистрацию данных, и большинство других возможностей Симулинка поддерживает перечислимые типы, не налагая особых требований.
Перечислимые типы не предназначаются для математического вычисления, таким образом, никакой блок, который вычисляет числовой вывод (в отличие от передачи числового входного параметра до вывода) не поддерживает перечислимые типы. Таким образом перечислимый тип не считается числовым типом, даже при том, что перечисляемое значение имеет базовое целое число. Смотрите Перечисляемые значения в Вычислении для получения дополнительной информации.
Большинство возможностей, которые не поддерживают перечислимые типы, очевидно, не могло поддержать их. Поэтому документация Simulink обычно упоминает неподдержку перечислимого типа только там, где это необходимо, чтобы предотвратить неправильное представление или описать исключение. См. Ограничения Перечисления Simulink для получения информации об определенных построениях, которые могли поддержать перечислимые типы, но сделать нет.
Следующие блоки Simulink поддерживают перечислимые типы:
Постоянный (но Перечислимая константа предпочтительно),
Зонд (вводит только),
Реле (выводит только),
Все члены следующих категорий блоков Simulink поддерживают перечислимые типы:
Способные к шине блоки (см. Способные к шине Блоки),
Блоки передачи:
С состоянием, как блоки Памяти и Единичной задержки Хранилища данных.
Без состояния, как блок Mux.
Много блоков Simulink в дополнение к названным выше перечислимых типов поддержки, но они или принадлежат одной из категорий, упомянутых выше, или редко используются с перечислимыми типами. Раздел Data Type Support каждой блочной страницы с описанием описывает все типы данных, которые поддерживает блок.
Следующие классы Simulink поддерживают перечислимые типы:
Simulink.Signal
Simulink.Parameter
Simulink.AliasType
Simulink.BusElement
Выходные порты корневого уровня, К блокам Рабочей области и блокам Осциллографа могут все перечисляемые значения экспорта. Журналирование состояния и сигнала работает с перечислимыми данными таким же образом как с любыми другими данными. Все форматы журналирования поддержаны. Блок From File не поддерживает перечисленные данные. Используйте блок From Workspace, вместо этого, объединенный с некоторым методом для передачи данных между файлом и рабочей областью. Смотрите Сохраняют Данные Во время выполнения от Моделирования для получения дополнительной информации.
Импорт корневого уровня и От блоков Рабочей области может вывести перечисленные сигналы во время моделирования. Данные должны быть обеспечены в Structure
, Structure with Time
или объекте TimeSeries
. Никакая интерполяция не происходит для перечисляемых значений между заданными временами симуляции. Из Файла блоки производят только данные типа double
, таким образом, они не поддерживают перечислимые типы. Смотрите Данные сигнала Загрузки для Моделирования для получения дополнительной информации.
Когда блок Scope отображает перечислимый сигнал, вертикальная ось отображает имена перечисляемых значений, только если осциллограф был открыт во время моделирования. Если вы открываете блок Scope впервые, прежде чем любое моделирование произошло, или между моделированиями, блок отображает только числовые значения. Когда моделирование начинается, перечисленные имена заменяют числовые значения, и после того появляются каждый раз, когда блок Scope открыт.
Когда блок Floating Scope отображает несколько сигналов, имена перечисляемых значений появляются на оси Y, только если все сигналы имеют тот же перечислимый тип. Если блок Floating Scope отображает больше чем один тип перечислимого сигнала или какого-либо числового сигнала, никакие имена не появляются, и любые перечисляемые значения представлены их базовыми целыми числами.
Входной параметр управления блока switch может иметь любой тип данных, поддержанный Simulink. Однако режим u2 ~=0
не поддержан для перечислений. Если входной параметр управления имеет перечисление, выберите один из следующих методов, чтобы задать критерии передачи первого входного параметра:
Выберите u2 >= Threshold
или u2 > Threshold
и задайте пороговое значение того же перечислимого типа как входной параметр управления.
Используйте блок Relational Operator, чтобы сделать сравнение и затем подать булев результат этого сравнения в порт управления блока switch.
Следующие ограничения существуют при использовании перечислимых типов данных с Simulink:
Пакеты не могут содержать определения классов перечисления.
Блок If Action может поддержать перечисления, но в настоящее время не делает так.
Сгенерированный код не поддерживает перечисленные данные регистрации.
Пользовательские цели Stateflow не поддерживают перечислимые типы.
Simulink.data.getEnumTypeInfo
| Simulink.defineIntEnumType
| перечисление