В этом примере показано, как смоделировать коммуникацию на основе сообщений между компонентами программного обеспечения, которые запускаются в различных приложениях. Пример также показывает, как подготовить компоненты модели для генерации кода С++.
В этом примере коммуникация на основе сообщений строится между двумя компонентами. Компонент Send отправляет данные, а компонент Receive - данные. В этом сценарии, после отправки сообщения компонентом, они сохраняются в очереди. Компонент приема вытаскивает сообщение на основе логики, которую он представляет.
Два блока Model, отмеченные как Send Component и Receive Component, представляют компоненты, соединенные линией сообщения. Коммуникация на основе сообщений достигается с помощью блока Send и блока Receive, которые соединяются с блоками Outport и Inport корневого уровня.
Для получения дополнительной информации о генерации кода C or C++ для модели, смотрите, Генерируют сообщения C++ для связи между компонентами Simulink (Embedded Coder) и Генерируют сообщения C для связи между компонентами Simulink (Embedded Coder).
Можно также сгенерировать код С++ для каждого компонента, и код содержит необходимые интерфейсы программного обеспечения, которые достаточны для подключения к операционной системе или промежуточному программному обеспечению сообщений. Для получения дополнительной информации смотрите Сгенерировать сообщения C++ для связи между Simulink и операционной системой или промежуточным программным обеспечением (Embedded Coder).
Алгоритм в Компоненте Отправки может содержать логику любой сложности. В примере простой блок Sine Wave используется в подсистеме в качестве источника сигнала. Параметр Шага расчета блока установлен в 0.1
.
Чтобы подготовить компонент Send для обмена сообщениями на основе сообщений, блок Send соединяется с блоком Outport корневого уровня. Блок Send преобразует сигналы данных и отправляет сообщения.
Чтобы подготовить компонент Send для генерации кода, в Параметрах конфигурации модели:
На панели Решатель, в разделе Выбор решателя, Тип установлен на Fixed-step
.
Для параметра Fixed-step задано значение 0.1
.
На панели Генерация кода (Code Generation) задается значение Системный целевой файл (System target file) ert.tlc
и язык на C++.
Модель сохранена как mSend
.
В компоненте Receive используется блок Scope, чтобы представлять алгоритм, который получает сообщения.
Чтобы подготовить компонент Receive, блок Inport соединяется с блоком Receive. Блок Receive получает сообщения и преобразует их в сигнальные данные. По умолчанию параметр Шага расчета блока Receive -1
.
Чтобы подготовить компонент Receive для генерации кода, в Параметрах конфигурации модели:
На панели Решатель, в разделе Выбор решателя, Тип установлен на Fixed-step
.
Для параметра Fixed-step задано значение 0.1
.
На панели Генерация кода (Code Generation) задается значение Системный целевой файл (System target file) ert.tlc
и язык на C++.
Модель сохранена как mReceive
.
Это модель композиции с компонентами Send и Receive. Блоки Model, Компонент и Receive Component, относятся к моделям mSend
и mReceive
, соответственно.
Симулируйте модель. Наблюдайте за очередью, вставленной по умолчанию. Значок над линией сообщений представляет очередь по умолчанию. Емкость очереди по умолчанию 1
и политика перезаписи сообщений включена. Вы можете настроить очередь с помощью блока Queue между компонентами. Дополнительные сведения см. в разделе Использование блока очереди для управления сообщениями.
Откройте блок Sequence Viewer. Блок позволяет вам визуализировать события перехода сообщения и данные, которые несут сообщения.
В блочном окне Sequence Viewer показано время симуляции на левой вертикальной панели. Каждая временная строка сетки содержит события, которые происходят в одно и то же время симуляции. Каждое событие перехода сообщения представлено стреле, которое маркируется значением данных сообщения. Дополнительные сведения о блоке Sequence Viewer см. в разделе Использование Sequence Viewer для визуализации сообщений, событий и сущностей.
В блоке Sequence Viewer прокрутите вверх или нажмите Go к первому значку события слева. Заметьте, что в начальный момент времени блок Send отправляет сообщение со значением данных 0
в блок Receive, и в момент 0.1
блок отправляет другое сообщение со значением данных 0.0998
. Блок отправляет сообщение в каждом 0.1
время симуляции.
Queue | Receive | Send | Sequence Viewer | Sine Wave