Чтобы сгенерировать Код С++, который поддерживает основанную на сообщении связь между компонентами модели в окружении Simulink, используйте сообщения Simulink & Библиотечные блоки Событий Send и Receive. Чтобы настроить коммуникацию, используйте блок Queue (от той же библиотеки), чтобы установить параметры для способности, сортируя политику (LIFO, FIFO и приоритет), и перезаписывая политику (поведение, когда очередь превысит способность). Можно сгенерировать Код С++ для основанных на GRT системных конечных файлов при помощи Simulink Coder или для основанных на ERT системных конечных файлов при помощи Embedded Coder.
Сообщения являются методом эффективной коммуникации для распределенных и сложных систем, которые могут быть смоделированы в Simulink. Чтобы лучше изучить поддержку сгенерированного кода основанной на сообщении коммуникации следующее объяснены:
Как подготовить модели в Simulink для основанной на сообщении коммуникации.
Как компоненты модели передают сообщения и как код реализует это поведение.
Как сгенерировать и исследовать Код С++ из данной модели в качестве примера.
В Simulink можно смоделировать основанную на сообщении связь между компонентами модели с помощью этих шагов:
Создайте модель, которая содержит блок Send (модель, на которую ссылаются).
Создайте модель, которая содержит блок Receive (модель, на которую ссылаются).
Создайте модель с двумя блоками Model (топ-модель).
Установите первый блок Model на модель, которая содержит блок Send (модель от шага 1).
Установите второй блок Model на модель, которая содержит блок Receive (модель от шага 2).
Когда вы запускаете модель, очередь автоматически генерирует в топ-модели выше строки сообщения. Очередь, явная или неявная, управляет коммуникацией сообщения. Можно использовать автоматически сгенерированную очередь, или можно добавить блок Queue в топ-модели, чтобы явным образом задать коммуникационные параметры.
Концептуально, модели, на которые ссылаются, передают сообщения следующим образом:
В модели, которая содержит блок Send, блок Send преобразует сигналы в сообщения.
Топ-модель, которая содержит очередь, управляет сообщениями согласно параметрам, которые задают способность, порядок доставки и другие метрики качества сервиса (QoS).
В модели, которая содержит блок Receive, блок Receive преобразует сообщения назад в сигналы.
В сгенерированном Коде С++ топ-модель упрощает связь между отправлением, и получите модели, на которые ссылаются, путем установления интерфейса набора, к которому модели, на которые ссылаются, могут получить доступ друг независимо от друга.
Сгенерированный Код С++ реализует поведение сообщения следующим образом:
Сервис создается на каждом контуре модели. Сервис содержит ссылку на топ-модель и функцию точки входа, называемую служебной функцией, для моделей, на которые ссылаются, чтобы использовать, чтобы передать сообщения с топ-моделью.
Топ-модель инициализирует каждый сервис создать связь с каждой моделью, на которую ссылаются.
Модели, на которые ссылаются, вызывают служебные функции, чтобы передать сообщения с топ-моделью.
Детали реализации этих шагов показывают в примере сгенерированного кода.
Этот пример генерирует и исследует Код С++ из модели, предоставленной в, Устанавливают сообщение, Отправляют и Получают Интерфейсы Между Компонентами программного обеспечения.
Сгенерируйте код С++:
Откройте модель.
В галерее Apps нажмите Embedded Coder.
Для каждой модели (верхняя часть и обе модели, на которые ссылаются), в диалоговом окне Configuration Parameters, устанавливает эти параметры:
В панели Генерации кода, набор Language к C++
.
В Интерфейсной панели, набор Code interface packaging к C++ class
.
Сохраните модель.
Сгенерируйте код. На вкладке C++ Code нажмите Build.
Просмотрите сгенерированный код. На вкладке C++ Code нажмите View Code.
Исследуйте код С++:
Сервис создается на каждом контуре модели. На C++ сервисы представлены как объекты, которые содержат экземпляр топ-модели и служебной функции, которую модели, на которые ссылаются, вызывают, чтобы передать сообщения.
Чтобы просмотреть создание сервисов, откройте топ-модель файл C++, MessageSendReceiveDefaultBufferModel.cpp
. Просмотрите метод конструктора.
Методы конструктора, ReceiveComponentRecvData(*this)
и SendComponentSendData(*this)
, создайте получение и отправьте объекты службы соответственно путем взятия в качестве аргумента ссылки на экземпляр топ-модели. Каждый объект службы сохраняет ссылку на топ-модель и задает интерфейс сообщения (служебные функции RecvData
и SendData
).
Чтобы просмотреть получение и отправить сервисные классы, откройте заголовочный файл топ-модели, MessageSendReceiveDefaultBufferModel.h
, и просмотрите следующий раздел.
Топ-модель инициализирует каждый сервис создать связь с каждой моделью, на которую ссылаются. Чтобы просмотреть инициализацию, откройте топ-модель файл C++, MessageSendReceiveDefaultBufferModel.cpp
. Просмотрите метод конструктора.
Метод конструктора, Receive_ComponentMDLOBJ0(get_ReceiveComponentRecvData())
, передает ссылку на получить службу к получению модели, на которую ссылаются. Метод конструктора, Send_ComponentMDLOBJ1(get_SendComponentSendData())
, передает ссылку на отправить службу к отправлению модели, на которую ссылаются.
Модели, на которые ссылаются, вызывают служебные функции, чтобы передать сообщения с топ-моделью. На C++ модели, на которые ссылаются, вызывают топ-модель (общий предок, если в иерархии) служебные функции, чтобы отправить или получить сообщения (а именно, модель, на которую ссылаются, вызывает метод реферативной службы (RecvData
или SendData
) от интерфейса, созданного на шаге 2).The абстрактные интерфейсные классы испускаются к совместно используемой папке. Реализация служебных функций в каждом сервисе задана в топ-модели файл C++.
Чтобы просмотреть абстрактный интерфейсный класс, чтобы отправить сообщения, откройте от совместно используемой папки заголовочный файл, SendData_real_T.h
.
Чтобы просмотреть реализацию служебной функции, чтобы отправить сообщения, откройте топ-модель файл C++, MessageSendReceiveDefaultBufferModel.cpp
.
Чтобы просмотреть, как отправление модели, на которую ссылаются, вызывает служебную функцию, откройте ее файл C++, mSend.cpp
. В ступенчатой функции модель вызывает служебную функцию, чтобы отправить сообщения топ-модели и получает назад статус возврата.
Чтобы просмотреть абстрактный интерфейсный класс, чтобы получить сообщения, откройте от совместно используемой папки заголовочный файл, RecvData_real_T.h
.
Просмотреть реализацию служебной функции, чтобы получить сообщения, открытую модель файл C++, MessageSendReceiveDefaultBufferModel.cpp
.
Чтобы просмотреть, как получение модели, на которую ссылаются, вызывает служебную функцию, откройте ее файл C++, mRecieve.cpp
. В ступенчатой функции модель вызывает служебную функцию, чтобы получить сообщения и состояние от топ-модели.
Поддержка кода С++ доступна для основанных на GRT системных конечных файлов при помощи Приложения Simulink Coder.
Поддержка кода С++ доступна для основанных на ERT системных конечных файлов при помощи Приложения Embedded Coder.
Чтобы сгенерировать код, главные и модели, на которые ссылаются, должны иметь тот же язык (C++) и системный выбранный конечный файл.
Управление прототипом функции (FPC) не может быть сконфигурировано для топ-модели, которая имеет корневые порты сообщения.
Внешние модели и различные модели не поддерживаются.
В симуляции не поддерживается SIL/PIL.