Когда вы генерируете код из модели, код включает проект данные, такие как сигналы, состояния и параметры, которые ваш код приложения может считать и записывать. Принимая решение о том, как вы хотите, чтобы эти данные были представлены в сгенерированном коде, примите во внимание:
Какие типы элементов данных я хочу использовать в моей модели?
Где я хочу хранить данные?
Каковы цели генерации кода?
Как настроить данные для достижения целей генерации кода?
Ответы на эти вопросы зависят от архитектуры модели (автономная модель, автономная иерархия моделей-ссылок или система компонентов), типа приложения (повторный или один экземпляр), а также от того, интегрируете ли вы код с существующим внешним кодом.
Возможные элементы данных в модели относятся к типам элементов данных, перечисленным в этой таблице.
Тип элемента данных | Описание |
---|---|
Inports | Входные порты корневого уровня модели, такие как блоки Inport и Bus Element In. |
Вспомогательные порты | Выходные порты корневого уровня модели, такие как блоки Outport и Bus Element Out. |
Моделируемые параметры |
|
Внешние параметры | Параметры, которые вы определяете как объекты в базовом рабочем пространстве или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении. |
Хранилища данных |
|
Внутренние данные | Локальные данные, такие как внутренние сигналы и состояния блока. Включает локальные хранилища данных. |
Константы | Постоянные параметры и выход блока с постоянными значениями в модели. |
Опции строения кода, доступные для данных, зависят от категории данных, которые вы конфигурируете. Где вы храните данные, определяет, конфигурируете ли вы его с помощью объекта данных или с помощью отображения кода, которое сохранено в модели.
Где вы храните данные для модели, может зависеть от типа архитектуры модели, которую вы используете, и ваших целей моделирования:
MATLAB® базовое рабочее пространство - Используется для временного хранения данных во время экспериментов с методами моделирования.
Рабочее пространство модели - Используется для постоянного хранения данных, локальных для одной модели. Поскольку данные хранятся в модели, использование этой рабочей области может улучшить переносимость модели. Это рабочее пространство модели преимущественно используется для хранения параметров, аргументов и числовых переменных. Эти элементы обычно не хранятся в рабочем пространстве модели:
Объекты сигнала - Вы не можете сконфигурировать объект сигнала в рабочем пространстве модели для генерации кода. Вам не нужно определять объект сигнала, чтобы сконфигурировать сигнал для генерации кода.
Объекты типа данных.
Simulink® словарь данных - используется для постоянного хранения глобальных данных, типов данных и данных, которые являются общими для моделей.
Для получения дополнительной информации смотрите Определить, где хранить переменные и объекты для моделей Simulink.
Настройка генерации данных для генерации кода зависит от целей для сгенерированного кода. Если вы принимаете решение не конфигурировать индивидуальных настроек, генератор кода определяет, устранять или изменять представление данных в сгенерированном коде в целях оптимизации.
Существует много причин, по которым можно настроить элемент данных. Конфигурирование данных препятствует оптимизации, которая может исключить элемент данных из сгенерированного кода, и позволяет вам конфигурировать, как сгенерированный код хранит и определяет элемент данных. Для примера, если вы конфигурируете элемент данных, можно:
Настройки параметров.
Контролируйте сигналы и состояния во время выполнения.
Сконфигурируйте размещение данных в памяти.
Обмен данными с внешним кодом.
Улучшите читаемость и трассируемость сгенерированного кода.
Чтобы сконфигурировать данные для генерации кода, примените класс памяти. Класс памяти является настройкой генерации кода, которая позволяет управлять внешним видом и размещением элемента данных в сгенерированном коде и предотвращает оптимизацию, которая может исключить хранение для этого элемента данных. Можно использовать классы памяти, доступные с Simulink Coder™ и Embedded Coder®. Если у вас есть особые требования, которые не удовлетворяются этими классами памяти и вы генерируете код для целевого объекта на основе ERT, можно определить и использовать новый класс памяти. Дополнительные сведения о классах памяти и свойствах классов памяти см. в разделе Выбор классе памяти для контроля представления данных в сгенерированном коде.
Для большинства данных, принадлежащих модели, можно сопоставить класс памяти непосредственно с элементом данных с помощью редактора Code Mappings или API отображения кода. Вы должны сконфигурировать некоторые данные, которые ваша модель использует для генерации кода с помощью объекта данных, включая:
Параметры - Включает параметры в базовом рабочем пространстве, рабочем пространстве модели или словаре данных. Сконфигурируйте параметры при помощи Simulink.Parameter
объект.
Глобальные данные - Конфигурирование при помощи объекта сигнала.
Прежде чем конфигурировать числовые переменные для генерации кода, вы должны преобразовать их в Simulink.Parameter
объекты.
Данные, принадлежащие модели, состоят из блоков вывода, сигнальных линий, состояний блока, хранилищ данных и объектов параметров в рабочем пространстве модели. Для этих данных можно сопоставить класс памяти с элементом данных в приложении кодера с помощью редактора Code Mappings или с помощью API отображений кода. Для удобства можно также сконфигурировать внешние объекты данных в редакторе Code Mappings, хотя для внешних объектов данных класс памяти хранится в объекте данных, а не в модели. Чтобы увидеть эти объекты, в редакторе щелкните Refresh ссылку справа от имени категории.
Чтобы сконфигурировать данные, принадлежащие модели, сначала сконфигурируйте настройки генерации кода по умолчанию для категорий элементов данных. Использование отображения по умолчанию экономит время и снижает риск введения ошибок в код, особенно когда ваша модель содержит значительное количество элементов в конкретной категории.
На вкладке C Code выберите Code Interface > Default Code Mappings.
На вкладке Data Defaults выберите категорию данных, а затем выберите класс памяти по умолчанию для этой категории. Если вы не задаете класс памяти для категории, Default
применяется класс памяти. В этом случае генератор кода помещает код для категории элементов данных в стандартные структуры. Другие опции класса памяти включают:
Соответствующие встроенные классы памяти, такие как ExportedGlobal
.
Соответствующие классы памяти в доступном пакете, например ImportFromFile
(требует Embedded Coder).
Классы памяти, определенные в словаре Embedded Coder (требует Embedded Coder). Для получения дополнительной информации о доступных классах памяти смотрите Выбор Класса памяти для Представления контроллинговых данных в Сгенерированном коде.
В Property Inspector настройте свойства для этого класса памяти. (Например, файлы заголовков и определений).
Для получения дополнительной информации смотрите Строение генерации кода C для элементов интерфейса моделиСтроение генерации кода C для элементов интерфейса модели (Embedded Coder).
Для определенных категорий данных, включая входные порты, выходные порты, хранилища данных и состояний блока, отображение по умолчанию, вероятно, является единственным строением, которую вы должны выполнить. Но для элементов данных, таких как параметры и внутренние сигналы, может потребоваться задать индивидуальное отображение, чтобы предотвратить оптимизацию данных. Для применения класса памяти к отдельному элементу данных:
В редакторе Кода Отображений найдите элемент данных на соответствующей вкладке категории (для примера, чтобы сконфигурировать отдельный параметр, выберите вкладку Parameters).
Выберите класс памяти для элемента данных. Чтобы применить строение по умолчанию, выберите класс памяти Model default
.
В Property Inspector настройте свойства для этого класса памяти. (Например, файлы заголовков и определений).
Для получения дополнительной информации смотрите Строение генерации кода C для элементов интерфейса моделиСтроение генерации кода C для элементов интерфейса модели (Embedded Coder).
Сконфигурируйте внешние объекты данных для генерации кода с помощью редактора Code Mappings или Model Explorer. Выберите объект данных на панели Contents. Затем на панели Dialog на вкладке Code Generation выберите класс памяти и установите свойства для этого класса памяти. Для удобства можно также сконфигурировать внешние объекты данных в редакторе Code Mappings. Чтобы просмотреть и сконфигурировать эти объекты, в редакторе щелкните Refresh ссылку справа от имени категории.
Можно программно сконфигурировать внешние объекты данных. Например, чтобы сконфигурировать Simulink.Parameter
объект для генерации кода путем применения класса памяти ExportedGlobal
, можно использовать код, подобный:
P = Simulink.Parameter; P.Value = 5; P.DataType = 'int32'; P.CoderInfo.StorageClass = 'ExportedGlobal';
Чтобы применить класс памяти из пакета класса памяти, отличного от Simulink (например, созданный пакет), выполните следующие действия.
Откройте приложение Embedded Coder.
Откройте словарь Embedded Coder. На вкладке C Code выберите Code Interface > Embedded Coder Dictionary.
В словаре Embedded Coder Dictionary нажмите кнопку Manage Packages.
В диалоговом окне Управление пакетами выберите пакет. Если интересующего пакета нет в списке, нажмите Refresh. Затем выберите пакет.
Закройте словарь Embedded Coder.
Нажмите Load.
Используйте редактор Code Mappings или API отображения кода, чтобы сконфигурировать элементы интерфейса модели.
Для получения дополнительной информации см. Embedded Coder Dictionary (Embedded Coder), Code Mappings editor и coder.mapping.api.CodeMapping
(Embedded Coder).
Применить класс памяти с помощью объекта данных (обязательные параметры), вместо создания Simulink.Signal
или Simulink.Parameter
объект, создайте myPackage.Signal
или myPackage.Parameter
объект. Чтобы создать объекты данных из пакета, смотрите Создание объектов данных из другого пакета класса данных. Пример создания и применения собственного класса памяти см. в разделе Создание и применение класса хранения (Embedded Coder).
Редактор отображений кода | coder.mapping.api.CodeMapping