主要内容

与多个发送者和接收者建立一个共享的通信通道

这个例子展示了如何使用Simulink®消息、SimEvents®和Stateflow®通过多个发送方和接收方的共享通道建模通信。金宝app

有关消息的概述,请参见金宝appSimulink消息概述

在这个模型中,有两个软件组件发送消息,两个组件接收消息。共享通道以附加的延迟传输消息。SimEvents®块用于通过合并消息行、复制和延迟消息来创建自定义通信行为。在发送组件中使用状态流图根据决策逻辑发送消息。

创建发送消息的组件

在模型中,有两个输出消息的软件组件,Send和StateflowSend。

在发送组件中,正弦波块是信号源。该块产生振幅为的正弦波信号1.该块的采样时间为0.1.Send块将信号转换为以数据形式携带信号值的消息。Send组件向Send Buffer 1发送消息。

在StateflowSend组件中,另一个正弦波块生成一个正弦波信号,一个噪声块向信号中注入噪声。噪声块输出一个信号,其值由均值为的高斯分布生成0的方差1.该块的采样时间为0.1

状态流图表示一个简单的逻辑,用于过滤信号并决定是否发送消息。如果信号的值大于0.5持续时间大于0.1,然后图表发送带有信号值的消息。如果信号值低于0,则图表过渡到ReceiveSignal状态。statflowsend组件将消息发送到Send Buffer 2。

有关创建消息接口的详细信息,请参见在软件组件之间建立消息发送和接收接口

创建接收消息的组件

在该模型中,有两个软件组件接收消息,即receive和Listener。

在Receive组件中,Receive块接收消息并将消息数据转换为信号值。

在Listener组件中,有一个Simulink Function块。金宝app该块在块面上显示函数onOneMessage(data)。

当消息到达Receive Buffer 2时,Listener块将收到通知并接受参数数据,即消息数据的值,作为输入信号。在街区里,数据值乘以2.块输出新的数据值。

使用SimEvents®路由消息

在共享通道中,来自两个消息发送组件的消息路径被合并以表示共享通信通道。

一个SimEvents®实体输入开关块合并消息行。在方块中:

  • 输入端口数量指定要合并的消息行数。参数值为2对于两个消息路径。

  • 主动端口选择指定如何为消息离开选择活动端口。如果您选择所有,所有到达块的消息都能够从输出端口离开块。如果您选择开关,您可以指定为消息离开选择活动端口的逻辑。在本例中,参数设置为所有

SimEvents®实体服务器块用于表示共享通道中的消息传输延迟。在方块中:

  • 能力设置为1,它指定了一次可以处理多少消息。

  • 服务时间设置为1,它指定处理消息所需的时间

SimEvents®Entity Replicator块用于生成消息的相同副本。在方块中:

  • 复制品从指定副本是从单独的输出端口离开块,还是与原始消息相同的输出端口。设置为独立输出端口

  • 副本数量设置为1,它指定为每条消息生成的副本数量。

  • 保留原始实体直到所有副本离开将原始消息保存在块中,直到其所有副本离开块为止。

一个SimEvents®实体终止器块用于模拟接收缓冲区2。在方块中:

  • 事件动作选项卡,在项行动字段,您可以指定执行计算的MATLAB代码或在消息进入块时调用的Simulink®函数调用。金宝app在这个例子中,onOneMessage(实体)用于通知Listener组件中的Simuli金宝appnk Function块。为了可视化函数调用,下面调试选项卡上,选择信息覆盖然后功能连接器

模拟模型并回顾结果

模拟模型。注意,动画突出显示了流经模型的消息。您可以通过右键单击模型画布和设置来关闭动画动画速度没有一个

当你暂停动画时,一个放大镜出现在存储消息的块上。如果您指向放大镜,您将看到存储在块中的消息数量。

要观察哪些消息存储在块中,单击放大镜打开存储检查器。例如,下图演示了存储在Send Buffer 1中的消息。

关闭动画并打开Sequence Viewer块,以观察Simulink Function调用和模型中的消息流。金宝app

例如,观察模拟时间0,在此期间,一条消息承载着价值0从发送组件发送到发送缓冲区1。从模拟时间开始0.10.5时,发送组件不断向发送缓冲区1发送不同数据值的消息。在时间0.5, statflowsend组件向Send Buffer 2发送消息。有关使用序列查看器块的更多信息,请参见使用序列查看器来可视化消息、事件和实体

另请参阅

||||(SimEvents)|(SimEvents)|(SimEvents)|(SimEvents)

相关的话题