Объедините код, сгенерированный для нескольких моделей

Чтобы объединить код, который генератор кода производит для нескольких моделей или нескольких образцов модели, в одну исполняемую программу, используйте эти методы:

Примечание

Цель системы S-функций (rtwsfcn.tlc) не поддерживает объединение кода, сгенерированного для нескольких моделей.

Чтобы объединить модели для симуляции и генерации кода, рассмотрите использование ссылок на модели. Ссылка на модель помогает с:

  • Согласованность имен символов

  • Необходимое планирование общего алгоритма

  • Моделируйте согласованность строения

Факторы по объединению кода для различных моделей

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

  • Данные глобальны. Могут возникнуть столкновения символов (имен).

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

  • Повторное использование и совместное использование кода могут быть неоптимальными (для примера, повторяющегося кода для общих служебных функций, планирования и решателей).

  • Планирование может быть более комплексным (для примера, модели могут иметь периодические шаги расчета, которые не множители друг от друга, что усложняет планирование от общего прерывания таймера)

  • Для моделей объекта управления, которые используют непрерывное время и состояние, непрерывные сигналы времени, соединяющие модели, не обрабатываются одним решателем, таким как непрерывные сигналы времени в модели, что может привести к тонким, числовым различиям.

Совместное использование данных между моделями

Используйте однонаправленные сигнальные связи между моделями. Эти соединения влияют на порядок, в котором вызываются модели. Для примера, если вы используете сигнал выхода от modelA как вход в modelB, а modelA сначала вызывается выходной расчет.

Проблемы синхронизации

При объединении кода, сгенерированного для нескольких моделей или нескольких образцов модели:

  • Сконфигурируйте модели с помощью того же режима решателя (однозадачный или многозадачный).

  • Если модели используют непрерывные состояния, сконфигурируйте модели с помощью того же решателя.

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

Логгирование данных и режима external mode

Программа с несколькими моделями может регистрировать данные, чтобы разделить MAT-файлы для каждой модели.

Только одна из моделей в программе с несколькими моделями может использовать режим external mode.

Управление собственностью данных

Если у вас есть программное обеспечение Embedded Coder, можно задать владельца для отдельных элементов данных, таких как сигналы, параметры и состояния. Владелец элемента данных генерирует определение, выделение памяти и инициализацию для элемента данных. Например, если вы применяете класс памяти к Simulink.Signal объект так, чтобы он появился как глобальная переменная в сгенерированном коде, задайте одну из комбинированных моделей как владельца объекта. Код, сгенерированный для этой модели, определяет переменную.

Если вы используете ссылки на модели, можно модулировать сгенерированный код и установить четкое владение данными при работе в команде.

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

Чтобы задать владельца для элемента данных:

  1. Применить класс памяти к элементу данных. Смотрите Организуйте Данные Параметра в Структуру при Помощи Struct Класса памяти (Embedded Coder).

  2. Сконфигурируйте владельца элемента данных путем определения значения для свойства Owner.

  3. Выберите параметр конфигурации модели Use owner from data object for data definition placement.

Для получения дополнительной информации о контроле владения и размещения файлов определений и деклараций, смотрите Управление Размещением Глобальных Определений Данных и Деклараций в Сгенерированных Файлах (Embedded Coder).

Объедините код, сгенерированный для нескольких моделей или нескольких образцов модели

Для каждой модели, для которой вы комбинируете код, сгенерируйте код.

  1. Установите системный целевой файл в системный целевой файл на основе GRT или ERT. Системный целевой файл для моделей, которые вы комбинируете, должен быть тем же самым.

  2. Если вы намерены иметь в приложении несколько образцы этой модели, задайте параметр конфигурации <reservedrangesplaceholder1> модели Reusable function. Если вы задали системный целевой файл на основе ERT, опционально можно задать параметр конфигурации <reservedrangesplaceholder0> модели, в зависимости от того, хотите ли вы статически или динамически выделять память для каждого образца модели.

  3. Сгенерируйте исходный код. Генератор кода включает функцию выделения в сгенерированный файл model.c. Функция распределения динамически распределяет данные модели для каждого образца модели.

После генерации исходного кода для каждой модели:

  1. Скомпилируйте код для каждой модели, которую вы комбинируете.

  2. Объедините make-файлы, сгенерированные для моделей, в один make-файл.

  3. Создайте комбинированный механизм симуляции путем изменения основной программы, такой как rt_malloc_main.c. Основная программа инициализирует и вызывает код, сгенерированный для каждой модели.

  4. Запустите make-файл. make связывает файлы объектов и основную программу с исполняемой программой.

Похожие темы