Сгенерируйте сообщения 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 преобразует сообщения назад в сигналы.

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

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

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

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

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

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

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

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

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

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

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

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

    • В панели Генерации кода, набор Language к C++.

    • В Интерфейсной панели, набор Code interface packaging к C++ class.

    Сохраните модель.

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

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

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

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

    1. Чтобы просмотреть создание сервисов, откройте топ-модель файл C++, MessageSendReceiveDefaultBufferModel.cpp. Просмотрите метод конструктора.

      Методы конструктора, ReceiveComponentRecvData(*this) и SendComponentSendData(*this), создайте получение и отправьте объекты службы соответственно путем взятия в качестве аргумента ссылки на экземпляр топ-модели. Каждый объект службы сохраняет ссылку на топ-модель и задает интерфейс сообщения (служебные функции RecvData и SendData).

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

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

    Метод конструктора, Receive_ComponentMDLOBJ0(get_ReceiveComponentRecvData()), передает ссылку на получить службу к получению модели, на которую ссылаются. Метод конструктора, Send_ComponentMDLOBJ1(get_SendComponentSendData()), передает ссылку на отправить службу к отправлению модели, на которую ссылаются.

  3. Модели, на которые ссылаются, вызывают служебные функции, чтобы передать сообщения с топ-моделью. На C++ модели, на которые ссылаются, вызывают топ-модель (общий предок, если в иерархии) служебные функции, чтобы отправить или получить сообщения (а именно, модель, на которую ссылаются, вызывает метод реферативной службы (RecvData или SendData) от интерфейса, созданного на шаге 2).The абстрактные интерфейсные классы испускаются к совместно используемой папке. Реализация служебных функций в каждом сервисе задана в топ-модели файл C++.

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

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

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

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

    5. Просмотреть реализацию служебной функции, чтобы получить сообщения, открытую модель файл C++, MessageSendReceiveDefaultBufferModel.cpp.

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

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

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

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

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

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

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

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

Похожие темы