В этом примере показано, как смоделировать коммуникацию на основе сообщений между компонентами программного обеспечения, которые общаются с использованием виртуальных шин с элементами сообщений.
Модель в этом примере является плоским неголономическим роботом, который может перемещаться или вращаться с помощью двух колес, аналогичных домашнему роботу-пылесосу. Эта модель принимает, что робот перемещается одним из двух способов:
Линейный - Оба колеса поворачиваются в одном направлении с той же скоростью и робот движется линейно.
Вращательный - поворот колес в противоположных направлениях с той же скоростью и робот вращается на месте.
Чтобы узнать, как создать модель для робота, смотрите Определение системы и Размещение.
В этом примере робот отправляет свою скорость в x
- и y
- направления к базовой станции и ее относительные значения угла (направления движения) к базовой станции. Скорость потребления данных станции медленнее, чем данные, отправляемые роботом. Блок Queue используется в качестве буфера сообщений.
В этой модели компоненты, которые представляют мобильного робота и станцию, взаимодействуют с помощью виртуальных шин с элементами сообщений. XVelocity
и YVelocity
представляют x
и y
компоненты скорости робота, соответственно. Angle
представляет относительный угол робота к x
-ось.
В компоненте Mobile Robot Sensing Data, XVelocity
и YVelocity
сигналы объединяются в невиртуальную шину Velocity
. Блок Send 1 создает сообщения с данными о скорости в качестве полезной нагрузки. В этой среде сообщения обеспечивают асинхронную основанную на событиях связь между компонентами. Использование сообщений с невиртуальной полезной нагрузкой шины позволяет программному обеспечению обрабатывать Velocity
как пакет данных с XVelocity
и YVelocity
как его поля. Поэтому каждый пакет включает XVelocity
и YVelocity
данные.
Блок Send 2 создает сообщения с Angle
данные как полезная нагрузка. Out Bus Element блокирует маркированные SendVirtualBus.Velocity
и SendVirtualBus.Angle
задайте Velocity
и Angle
как элементы виртуальной шины SendVirtualBus
. Можно объединить сообщения в виртуальную шину для создания интерфейсов отправки сообщений. В интерфейсах получения сообщений вы можете получить доступ к шине в целом или выбрать конкретные сообщения из шины. Для получения дополнительной информации об интерфейсах отправки и приема сообщений смотрите Simulink Messages Overview.
Связь между компонентами осуществляется посредством следующего:
Функция предварительной загрузки модели load('Velocity.mat')
загружает Velocity
шина объекта в рабочую область.
Блок Bus Creator группирует XVelocity и YVelocity в невиртуальную шину, заданную типом данных объекта шины Velocity.
Блок Send 1 создает сообщения с Velocity
в качестве полезной нагрузки.
Блок Out Bus Element помечен SendVirtualBus.Velocity
создает виртуальную шину SendVirtualBus
с Velocity
элемент. В блоке для типа данных задано значение Bus: Velocity
, и в режиме данных установлено значение message
.
Блок Out Bus Element помечен SendVirtualBus.Angle
задает Angle
как элемент сообщения SendVirtualBus
.
Компонент Station Receiving Data получает виртуальные шины и выбирает элементы сообщения с помощью блока In Bus Element. Блоки приема преобразуют сообщения в сигналы для обработки и визуализации.
Для получения дополнительной информации о создании интерфейсов отправки и приема для сообщений с полезной нагрузкой невиртуальной шины, см. Раздел «Отправка и получение сообщений, переносящих данные шины».
Можно симулировать модель или сгенерировать код для компонента Mobile Robot Sessing Data и компонента Station Receiving Data. Для получения дополнительной информации смотрите Сгенерировать сообщения C++ для связи между Simulink и операционной системой или промежуточным программным обеспечением (Embedded Coder).
Симулируйте модель. Наблюдайте сообщенную скорость робота в x
и y
направления. Робот перемещается y
направление, потому что его скорость в x
направление является постоянным и 0
.
Наблюдайте постоянный относительный угол робота в радианах. Угол pi/2
подтверждает движение в y
направление.
Используйте инструмент Sequence Viewer, чтобы отобразить виртуальные шины, сообщенные между роботом и станцией. Чтобы открыть инструмент Sequence Viewer, на панели инструментов Simulink ®, на вкладке Simulation, в разделе Review Results, выберите Sequence Viewer.
В окне Sequence Viewer отображаются переходы виртуальной шины от компонента Mobile Robot Sessing Data к блоку Queue и от блока Queue к компоненту Station Receiving Data.
Разверните жизненную линию очереди в окне Sequence Viewer. Обратите внимание, что блок Queue расширяется до двух блоков Queue, которые обеспечивают хранение для двух элементов сообщений виртуальной шины Velocity
и Angle
. Дополнительный блок Queue имеет то же строение и емкость, что и исходный блок Queue. Дополнительные сведения о блоке очереди см. в разделе Использование блока очереди для управления сообщениями.
Анимация позволяет вам наблюдать виртуальные шины, сообщенные между роботом и станцией во время симуляции. Чтобы включить анимацию, на панели инструментов, на вкладке Debug, в разделе Event Animation, выберите Animation Speed.
Можно задать Slow
, Medium
, или Fast
скорость анимации. Выберите None
чтобы выключить анимацию. Для получения дополнительной информации об анимации и визуализации сообщений смотрите Анимация и Понимание отправки и получения сообщений.
Анимация подсвечивает виртуальные шины, отправленные от робота к блоку Queue и от блока Queue к станции.
Приостановите анимацию и укажите лупу на блоке Queue, чтобы открыть Storage Inspector. Storage Inspector отображает элементы шины и данные сообщений.
Можно смоделировать коммуникацию на основе сообщений между компонентами программного обеспечения, сначала разработав систему с уровня архитектуры с помощью System Composer™. Модели архитектуры в System Composer поддерживают модели Simulink с входом сообщений и выводом в качестве поведения компонентов.
Ниже представлен пример рисунка, который показывает проект компонентов архитектуры для представления мобильного робота и станции. Модели Simulink, используемые в примере выше, MessageSendRobotModel
и MessageReceiveRobotModel
, присоединены к этим компонентам как поведение компонентов. Когда вы компилируете модель, очередь емкостей LIFO 1
автоматически вставляется в архитектурную модель для симуляции. Для разработки интерфейсов сообщений с уровня архитектуры требуется лицензия System Composer.