Main Content

本页采用了机器翻译。点击此处可查看英文原文。

观测消息

Simulink® 使用消息在模型组件之间进行通信。当你的模型包含一个或多个消息信号时,你可以创建一个 Observer 模型来观测消息数据。当您创建 Observer 模型时,它会创建与消息相关的元数据。您可以使用消息数据和元数据来测试消息语义并验证消息属性。

消息总线元素

当你为一个消息信号创建一个 Observer 时,Observer 模型会自动包含一个 Observer Port 模块和一个 Bus Selector 模块。该总线有两个元素:

  • OrigPayload — 正在观测的消息数据。

  • 包含以下元素的元数据:

    • sltestEventMetadata.Message.id — 正在观测的消息的 ID,以 int32 整数形式返回。

    • sltestEventMetadata.Message.order —仿真中消息操作的顺序,以 int32 整数形式返回。

    • sltestEventMetadata.Message.eventType — 事件类型,作为 slTestEventType 对象返回。有效值为 MessageArrivalMessageDepartureMessageDropInvalid

    • sltestEventMetadata.Message.time — 消息发送、接收或丢弃的仿真时间,以 double 形式返回。

添加消息 Observer

添加消息观测器:

  1. 在具有一个或多个输出消息的模块的模型中,右键单击输出消息信号进行观测。

    注意

    只有生成自己的采样时间的 SimEvents® 模块才支持具有异步采样时间的模块的消息。

  2. 选择Observer > 观测所选信号 > 新建 Observer为消息信号创建 Observer 模型。在主模型中添加一个 Observer Reference 模块,并创建一个 Observer 模型。

    新的 Observer 模型包含 Observer Port 模块和 Bus Selector 模块。Bus Selector 模块有两个输出,OrigPayloadMetadata。您可以使用 Observer Port 模块中的默认设置来观测总线的输出。

    Observer Port block and Bus Selector block and outputs in Observer model

  3. 将总线的输出连接到一个模块,例如 Test Assessment 模块或 Stateflow® 图,以指定分析或验证消息数据或元数据的逻辑。

观测消息信号

打开一个具有带消息输出的模块的模型。对于此示例,打开 Overflow 模型,其中包含一个 Observer 模型。

open_system('Overflow')

在这个模型中,Sine Wave2 模块每 0.1 秒发送一次数据,但 Receive2 模块每 0.5 秒仅接收一次数据。由于 Queue2 FIFO 模块最多可容纳三条消息,因此会发生溢出并导致一些消息从队列中删除。

通过选择消息信号,右键单击其中一个信号,然后选择观测器 > 观测选定的信号 > 新建 Observer 来设置 Observer 模型。Observer 模块(Observer Reference 模块)已自动添加到主模型。

Main model with sine wave block connected to send block. Send block is connected to FIFO queue, which is connected to receive block

通过双击主模型中的 Observer 模块来打开 Observer 模型,或者使用以下命令:

open_system('Overflow_Observer_1')

Observer 模型包含两个 Observer Port 模块、SendReceive,它们与主模型中选择的信号相对应。每个模块都连接到具有两个输出的 Bus Selector 模块。OrigPayload 输出是正在观测的消息数据,Metadata 输出包含消息 ID、仿真中消息的顺序、消息事件类型和消息的仿真时间。

Observer model with send and receive blocks connected to bus selector.

总线信号输出连接到两个 Stateflow 图,用于分析消息数据。

来自 ReceiveObserver 端口模块的消息图包含逻辑,用于验证消息数据和元数据没有由于 Queue 模块溢出导致消息被丢弃而损坏。

图逻辑验证:

  • 正弦波数据在预期范围内,即 0 到 1 之间

  • 消息和仿真时间增量的顺序以及每个顺序值都是唯一的

  • 消息事件类型是有效类型

Stateflow chart with message logic

另请参阅

|

相关主题