В этом примере показано, как смоделировать основанную на сообщении связь между компонентами программного обеспечения, которые передают использующие виртуальные шины с элементами сообщения.
Модель в этом примере является плоским неголономным роботом, который может перемещаться или вращаться с помощью двух колес, похожих на домашний робот - пылесос. Эта модель принимает, что робот перемещается одним из двух способов:
Linear — Оба поворота колес в том же направлении с той же скоростью и робот перемещаются линейно.
Вращательный — поворот колес в противоположных направлениях с той же скоростью и робот вращается на месте.
Чтобы изучить, как создать модель для робота, см. Системное Определение и Размещение.
В этом примере робот отправляет свою скорость в x
- и y
- направления на базовую станцию и ее относительный угол (направление движения) значения на базовую станцию. Норма потребления данных станции медленнее, чем данные, отправленные роботом. Блок Queue используется в качестве буфера сообщения.
В этой модели компоненты, которые представляют мобильного робота и станцию, передают использующие виртуальные шины с элементами сообщения. XVelocity
и YVelocity
представляйте x
и y
компоненты скорости робота, соответственно. Angle
представляет относительный угол робота x
ось.
В Мобильном Роботе, Отправляющем компонент Данных, XVelocity
и YVelocity
сигналы объединены в невиртуальную шину Velocity
. Блок Send 1 создает сообщения со скоростными данными как полезная нагрузка. В этой среде сообщения обеспечивают асинхронную основанную на событии связь между компонентами. Используя сообщения с невиртуальной шиной полезная нагрузка позволяет программному обеспечению обрабатывать Velocity
как блок данных с XVelocity
и YVelocity
как его поля. Поэтому каждый пакет включает XVelocity
и YVelocity
данные.
Блок Send 2 создает сообщения с Angle
данные как полезная нагрузка. Блоки Элемента Шины пометили SendVirtualBus.Velocity
и SendVirtualBus.Angle
задайте Velocity
и Angle
как элементы виртуальной шины SendVirtualBus
. Можно объединиться, сообщения в виртуальную шину, чтобы создать сообщение отправляют интерфейсы. В сообщении получают интерфейсы, можно получить доступ к шине в целом или выбрать определенные сообщения из шины. Для получения дополнительной информации о сообщении отправляют и получают интерфейсы, видят, что Simulink передает Обзор.
Компоненты связываются через следующее:
Предварительная нагрузка модели функционирует load('Velocity.mat')
загружает Velocity
соедините шиной объект к рабочей области.
Блок Bus Creator группы XVelocity и YVelocity в невиртуальную шину, заданную Скоростью, соединяет шиной тип данных Object.
Блок Send 1 создает сообщения с Velocity
как полезная нагрузка.
Блок Out Bus Element пометил SendVirtualBus.Velocity
создает виртуальную шину SendVirtualBus
с Velocity
элемент. В блоке Тип данных установлен в Bus: Velocity
, и Режим данных установлен в message
.
Блок Out Bus Element пометил SendVirtualBus.Angle
задает Angle
как элемент сообщения SendVirtualBus
.
Станция, Получающая компонент Данных, получает виртуальные шины и выбирает элементы сообщения с помощью блока In Bus Element. Получите блоки, преобразуют сообщения в сигналы для обработки и визуализации.
Для получения дополнительной информации о создании отправляют и получают интерфейсы для сообщений с невиртуальной полезной нагрузкой шины, видят, Отправляют и Получают сообщения, Несущие Данные о Шине.
Можно симулировать модель или сгенерировать код и для Мобильного Робота, Отправляющего компонент Данных и для Станции, Получающей компонент Данных. Для получения дополнительной информации смотрите, Генерируют сообщения C++, чтобы Связаться Между Simulink и Операционной системой или Промежуточным программным обеспечением (Embedded Coder).
Симулируйте модель. Наблюдайте переданную скорость робота в x
и y
направления. Робот перемещается в y
направление, потому что его скорость в x
направление является постоянным и 0
.
Наблюдайте постоянный относительный угол робота в радианах. Угол pi/2
подтверждает движение в y
направление.
Используйте инструмент Sequence Viewer, чтобы отобразить виртуальные шины, переданные между роботом и станцией. Чтобы открыть инструмент Sequence Viewer, в панели инструментов Simulink®, на вкладке Simulation, рассматриваемых Результатах, выбирают Sequence Viewer.
Окно Sequence Viewer отображает виртуальные переходы шины от Мобильного Робота, Отправляющего компонент Данных в блок Queue и от блока Queue до Станции, Получающей компонент Данных.
Расширьте путь выживания Очереди в окне Sequence Viewer. Заметьте, что блок Queue расширяется до двух блоков Очереди, которые обеспечивают устройство хранения данных для двух виртуальных элементов сообщения шины, Velocity
и Angle
. Дополнительный блок Queue имеет ту же настройку и качество исходного блока Queue. Для получения дополнительной информации о блоке Queue, смотрите Использование Блок Очереди, чтобы Управлять сообщениями.
Анимация позволяет вам наблюдать виртуальные шины, переданные между роботом и станцией во время симуляции. Чтобы включить анимацию, от панели инструментов, на вкладке Debug, в конечном счете раздел Animation, выбирают Animation Speed.
Можно задать Slow
Средняя
, или Fast
скорость анимации. Выберите None
выключить анимацию. Для получения дополнительной информации об анимации и визуализации сообщения, смотрите Анимационный и Изучите Отправку и Получение сообщений.
Анимация подсвечивает виртуальные шины, отправленные от робота до блока Queue и от блока Queue до станции.
Приостановите анимацию и укажите на лупу на блоке Queue, чтобы открыть Инспектора Устройства хранения данных. Инспектор Устройства хранения данных отображает элементы шины и данные о сообщении.
Можно смоделировать основанную на сообщении связь между компонентами программного обеспечения первой разработкой системы от уровня архитектуры с помощью System Composer™. Модели архитектуры в System Composer поддерживают модели Simulink с вводом и выводом сообщения как поведение компонента.
Ниже рисунок в качестве примера, который показывает проект компонентов архитектуры, чтобы представлять мобильного робота и станцию. Модели Simulink, используемые в примере выше, MessageSendRobotModel
и MessageReceiveRobotModel
, присоединены к этим компонентам как к поведениям компонента. Когда вы компилируете модель, очередь LIFO способности 1
автоматически вставляется в архитектурную модель для симуляции. Разработка интерфейсов сообщения от уровня архитектуры требует лицензии System Composer.