通过发送消息与 Stateflow 图通信
要在 Simulink® 模型中的 Stateflow® 图内部和各图之间进行通信,请使用消息。消息是 Stateflow 对象,用于在局部或图之间进行数据通信。在发送方图中,您可以发送或转发包含数据的消息。在接收方图中,使用队列接收并保留消息,直到图能够计算它。
消息结合了数据和事件的一些功能。像数据一样,消息可以传输数值和文本信息。像事件一样,消息可以触发转移和状态动作。然而:
消息不会触发图唤醒。消息需要排队,直到图被唤醒。当图唤醒时,它可以响应队列中的消息。
如果接收方图无法立即响应,消息不会丢失。
有关详细信息,请参阅查看 Stateflow 消息、事件和数据之间的差异。
当图转移或状态动作计算消息时,图会确定队列是否包含任何消息。如果包含,图将从队列中移除该消息。该消息一直有效,直到时间步结束,或者直到图转发或丢弃该消息。当消息有效时,其他转移或动作可以访问消息数据,并且图不会再从队列中移除其他消息。图会在当前时间步结束时销毁所有有效消息。
在图中定义消息
您可以使用符号窗格、Stateflow 编辑器菜单或模型资源管理器向 Stateflow 图添加消息。
通过“符号”窗格添加消息
在建模选项卡的设计数据下,选择符号窗格。
点击创建消息图标 。
在新消息的行中,点击类型下方的图标并选择:
输入消息
局部消息
输出消息
编辑消息的名称。
对于输入和输出消息,点击端口字段并选择端口号。
要指定消息的属性,请打开属性检查器。在符号窗格中,右键点击该消息的行并选择浏览。有关详细信息,请参阅Set Properties for a Message。
使用 Stateflow 编辑器菜单添加消息
在 Stateflow 编辑器中,选择与要添加的消息作用域对应的选项。
作用域 选项 输入 在建模选项卡的设计数据下,选择消息输入。 输出 在建模选项卡的设计数据下,选择消息输出。 局部 在建模选项卡的设计数据下,选择消息。 在“消息”对话框中,指定数据属性。有关详细信息,请参阅Set Properties for a Message。
通过模型资源管理器添加消息
在建模选项卡的设计数据下,选择模型资源管理器。
在模型层次结构窗格中,在 Stateflow 层次结构中选择您希望新消息对其可见的对象。所选对象即变为新消息的父级。
在“模型资源管理器”菜单中,选择添加 > 消息。具有默认定义的新消息出现在模型资源管理器的内容窗格中。
在消息窗格中,指定消息的属性。有关详细信息,请参阅Set Properties for a Message。
Stateflow 消息的生命周期
Stateflow 消息具有有限的生命周期。当您使用 send
运算符向接收队列发送消息时,生命周期开始。消息将一直保留在队列中,直到转移或状态 on
动作对其进行计算,或者图使用 receive
运算符接收它。
当图计算或接收消息时,消息变为有效。该消息一直有效,直到:
当消息有效时,其他转移和动作可以计算消息和访问其数据。要检查消息是否有效,请使用 isvalid
运算符。
要查看仿真过程中的消息交换,请将 Sequence Viewer 模块添加到您的 Simulink 模型中。Sequence Viewer 模块显示:
发送的消息
收到的消息
转发的消息
丢失的消息
销毁的消息
丢弃的消息
有关详细信息,请参阅Use the Sequence Viewer to Visualize Messages, Events, and Entities。
消息的限制
您不能在以下各项中使用消息:
摩尔图
原子子图
断点条件表达式
entry 动作
启用了初始化时执行(进入)图的默认转移
在使用 C 语言作为动作语言的图中,消息不支持多字定点数据。
包含局部消息的图不支持外部模式仿真或快速加速模式仿真。
另请参阅
discard
| forward
| isvalid
| receive
| send
| Queue (Simulink) | Sequence Viewer