主要内容

SIL和PIL模拟

什么是SIL和PIL模拟?

使用嵌入式编码器®,您可以运行模型的软件循环(SIL)和循环(PIL)模拟的循环(PIL)模拟。这些模拟为模型的顶部模型或部分生成源代码。SIL模拟编译并在开发计算机上运行生成的代码。PIL模拟交叉编译开发计算机上的源代码,然后在目标处理器或等效指令集模拟器上下载并运行对象代码。

使用SIL和PIL模拟,您可以:

  • 测试您的模型和生成的代码是否在数字上等效。

  • 观察代码覆盖率。

  • 执行代码执行分析。

为什么使用SIL和PIL

通过SIL和PIL,您可以提前测试和修复缺陷。例如,您可以在正常模式下模拟和测试系统组件。然后,您可以在运行已编译的生成代码的SIL或PIL模拟中重用测试套件。要检查数值等价,可以比较正常和SIL或PIL模拟结果。你不必离开Simulink金宝app®在单独的基础架构上测试生成的代码的环境。

此表描述了您可以使用SIL和PIL的情况。

情况
通过重用用于正常模式仿真的测试向量来测试模型和生成代码之间的数值等效,以验证生成(或遗留)代码的数值输出。看SIL / PIL Manager验证工作流程测试两个等效模拟(金宝appSimulink测试) SIL和PIL.

收集生成代码的度量:

SIL和PIL.

(需要A.IEC认证工具包执照。)

根据ISO 26262-6,IEC 61508-3,IEC 62304,EN 50128和EN 50657功能安全标准所定义的整体软件安全生命周期的要求,根据所生成的C / C ++代码执行验证和验证活动。有关SIL和PIL验证活动的详细信息IEC认证工具包基于模型的设计工作流程,查看参考工作流嵌入式C/ c++应用程序certkitiec_ecoder_workflow.docx / pdf)文物中的文物工件的探险家(IEC认证套件)

SIL和PIL.

(需要A.做资格套件执照。)

测试集成过程的输出,以满足DO-178C和DO-333安全标准中的相关目标。有关其他信息,请参阅对集成过程输出的测试(做资格套件)。此信息也可用DO-178C的模型设计工作流程qualkitdo_do178_workflow.pdf.)文物中的文物工件的探险家(做资格套件)

SIL和PIL.
没有目标硬件,获得一个方便的PIL替代品。 SIL

具有目标硬件,例如,评估板或指令集模拟器:

  • 验证特定于目标代码的行为,例如代码替换优化和遗留代码。看什么是代码更换?什么是代码替代定制?

  • 优化代码的执行速度和内存占用空间。在此表中,请参阅收集执行分析和堆栈分析指标的信息。

  • 研究编译器设置和优化的影响,例如偏离ANSI®C溢出的行为。

正常仿真技术不考虑硬件施加的限制和要求,例如目标特定优化代码的有限内存资源或行为。


有关在特定目标上运行PIL模拟的信息,请参阅样本定制目标

pil

笔记

SIL和PIL仿真模式不设计用于减少模型模拟时间。如果要加快模拟模拟,请使用快速加速器模式。有关更多信息,请参阅什么是加速?

SIL和PIL模拟如何工作

在SIL或PIL模拟中,为模型的顶部模型或部分生成代码。使用SIL,在您的开发计算机上编译和执行此代码。使用PIL,代码为目标硬件交叉编译,并在目标处理器上运行。

通过通信信道,Simulink将刺激信号发送到计算机上的代码或针对金宝app模拟的每个采样间隔的目标处理器。

  • 对于顶级模型,Simulink使用金宝app来自基础或模型工作空间的刺激信号。

  • 如果您只指定了模型的模型的一部分来模拟SIL或PIL模式,那么模型的一部分保留在Simulink中,并且不会为模型的这一部分生成代码。金宝app通常,您可以配置模型的这一部分,以提供用于在硬件上执行的软件的测试向量。该模型的这一部分可以代表算法的其他部分或算法操作的环境。

当您的计算机或目标处理器接收到来自Simulink的信号时,处理器执行一个示例步骤的SIL或PIL算法。金宝appSIL或PIL算法通过通信通道将此步骤中计算的输出信号返回给Simulink。金宝app仿真的一个样本周期完成后,Simulink继续进行下一个样本周期。金宝app这个过程不断重复,模拟过程不断进行。SIL和PIL模拟不会实时运行。在每个样本周期,Simulink和目标代码交换金宝appI/O数据。

SIL和PIL模拟的比较

SIL或PIL模拟的类型 SIL模拟中发生了什么 PIL模拟发生了什么

通过:

  • 顶级模特模拟模式

  • 模型堵塞模拟模式参数

  • 在开发计算机上测试生成的源代码的行为。仿真不会测试针对目标硬件编译的代码,因为代码是针对开发计算机编译的(与目标不同的编译器和处理器体系结构)。

  • 在开发计算机上编译和执行的生成生产代码作为单独的过程,与MATLAB无关®的过程。

  • 执行是主机/主机和非实时。

  • 测试对象代码您打算在实际目标硬件或指令集模拟器上部署在生产中。

  • 在开发计算机上,为目标生成交叉编译的产品代码。目标代码下载并在目标处理器或指令集模拟器上执行。

  • 执行是主机/目标和非实时的。

使用从子系统创建的SIL或PIL块。
  • 仿真通过s函数运行编译后的目标代码。函数与在开发计算机上作为独立应用程序执行的目标代码进行通信。SIL块的执行独立于MATLAB程序。

  • 执行是主机/主机和非实时。

  • 模拟通过开发计算机上的S函数运行交叉编译的对象代码。S函数与在目标处理器或指令集模拟器上以独立应用程序执行的对象代码进行通信。

  • 执行是主机/目标和非实时的。

SIL和PIL的代码界面

当您执行单击单击或右键单击子系统构建时,您会生成独立代码。您可以将独立代码编译和链接到独立可执行文件或与其他代码集成。有关独立代码界面的更多信息,请参阅配置模型入口点函数的C代码生成

当您为引用的模型层次结构生成代码时,软件会为顶层模型和名为a的库模块生成独立的可执行代码模型参考目标对于每个引用的模型。当代码执行时,独立的可执行文件调用适用的模型引用目标以计算引用的模型输出。有关更多信息,请参阅建立模型参考目标

要将生成的代码与遗留代码集成,请使用独立代码,因为记录了独立代码接口。

笔记

SIL和PIL模拟不提供对自定义代码接口的直接支持。金宝app你可以将这些接口作为s函数合并到Simulink中,例如,使用遗留代码工具,金宝apps函数生成器或手写代码。然后,您可以使用SIL和PIL仿真验证自定义代码。

此表提供了SIL和PIL仿真生成的接口。

银/公益诉讼模拟 代码界面
超模

SIL/PIL模拟生成独立的代码接口。如果代码存在,模拟调用模型的独立代码。如果代码不存在,模拟将生成独立的代码。

模型堵塞

如果你设置了代码界面块参数到超模,SIL / PIL仿真生成独立代码接口。模拟如果存在模型,请调用独立代码。否则,模拟通过使用来生成独立代码SLBUILD('模型')命令。

如果你设置了代码界面块参数到模型参考, SIL/PIL仿真生成模型参考代码接口。的仿真调用模型参考目标模型如果存在,则块。否则,仿真通过使用生成模型参考目标SLBUILD('模型','modelReferenceCodertargetonly')命令。

SIL或Pill块 块使用独立代码接口。

调度考虑因素

信息
代数循环

SIL和PIL模拟中出现的代数循环,但不在正常模式模拟中:

  • 单输出/更新功能在代码生成中,优化可以引入代数循环,因为该选项通过组合输出和更新函数引入了直接馈通。

    单输出/更新功能不兼容最小化代数循环的发生(在子系统参数对话框中,配置参数>模型引用窗格)。最小化代数循环的发生允许代码生成通过在输出和更新功能之间分区生成的代码来删除代数循环,以避免直接馈通。

  • 如果为虚拟子系统生成代码,则代码生成将子系统视为原子系统并相应地生成代码。生成的代码可以通过应用代数循环来更改模型的执行行为,并将不一致的模拟行为引入。

    要为模型启用一致的仿真和执行行为,请将虚拟子系统声明为原子子系统。

有关更多信息,请参阅:

导出反馈循环中的功能

如果您的模型有函数调用子系统,并且您导出了一个具有上下文相关输入(例如,反馈信号)的子系统,那么使用生成的代码进行SIL/PIL模拟的结果和模型的正常模式模拟的结果可能会不同。一种方法使SIL/PIL和正常模式模拟产生相同的结果是使用函数调用反馈锁模型中的块。您可以使上下文相关的输入变得无关。

如果设置该嵌入式编码器,则生成标识导出的函数调用子系统的上下文依赖性输入的警告上下文相关的输入配置参数之一:

  • 启用所有为警告

  • 使用本地设置

  • 禁用所有

有关更多信息,请参阅:

导入的数据和函数定义

导入数据

在SIL和PIL模拟中,您可以使用信号、参数和数据存储来指定具有导入数据定义的存储类。模拟定义与以下相关的导入数据的存储:

  • 在组件的根级别(在I / O边界)处的信号。

  • 基础工作区或数据字典中的参数。对于模型工作区中的参数:

    • 顶级SIL / PIL和SIL / Pill Block模拟定义存储。

    • 模型块SIL / PIL仿真不会定义存储。您必须定义存储并指定与MATLAB值匹配的初始值。

  • 全球数据存储。

SIL和PIL仿真不会为其他导入数据定义存储。例如,模拟未定义与相关联的导入数据的存储:

  • 内部信号(不在I/O边界上)

  • 本地数据商店

在这些情况下,通过经过测试的组件或通过PIL包括的分量包括的自定义代码来定义存储RTW.PIL.RtiostreamApplicationFrameWork.API。

也可以看看可调参数和SIL/PIL

GetSet自定义存储类

SIL和PIL模拟支持金宝appGetSet自定义存储类。SIL/PIL测试线束提供C定义得到模拟期间使用的功能。有关更多信息,请参阅通过使用存储类GetSet的函数访问数据

类型的自定义存储类其他

为自定义存储类启用SIL和PIL支持金宝app类型被设置为其他,为自定义存储类创建自定义属性类,并将自定义属性类与布尔属性关联,金宝appSupportSILPIL, 设置真的

< Simulink. classdef CSCOtherA金宝appttributesCustomStorageClassAttributes properties(PropertyType = 'logical scalar') SupportSILPIL = true; end end

有关自定义属性的详细信息,请参阅通过编写TLC代码进一步自定义生成的代码通过为存储类编写TLC代码精细控制数据表示

要构建SIL或PIL应用程序界面,代码生成器调用dataaccess.ClassAccess.关联的自定义TLC文件中的函数以获取所需信息。代码生成器存储在构建文件夹中构建工件中的提取信息。

对于未分组的自定义存储类:

  • 代码生成器调用dataaccess.使用请求参数取值定义宣布布局内容地址, 或者

  • 代码生成器使用返回的字符串dataaccess(记录,“定义”,“,”,“)如果其中一个是真的,则在SIL或PIL应用程序中定义变量:

    • 信号或参数有一个进口数据范围。

    • 该模型使用模型参考代码接口。

    • 该模型使用顶级模型代码界面,EnabledataOndhipership.,而且所有者属性不为空且不等于当前模型的名称

  • 代码生成器使用返回的字符串DataAccess(record, "declare", "", "")要在SIL或PIL应用程序中声明变量,如果以下是真的:

    • 该模型使用顶级模型代码界面。

    • 信号或参数使用出口存储类。

    • EnabledataOndhipership.离开, 或者EnabledataOndhipership.所有者自定义存储类的属性为空或等于模型名称。

    • 将代码打包配置为不声明变量模型。H或包含的标题文件模型。H

对于分组的自定义存储类:

  • 代码生成器调用dataaccess.与之请求论证价值布局地址, 或者

  • 代码生成器调用ClassAccess.与之请求论证价值grouptypedecldefn.

  • 您必须提供分组类型(塑造)定义和外部如果其中一个为真,则声明分组变量:

    • 信号或参数有一个进口数据范围。

    • 该模型使用模型参考代码接口。

    • 该模型使用顶级模型代码界面,EnabledataOndhipership.,而且所有者属性不为空且不等于当前模型的名称

    通过使用通过使用该文件在与自定义存储类关联的头文件中提供定义和声明标题文件您包含的属性或自定义代码模型。H文件。要在SIL或PIL应用程序中定义变量,代码生成器使用返回的字符串ClassAccess(记录,“grouptypedecldefn”)

  • 静态初始化的顺序可以是塑造与数据范围是不同的命令不同的元素出口。当代码生成器查询时ClassAccess(记录,“grouptypedecldefn”),它暂时覆盖了具有值的自定义存储类的数据初始化属性没有一个

要确定SIL或PIL应用程序是否可以通过地址访问代码中的变量,代码生成器使用返回的元素dataaccess(记录,“布局”,“”,“)。要在应用程序和目标硬件之间进行传输输入或输出端口,可调谐参数或全局数据存储存储器的应用程序中创建功能,代码生成器使用来自:

  • 数据访问(记录,"address", idx, reim)如果第一个返回的元素是标量子向量划艇, 或者col-mat

  • DataAccess(记录,“内容”,IDX,REIM)(或者数据访问(记录,"set", idx, reim))如果第一个返回的元素是其他

代码生成器假定为划艇col-mat,矩阵分别以行主要格式存储。假设与模型其余部分的数组布局无关。代码生成器假定如果自定义存储类实现的存储器的数组布局与模型的其余部分不同,则与自定义存储文件相关联的TLC文件执行所需的变换。

您可以构建与自定义存储类类型关联的自定义TLC文件其他执行其他函数(除了返回请求的代码片段)。例如,直接写入自定义文件或调用改变基本工作空间状态的MATLAB函数。如果您不总是想执行这些函数时dataaccess.或者ClassAccess.被称为,使用libisaccessingcustomdataforsilpil(记录)TLC函数以区分目标代码生成和对代码片段的请求,以构建SIL或PIL应用程序。例如:

...LibIsAccessingCustomDataForSILPIL(record) %matlab functionWithSideEffects() %endif %return LibDefaultCustomStorageContents(record, idx, reim)…

也可以看看其他自定义存储类限制

AutoSAR运行时环境

您可以使用Top-Model和模型阻止SIL / PIL / Pill块模拟,以执行AutoSAR软件组件的基于模型的测试。该软件链接AutoSAR软件组件的生成代码,具有基本的组件特定的AutoSar Runtime环境(RTE)来创建测试应用程序。此应用程序测试AutoSAR软件组件的AutoSAR API调用。

对于包含引用模型的顶级AutoSAR软件组件,您可以运行Top-Model或模型块(代码界面设置超模)SIL或PIL模拟。在模拟中,软件:

  • 在编译引用模型之前,生成AutoSAR RTE标题文件。

  • 提供RTE包括引用模型编译的路径。

你也可以跑步模型块(代码界面设置模型参考) SIL或PIL模拟的一个参考模型在顶级AUTOSAR SWC。在这种情况下,在运行模拟之前,必须构建父组件来生成RTE头文件。如果不构建父组件,则SIL或PIL模拟将失败。

相关话题