观察条件子系统信号
条件子系统由激活或触发子系统的外部信号控制。通过观察一个条件子系统,可以检查该子系统是否只在控制信号激活时才运行,并检查条件子系统中的其他功能。你可以添加观察员的块有:
启用子系统
触发子系统
启用和触发子系统
If动作子系统
开关案例动作子系统
有关条件子系统的更多信息,请参见有条件执行子系统概述.
当向条件子系统中的信号添加观测器时,Simulink®在主模型的顶层添加一个Observer Reference块,并创建一个Observer模型,该模型在非周期分区中包含一个Observer Port块。该分区控制条件数据的调度。分区中的测试逻辑也有条件地运行。因为在创建观察者时自动创建分区,所以不需要更改分区或调度设置。您可以更改分区的名称,但是该名称在模型中必须是惟一的。
为条件子系统添加观察者
向条件子系统添加观察者的步骤如下:
在条件子系统中,右键单击要观察的信号。
选择观察人士>观察选定的信号>新观察家为信号创建一个观察者。
或者,您可以选择要观察的信号,在省略号上暂停以打开操作栏,然后单击在新观察器中观察.
Simulink将观察者引用块添加到主模型中,并创建一个新的观察者模型。新的观察者模型包含一个非周期分区,该分区包含一个观察者端口块和一个终结者块。有关分区的信息,请参阅的“对模型进行分区”一节创建分区
用验证块替换终止块,例如测试评估或验证子系统块,并将验证块连接到观察者端口输出。在验证块中添加逻辑,对条件子系统信号进行分析或验证。
从主模型运行模型,而不是从Observer模型。
观察条件子系统中的信号
这个例子展示了如何在条件子系统中为信号添加观察者。的ObserveCondSubsys
本例中使用的模型包含一个正弦波控制信号作为Enabled子系统块的输入。只有当正弦输入为正时,Enabled子系统块才激活。
1.打开ObserveCondSubsys
模型。
open_system (“ObserveCondSubsys”)
2.打开Enabled Subsystem块。
3.选择Integrator块输出信号。在椭圆上暂停以打开操作栏,然后单击在新观察器中观察.
Simulink将观察者引用块添加到模型的顶层,并打开一个新的观察者模型。该模型有一个非周期分区,其中包含一个Observer Port块,其输出连接到一个Terminator块。
4.双击打开非周期分区。
5.用Test Assessment块替换终结者块。
6.打开Test Assessment块。
7.删除step_1_1而且step_1_2.
8.右键单击step_1并清除当分解复选框。
9.在step_1,添加验证(数据>= 0);
10.关闭Test Assessment块。
11.转到主模型并单击运行.
12.在模型运行之后,在MATLAB命令行中,使用这些命令查看结果。
run = Simulink.sdi.Run.getLatest;数据集= Simulink.sdi.exportRun(run.Id);= find(arrayfun(@(idx)…isequal(类(数据集{idx}),“sltest.Assessment”),…1: dataset.numElements));result = arrayfun(@(idx) dataset{idx}.Result, assessmentsignalindexes)
的验证
语句产生一个通过的结果,这表明Enabled子系统块及其关联的观察者只有在正弦输入为正时才活动。
The MathWorks, Inc.版权所有
限制
一个非周期分区中只能有一个Observer Port。
非周期分区名称在一个模型中必须是唯一的。
不能在非周期分区中编辑调度触发器。
您不能在日程安排编辑器中拖放或重新排列项目
simulink.schedule.OrderedSchedule
.不能向观察者模型的非周期分区添加事件。
分区子系统和函数调用子系统和For Each子系统块不支持观察器。