使用嵌入式编码器®,您可以运行您的模型的软件在环(SIL)和处理器在环(PIL)模拟。这些模拟为顶层模型或模型的一部分生成源代码。SIL模拟在您的开发计算机上编译并运行生成的代码。PIL模拟在您的开发计算机上交叉编译源代码,然后下载并在目标处理器或等效指令集模拟器上运行目标代码。
与SIL和PIL模拟,您可以:
测试您的模型和生成的代码在数值上是否等价。
观察代码覆盖率。
执行代码执行分析。
通过SIL和PIL,可以尽早测试和修复缺陷。例如,您可以在普通模式下对系统组件建模和测试。然后,您可以在运行编译生成代码的SIL或PIL模拟中重用您的测试套件。为了检查数值等效性,您比较正常和SIL或PIL模拟结果。你不需要离开Simulink金宝app®环境来测试在单独的基础设施上生成的代码。
这个表描述了你可以使用SIL和PIL的情况。
情况 | 使用 |
---|---|
通过重用为常规模式模拟开发的测试向量来验证生成(或遗留)代码的数值输出,测试模型和生成代码之间的数值等价性。看到SIL/PIL经理验证工作流程和测试两个等效模拟(金宝app仿真软件测试) | 银和公益诉讼 |
收集生成代码的度量:
|
银和公益诉讼 |
达到IEC 61508, IEC 62304, ISO 26262,或DO-178认证。看到IEC认证套件参考工作流程概述(IEC认证套件)和集成过程输出的测试(做资格工具包)。 | 银和公益诉讼 |
没有目标硬件,找一个方便的PIL替代方案。 | 银 |
对于目标硬件,例如评估板或指令集模拟器:
正常的模拟技术不考虑硬件施加的限制和需求,例如有限的内存资源或特定于目标的优化代码的行为。 有关在特定目标上运行PIL模拟的信息,请参阅示例自定义目标(金宝app仿真软件编码器)。 |
公益诉讼 |
SIL和PIL模拟模式不是为减少模型模拟时间而设计的。如果您想加速模型的模拟,请使用快速加速模式。有关更多信息,请参见加速度是什么?(金宝app模型)。
在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块。 |
|
|
例如,当您为单个可部署组件执行顶层模型或右键单击子系统构建时,您将生成独立的代码。您可以将独立的代码编译并链接到独立的可执行文件中,或者将其与其他代码集成。有关独立代码接口的更多信息,请参见配置模型入口点函数的代码生成(金宝app仿真软件编码器)。
当您为引用的模型层次结构生成代码时,软件会为顶层模型和名为a的库模块生成独立的可执行代码模型参考目标对于每个引用的模型。当代码执行时,独立的可执行文件调用适用的模型引用目标来计算引用的模型输出。有关更多信息,请参见建立模型参考目标(金宝app仿真软件编码器)。
要将生成的代码与遗留代码集成,请使用独立代码,因为独立代码接口是有文档记录的。
SIL和PIL模拟不提供对自定义代码接口的直接支持。金宝app你可以将这些接口作为s函数合并到Simulink中,例如,使用遗留代码工具,金宝apps函数生成器,或手写代码。然后,您可以验证自定义代码使用SIL和PIL模拟。
该表提供SIL和PIL模拟生成的接口。
银/公益诉讼模拟 | 代码接口 |
---|---|
顶级模特 | SIL/PIL模拟生成独立的代码接口。如果代码存在,模拟调用模型的独立代码。如果代码不存在,模拟将生成独立的代码。 |
模型块 | 如果你设置代码接口块参数 如果你设置代码接口块参数 |
SIL或PIL块 | 块使用独立的代码接口。 |
项 | 信息 |
---|---|
代数循环 | 在SIL和PIL模拟中有代数循环,但在正常模式模拟中没有:
有关更多信息,请参见:
|
在反馈循环中导出函数 | 如果您的模型有函数调用子系统,并且您导出了一个具有上下文相关输入(例如,反馈信号)的子系统,那么使用生成的代码进行SIL/PIL模拟的结果和模型的正常模式模拟的结果可能会不同。一种方法使SIL/PIL和正常模式模拟产生相同的结果是使用函数调用反馈锁块在您的模型中。您可以使上下文相关的输入变得上下文无关。 如果设置函数调用子系统的上下文相关输入,嵌入式编码器将生成警告上下文相关的输入配置参数为以下之一:
有关更多信息,请参见:
|
在SIL和PIL模拟中,您可以使用信号、参数和数据存储来指定具有导入数据定义的存储类。模拟定义与以下相关的导入数据的存储:
组件的根级别(在I/O边界上)的信号。
基本工作空间或数据字典中的参数。对于模型工作区中的参数:
顶级模型SIL/PIL和SIL/PIL块模拟定义存储。
模型块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
函数来获取所需的信息。代码生成器将提取的信息存储在构建文件夹中的构建构件中。
对于未分组的自定义存储类:
代码生成器调用DataAccess
请求参数的值为定义
,声明
,布局
,内容
,地址
,或集
.
代码生成器使用返回的字符串DataAccess(记录,“定义”,“”,“”)
在SIL或PIL应用程序中定义变量,如果其中一个为真:
信号或参数具有进口
数据范围。
模型使用模型引用代码接口。
模型使用顶级模型代码接口,EnableDataOwnership
是在
,老板
属性不为空且不等于当前模型的名称
代码生成器使用返回的字符串DataAccess(record, "declare", "", "")
如果以下情况属实,可以在SIL或PIL申请中声明变量:
模型使用顶级模型代码接口。
信号或参数使用出口
存储类。
EnableDataOwnership
是从
,或EnableDataOwnership
是在
和老板
属性为空或等于模型名称。
将代码打包配置为不声明变量
或包含的头文件模型
.h模型
.h
对于分组的自定义存储类:
代码生成器调用DataAccess
与请求
取值的论证布局
,地址
,或集
.
代码生成器调用ClassAccess
与请求
参数的值groupTypeDeclDefn
.
必须提供分组类型(结构体
)定义及走读生
如果其中一个为真,则声明分组变量:
信号或参数具有进口
数据范围。
模型使用模型引用代码接口。
模型使用顶级模型代码接口,EnableDataOwnership
是在
,老板
属性不为空且不等于当前模型的名称
属性在与自定义存储类关联的头文件中提供定义和声明HeaderFile
属性或自定义代码,通过
文件。要在SIL或PIL应用程序中定义变量,代码生成器使用返回的字符串模型
.hClassAccess(记录,“groupTypeDeclDefn”)
.
静态初始化的顺序可以是结构体
如果数据范围为,则与生成的顺序不同的元素出口
.当代码生成器查询时ClassAccess(记录,“groupTypeDeclDefn”)
,它临时用该值覆盖自定义存储类的数据初始化属性没有一个
.
为了确定SIL或PIL应用程序是否可以通过地址访问代码中的变量,代码生成器使用DataAccess(记录,"布局","","")
.为了在应用程序中创建在开发计算机和目标硬件之间传输输入或输出端口、可调参数或全局数据存储内存值的功能,代码生成器使用以下输出:
数据访问(记录,"address", idx, reim)
如果第一个返回的元素是标量
,向量
,row-mat
,或col-mat
.
datataccess (record, "contents", idx, reim)
(或数据访问(记录,"set", idx, reim)
),如果第一个返回的元素是其他
.
代码生成器假设forrow-mat
和col-mat
,矩阵分别以行主格式存储。该假设独立于模型其余部分的数组布局。代码生成器假设,如果由自定义存储类实现的存储的数组布局不同于模型的其余部分,那么与自定义存储文件关联的TLC文件将执行所需的转换。
您可以构造与自定义存储类类型相关联的自定义TLC文件其他
执行其他函数(除了返回请求的代码片段)。例如,直接写入自定义文件或调用改变基本工作空间状态的MATLAB函数。如果您不总是想执行这些函数时DataAccess
或ClassAccess
都叫,用LibIsAccessingCustomDataForSILPIL(记录)
TLC函数用于区分目标代码生成和构建SIL或PIL应用程序所需的代码片段请求。例如:
...LibIsAccessingCustomDataForSILPIL(record) %matlab functionWithSideEffects() %endif %return LibDefaultCustomStorageContents(record, idx, reim)…
另请参阅其他自定义存储类限制.
你可以使用顶级模型和模型块SIL/PIL和SIL/PIL块模拟,对AUTOSAR软件组件进行基于模型的测试。该软件将为AUTOSAR软件组件生成的代码与特定于基本组件的AUTOSAR运行时环境(RTE)进行链接,以创建测试应用程序。此应用程序测试由AUTOSAR软件组件进行的AUTOSAR API调用。
对于包含引用模型的顶级AUTOSAR软件组件,您可以运行top-model或模型块(代码接口设置为顶级模特
SIL或PIL模拟。在模拟中,软件:
在编译引用模型之前,生成AUTOSAR RTE头文件。
为引用的模型编译提供RTE包含路径。
你也可以跑步模型块(代码接口设置为模型参考
) SIL或PIL模拟的一个参考模型在顶级AUTOSAR SWC。在这种情况下,在运行模拟之前,必须构建父组件来生成RTE头文件。如果不构建父组件,则SIL或PIL模拟将失败。