使用带有消息元素的虚拟总线进行组件通信
这个例子展示了如何在软件组件之间建模基于消息的通信,这些组件使用带有消息元素的虚拟总线进行通信。
这个例子中的模型是一个扁平的非完整机器人,它可以在两个轮子的帮助下移动或旋转,类似于家用吸尘机器人。该模型假设机器人以以下两种方式之一移动:
线性-两个轮子以相同的速度向同一方向转动,机器人线性移动。
旋转-车轮以相同的速度向相反的方向转动,机器人原地旋转。
要了解如何为机器人创建模型,请参见系统定义及布局.
在这个例子中,机器人将它的速度发送进去x
- - -y
-到基站的方向及其与基站的相对角度(运动方向)值。该站的数据消耗速率比机器人发送的数据慢。Queue块用作消息缓冲区。
用非虚拟总线有效负载发送虚拟总线消息元素
在这个模型中,代表移动机器人和车站的组件使用带有消息元素的虚拟总线进行通信。XVelocity
而且YVelocity
代表x
而且y
分别是机器人速度的分量。角
的相对角度x
设在。
在移动机器人发送数据组件中,XVelocity
而且YVelocity
信号被组合到非虚拟总线中速度
.Send 1块创建以速度数据作为有效负载的消息。在这个框架中,消息提供了组件之间基于事件的异步通信。使用带有非虚拟总线有效负载的消息允许软件处理速度
作为一个数据包与XVelocity
而且YVelocity
如同它的田野。因此,每个包包含XVelocity
而且YVelocity
数据。
Send 2块使用角
数据作为有效负载。输出总线元素块被标记SendVirtualBus。速度
而且SendVirtualBus。角
指定速度
而且角
作为虚拟总线的元素SendVirtualBus
.您可以将消息组合到一个虚拟总线中以创建消息发送接口。在消息接收接口中,您可以整体访问总线,也可以从总线中选择特定的消息。有关消息发送和接收接口的详细信息,请参见金宝appSimulink消息概述.
组件通过以下方式进行通信:
模型预加载函数
加载(“Velocity.mat”)
加载速度
将对象总线到工作区。总线创建器块组
XVelocity
而且YVelocity
类定义的非虚拟总线速度
总线对象。Send 1块使用
速度
作为有效载荷。标记的Out总线元素块
SendVirtualBus。速度
创建虚拟总线SendVirtualBus
与速度
元素。在街区里,数据类型设置为总线:速度
,数据模式设置为消息
.
标记的Out总线元素块
SendVirtualBus。角
指定角
的消息元素SendVirtualBus
.
站接收数据组件接收虚拟总线,并使用In总线元素块选择消息元素。接收块将消息转换为信号进行处理和可视化。
有关为具有非虚拟总线有效负载的消息创建发送和接收接口的详细信息,请参见发送和接收携带总线数据的消息.
您可以模拟模型或为移动机器人发送数据组件和站接收数据组件生成代码。有关更多信息,请参见生成c++消息以在Simulink和操作系统或中间件之间通信数据金宝app(嵌入式编码).
模拟模型并回顾结果
模拟模型。观察机器人的通信速度x
而且y
的方向。机器人走了进来y
方向是因为它的速度x
方向是不变的0
.
观察机器人以弧度为单位的恒定相对角度。这个角π/ 2
确认运动在y
方向。
使用序列查看器工具显示机器人和工作站之间通信的虚拟总线。要打开“序列查看器”工具,请在Simulink®工具条中金宝app模拟选项卡,在审查结果中,选择顺序查看器.
序列查看器窗口显示了从移动机器人发送数据组件到队列块以及从队列块到站接收数据组件的虚拟总线转换。
队列的扩张
在序列查看器窗口中展开队列生命线。观察Queue块扩展为两个Queue块,为两个虚拟总线消息元素提供存储,速度
而且角
.附加的Queue块具有与原始Queue块相同的配置和容量。有关Queue块的详细信息,请参见使用队列块管理消息.
可视化带有消息元素的虚拟总线
动画允许您观察在模拟过程中机器人和车站之间的虚拟总线通信。要在工具条上打开动画,请在调试选项卡,在事件的动画部分,选择动画速度.
你可以指定慢
,媒介
,或快
动画的速度。选择没有一个
关闭动画。有关动画和消息可视化的更多信息,请参见动画和理解发送和接收消息.
该动画突出显示了从机器人发送到Queue块以及从Queue块发送到车站的虚拟总线。
暂停动画并指向队列块上的放大镜以打开存储检查器。Storage Inspector显示总线元素和消息数据。
架构模型中带有消息元素的虚拟总线
首先,您可以使用system Composer™从体系结构级设计系统,从而为软件组件之间基于消息的通信建模。System Composer中的体系结构模型支持将消息输入和输出作为组件行为的Sim金宝appulink模型。金宝app
下面是一个示例插图,展示了代表移动机器人和车站的架构组件的设计。上面例子金宝app中使用的Simulink模型,MessageSendRobotModel
而且MessageReceiveRobotModel
,作为组件行为附加到这些组件上。当您编译模型时,一个LIFO队列的容量1
自动插入到体系结构模型中进行仿真。从体系结构级别设计消息接口需要System Composer许可。