提取子系统进行分析
子系统提取概述
如果您有一个大型模型,以至于减慢了您的分析速度或具有无法实现的目标,您可能需要使用 Simulink® Design Verifier™ 来分析原子子系统或 Stateflow® 原子子图。通过此技术,您可以实现自下而上的方法来分析大型模型,如自下而上的模型分析方法中所述。
当您分析子系统或原子子图时,软件:
将子系统或子图提取到新模型中。
如果需要,可向新创建的模型添加模块,以复制其父模型中子系统或子图的执行上下文。
分析提取的模型并产生结果。
注意
Simulink Design Verifier 软件只能分析原子子系统和原子子图。
有关分析子系统的更多信息,请参阅 为子系统生成测试用例。
有关分析原子子图的更多信息,请参阅 分析 Stateflow 原子子图。
sldvextract 函数
sldvextract
函数允许您提取子系统和原子子图以进行组件验证。通过提取子系统或原子子图,您可以独立于系统其余部分验证组件,从而可以测试组件算法。有关详细信息,请参阅 什么是组件验证? 和 Functions for Component Verification。
提取模型的结构
当您分析子系统或原子子图时,Simulink Design Verifier 会创建一个新模型,其中包含子系统或原子子图,以及与连接到原始子系统的端口相对应的任何输入和输出端口。
软件通过编译原始模型为新模型中的端口分配以下属性:
数据类型
采样率
信号维度
信号范围的最小值和最大值
该软件将新模型命名为 subsystem_name
,其中 subsystem_name
是子系统的名称。
接下来的部分提供了 Simulink Design Verifier 如何提取和分析子系统的示例。
分析从全局数据存储读取的子系统
数据存储器是一个存储库,您可以向其中写入数据,也可以从中读取数据,而无需将输入或输出信号直接连接到数据存储器。
您使用 Data Store Memory模块或 Simulink.Signal
对象创建数据存储。Data Store Memory 模块或 Simulink.Signal
对象代表数据存储并指定其属性。每个数据存储必须有一个唯一的名称。
当您分析从子系统外部访问的数据存储中读取数据的子系统时,分析:
向新模型添加 Data Store Memory 模块。
添加写入数据存储的输入端口。由于输入写入数据存储,因此为了进行 Simulink Design Verifier 分析,数据可以具有任何值(在指定的数据类型内)。
如果数据存储指定了最小值和最大值,则这些值将分配给新的输入端口。
以下示例分析了 sl_subsys_fcncall8
示例模型中的子系统:
1.打开 sl_subsys_fcncall8
示例模型:
open_system('sl_subsys_fcncall8');
该模型定义了一个数据存储 A,原子子系统读取器使用 Data Store Read 模块从中读取数据。
2.右键点击 Reader 子系统,然后选择 Design Verifier > 为子系统生成测试。
Simulink Design Verifier 日志窗口显示软件将子系统提取到名为 Reader
的新模型中,分析提取的模型,并为您提供要生成的结果的选择。
3.打开软件在 <current_folder>\sldv_output\Reader.
中创建的新阅读器模型
新的 Inport 模块 A 写入数据存储,供新模型中的子系统 Reader 使用。
分析函数调用子系统
函数调用子系统是一个触发子系统,其执行由 C MEX S-Function 内部的逻辑而不是信号的值决定。函数调用子系统始终是原子的。
注意:有关详细信息,请参阅 Implement Function-Call Subsystems with S-Functions。
当您分析具有函数调用子系统的模型时,Simulink Design Verifier 会创建一个带有模拟触发器和子系统副本的 Inport 模块的新模型。然后软件会对新模型进行分析。
以下示例分析了 sl_subsys_fcncall2
模型中的函数调用子系统:
1.打开 sl_subsys_fcncall2
示例模型:
open_system('sl_subsys_fcncall2');
2.该模型包含一个名为 Chart 的 Stateflow™ 图,可触发函数调用子系统 f
。
右键点击 f
子系统并选择 Design Verifier > 为子系统生成测试。
软件将子系统提取到一个名为 f0
的新模型,对提取的模型进行分析,并产生结果。
3.打开软件在 f0
中创建的 <current_folder>\sldv_output\f0
模型。
Inport 模块和新的子系统模块模拟了新 f0
模型中函数调用子系统 f 的触发器。
分析全局 Simulink 函数
Simulink® 函数是一个计算单元,当提供一组输入时,它会计算出一组输出。
当您分析 Simulink Function 子系统时,Simulink Design Verifier™ 会创建一个新模型,其中包含 MATLAB Function 模块 _SldvExportFcnScheduler
和子系统的副本。这个 MATLAB Function 模块不定期地调用 Simulink 函数,并由代表 Simulink 函数的输入参量的输入端口驱动。一个额外的 Inport 模块,称为 FcnTriggerPort
,其值表示是否在时间步中调用特定函数。
下面的例子分析了 sldvexGlobalSimFcn
模型中的全局 Simulink 函数:
1.打开 sldvexGlobalSimFcn
模型。
open_system('sldvexGlobalSimFcn');
2.右键点击子系统并选择 Design Verifier > 生成子系统测试。
软件将子系统提取成新的模型,并对提取的模型进行分析,并给出结果。
3.打开软件在 SimulinkFunctionRunnable0
中创建的新模型 <current_folder>\sldv_output\
。
Inport 模块 FcnTriggerPort
,调用新 SimulinkFunctionRunnable
模型中的 Simulink 函数 SimulinkFunctionRunnable0
。