观测消息
Simulink® 使用消息在模型组件之间进行通信。当你的模型包含一个或多个消息信号时,你可以创建一个 Observer 模型来观测消息数据。当您创建 Observer 模型时,它会创建与消息相关的元数据。您可以使用消息数据和元数据来测试消息语义并验证消息属性。
消息总线元素
当你为一个消息信号创建一个 Observer 时,Observer 模型会自动包含一个 Observer Port 模块和一个 Bus Selector 模块。该总线有两个元素:
OrigPayload
— 正在观测的消息数据。包含以下元素的元数据:
sltestEventMetadata.Message.id
— 正在观测的消息的 ID,以int32
整数形式返回。sltestEventMetadata.Message.order
—仿真中消息操作的顺序,以 int32 整数形式返回。sltestEventMetadata.Message.eventType
— 事件类型,作为slTestEventType
对象返回。有效值为MessageArrival
、MessageDeparture
、MessageDrop
和Invalid
。sltestEventMetadata.Message.time
— 消息发送、接收或丢弃的仿真时间,以double
形式返回。
添加消息 Observer
添加消息观测器:
在具有一个或多个输出消息的模块的模型中,右键单击输出消息信号进行观测。
注意
只有生成自己的采样时间的 SimEvents® 模块才支持具有异步采样时间的模块的消息。
选择Observer > 观测所选信号 > 新建 Observer为消息信号创建 Observer 模型。在主模型中添加一个 Observer Reference 模块,并创建一个 Observer 模型。
新的 Observer 模型包含 Observer Port 模块和 Bus Selector 模块。Bus Selector 模块有两个输出,
OrigPayload
和Metadata
。您可以使用 Observer Port 模块中的默认设置来观测总线的输出。将总线的输出连接到一个模块,例如 Test Assessment 模块或 Stateflow® 图,以指定分析或验证消息数据或元数据的逻辑。
观测消息信号
打开一个具有带消息输出的模块的模型。对于此示例,打开 Overflow
模型,其中包含一个 Observer 模型。
open_system('Overflow')
在这个模型中,Sine Wave2
模块每 0.1 秒发送一次数据,但 Receive2
模块每 0.5 秒仅接收一次数据。由于 Queue2 FIFO
模块最多可容纳三条消息,因此会发生溢出并导致一些消息从队列中删除。
通过选择消息信号,右键单击其中一个信号,然后选择观测器 > 观测选定的信号 > 新建 Observer 来设置 Observer 模型。Observer 模块(Observer Reference 模块)已自动添加到主模型。
通过双击主模型中的 Observer 模块来打开 Observer 模型,或者使用以下命令:
open_system('Overflow_Observer_1')
Observer 模型包含两个 Observer Port 模块、Send
和 Receive
,它们与主模型中选择的信号相对应。每个模块都连接到具有两个输出的 Bus Selector 模块。OrigPayload
输出是正在观测的消息数据,Metadata
输出包含消息 ID、仿真中消息的顺序、消息事件类型和消息的仿真时间。
总线信号输出连接到两个 Stateflow 图,用于分析消息数据。
来自 Receive
Observer 端口模块的消息图包含逻辑,用于验证消息数据和元数据没有由于 Queue 模块溢出导致消息被丢弃而损坏。
图逻辑验证:
正弦波数据在预期范围内,即 0 到 1 之间
消息和仿真时间增量的顺序以及每个顺序值都是唯一的
消息事件类型是有效类型
另请参阅
Observer Port | Observer Reference