特定模型元素的测试框架构建
测试框架由一个或多个源模块组成,这些源模块驱动被测组件,而被测组件又驱动一个或多个接收模块。测试框架构建配置信号属性、函数调用、数据存储和执行语义。如果可能,测试框架会匹配信源、信宿和组件接口处的信号属性。有关选择信源和信宿的更多信息,请参阅 源和汇。
信号转换
信号转换子系统使源模块和接收模块的信号接口适应组件的图形接口。该组件的图形界面包括输入信号、输出信号以及动作、触发或启用输入。测试框架编译主模型来确定信号属性:
数据类型
方面
复杂
在线框架构建过程中,信号属性通过以下两种方式之一适应源:
可以生成具有编译属性的信号的源模块已配置为这样做。
如果源模块无法生成具有编译属性的信号,则信号转换子系统中的信号属性模块将调整源模块的输出。信号属性模块包括 Reshape、Rate Transition 和 Data Type Conversion 模块。
默认情况下,信号转换子系统被锁定,无法编辑。
函数调用
函数调用驱动程序
如果被测组件具有函数调用输入,则 Test Sequence 模块、MATLAB Function 模块或 Stateflow® 图源会为该组件生成函数调用输入,即使您在创建框架期间选择了其他源。要覆盖此行为并将函数调用输入连接到您选择的源类型,请使用 sltest.harness.create
函数创建测试框架,并将 'DriveFcnCallWithTestSequence'
设置为 false
。例如:
sltest.harness.create('Model/FcnCallSubsystem','Source','From File',... 'DriveFcnCallWithTestSequence',false)
函数调用输出
被测组件的函数调用输出连接到 Terminator 模块。
物理信号连接
框架构建期间支持接受或输出物理信号的组件,但不会生成信源和信宿。您可以在构建后将物理建模块添加到测试框架中。
总线信号
总线输入和输出的测试框架配置取决于源模块或接收模块的总线连接能力:
可以接受总线信号的信源和信宿无需修改即可直接连接到组件。
如果源无法输出总线信号,则总线信号将自动从信号转换子系统中的各个总线元素构建。
如果信宿无法接受总线信号,则会在信号转换子系统中从总线信号中扩展总线信号元素。对于接收或输出消息总线的顶层模型、子系统或模型引用,如果选择 Scope 模块作为信宿,则测试框架会添加终止符而不是 Scope 模块,因为 Scope 模块不支持多条消息。
字符串信号
如果被测组件使用字符串数据输入,并且测试框架源不支持字符串数据,则字符串输入将连接到 Ground 模块。
字符串输入
框架源选择 | 字符串输入的源模块 |
---|---|
进口 | Inport |
信号编辑器 | Ground |
从工作区 | Ground |
从文件 | Ground |
Test Sequence | Ground |
图 | Ground |
持续的 | String Constant(单独字符串输入) Ground(包含字符串的总线) |
地面 | 地面 |
如果被测组件使用字符串数据输出,并且测试框架信宿不支持字符串数据,则字符串输出将连接到 Terminator 模块。
字符串输出
框架水槽选择 | 字符串输出信宿模块 |
---|---|
外港 | Outport |
范围 | Terminator |
至工作区 | Terminator |
归档 | Terminator |
终结者 | Terminator |
非图形连接
除了组件的图形界面之外,Simulink 还支持多种非图形连接。测试框架构建还支持非图形连接。
转到–来自连接
跨越组件边界的 Goto-From 模块对被视为组件输入或输出。
组件中没有对应 Goto 模块的 From 模块被视为组件输入信号。测试框架包括一个源模块和一个对应的 Goto 模块。
组件中没有对应 From 模块的 Goto 模块被视为组件输出信号。测试框架包括一个信宿模块和一个对应的 From 模块。
数据存储内存
Data Store Read 和 Data Store Write 模块需要测试框架中完整的数据存储定义。
如果 Data Store Read 或 Data Store Write 模块在组件中缺少相应的 Data Store Memory 模块,测试框架会添加 Data Store Memory 模块。
对于仅包含 Data Store Read 模块的组件,测试框架会添加一个驱动 Data Store Write 模块的源模块。
对于仅包含 Data Store Write 模块的组件,测试框架会添加一个 Data Store Read 模块来驱动接收模块。
引用模型内的这些模块可以访问在模型层次结构中更高级别定义的 Data Store Memory 模块中存储的数据:Data Store Read、Data Store Write、S-Function、MATLAB Function、MATLAB System 和 Chart (Stateflow) 模块。为了允许这些模块访问模型层次结构中更高级别的 Data Store Memory 模块中存储的数据:
在引用模型内放置一个 Data Store Memory 模块。有关 Data Store Memory 模块支持的位置的更多信息,请参阅 Data Store Memory 中的描述。
在 Data Store Memory 模块对话框中,选择数据存储引用。
在信号属性选项卡上,指定数据类型、维度和信号类型。当您选择数据存储引用时,以下选项不可用:
Inherit
用于数据类型,-1
用于维度并且auto
用于信号类型。
如果无法确定全局数据存储内存的读取或写入使用情况,则 Data Store Read 和 Data Store Write 模块将不包含在测试框架中。
Simulink 函数定义
如果组件调用未在组件中定义的 Simulink 函数,则测试框架会添加与函数调用签名匹配的 Simulink Function 桩件模块。
导出函数模型
测试框架包含一个针对使用导出函数建模风格的组件的函数调用调度程序。调度程序是一个 Test Sequence 模块、MATLAB Function 模块或 Stateflow 图,其中包含对模型中函数的原型调用。
调度程序 Test Sequence 模块包括一个测试步骤,其中包含:
组件中全局范围的 Simulink Function 模块的目录。
可在组件接口访问的函数调用触发器列表。
框架构建遵循周期性函数调用触发器,并对 Test Sequence 模块、MATLAB Function 模块或 Stateflow 图中的函数调用事件进行适当抽取。
测试框架包括包含 Initialize
、Terminate
和 Reset
事件子系统的模型的 Initialize
、Terminate
和 Reset
步骤。您可以使用 sltest.harness.create
的 'ScheduleInitTermReset'
属性为其他导出函数模型包含 Initialize
、Terminate
和 Reset
步骤。
执行语义
组件的执行行为取决于计算采样时间、求解器设置、模型配置和参数设置等因素。执行行为还依赖于运行时事件,例如函数调用触发器和异步事件。为了处理这些执行语义,测试框架构建如下:
将配置参数设置从主模型复制到测试框架中。
将所需的参数定义从主模型工作区复制到测试框架模型工作区。
如果框架所有者不是 Subsystem Reference 模块,或者框架所有者是没有附加数据字典的 Subsystem Reference 模块,则将数据字典设置从主模型复制到测试框架中。
使用明确的源模块规范和 Rate Transition 模块来尊重有限的采样时间设置子集。
其他因素(例如框架中的附加模块和求解器启发式方法)可能会导致测试框架的执行与主模型不同。组件的图形和编译界面优先于其他执行语义。
采样时间规范
Simulink® 支持采样时间数组,包括在模型编译期间派生的类型。测试框架构建支持周期性离散、连续和固定小步长采样时间,但需考虑以下因素:
支持所需速率的源模块已配置为这样做,并且信号转换子系统包含具有速率规范的 Signal Specification 模块。
测试框架构建不会配置无法支持所需速率的源模块。
如果所需速率是周期性离散的或固定小步长的,则测试框架在信号转换子系统中包含一个 Rate Transition 模块。
如果所需速率是连续的,则执行语义由求解器确定。信号转换子系统不包含 Rate Transition 模块。
在测试框架构建过程中,其他采样时间规范将被忽略。在这些情况下,求解器设置决定执行行为。