使用 Observer 以无线方式访问模型数据
Observer 允许您监视系统模型的动态响应,同时保持系统模型设计和系统结果的完整性。Observer 使用两种类型的模块,Observer Reference 模块和 Observer Port 模块。Observer Reference 模块以无线方式将系统模型链接到包含验证逻辑的 Observer 模型。在 Observer 模型中,您可以使用 Observer Port 模块访问系统模型中的数据来驱动验证逻辑。

您可以观测到的 Simulink® 信号和模型数据类型包括:
连续时间和离散时间信号
零阶保持信号
标量信号
宽信号
非虚拟总线信号
消息
条件子系统信号
Stateflow® 本地数据参数,除了 Simulink 状态内的 Stateflow 子系统中定义的本地变量、参数、信号和其他数据。
Stateflow 状态自我活动,除非该活动位于 Simulink 状态内的 Stateflow 子系统中。
Observer Reference 模块
Observer Reference 模块以无线方式将系统模型链接到 Observer 模型。Observer Reference 模块只能位于系统模型的顶层,并且没有输入或输出端口。您将 Simulink 信号或其他模型数据映射到 Observer 模型中包含的 Observer Port 模块。将 Observer Port 模块映射到信号或数据后,您可以将端口连接到 Observer 模型内的验证子系统。运行系统模型也会运行链接的 Observer 模型。
无线接入允许您使用 Observer 来监视您的系统模型而不会导致系统发生改变。Observer 允许您在系统设计和验证子系统之间创建明确的区分。
添加 Observer Reference 模块
Observer Reference 模块引用您用来验证系统模型的单独验证模型。要将 Observer Reference 模块添加到您的系统模型,首先,在 Simulink 工具条中,打开 App,然后点击模型验证、确认和测试部分中的 Simulink Test。点击测试选项卡中的添加 Observer Reference。或者,右键点击 Simulink 画布的顶层,然后从上下文菜单中选择 Observer > 在此处添加 Observer Reference。您的系统模型中添加了一个 Observer Reference 模块,并且创建并打开了一个 Observer 模型。您必须将 Observer 模型保存在 MATLAB® 路径下的可写文件夹中。

连接现有的 Observer 模型
要将 Observer Reference 模块连接到您已经创建的 Observer 模型,首先将您的 Observer 模型保存在 MATLAB 路径上的可写文件夹中。接下来,右键点击 Observer Reference 模块并选择模块参数(ObserverReference)。

输入您想要连接到系统的 Observer 模型的名称并选择应用。双击 Observer Reference 模块时,Observer 模型将在新窗口中打开。
根据信号或其他模型数据创建 Observer 模型
要创建映射到模型中的信号线或可观测数据的 Observer 模型,请选择一个或多个信号或要观测的数据。然后,点击测试选项卡中的添加 Observer Reference。或者,右键点击信号或数据并选择 Observer、要观测的项目类型和新建 Observer。Simulink 创建一个 Observer 模型并将 Observer Reference 模块添加到您的系统模型。
使用 Observer Port 模块连接信号或其他模型数据
每个 Observer 模型包含一个或多个 Observer Port 模块。将 Observer Port 模块映射到系统模型内的模型对象或信号后,Observer Port 模块将输出与其映射的对象或信号相同的输出。新的 Observer Port 模块显示一条穿过信号符号的线,表示该模块未映射到任何信号或对象。

访问管理 Observer 对话框
要将 Observer Port 模块映射到系统模型中的信号或对象,请使用以下方法之一打开“管理 Observer”对话框:
在测试选项卡中,点击管理 Observer。
点击 Observer 参考模块右下角的齿轮。
右键点击 Observer Reference 模块并选择 Observer > 管理 Observer。
在 Observer 模型中,双击 Observer Port 模块。

使用管理 Observer 对话框您可以:
过滤并选择要观测的信号和对象
添加、删除或配置 Observer Port 模块
跟踪 Observer 端口和模型之间的信号和对象
管理 Observer 对话框的左侧是可观测区域面板。可观测区域面板显示模型的模块结构和可观测的输出。观测到的信号或对象在层次结构中以粗体显示。
管理 Observer 对话框的右侧显示 Observer 面板。Observer 面板显示模块层次结构,包括 Observer Reference 模块中的 Observer 端口。映射到信号或对象的 Observer Port 模块以粗体显示,并显示其所附加的信号。一旦将 Observer Port 映射到信号或对象,其模块图标就会更新,以显示 Observer Port 已附加到信号或对象。

要查看观测对象的完整路径,请指向 Observer Port 模块。
如果您更改系统模型中观测到的信号或对象的名称,则 Observer Reference 模块会更新 Observer Port 模块的输出信号的名称。如果信号没有命名并且没有标签,则 Observer Port 模块的输出将设置为空字符串。
将 Observer Port 模块映射到信号或对象
要将信号或对象映射到 Observer Port 模块,请打开“管理 Observer”对话框。在可观测区域面板中,选择您想要观测的信号或对象。要将信号或对象映射到新的 Observer Port 模块,请双击选定的项目或点击添加新 Observer 端口图标
。要将信号或对象映射到现有的 Observer Port 模块,请选择 Observer 面板中的 Observer 端口,然后点击重新配置 Observer Port 图标
。在 Observer 模型中,您可以将 Observer 端口的输出连接到验证子系统来测试结果。
跟踪观测项至模型信号和对象
您可以在管理 Observer 对话框中跟踪观测的项目及其 Observer 端口。您还可以在“管理 Observer”对话框和系统模型之间以及系统模型和 Observer 模型之间跟踪项目。
要在管理 Observer 对话框中将观测项跟踪到其 Observer 端口,请使用以下方法之一:
双击 Observer 面板中的 ObserverPort 项。观测到的项目在可观测区域面板中突出显示。
右键点击观测者面板中的 ObserverPort 项,并选择在左侧面板中显示。观测到的项目在可观测区域面板中突出显示。
要在“管理 Observer”对话框和系统模型之间跟踪观测项或 Observer 端口,请使用以下方法之一:
在观测者面板或可观测区域面板中右键点击 ObserverPort 项,并选择在模型中显示。观测到的项目在模型中突出显示。
右键点击系统模型中观测到的信号或对象,并选择转至关联的 Observer Port。相关的 Observer Port 在 Observer 模型中被突出显示。
要在系统模型和 Observer 模型之间跟踪 Observer 端口和观测项,请使用以下方法之一:
右键点击 Observer 模型中的 Observer Port,并选择Observer > 转到观测的 <item type>。观测到的信号或对象在系统模型中突出显示。
右键点击系统模型中观测到的信号或对象,并选择Observer > 转至关联的 Observer Port。相关的 Observer Port 在 Observer 模型中被突出显示。
使用 Observer Reference 模块仿真系统模型
Observer 模型用于监视系统模型中的信号并检查系统模型是否在指定的参数内运行。无论有没有 Observer Reference 模块,您的系统模型仿真结果都是相同的。Observer Reference 模块不会影响您的系统模型的编译。
注意
系统模型和 Observer 模型都必须在普通仿真模式下运行。两个模型均可按固定步长或可变步长速率运行,或者一个模型可按固定速率运行,另一个模型按可变速率运行。这两个模型也可以使用相同或不同的求解器。请参阅选择求解器。
为热泵温度模型创建 Observer
此示例展示如何使用观测者参考和 Observer Port 模块来无线观测信号。在该系统中,使用 Simulink 对工厂进行建模,使用 Stateflow 对控制器进行建模。该示例的目标是监测热泵的温度以及热泵冷却或加热房间的时间。风扇吹的方向表示冷却或加热。数据名称为 pump_dir,它连接到 Stateflow 图中的端口 3。
打开模型
sltestHeatpumpExample

创建 Observer 模型和 Observer Reference 模块
1.在模型的 App 选项卡中,点击模型验证、确认和测试部分中的 Simulink Test。测试选项卡打开
2.在测试选项卡中,点击添加 Observer Reference。Simulink 向您的系统模型添加一个 Observer Reference 模块并创建一个名为 sltestHeatpumpExample_Observer1 的 Observer 模型。
创建并映射 Observer Port 模块
1.在主模型中,打开 Plant 子系统并右键点击信号 T。选择 Observer > 观测所选信号 > sltestHeatpumpExample/Observer(sltestHeatpumpExample_Observer1)。Observer 模型添加了一个映射到信号 T 的 Observer Port 模块。
2.保存新的 Observer 模型。
3.在 Observer 模型的测试选项卡中,点击添加 Observer Port,添加另一个 Observer Port 模块。双击新的 ObserverPort1 模块以打开管理 Observer 对话框。在 Observer 面板中,第二个 Observer 端口 ObserverPort1 列在第一个端口下方。
4.要将 ObserverPort1 映射到 Simulink 数据 pump_dir,点击 ObserverPort1。在可观测区域面板中,展开 Controller 和 controller_chart,然后选择 Outport3。点击两个面板之间的重新配置图标。ObserverPort1 名称更新为 ObserverPort1 (controller_chart:3)。

5.Observer Port 模块位于 Observer 模型中,现在已映射并准备连接到 Scope模块或 Verification Subsystem (Simulink Design Verifier)。如果您想实现验证子系统,请参阅完善、测试和调试子系统 的温度条件状态部分,以获取有关要测试的条件的信息。

Copyright 2022 The MathWorks, Inc.
将验证子系统转换为 Observer 参考
将 Verification Subsystem (Simulink Design Verifier) 转换为 Observer Reference 模块是一种整理系统模型的方法。选择要转换的子系统,然后在测试选项卡中点击发送到 Observer。或者,右键点击验证子系统并选择 Observer > 将所选模块移至 Observer > 新建 Observer。此操作无法撤消。
该模型包含验证子系统、安全属性。

通过将安全属性验证子系统转换为 Observer Reference 模块,您可以删除将验证子系统链接到系统模型的信号,同时保留测试系统完整性的能力。

两个信号 throt 和 output1 自动映射到 Observer 模型中的两个 Observer Port 模块 sltestBasicCruiseControlHarnessModel_Observer1。

Observer 的考虑和限制
模型仿真与编译
如果出现以下情况,Observer 模型将无法仿真:
Observer 模型包含根级 Inport 或 Outport 模块。
Observer 模型是一个库或子系统参考模型。
不支持独立编译 Observer 模型。
观测者参考和 Observer Port 模块
如果出现以下情况,则在仿真中会忽略 Observer Reference 模块:
您可以使用除普通模式之外的任何仿真模式(例如,加速器、SIL/PIL)。
您正在生成代码。
Observer Reference 模块位于模型参考层次结构中。Observer Reference 模块仅在顶层模型的根部受支持。
Observer Reference 模块位于 Observer 模型中。不支持 Observer 模型的递归。
Observer Port 模块不支持来自引用模型中的根 Inport 模块的信号,这些模块。为了观测信号,请将信号连接到具有直接馈通输入的模块。有关具有和不具有直接馈通输入的模块的更多信息,请参阅直接馈通输入对执行顺序的影响。
数据导出与输出
Observer 支持记录信号或数据存储内存以及保存最终操作点。不支持所有其他数据导出选项,例如时间、状态、输出、最终状态和保存到文件。
Observer 中的工作区和仪表板模块不受支持并且不会产生输出。
Observer 与设计模型之间的设置不匹配
当 Observer 模型中的这些设置与设计模型中的设置不同时,将使用设计模型设置并忽略 Observer 模型设置。
数据导入或导出设置
覆盖率设置
求解器停止时间
另请参阅
Observer Port | Observer Reference | sltest.observer.observeElement