Сгенерируйте сообщения C, чтобы связаться между компонентами Simulink

Чтобы сгенерировать код С, который поддерживает основанную на сообщении связь между компонентами модели в окружении Simulink, используйте сообщения Simulink & Библиотечные блоки Событий Send и Receive. Чтобы настроить коммуникацию, используйте блок Queue (от той же библиотеки), чтобы установить параметры для способности, сортируя политику (LIFO, FIFO и приоритет), и перезаписывая политику (поведение, когда очередь превысит способность). Можно сгенерировать код С для основанных на GRT системных конечных файлов при помощи Simulink Coder или для основанных на ERT системных конечных файлов при помощи Embedded Coder.

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

  • Как подготовить модели в Simulink для основанной на сообщении коммуникации.

  • Как компоненты модели передают сообщения и как код реализует это поведение.

  • Как сгенерировать и исследовать код С из данной модели в качестве примера.

Как подготовить модели в Simulink для основанной на сообщении коммуникации

В Simulink можно смоделировать основанную на сообщении связь между компонентами модели с помощью этих шагов:

  1. Создайте модель, которая содержит блок Send (модель, на которую ссылаются).

  2. Создайте модель, которая содержит блок Receive (модель, на которую ссылаются).

  3. Создайте модель с двумя блоками Model (топ-модель).

    • Установите первый блок Model на модель, которая содержит блок Send (модель от шага 1).

    • Установите второй блок Model на модель, которая содержит блок Receive (модель от шага 2).

  4. Когда вы запускаете модель, очередь автоматически генерирует в топ-модели выше строки сообщения. Очередь, явная или неявная, управляет коммуникацией сообщения. Можно использовать автоматически сгенерированную очередь, или можно добавить блок Queue в топ-модели, чтобы явным образом задать коммуникационные параметры.

Как Передача Компонентов модели обменивается сообщениями и Как Реализации Кода это Поведение

Концептуально, модели, на которые ссылаются, передают сообщения следующим образом:

  1. В модели, которая содержит блок Send, блок Send преобразует сигналы в сообщения.

  2. Топ-модель, которая содержит очередь, управляет сообщениями согласно параметрам, которые задают способность, порядок доставки и другие метрики качества сервиса (QoS).

  3. В модели, которая содержит блок Receive, блок Receive преобразует сообщения назад в сигналы.

В сгенерированном коде C топ-модель упрощает связь между отправлением, и получите модели, на которые ссылаются, путем установления интерфейса набора, к которому модели, на которые ссылаются, могут получить доступ друг независимо от друга.

Сгенерированный код C реализует поведение сообщения следующим образом:

  1. Сервис создается на каждом контуре модели. Сервис содержит ссылку на топ-модель и функцию точки входа, называемую служебной функцией, для моделей, на которые ссылаются, чтобы использовать, чтобы передать сообщения с топ-моделью.

  2. Топ-модель инициализирует каждый сервис создать связь с каждой моделью, на которую ссылаются.

  3. Модели, на которые ссылаются, вызывают служебные функции, чтобы передать сообщения с топ-моделью.

Детали реализации этих шагов показывают в примере сгенерированного кода.

Пример генерации кода C

Этот пример генерирует и исследует код С из модели, предоставленной в, Устанавливают сообщение, Отправляют и Получают Интерфейсы Между Компонентами программного обеспечения.

Сгенерируйте код С:

  1. Откройте модель.

  2. В галерее Apps нажмите Embedded Coder.

  3. Для каждой модели (верхняя часть и обе модели, на которые ссылаются), в диалоговом окне Configuration Parameters, в панели Генерации кода, устанавливает Language на C и сохраните модель.

  4. Сгенерируйте код. На вкладке C Code нажмите Build.

  5. Просмотрите сгенерированный код. На вкладке C Code нажмите View Code.

Исследуйте код С:

  1. Сервис создается на каждом контуре модели. В C модели, на которые ссылаются, представляют сервисы как DWork. Сервис обеспечивает указатель на экземпляр топ-модели и служебной функции, которую модели, на которые ссылаются, вызывают, чтобы передать сообщения.

    1. Чтобы просмотреть сервис отправить сообщения, откройте отправление заголовочного файла модели, на который ссылаются, mSend.h. Просмотрите выделение DWork.

    2. Чтобы просмотреть отправить тип данных сообщения, если тип данных является общим (например, встроенные типы данных, импортированные типы шины или экспортируемые типы шины с заданным типом данных), информация расположена в разделяемом заголовочном файле. Если тип данных не является общим, информация расположена заголовочный файл модели, mSend.h. В данном примере просмотрите общий тип данных путем открытия разделяемого заголовочного файла, SendData_real_T.h.

    3. Чтобы просмотреть сервис получить сообщения, откройте получение заголовочного файла модели, на который ссылаются, mReceive.h. Просмотрите выделение DWork.

    4. Чтобы просмотреть полученный тип данных сообщений, если тип данных является общим (например, встроенные типы данных, импортированные типы шины или экспортируемые типы шины с заданным типом данных), информация расположена в разделяемом заголовочном файле. Если тип данных не является общим, информация расположена заголовочный файл модели, mReceive.h. В данном примере просмотрите общий тип данных путем открытия разделяемого заголовочного файла, RecvData_real_T.h.

  2. Топ-модель инициализирует каждый сервис создать связь с каждой моделью, на которую ссылаются. В C топ-модель инициализирует каждую модель DWork, на которую ссылаются. Чтобы просмотреть инициализацию, откройте файл топ-модели К, MessageSendReceiveDefaultBufferModel.c.

  3. Модели, на которые ссылаются, вызывают служебные функции, чтобы передать сообщения с топ-моделью. В C модель, на которую ссылаются, вызывает служебную функцию путем разыменования указателя служебной функции и передачи указателя на экземпляр топ-модели. Можно просмотреть прототипы служебных функций в заголовочном файле топ-модели, и можно просмотреть вызовы модели, на которые ссылаются, тех служебных функций в файлах модели C, на которые ссылаются.

    1. Чтобы просмотреть прототип служебной функции, чтобы отправить сообщения, откройте заголовочный файл топ-модели, MessageSendReceiveDefaultBufferModel.h.

    2. Чтобы просмотреть реализацию служебной функции, чтобы отправить сообщения, откройте файл топ-модели К, MessageSendReceiveDefaultBufferModel.c.

    3. Чтобы просмотреть, как отправление модели, на которую ссылаются, вызывает служебную функцию, откройте файл C для модели, mSend.c. В ступенчатой функции модель вызывает сервис отправить данные об экземпляре и сообщение топ-модели и получает назад статус возврата.

    4. Чтобы просмотреть прототип служебной функции, чтобы получить сообщения, откройте заголовочный файл топ-модели, MessageSendReceiveDefaultBufferModel.h.

    5. Чтобы просмотреть реализацию служебной функции, чтобы получить сообщения, откройте файл топ-модели К, MessageSendReceiveDefaultBufferModel.c.

    6. Чтобы просмотреть, как получение модели, на которую ссылаются, вызывает служебную функцию, откройте файл C для модели, mReceive.c. В ступенчатой функции модель вызывает сервис получить полезную нагрузку сообщения и статус возврата.

Факторы и ограничения

  • Поддержка кода С доступна для основанных на GRT системных конечных файлов при помощи Приложения Simulink Coder.

  • Поддержка кода С доступна для основанных на ERT системных конечных файлов при помощи Приложения Embedded Coder.

  • Чтобы сгенерировать код, главные и модели, на которые ссылаются, должны иметь тот же язык (C) и системный выбранный конечный файл.

  • Управление прототипом функции (FPC) не может быть сконфигурировано для топ-модели, которая имеет корневые порты сообщения.

  • Внешние модели и различные модели не поддерживаются.

  • В симуляции не поддерживается SIL/PIL.

Похожие темы