Перечислимые данные являются данными, которые ограничиваются конечным множеством значений. Перечислимый тип данных является классом 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 поддерживает перечислимые типы, не налагая особых требований.
Перечислимые типы не предназначаются для математического вычисления, таким образом, никакой блок, который вычисляет числовой выход (в отличие от передачи числового входа до выхода) не поддерживает перечислимые типы. Таким образом перечислимый тип не считается числовым типом, даже при том, что перечисляемое значение имеет базовое целое число. Смотрите Перечисляемые значения в Расчете для получения дополнительной информации.
Большинство возможностей, которые не поддерживают перечислимые типы, очевидно, не могло поддержать их. Поэтому документация Simulink обычно упоминает неподдержку перечислимого типа только там, где это необходимо, чтобы предотвратить неправильное представление или описать исключение. Смотрите Ограничения Перечисления Simulink для получения информации об определенных построениях, которые могли поддержать перечислимые типы, но сделать нет.
Следующие блоки Simulink поддерживают перечислимые типы:
Constant (но Enumerated Constant предпочтительно),
Probe (вводит только),
Relay (выводит только),
Все члены следующих категорий блоков Simulink поддерживают перечислимые типы:
Способные к шине блоки (см. Способные к шине Блоки),
Блоки передачи:
С состоянием, как Data Store Memory и блоки Unit Delay.
Без состояния, как блок Mux.
Много блоков Simulink в дополнение к названным выше перечислимых типов поддержки, но они или принадлежат одной из категорий, упомянутых выше, или редко используются с перечислимыми типами. Раздел Data Type Support каждой страницы с описанием блока описывает все типы данных, которые поддерживает блок.
Следующие классы 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