配置并运行 PIL 仿真
运行 SIL 和 PIL 仿真有三种方法。您可以使用:
顶层模型。
Model 模块。
您从子系统中创建的 SIL 和 PIL 模块。
使用顶层模型进行仿真
要配置和运行顶层模型 SIL 或 PIL 仿真,请执行下列步骤:
在 Simulink® 编辑器中,打开您的模型。
在 App 选项卡上,点击 SIL/PIL 管理器。
在模式部分中,选择仅 SIL/PIL 仿真。
在准备部分中,将在测系统设置为顶层模型。
在 SIL/PIL 模式字段中,选择软件在环(SIL) 或处理器在环(PIL)。该选项仅支持 ERT、GRT 或 AUTOSAR 系统目标文件。有关配置信息,请参阅模型配置参数:代码生成和Configure AUTOSAR Code Generation (AUTOSAR Blockset)。
监控组件信号和状态数据,并比较来自模型和 SIL 或 PIL 仿真的值:
对于您要记录的每个信号:
在 Simulink 编辑器中,选择该信号。
在 SIL/PIL 选项卡上,点击监控信号。从库中,选择以下选项:
记录所选信号
将所选信号设为测试点
信号记录
要记录状态数据,从监控信号库中,选择状态记录。
如果语言配置参数是 C++,代码接口打包是 C++ 类,则在代码映射编辑器中,将信号、状态和内部数据模型元素类别的数据可见性设置为公共。
如果您正在配置 SIL 仿真,指定可移植字长选项。然后,您可以在 SIL 和 PIL 模式之间无缝切换。在“配置参数”对话框中,选中启用可移植字长复选框。
如果需要,配置以下各项:
在运行部分的停止时间字段中,指定仿真时间。
点击运行 SIL/PIL。
仿真结束时,在结果部分中,点击数据检查器以查看仿真结果。
注意
在 Windows® 操作系统上,Windows 防火墙可能会阻止 SIL 或 PIL 仿真。要允许仿真,请使用“Windows 安全警报”对话框。例如,在 Windows 7 中,点击允许访问。
您不能:
在仿真正在运行时关闭模型。要中断仿真,请在命令行窗口中,按 Ctrl+C 键。
在仿真期间更改模型。只要移动模块和信号线不更改模型的行为,就可以移动它们。
您可以使用命令 sim(
运行顶层模型 SIL 或 PIL 仿真。软件支持对值 model
)'base'
使用 sim
命令选项 SrcWorkspace
。
对于 PIL 仿真,您可以通过连接配置来控制代码在目标环境中编译和执行的方式。
使用 Model 模块进行仿真
要为 SIL 或 PIL 仿真配置 Model 模块,请执行下列步骤:
打开您的模型,例如
SILModelBlock
:openExample('ecoder/SILPILVerificationExample', ... supportingFile='SILModelBlock.slx')
右键点击您的 Model 模块,例如
Counter A
。在上下文菜单中,选择模块参数(ModelReference),打开“函数模块参数”对话框。从仿真模式下拉列表中,选择所需的模式,例如软件在环(SIL)。
从代码接口下拉列表中,指定要测试的代码,例如模型引用。
点击确定。软件将仿真模式显示为模块标签。
如果您选择顶层模型,软件将显示模块标签
(SIL: Top)
。如果您正在配置 SIL 仿真,指定可移植字长选项。然后,您可以在 SIL 和 PIL 模式之间无缝切换。在“配置参数”对话框中,选中启用可移植字长复选框。
在 App 选项卡上,点击 SIL/PIL 管理器。
在模式部分中,选择仅 SIL/PIL 仿真。
在准备部分中,将在测系统设置为 SIL/PIL 模式下的 Model 模块。
在顶层模型模式字段中,选择普通或加速。
如果需要,配置以下各项:
通过为顶层模型配置执行探查,为您的 Model 模块配置代码执行探查。
在运行部分中:
在停止时间字段中,指定仿真时间。
如果您要避免在初始编译后重新编译代码,请点击快速重启。请参阅防止在多个仿真中更改代码。
点击运行 SIL/PIL。
仿真结束时,在结果部分中,点击数据检查器以查看仿真结果。
注意
在 Windows 操作系统上,Windows 防火墙可能会阻止 SIL 或 PIL 仿真。要允许仿真,请使用“Windows 安全警报”对话框。例如,在 Windows 7 中,点击允许访问。
对于 PIL 仿真,您可以通过连接配置来控制代码在目标环境中编译和执行的方式。
使用子系统模块进行仿真
您可以使用以下工作流之一:
已设置 SIL/PIL 管理器的 Simulink Test™ 框架 - 如果您的模型包含子系统,您可以使用 Simulink Test 和 SIL/PIL 管理器对从子系统生成的代码执行单元测试。此工作流测试生成的子系统代码,将其作为从父模型生成的代码的一部分。有关工作流的详细信息,请参阅使用 SIL/PIL 管理器的单元测试子系统代码。
如果此工作流不支持子系统,请使用 SIL 或 PIL 模块工作流作为替代方案。
SIL 或 PIL 模块 - 从子系统创建一个 SIL 或 PIL 模块,然后在提供测试向量或激励输入的环境或测试框架模型中运行该模块。此工作流从子系统中生成并测试新独立代码。有关详细信息,请参阅SIL 或 PIL 模块仿真。
对于 PIL 仿真,您可以通过连接配置来控制代码在目标环境中编译和执行的方式。
SIL 或 PIL 模块仿真
要从子系统创建 SIL 或 PIL 模块并使用此模块测试从子系统生成的代码,请执行下列步骤:
从配置参数 > 代码生成 > 验证 > 高级参数 > 创建模块下拉列表中,选择 SIL 或 PIL。
如果需要,配置代码执行探查。
点击确定。
在模型窗口中,右键点击要仿真的子系统。
选择 C/C++ 代码 > 编译此子系统,这将启动子系统编译流程,为生成的子系统代码创建 SIL 或 PIL 模块。
将生成的模块添加到提供测试向量或激励输入的环境或测试框架模型中。
使用环境或测试框架模型运行仿真。
注意
在 Windows 操作系统上,Windows 防火墙可能会阻止 SIL 或 PIL 仿真。要允许仿真,请使用“Windows 安全警报”对话框。例如,在 Windows 7 中,点击允许访问。
如果您执行以下操作之一,则无法创建 SIL 或 PIL 模块:
禁用
CreateSILPILBlock
属性。选择代码覆盖率工具。
创建模块呈灰显状态。
组件的日志信号
SIL 和 PIL 组件输出可用于观测值和与其他仿真模式输出进行比较。如果您要检查内部信号,可以启用顶层模型或 Model 模块 SIL 或 PIL 的内部信号记录。使用信号记录,您可以:
在 SIL/PIL 仿真期间收集信号记录输出,例如
logsout
。记录 SIL/PIL 组件的内部信号和根级输出。
使用 Simulink 信号记录选择器管理 SIL/PIL 信号记录设置。
使用仿真数据检查器可以:
观测普通、SIL 和 PIL 仿真期间的流式传输信号。
比较普通、SIL 和 PIL 仿真的记录信号。
在 SIL 或 PIL 仿真期间,要将信号记录到 MATLAB® 工作区并将信号流式传输到仿真数据检查器,请执行下列步骤:
对于您要监控的每个信号:
在 Simulink 编辑器中,选择该信号。
在 SIL/PIL 选项卡上,点击监控信号。从库中,选择以下选项:
记录所选信号
将所选信号设为测试点
信号记录
如果语言配置参数是 C++,代码接口打包是 C++ 类,则在代码映射编辑器中,将信号、状态和内部数据模型元素类别的数据可见性设置为公共。
您可以使用其他方法来检查 SIL 或 PIL 组件的内部信号:
手动将信号传送到顶层。
使用全局数据存储来访问内部信号:
在组件内部,将 Data Store Write 模块连接到所需的信号。
在组件外部,使用 Data Store Read 模块访问信号值。
使用 MAT 文件记录。请注意:
MAT 文件记录不支持信号记录。如果启用信号记录,则会生成
logsout
,但它不会存储在 MAT 文件中。对于 PIL,目标环境必须支持 MAT 文件记录。
有关详细信息,请参阅:
防止在多个仿真中更改代码
当您要在如下情形下运行多个 SIL 或 PIL 仿真,可配置使用 Model 模块 SIL/PIL 或 SIL/PIL 模块并采用快速重启模式:
使用变化的测试向量(参数集和输入数据)。
使用未更改的生成代码,也就是说,在初始编译后,没有任何仿真重新生成或重新编译代码。例如,您要避免初始值更改可能触发的增量代码生成。
对于 Model 模块 SIL/PIL,您也可以使用以下方法之一:
在您的测试框架模型中,在“配置参数”对话框中,将重新编译设置为从不。如果 Model 模块的代码接口参数为模型引用,则软件不会重新编译引用的模型代码。(如果代码接口参数为顶层模型,软件将忽略重新编译设置。)
创建一个受保护模型并生成源代码或二进制代码。然后,将受保护模型插入到您的测试框架模型中。使用这种方法,您可以验证顶层模型代码(使用独立代码接口)或模型引用代码。
对于运行 Model 模块 SIL/PIL 的替代方法,下表总结了初始编译后的代码生成行为。
SIL 和 PIL 方法 | 初始编译后的代码生成行为 | |
---|---|---|
Model 模块 | 测试框架模型的重新编译配置参数设置为从不。 |
|
Model 模块(受保护模型) | 受保护模型的源代码。 | 除了特征 2 之外,您观测到相同的行为。在这种情况下,会运行组件代码联编文件。组件代码会重新编译并链接以生成新目标代码。 |
受保护模型的二进制代码。 | 您观测特征 1-4。 |
有关详细信息,请参阅:
加速测试
如果您的模型在 SIL/PIL 模式下有 SIL/PIL 模块或 Model 模块,您可以通过以下方式加速 SIL/PIL 测试:
注意
SIL 和 PIL 仿真模式不是为了减少模型仿真时间而设计的。如果您要加快模型的仿真速度,请使用快速加速模式。有关详细信息,请参阅 What Is Acceleration?。
使用函数调用进行仿真
当您要执行以下操作时,请使用 Simulink Function 模块:
生成对外部代码(例如驱动程序或现有代码)进行函数调用的代码。
提供其行为类似于普通、SIL 或 PIL 仿真中的外部代码的子系统。
Configure Calls to AUTOSAR NVRAM Manager Service (AUTOSAR Blockset)中的示例说明如何配置从 AUTOSAR 软件组件对 Basic Software (BSW) NVRAM Manager (NvM) 服务接口的客户端进行调用。在仿真中,Simulink 通过 Simulink Function 和预配置的 Function Caller 模块实现 BSW NvM 调用。对于最终系统,请将函数调用桩件与在 AUTOSAR 运行时环境 (RTE) 中运行的外部 BSW 函数代码链接起来。
有关详细信息,请参阅Simulink Function Blocks and Code Generation。
相关主题
- SIL 和 PIL 仿真
- 选择 SIL 或 PIL 方法
- Create PIL Target Connectivity Configuration for Simulink
- 用 SIL 和 PIL 仿真测试生成的代码
- Configure Code Coverage with Third-Party Tools
- Create Execution-Time Profile for Generated Code
- View SIL and PIL Files in Code Generation Report
- SIL/PIL Manager Verification Workflow
- 以编程方式运行仿真
- Simulation Mode Override Behavior in Model Reference Hierarchy
- SIL and PIL Limitations