Чтобы объединить код, создаваемый генератором кода для нескольких моделей или нескольких экземпляров модели, в одну исполняемую программу, используйте следующие методы:
Ссылочная иерархия модели. См. разделы Основы ссылок на модель и Создание кода для иерархии ссылок на модель.
При наличии ПО Embedded Coder ® подключите код для нескольких моделей к общей программе кабельных трасс. Из программы кабельных трасс вызовите функции точек входа, созданные для каждой модели. ert.tlc системный целевой файл имеет ограничения, связанные со встроенной обработкой, которая может быть несовместима с приложением.
Создание многократно используемого многоэкземплярного кода. См. раздел Объединение кода, созданного для нескольких моделей или нескольких экземпляров модели.
Примечание
Цель системы С-функций (rtwsfcn.tlc) не поддерживает объединение кода, созданного для нескольких моделей.
Чтобы объединить модели для моделирования и создания кода, рассмотрите возможность использования ссылок на модели. Ссылка на модель помогает:
Согласованность именования символов
Требуемое планирование общего алгоритма
Согласованность конфигурации модели
При объединении кода, созданного для различных моделей без использования ссылочных моделей, следует учитывать следующее.
Данные являются глобальными. В результате могут возникнуть конфликты символов (имен).
Настройки параметров конфигурации для моделей должны совпадать, включая такие настройки, как аппаратные размеры слов.
Повторное использование и совместное использование кода могут быть неоптимальными (например, дубликат кода для общих служебных функций, планирования и решателей).
Планирование может быть более сложным (например, модели могут иметь периодическое время выборки, не кратное друг другу, что усложняет планирование из общего прерывания таймера)
Для моделей установок, использующих непрерывное время и состояние, непрерывные сигналы времени, соединяющие модели, не обрабатываются одним решателем, как непрерывные сигналы времени в модели, что может привести к незначительным числовым различиям.
Используйте однонаправленные сигнальные соединения между моделями. Эти соединения влияют на порядок вызова моделей. Например, если используется выходной сигнал от modelA в качестве входных данных для modelB, modelA вычисление выходных данных называется первым.
При объединении кода, созданного для нескольких моделей или нескольких экземпляров модели:
Настройте модели, используя один и тот же режим решателя (однозадачность или многозадачность).
Если модели используют непрерывные состояния, настройте модели с помощью одного и того же решателя.
Если базовые ставки для моделей различаются, основная программа (например, rt_malloc_main.c) должен настроить прерывание таймера на наибольшую общую скорость деления моделей. Основная программа вызывает каждую модель с интервалом времени.
Программа с несколькими моделями может регистрировать данные в отдельных MAT-файлах для каждой модели.
Только одна из моделей в программе с несколькими моделями может использовать внешний режим.
При наличии программного обеспечения Embedded Coder можно указать владельца для отдельных элементов данных, таких как сигналы, параметры и состояния. Владелец элемента данных генерирует определение, выделение памяти и инициализацию для элемента данных. Например, при применении класса хранения к Simulink.Signal чтобы объект отображался как глобальная переменная в сгенерированном коде, укажите одну из комбинированных моделей в качестве владельца объекта. Код, созданный для этой модели, определяет переменную.
Если используется ссылка на модель, можно модулировать созданный код и установить четкое владение данными при работе в коллективе.
Если ссылка на модель не используется, можно предотвратить создание повторяющихся определений для элемента данных. Например, предположим, что вы храните Simulink.Parameter объект в базовой рабочей области и применить класс хранения ExportedGlobal. При создании кода из двух отдельных моделей, использующих объект, каждая модель создает определение для соответствующей глобальной переменной. Вместо этого можно указать владельца объекта, чтобы определение создавал только владелец.
Чтобы указать владельца элемента данных, выполните следующие действия.
Примените класс хранения к элементу данных. См. раздел Организация данных параметров в структуру с использованием класса хранилища Struct (встроенный кодер).
Настройте владельца элемента данных, указав значение свойства Owner.
Выберите параметр конфигурации модели Использовать владельца из объекта данных для размещения определения данных.
Дополнительные сведения о контроле владения и размещения файлов определений и деклараций данных см. в разделе Управление размещением глобальных определений и деклараций данных в созданных файлах (Embedded Coder).
Для каждой модели, для которой объединяется код, создайте код.
Установите целевой системный файл на основе GRT или ERT. Системный целевой файл для комбинированных моделей должен быть одинаковым.
Если в приложении предполагается несколько экземпляров этой модели, установите для параметра конфигурации модели Code interface packaging значение Reusable function. Если указан целевой системный файл на основе ERT, можно задать параметр конфигурации модели Использовать динамическое выделение памяти для инициализации модели в зависимости от того, требуется ли статическое или динамическое выделение памяти для каждого экземпляра модели.
Создать исходный код. Генератор кода включает функцию распределения в созданный файл. . Функция распределения динамически распределяет данные модели для каждого экземпляра модели.model.c
После создания исходного кода для каждой модели:
Скомпилировать код для каждой комбинированной модели.
Объединение файлов make, созданных для моделей, в один файл make.
Создание комбинированного механизма моделирования путем изменения основной программы, например rt_malloc_main.c. Основная программа инициализирует и вызывает код, сгенерированный для каждой модели.
Запустите файл макияжа. Файл make связывает файлы объектов и основную программу с исполняемой программой.