В этом примере показано, как моделировать связь на основе сообщений между компонентами программного обеспечения, которые взаимодействуют с помощью виртуальных шин с элементами сообщений.
Модель в этом примере представляет собой плоского неголономного робота, который может двигаться или вращаться с помощью двух колёс, аналогично домашнему вакуумирующему роботу. Эта модель предполагает, что робот перемещается одним из двух способов:
Линейный - оба колеса поворачиваются в одном направлении с одинаковой скоростью, и робот движется линейно.
Вращение - колеса поворачиваются в противоположных направлениях с одинаковой скоростью, и робот вращается на месте.

Сведения о создании модели для робота см. в разделах Определение и компоновка системы.
В этом примере робот посылает свою скорость в x- и y- направления к базовой станции и ее значения относительного угла (направления движения) к базовой станции. Скорость потребления данных станцией медленнее, чем данные, посылаемые роботом. Блок очереди используется в качестве буфера сообщений.
В этой модели компоненты, представляющие мобильный робот и станцию, взаимодействуют с помощью виртуальных шин с элементами сообщения. XVelocity и YVelocity представлять x и y компоненты скорости робота соответственно. Angle представляет относительный угол робота к x-axis.
В компоненте «Передача данных мобильным роботом» XVelocity и YVelocity сигналы объединяются в невиртуальную шину Velocity. Блок Send 1 создает сообщения с данными скорости в качестве полезной нагрузки. В этой структуре сообщения обеспечивают асинхронную связь на основе событий между компонентами. Использование сообщений с полезной нагрузкой на невиртуальную шину позволяет программному обеспечению обрабатывать Velocity как пакет данных с XVelocity и YVelocity как свои поля. Поэтому каждый пакет включает XVelocity и YVelocity данные.
Блок «Отправить 2» создает сообщения с Angle данные в качестве полезной нагрузки. Блоки Out Bus Element с меткой SendVirtualBus.Velocity и SendVirtualBus.Angle определить Velocity и Angle в качестве элементов виртуальной шины SendVirtualBus. Для создания интерфейсов отправки сообщений можно объединить сообщения в виртуальную шину. В интерфейсах приема сообщений можно получить доступ к шине в целом или выбрать определенные сообщения с шины. Дополнительные сведения об интерфейсах отправки и получения сообщений см. в разделе Обзор сообщений Simulink.

Компоненты взаимодействуют по следующим каналам:
Функция предварительной загрузки модели load('Velocity.mat') загружает Velocity объект шины в рабочую область.
Блок Bus Creator группирует данные XVelocity и YVelocity в непровиртуальную шину, определяемую типом данных объекта шины Velocity.
Блок «Отправить 1» создает сообщения с Velocity в качестве полезной нагрузки.
Блок Out Bus Element с меткой SendVirtualBus.Velocity создает виртуальную шину SendVirtualBus с Velocity элемент. В блоке для параметра «Тип данных» установлено значение Bus: Velocityи для параметра «Режим данных» установлено значение message.

Блок Out Bus Element с меткой SendVirtualBus.Angle определяет Angle как элемент сообщения SendVirtualBus.

Компонент Station Recepting Data принимает виртуальные шины и выбирает элементы сообщения, используя блок In Bus Element. Блоки приема преобразуют сообщения в сигналы для обработки и визуализации.

Дополнительные сведения о создании интерфейсов отправки и получения для сообщений с полезной нагрузкой на невиртуальную шину см. в разделе Отправка и получение сообщений с данными шины.
Можно смоделировать модель или создать код как для компонента Mobile Robot Sending Data, так и для компонента Station Receiving Data. Дополнительные сведения см. в разделе Создание сообщений C++ для обмена данными между Simulink и операционной системой или промежуточным программным обеспечением (встроенным кодером).
Моделирование модели. Наблюдать за скоростью связи робота в x и y направления. Робот перемещается внутрь y направление, потому что его скорость в x направление является постоянным и 0.

Наблюдайте за постоянным относительным углом робота в радианах. Угол pi/2 подтверждает движение в y направление.

Используйте инструмент «Просмотр последовательностей» для отображения виртуальных шин, передаваемых между роботом и станцией. Чтобы открыть инструмент «Просмотр последовательностей», на панели инструментов Simulink ® на вкладке «Моделирование» в разделе «Просмотр результатов» выберите «Просмотр последовательностей».
В окне Sequence Viewer отображаются переходы виртуальной шины из компонента Mobile Robot Sending Data в блок Queue и из блока Queue в компонент Station Recepting Data.

Разверните жизненную линию очереди в окне Просмотр последовательностей (Sequence Viewer). Обратите внимание, что блок Queue расширяется до двух блоков Queue, которые обеспечивают хранение для двух элементов сообщений виртуальной шины. Velocity и Angle. Дополнительный блок очереди имеет ту же конфигурацию и емкость, что и исходный блок очереди. Дополнительные сведения о блоке очереди см. в разделе Использование блока очереди для управления сообщениями.

Анимация позволяет наблюдать виртуальные шины, сообщающиеся между роботом и станцией во время моделирования. Чтобы включить анимацию, на панели инструментов на вкладке «Отладка» в разделе «Анимация событий» выберите «Скорость анимации».
Можно указать Slow, Medium, или Fast скорость анимации. Выбрать None для отключения анимации. Дополнительные сведения об анимации и визуализации сообщений см. в разделе Анимация и понимание отправки и получения сообщений.

Анимация подсвечивает виртуальные шины, посылаемые от робота к блоку «Очередь» и от блока «Очередь» к станции.

Приостановите анимацию и наведите указатель на лупу на блоке «Очередь», чтобы открыть инспектор хранилища. Инспектор хранилища отображает элементы шины и данные сообщений.

Можно моделировать обмен сообщениями между компонентами программного обеспечения, сначала проектируя систему на уровне архитектуры с помощью System Composer™. Модели архитектуры в System Composer поддерживают модели Simulink с вводом и выводом сообщений в качестве поведения компонента.
Ниже приведен пример, на котором показана конструкция архитектурных компонентов для представления мобильного робота и станции. Модели Simulink, использованные в примере выше, MessageSendRobotModel и MessageReceiveRobotModel, прикрепляются к этим компонентам как варианты поведения компонентов. При компиляции модели очередь емкости LIFO 1 автоматически вставляется в архитектурную модель для моделирования. Для разработки интерфейсов сообщений на уровне архитектуры требуется лицензия System Composer.
