Main Content

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

观测条件子系统信号

条件子系统由启用或触发子系统的外部信号控制。通过观测条件子系统,您可以检查子系统是否仅在控制信号激活时运行,并检查条件子系统中的其他功能。您可以添加观测器的模块是:

  • 使能子系统

  • 触发子系统

  • 启用和触发子系统

  • 如果动作子系统

  • Switch Case 动作子系统

有关条件子系统的更多信息,请参阅 条件执行子系统概述

当你在条件子系统中向信号添加观测器时,Simulink® 会在主模型的顶层添加一个 Observer Reference 模块并创建一个 Observer 模型,其中包含非周期分区中的 Observer Port 模块。该分区控制条件数据的调度。分区中的测试逻辑也是有条件运行的。因为在创建观测器时会自动创建分区,所以您不需要更改分区或调度设置。您可以更改分区的名称,但该名称在模型内必须是唯一的。

为条件子系统添加 Observer

向条件子系统添加观测器的步骤如下:

  1. 在条件子系统中,右键单击要观测的信号。

  2. 选择Observer > 观测所选信号 > 新建 Observer为信号创建观测器。

    或者,您可以选择要观测的信号,在省略号上暂停以打开操作栏,然后点击在新 Observer 中观测

    Simulink 向主模型添加 Observer Reference 模块并创建一个新的 Observer 模型。新的 Observer 模型包含一个非周期分区,其中包含一个 Observer Port 模块和一个 Terminator 模块。有关分区的信息,请参阅 Create Partitions 的“对模型进行分区”部分

    Aperiodic partition with Observer Port and Terminator blocks.

  3. 用验证模块(例如测试评估或 Verification Subsystem 模块)替换 Terminator 模块,并将验证模块连接到 Observer 端口输出。向验证模块添加逻辑来分析或验证条件子系统信号。

  4. 从主模型运行模型,而不是从 Observer 模型运行。

观测条件子系统中的信号

此示例显示如何在条件子系统中为信号添加观测器。本例中使用的 ObserveCondSubsys 模型包含正弦波控制信号作为 Enabled Subsystem 模块的输入。仅当正弦输入为正时,Enabled Subsystem 模块才处于活动。

1.打开 ObserveCondSubsys 模型。

open_system('ObserveCondSubsys')

Conditional subsystem model with sine input and enabled subsystem block

2.打开 Enabled Subsystem 模块。

3.选择 Integrator 模块信号。暂停在省略号上以打开操作栏,然后点击在新 Observer 中观测

Selected output of Integrator block showing action bar

Simulink 在模型顶层添加一个 Observer Reference 模块并打开一个新的 Observer 模型。该模型有一个非周期分区,其中包含一个 Observer Port 模块,其输出连接到 Terminator 模块。

Top model with added Observer block

Aperiodic partition in Observer model

4.双击打开 Aperiodic 分区。

5.用 Test Assessment 模块替换 Terminator 模块。

Test assessment block

6.打开 Test Assessment 模块。

7.删除 step_1_1step_1_2

8.右键单击 step_1 并清除分解时复选框。

9.在 step_1 中,添加 verify(data >= 0);

Assessment step verify statement

10.关闭 Test Assessment 模块。

11.转到主模型并点击运行

12.模型运行后,在 MATLAB 命令行中使用这些命令查看结果。

run = Simulink.sdi.Run.getLatest;
dataset = Simulink.sdi.exportRun(run.Id);
assessmentSignalIndices = find(arrayfun(@(idx)...
  isequal(class(dataset{idx}),'sltest.Assessment'),...
  1:dataset.numElements)); 
result = arrayfun(@(idx) dataset{idx}.Result,assessmentSignalIndices)

verify 语句产生了一个通过结果,这表明仅当正弦输入为正时,Enabled Subsystem 模块及其相关的观测器才处于活动。

版权所有 2022 The MathWorks, Inc.

限制

  • 一个非周期分区中只能有一个 Observer 端口。

  • 非周期分区名称在模型内必须是唯一的。

  • 您不能编辑非周期分区中的调度触发器。

  • 您无法在计划编辑器中或通过使用 simulink.schedule.OrderedSchedule 来拖放或重新排序项目。

  • 您不能将事件添加到 Observer 模型的非周期分区中。

  • 分区子系统和函数调用子系统和 For Each Subsystem 模块不支持观测器。

另请参阅

|

相关主题