使用嵌入式编码器®,您可以以三种方式运行软件在环(SIL)和处理器在环(PIL)模拟:
Top-model SIL/PIL -设置Top-model模拟模式为Software-in-the-Loop(银)
或处理器 - 循环(PIL)
。
模型block SIL/PIL -设置模型块参数模拟模式到软件循环(SIL)
或Processor-in-the-loop(公益诉讼)
。
SIL/PIL块-在模型中使用SIL或PIL块。
以下部分描述了SIL和PIL仿真的不受支持或部分支持的建模和代码生成功能。金宝app
为模型块SIL/PIL和SIL/PIL块模拟,您可以调可调工作区参数,但不可调优对话框参数。有关调优参数的信息,请参见调整和实验块参数值(金宝appSimulink)。
对于具有可调参数的顶级模型,您可以运行SIL/PIL模拟,但不能在模拟期间调优参数。
软件无法定义、初始化或优化以下类型的可调工作区参数。
参数描述 | 软件响应 | ||
---|---|---|---|
顶级模特SIL /公益诉讼 | 模型块硅/公益诉讼 | 银/公益诉讼块 | |
参数与应用的存储类“静态” 范围或“常量” 关键词。例如,自定义 ,常量 ,或ConstVolatile |
警告 | 警告 | 警告 |
具有多字、定点数据类型的参数 | 警告 | 错误 | 警告 |
在主机和目标上具有不同大小的数据类型的参数 | 警告 | 错误 | 警告 |
对于C ++类代码,SIL / PIL您可以调谐可调工作区参数参数的可见性是公共
。如果参数的可见性是私人
或受保护的
,只有当金宝app参数访问是方法
或内联方法
。
对于顶级SIL / PIL / PIL和SIL / PIL块,请考虑以下所有条件适用的情况:
代码生成>接口>代码接口包装是可重复使用的功能
。
代码生成>接口>使用动态内存分配进行模型初始化未选择。
优化>默认参数的行为是调节
。
在模型的代码映射编辑器中全局参数或本地参数类别设置为默认
,该模型包含使用存储类的相应参数汽车
或模型默认值
。
中,如果SIL/PIL组件不能动态初始化可调参数rtP
模型参数结构,您可以看到如下所示的错误消息:
参数对话框:'rtwdemo_sil_topmodel/CounterTypeA/count'中的InitialOutput是生成代码中导入的' rtP '结构的一部分,但不能由SIL或PIL初始化。要避免此错误,请确保参数对应于可调工作区变量。或者,将“Configuration Parameters > Code Generation > Interface > Code Interface package”设置为“nonreuse function”,或者在“Configuration Parameters”对话框中搜索“Use dynamic memory allocation for model initialization”并选中复选框。
为模型block SIL/PIL,如果你指定代码接口成为超模
,您可以在模拟运行时调优参数。如果您在模拟的连续运行之间优化参数,软件将为以后的运行生成新的代码。新代码使用最新设置作为初始参数值。
为顶级模特或模型块SIL / PIL,如果更改MATLAB的值®变量或参数对象(例如金宝appSimulink.Parameter.
)存储在工作区中,金宝app®编码器™重新生成C代码。
模型块SIL / PIL不支持测试线束数据定义,动金宝app态初始化或模型工作区参数的调整。
SIL/PIL支金宝app持全球数据存储。对于不是出口功能模型的组件,访问全局数据存储的顶级SIL/PIL和SIL/PIL块模拟必须是单一速率的。否则,软件将产生错误。
SIL / PIL不支持本地数据存金宝app储。
模型块SIL / PIL不支持本地金宝app数据存储内存具有这些参数设置的块:
跨模型实例共享——选择。
存储类- - - - - -汽车
或模型默认值
。
您无法从使用本地的模型中创建SIL / Pill块数据存储内存块跨模型实例共享参数选择。
SIL / PIL没有检查金宝appSimulink编码器生成的测试代码的错误状态。这个错误状态标记了在执行生成的代码期间的异常情况。
块在模型中也可以设置金宝appSimulink编码器错误状态,例如,您创建的自定义块。SIL/PIL不检查此错误状态并报告错误。
SIL/PIL需要一个代码接口描述文件,该文件是在测试组件的代码生成过程中创建的。如果代码接口描述文件丢失,则SIL/PIL模拟无法进行。您看到一个错误报告该文件不存在。如果您选择了不支持的选项金宝app经典调用界面,可能发生此错误。因此,请勿选择选项。
如果您启用垫文件日志记录,Top-Model SIL / PIL和SIL / PIL块支持金宝app到工作区块。
模型block SIL/PIL不支持金宝app到工作区块。
如果连接模型块SIL / PIL / PIL块输出到a合并块,您看到一个错误,因为s函数内存是不可重用的。
顶级模型SIL/PIL和SIL/PIL块模拟不支持跨组件边界的变体条件传播。金宝app
SIL/PIL不支持以下区块:金宝app
范围块,以及所有类型的运行时显示。例如,显示端口值和信号值。
停止块。银/公益诉讼忽略了停止模拟阻塞并继续模拟。
您不能对具有跨组件边界的多字、定点信号的模型运行SIL和PIL模拟。
SIL/PIL支金宝app持32位以上的定点数据类型。例如:
64位长
和长长
64位执行分析定时器数据类型
INT64.
和uint64
在Matlab编码器SIL)执行。
以下约束适用:
对于64位数据类型支持,数据类型必须表示为金宝app长
或长长
在MATLAB主机上和目标。否则,软件使用多字,固定点方法,SIL / PIL不支持。金宝app
该软件不支持40位金宝app长
数据类型的TI的C6000™目标。
通过配置>硬件实现窗格,您可以支持64位的支持金宝app长长
数据类型。对于宽度在33位到40位之间的数据类型,软件使用40位来实现数据类型长
数据类型,SIL/PIL不支持。金宝app
该软件不支持为内置数据类型定义的替换数据类型金宝app名称布尔
如果这些名字映射到int
或使用uint
内置数据类型。
顶级SIL/PIL和SIL/PIL块不支持在SIL或PIL组件边界连续取样次数。金宝app但是,它们支持组件内连续的采金宝app样时间。
模型块SIL / PIL不支持连续采样时间。金宝app
模型块SIL/PIL模拟支持可变大小的信号,只有当金宝app诊断>模型参考>传播可变尺寸信号的大小是在执行期间
。
Top-model SIL/PIL和SIL/PIL块模拟将SIL/PIL组件I/O边界的变大小信号视为固定大小信号,这可能导致信号大小传播时的误差。为了避免这种错误,只在SIL/PIL组件的I/O边界使用固定大小的信号。
在信号大小传播过程中可能不会发生错误。在这些情况下,软件将可变大小的输入信号视为零大小的信号。
SIL/PIL块不支持信号记录。金宝app为了解决这个问题,请看日志组件内部信号。
以下内部信号测井限制适用于顶级模型和模型阻止SIL / PIL模拟。
局限性 | 适用于 | |
---|---|---|
顶级模特SIL /公益诉讼 | 模型块硅/公益诉讼 | |
在SIL/PIL模拟期间,只有包含在C API中的信号被记录。要观察生成代码中的信号,可以将信号配置为测试点。对于每个信号,选择信号属性>测试点复选框。 |
是的 | 是的 |
不支持在正常仿真中记录的信号馈送合并块,但是以SIL / PIL模式记录。金宝appSIL / PIL期间的记录值与Merge块输出的记录值相同。 | 是的 | 没有 |
在这些情况下,Top-model正常模拟日志数据以周期性速率,但Top-model SIL/PIL模拟日志数据以恒定速率:
避免此行为并以所有模拟模式的常量速度记录,设置默认参数的行为到 |
是的 | 没有 |
功能不支持:金宝app
|
是的 | 是的 |
不支持可变大小、函数调用和动作信号。金宝app正常的模拟会产生错误。SIL/PIL模拟产生一个警告。 |
是的 | 没有 |
不支持状态端口信号。金宝app正常的模拟会产生错误。SIL / PIL模拟不会产生警告。 |
是的 | 没有 |
其他
银/公益诉讼模拟金宝app支持自定义存储类类型被设置为其他
。这些限制适用:
如果与自定义存储类关联的TLC文件返回的代码片段不完整,则SIL / PIL应用程序可能无法编译,或产生不正确的结果。
自定义存储类与进口
范围和指针
支持访问,但必须提供代金宝app码来初始化指针。例如,可以将响应修改为dataaccess(记录,“定义”,“,”,“)
要提供存储实现的定义,并将指针初始化到实现变量的地址。
来确定一个变量是否为const
因此,不可调谐,SIL / Pil应用程序的构建过程使用自定义存储类中的内存部分定义。如果自定义存储类定义了变量const
和a没有关联const
内存部分,目标应用程序可能无法编译,或在模拟期间产生错误。在这种情况下,将自定义存储类与内存部分关联是常量
例如,指定了,MemConst
。或者,如果金宝appSupportSILPIL
是Custom属性类中的实例特定参数,用于关联信号或参数,设置coderinfo.customattributes.金宝appsupportsilpil.
到假
。
如果使用SIL / PIL不支持的数据存储,信号或参数实现,则可以看到如下所示的错误:金宝app
下列数据界面有不被SIL或PIL支持的实现。金宝app
数据界面
可以是全球数据存储,inports.
,出口
,或参数
。
通过虚拟输出端口优化优化了模型输出端口。看虚拟化输出端口优化。错误发生的原因是进入虚拟根输出端口的信号或信号的属性(例如,数据类型,尺寸)被修改了,通过以下方式路由信号:
通过A.Mux块。
通过改变信号数据类型的块。要检查模型中数据类型的一致性,请通过选择来显示端口数据类型展示>信号和港口>端口数据类型(见端口数据类型(金宝appSimulink))。
通过改变信号尺寸的块。要检查模型中数据类型的一致性,请通过选择显示尺寸展示>信号和港口>信号的维度。
PIL不支持字序与目标字节金宝app序不同的多字数据类型。PIL模拟失败,显示未定义的行为。
PIL要求您配置正确的硬件实现目标环境的设置,包括针对目标的字节排序。如果未指定正确的字节排序,则PIL模拟失败,显示未定义的行为。
如果当前工作文件夹的名称包含非ascii字符,则不能运行SIL模拟。
SIL / PIL不支持金宝app状态日志(金宝appSimulink)。
如果通过导入的头文件将金宝appSimulink总线元素映射到位字段,则SIL或PIL模拟会产生构建错误。例如,如果您的模型有一个inport.连接到总线的块金宝appsimulink.bus.
对象的这些属性:
姓名- - - - - -mybus.
总线的元素-数组金宝appsimulink.busement.
对象的这些属性。
姓名 | 数据类型 | 复杂性 | 维 |
---|---|---|---|
位菲尔德0. |
布尔 |
真实的 |
1 |
BitField1. |
布尔 |
真实的 |
1 |
BitField2. |
布尔 |
真实的 |
1 |
位菲尔德3. |
布尔 |
真实的 |
1 |
位菲尔德4. |
布尔 |
真实的 |
1 |
位菲尔德5. |
布尔 |
真实的 |
1 |
数据范围- - - - - -进口
标题文件- - - - - -busspecification.h.
。这个文件包含mybus.
,它为总线元素定义了C位域数据类型。
typedef struct myBus {unsigned int bitField0: 1;unsigned int bitField1: 1;unsigned int bitField2: 1;unsigned int bitField3: 1;unsigned int bitField4: 1;unsigned int bitField5: 1;} myBus;
当Simuli金宝appnk数据类型和相应的目标硬件数据类型大小不同时,SIL或PIL模拟将产生错误。如果您通过导入头文件中的定义将Simulink数据类型映射到目标硬件数据类型,就会发金宝app生这种大小不匹配。例如,如果您创建一个数据类型别名,T_BOOL
,也就是金宝app仿真软件。AliasType
对象的这些属性:
基本类型- - - - - -布尔
。
模式- - - - - -建在
,布尔
。
数据范围- - - - - -进口
。
标题文件- - - - - -mydefinitions.h.
。此文件定义T_BOOL
作为枚举数据类型:
typedef enum _BOOL_TYPE {FALSE = 0, TRUE = 1} BOOL_TYPE;typedef BOOL_TYPE T_BOOL;
T_BOOL
,它可以与Simulink数据类型的大小不同,金宝app布尔
。不能移植到开发计算机上执行的特定于目标的自定义代码可能会在SIL模拟期间产生编译或运行时故障。
例如,SIL不支持使用自定义代码来显式将指针强制转换金宝app为小于开发计算机上指针变量长度的整型变量。考虑使用以下其中一种选择:
运行PIL模拟。
如果您有自定义代码将指向32位整数类型的指向32位整数类型,请设置使用配置为构建32位二进制应用程序的PIL目标连接配置。
顶级SIL/PIL支持连接到根级入口金宝app和出口的信号记录。C API不是必需的。根级别日志记录有以下限制:
Logged数据的特性如数据类型,采样时间和尺寸,必须与根级Inports和Outports的特征相匹配(而不是连接信号的特性)。
在某些情况下,正在记录的信号与连接信号的根导入或输出端口之间的数据类型和维度可能存在差异。考虑下面的例子。
如果记录的信号有矩阵维数[1 x5]
但是连接到信号的输出端口有矢量维数(5
),则在SIL或PIL模拟期间记录的数据具有向量维度(5
)。
如果被记录的信号具有标量尺寸,但连接到信号的出口具有矩阵尺寸(1 x1)
,然后在SIL或PIL模拟期间记录的数据具有矩阵尺寸(1 x1)
。
在SIL/PIL模拟期间,连接到重复导入端口的信号不会被记录。没有发出警告。
在正常的模拟期间,直接连接到重复的导入端口的信号被记录。
信号测井选择器/dataloggingoverride
不支持覆盖机制。金宝app
正常和SIL/PIL模拟日志总线信号的名称不同,当所有以下条件适用:
的保存申款
或签名
配置参数是在
。
总线信号中的元素的名称与总线对象中的相应名称不同。例如,当InheritFromInputs
参数为总线的创造者块设置为“上”
。
软件插入后缀_Wrapper.
为输出日志如果保存格式为结构
或结构随着时间的推移
你运行sim卡
命令,而不指定单次输出格式。软件增加了_Wrapper.
中的信号的块名称你
。如果保存格式为数组
,软件不添加后缀。例如:
>> Yout.Signals ANS =值:[11x1双]尺寸:1标签:'signallogging'blockname:'sillogging_wrapper / outputlogging'
要避免此行为,请使用命令行模拟sim卡
指定单输出格式的命令。看通过编程的方式运行模拟(金宝appSimulink)。
在顶级SIL / PIL仿真中,软件将模型放在编译状态 - 见模型
。此操作可能导致模型和生成的SIL/PIL代码之间的全局资源冲突。在这种情况下,正常模式和SIL/PIL模拟输出之间的差异就会产生。
例如,考虑一个使用来自DSP System Toolbox™的UDP块的模型。这些块打开UDP套接字,这可能导致模型和生成的SIL/PIL代码之间的资源争用。
SIL/PIL不支持回调(模型或块金宝app)StartFcn
和stopfcn.
。
Top-model SIL/PIL支金宝app持回调InitFcn
。
当您启动顶级模型SIL/PIL模拟时,如果它检测到对您的模型的更改,软件将重新生成代码。软件通过使用模型的校验和来检测变化。该软件不会检测您对以下内容所做的更改:
的标题文件
财产的金宝app仿真软件。AliasType
对象
遗产函数
如果您进行这些更改,构建(Ctrl-B.)在开始下一个PIL模拟之前,您的模型再次。
适用的限制如下:
因为模型参数不适用于顶级模型,当代码接口设置块参数为超模
,软件不支持金宝app模型参数块参数。
条件执行不适用于顶级模型。如果一个模型块被设置为有条件执行,而代码接口设置块参数为'超模'
,当您运行SIL或PIL模拟时,软件产生错误。
对于与时间无关的样本模型,必须设置配置参数>解算器>定期采样时间约束到确保样本时间无关
。
你会看到一个错误,如果:
你把你的模型在无条件执行的子系统中,在SIL或PIL仿真模式中,在有条件执行的子系统中和引用的模型是多管的(即,具有多个采样时间)。单速率,引用的模型(仅具有单个采样时间)不受影响。
你的模型块,在SIL或PIL仿真模式中,具有依赖于绝对时间的块和有条件地执行。
如果块参数代码接口是超模
,模型block SIL/PIL支金宝app持恒定采样时间的输出。
模型 - 块SIL / PIL仿真不支持非终端的S函数。金宝app
考虑一个顶级模特有两个或更多模型引用使用相同目标连接配置的模型的块。如果模型块同时处于PIL模式,您不能运行顶层模型的模拟。出现一个错误。
考虑一个包含两个实例的顶级模型模型阻塞引用相同模型的对象。如果一个实例处于SIL模式,而另一个实例处于PIL模式,则不能运行顶层模型的模拟。出现一个错误。
Pil块支持Mux信号,除了金宝app在右键单击子系统构建期间扩展到单个信号的混合数据类型MUX信号之外。
SIL块仿真不支持代码覆盖结果的生成。金宝app用于代码覆盖的Pil金宝app块支持取决于您的目标连接配置和第三方产品支持。
当从具有块具有继承的采样时间的子系统创建SIL / Pill块时,生成的代码和SIL / PIL包装器获取原始父模型的采样时间。如果在不允许显式采样时间的上下文中使用SIL / Pill块,例如,在触发子系统中,则会看到错误。
试试下面这些方法:
在创建SIL/PIL块之前,在父模型中,设置配置参数>解算器>定期采样时间约束到确保样本时间无关
。
使用子系统,创建一个模型与采样时间无关的块。在这个街区,跑模型阻止SIL / PIL模拟。