Выбор подхода к строению данных

Когда вы генерируете код из модели, код включает проект данные, такие как сигналы, состояния и параметры, которые ваш код приложения может считать и записывать. Принимая решение о том, как вы хотите, чтобы эти данные были представлены в сгенерированном коде, примите во внимание:

  • Какие типы элементов данных я хочу использовать в моей модели?

  • Где я хочу хранить данные?

  • Каковы цели генерации кода?

  • Как настроить данные для достижения целей генерации кода?

Ответы на эти вопросы зависят от архитектуры модели (автономная модель, автономная иерархия моделей-ссылок или система компонентов), типа приложения (повторный или один экземпляр), а также от того, интегрируете ли вы код с существующим внешним кодом.

Категории элементов данных

Возможные элементы данных в модели относятся к типам элементов данных, перечисленным в этой таблице.

Тип элемента данныхОписание
InportsВходные порты корневого уровня модели, такие как блоки Inport и Bus Element In.
Вспомогательные портыВыходные порты корневого уровня модели, такие как блоки Outport и Bus Element Out.
Моделируемые параметры
  • Аргументы параметра модели - Переменные в рабочем пространстве модели, которые вы конфигурируете как аргументы модели. Эти параметры доступны в блоке модели, чтобы позволить родительской модели предоставить различные значения для каждого образца модели.

  • Параметры модели - Параметры, которые заданы в рабочем пространстве модели. В отличие от аргументов модели, эти параметры разделяются каждым образцом модели.

Внешние параметрыПараметры, которые вы определяете как объекты в базовом рабочем пространстве или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении.
Хранилища данных
  • Внутренние данные (локальные хранилища данных) - хранилища данных, доступные из любого места в иерархии подсистем, которая находится на уровне или ниже уровня, на котором определяется хранилище данных. Задается графически в модели путем включения блока Data Store Memory или путем создания объекта сигнала в рабочем пространстве модели.

  • Глобальные данные - Хранилища данных, которые заданы сигнальным объектом в базовом рабочем пространстве или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении.

  • Общие локальные хранилища данных - Data Store Memory блоки, которые имеют параметры блоков Share across model instances установленные. Эти хранилища данных доступны только в той системе, где расположен блок Data Store Memory. Значение хранилища данных разделяется между образцами модели.

Внутренние данныеЛокальные данные, такие как внутренние сигналы и состояния блока. Включает локальные хранилища данных.
КонстантыПостоянные параметры и выход блока с постоянными значениями в модели.

Опции строения кода, доступные для данных, зависят от категории данных, которые вы конфигурируете. Где вы храните данные, определяет, конфигурируете ли вы его с помощью объекта данных или с помощью отображения кода, которое сохранено в модели.

Где хранить элементы данных, используемые вашей моделью

Где вы храните данные для модели, может зависеть от типа архитектуры модели, которую вы используете, и ваших целей моделирования:

  • 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 применяется класс памяти. В этом случае генератор кода помещает код для категории элементов данных в стандартные структуры. Другие опции класса памяти включают:

  • В Property Inspector настройте свойства для этого класса памяти. (Например, файлы заголовков и определений).

Для получения дополнительной информации смотрите Строение Генерации кода C для Элементов Интерфейса Модели.

Для определенных категорий данных, включая входные порты, выходные порты, хранилища данных и состояний блока, отображение по умолчанию, вероятно, является единственным строением, которую вы должны выполнить. Но для элементов данных, таких как параметры и внутренние сигналы, может потребоваться задать индивидуальное отображение, чтобы предотвратить оптимизацию данных. Для применения класса памяти к отдельному элементу данных:

  • В редакторе Кода Отображений найдите элемент данных на соответствующей вкладке категории (для примера, чтобы сконфигурировать отдельный параметр, выберите вкладку Parameters).

  • Выберите класс памяти для элемента данных. Чтобы применить строение по умолчанию, выберите класс памяти Model default.

  • В Property Inspector настройте свойства для этого класса памяти. (Например, файлы заголовков и определений).

Для получения дополнительной информации смотрите Строение Генерации кода C для Элементов Интерфейса Модели.

Конфигурирование внешних данных

Сконфигурируйте внешние объекты данных для генерации кода с помощью редактора 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';

Загрузка пакетов классов памяти в словарь Embedded Coder

Чтобы применить класс памяти из пакета класса памяти, отличного от Simulink (например, созданный пакет), выполните следующие действия.

  1. Откройте приложение Embedded Coder.

  2. Откройте словарь Embedded Coder. На вкладке C Code выберите Code Interface > Embedded Coder Dictionary.

  3. В словаре Embedded Coder Dictionary нажмите кнопку Manage Packages.

  4. В диалоговом окне Управление пакетами выберите пакет. Если интересующего пакета нет в списке, нажмите Refresh. Затем выберите пакет.

  5. Закройте словарь Embedded Coder.

  6. Нажмите Load.

  7. Используйте редактор Code Mappings или API отображения кода, чтобы сконфигурировать элементы интерфейса модели.

Для получения дополнительной информации см. Embedded Coder Dictionary, Code Mappings editor и coder.mapping.api.CodeMapping.

Применить класс памяти с помощью объекта данных (обязательные параметры), вместо создания Simulink.Signal или Simulink.Parameter объект, создайте myPackage.Signal или myPackage.Parameter объект. Чтобы создать объекты данных из пакета, смотрите Создание объектов данных из другого пакета класса данных. Пример, показывающий, как создать и применить свои собственные классы памяти, см. в разделе Создание и применение Класса памяти.

См. также

|

Похожие темы