模型数据配置到代码映射的迁移
从R2020b开始,为代码生成配置模型数据的推荐方法是使用代码映射编辑器或代码映射API。通过一个接口,您可以为数据类别配置默认设置,然后根据需要为特定的数据元素覆盖这些设置。对于参数,您可以指定它们是内联的还是默认情况下可调的。在为数据生成代码时,代码生成器使用您指定的代码定义来确定如何在生成的代码中表示数据。
当您打开在R2020b之前的版本中创建的模型时,Simulink金宝app®将模型中指定的代码定义迁移到模型代码映射。
如果有必要,作为迁移的一部分,Simulink配置模型使用的嵌入式编码器字典。金宝app当您保存模型时,代码映射将作为模型的一部分保存。
移民的影响
对于在模型中配置的数据,迁移过程用等效的代码映射替换现有的存储类规范。为在模型中生成代码而配置的数据包括以下数据:
外港块
信号线路
阻塞状态
数据存储
模型工作区中的参数对象
该表列出了特定的模型条件及其相应的迁移结果。
条件 | 迁移的结果 |
---|---|
Model是一个库模型或配置了AUTOSAR系统目标文件的模型. | 金宝appSimulink放弃了与模型中配置的数据相关联的代码配置。 |
数据元素被配置为在模型内生成代码,并且数据元素与金宝app仿真软件。CoderInfo 对象,StorageClass 属性设置为自定义 ,以及CustomStorageClass 属性设置为默认的 . |
金宝appSimulink更改存储类设置自定义(默认) 来ExportedGlobal 并显示警告。 |
模型使用配置为与
|
金宝appSimulink发出警告,表明不再支持该属性。金宝app可以使用其他接口来实现相同的结果。 |
模型使用金宝app仿真软件。CoderInfo 对象对齐 属性用于在模型中配置的数据。 |
金宝appSimulink将发出一个警告,指出特定于模型的数据不再支持该属性。金宝app可以对存储在基本工作区或数据字典中的数据使用该属性。 |
您可以从外部数据源(如mat文件、MATLAB)初始化模型的模型工作空间®文件或数据字典。 | 金宝appSimulink将参数对象的代码配置移动到该模型的代码映射。 |
对于通过右键单击subsystem块生成代码和可执行程序的单个子系统,您可以为子系统外部的子系统输入和输出信号配置存储类和存储类属性。 | 生成的代码不包括用于输入和输出接口数据的变量。 |
如果执行这些操作,您可能需要采取以下措施:
使用Simuli金宝appnk编辑器将块行复制到另一个模型。金宝appSimulink不复制与复制的建模元素相关联的代码配置信息。有关更多信息,请参见复制模块和信号线之间的模型.
在基于grt和基于ert的系统目标文件之间切换模型的系统目标文件设置。金宝appSimulink忽略复制模型的源版本的系统目标文件的代码配置信息。有关更多信息,请参见切换基于GRT和基于ert的系统目标文件.
迁移前的注意事项
在迁移之前,如果存在这些条件,请考虑以下部分建议的准备工作:
在库中配置的数据或AUTOSAR模型
存储类
TypeQualifier
财产用于代码生成的数据对齐
在模型工作区中初始化参数对象的代码配置
子系统I/O接口的代码配置
库内配置的数据或AUTOSAR模型
如果您的模型是一个库模型或配置了AUTOSAR系统目标文件的模型,为数据重新配置代码生成。对于库模型,请重新配置在使用库的模型上下文中为数据生成代码(参见接口配置).有关AUTOSAR模型,请参见为代码生成映射AUTOSAR元素(AUTOSAR Blockset).
为了避免丢失模型中配置的数据的代码配置,在早期版本中,加载模型并创建并运行一个MATLAB脚本,该脚本:
加载模型数据。
查找为在模型中生成代码而配置的数据。
将数据表示转换为存储在外部源(如mat文件、MATLAB文件或数据字典)中的数据对象。
更新模型以使用外部数据对象。
存储类TypeQualifier
财产
如果您的模型使用内置存储类配置数据对象,例如ExportedGlobal
而且ImportedExtern
,并使用存储类TypeQualifier
属性,当您在R2020b或更高版本中加载模型时,Simulink会发出警告。金宝app要消除警告并更新模型以使用受支持的替代方案,在较早的版本中,加载模型并创建并运行MATLAB脚本,该脚本:金宝app
从模型工作区、基本工作区或数据字典加载模型数据对象。
属性查找数据对象
TypeQualifier
属性设置为非空字符串值。将存储类设置更改为使用所需类型限定符预定义的存储类(例如,存储类
常量
包括限定符常量
在数据声明和定义中)。
这个示例脚本从基本工作空间加载模型数据对象,查找配置了存储类的数据实例TypeQualifier
属性,并将存储类设置更改为常量
.
Vars =谁;for idx = 1:length(vars) thisVar = evalin('base',vars{idx});if (isa(thisVar,'金宝appSimulink.Parameter') && (isequal(thisVar. coderinfo . if))thisVar.CoderInfo.TypeQualifier = ";thisVar.CoderInfo.StorageClass = 'Custom';thisVar.CoderInfo.CustomStorageClass = 'Const';结束结束
从R2020b开始,要在生成的代码中包含类型限定符,请使用代码映射编辑器或代码映射API将数据与指定使用的存储类关联常量
或挥发性
关键字(见选择在生成的代码中控制数据表示的存储类).如果没有一个可用的存储类满足您的应用程序需求,并且您正在使用Embedded Coder®,通过使用嵌入式编码器字典定义一个新的存储类(参见为软件架构定义存储类、内存段和功能模板).然后,将模型数据映射到新的存储类。
代码生成的数据对齐
要保存为模型配置的数据对齐信息,请使用模型外部的数据对象表示数据。例如,打开以前版本的Simulink中的模型,并执行此表中列出的操作。金宝app
数据元素类型 | 行动 |
---|---|
模型工作区中的参数对象 | 使用Model Explorer将对象从模型工作空间移动到基本工作空间或数据字典。然后,设置对象的存储类和对齐属性。保存模型。 |
信号线 | 打开“信号属性”对话框,为信号指定一个名称并选择必须解决信号对象吗(存储类必须为汽车 ).创建一个金宝app仿真软件。信号 对象,并设置对象的存储类和对齐属性。保存模型。 |
阻塞状态 | 打开“块参数”对话框,为状态指定一个名称并选择状态必须解析为信号对象(存储类必须为汽车 ).创建一个金宝app仿真软件。信号 对象,并设置存储类和对齐属性。保存模型。 |
或者,创建并运行一个MATLAB脚本,它:
加载模型数据。
查找设置的数据对象
金宝appSimulink.CoderInfo.Alignment
.将数据表示转换为存储在外部源(如mat文件、MATLAB文件或数据字典)中的数据对象。
集
金宝app仿真软件。CoderInfo
对象属性对齐
对于新的数据对象。
例如,这个脚本检查是否对齐
为参数、查找表和断点数据对象设置,并捕获mat文件中找到的数据对象savedData.mat
.
filename = 'savedData.mat';varList = who;tosaveVars = {};for idx = 1:长度(varList)变量= eval(varList{idx});if ((isa(变量,'Simulin金宝appk.Parameter') ||…isa(变量,'Simulin金宝appk.LookupTable') ||…isa(变量,'Simulin金宝appk.Breakpoint')) &&…variable.CoderInfo.Alignment ~= -1) tosaveVars{end+1} = varList{idx};如果~isempty(tosaveVars),则结束。垫”,tosaveVars {:});结束
用这些命令在模型工作区中评估脚本:
mws = get_param(broot, 'ModelWorkspace');evalin(多工作站系统,“SaveMWSParamsWithAlignment”);
对于模型工作空间中的参数对象,您可以使用model Explorer接口将对象从模型工作空间移动到基本工作空间或数据字典。然后,选择对齐属性。
在模型工作区中初始化参数对象的代码配置
在R2020b或更高版本中加载模型并从外部数据源(如mat文件、MATLAB文件或数据字典)初始化模型的模型工作空间之后,Simulink:金宝app
的内容
金宝app仿真软件。CoderInfo
对象映射到模型代码映射。消除了
金宝app仿真软件。CoderInfo
对象的金宝app仿真软件。参数
在外部数据源中定义的对象。
使用代码映射编辑器或代码映射API获取和设置参数代码配置设置。看到接口配置.
子系统I/O接口代码配置
在R2020b或更高版本中,对于通过右键单击Subsystem块生成代码和可执行程序的各个子系统,在生成的子系统代码接口中包括信号数据,为子系统内的子系统输入和输出信号配置存储类和存储类属性。如果在子系统外部配置信号,则生成的代码不包括用于输入和输出接口数据的变量。
有关更多信息,请参见为各个子系统生成代码和可执行文件.
复制模块和信号线之间的模型
从R2020b开始,当您使用Simulink编辑器将块或信号线复制到另一个金宝app模型时,Simulink不会复制与复制的建模元素相关的代码配置信息。
要解决此更改,请使用代码映射API复制并粘贴数据元素的代码配置信息。
打开复制操作的源模型和目标模型。
使用代码映射API获取源模型的代码映射对象。
使用代码映射API来获取您要复制的模型元素的代码映射信息。
如果目标模型不存在代码映射对象,则使用代码映射API创建一个。
对于您要复制到目标模型的模型元素,使用代码映射API将代码映射信息设置为与源模型相同的值。
关闭源模型。
保存并关闭目标模型。
例如:
……srcMdl = 'my_src_mdl';destMdl = 'my_dest_mdl';open_system (srcMdl);open_system (destMdl);srcCM = code .mapping.api. Get (srcMdl);srcSC = getSignal(srcCM, srcPort, 'StorageClass') %将目标模型的数据配置设置为源模型的设置destCM = code .mapping.api.get(destMdl);setSignal(destCM, destPort, 'StorageClass', srcSC);close_system (srcMdl);save_system (destMdl); close_system(destMdl); . . .
切换基于GRT和基于ert的系统目标文件
从R2020b开始,当您在基于grt和基于ert的系统目标文件之间切换模型的系统目标文件设置时,Simulink将为每个系统目标文件应用可选的代码配置。金宝app如果您:
在金宝app仿真软件编码器™以及嵌入式编码器应用程序。
更改模型的活动配置集。
更改模型配置参数的设置系统目标文件.
为了保存模型中配置的数据的代码配置信息,创建并运行一个MATLAB脚本,该脚本使用代码映射API复制相关的代码映射。
打开带有您想要保留的源系统目标文件和代码映射的模型。
使用代码映射API获取模型的代码映射对象,并获取数据元素的数据映射对象。
使用代码映射API获取模型的代码映射对象,并为数据元素设置数据映射对象。
保存并关闭模型。
这个脚本片段展示了当从GRT系统目标文件切换到ERT系统目标文件时,如何使用代码映射API来保存信号对象的存储类。
……Mymdl = 'my_shared_mdl';open_system (mymdl);获取Simulink Coder(基于grt)代码生成的数金宝app据配置scCodeMapping = code .mapping.api。(模型、“Simulin金宝appkCoderC”);scStorageClass = getSignal(scCodeMapping, srcPort, 'StorageClass') %为嵌入式编码器(基于ert的)代码生成设置数据配置。(模型、“EmbeddedCoderC”);setSignal(ecCodeMapping, srcPort, 'StorageClass', scStorageClass) save_system(mymdl);close_system (mymdl);……
工作流的变化
从R2020b开始,除了创建和配置Simulink数据对象之外,还可以使用代码映射编辑器或代码映射API来配置用于代码生成的模型数据元素。金宝app使用这个工作流:
打开嵌入式编码器应用程序。
在“代码映射”编辑器中,配置存储表示的默认行为。此功能在R2018a中引入。看到为数据元素和函数类别配置默认的C代码生成..
决定是否覆盖各个数据元素的默认配置设置。如果您选择不覆盖设置,请跳到步骤8。
确定要单独配置的MATLAB变量,并将配置存储在模型工作区中。在Model Explorer中,将变量转换为
金宝app仿真软件。参数
对象。结果数据对象作为模型参数出现在Code Mappings编辑器中。在生成的代码单独执行和配置时,标识表示希望监视的算法数据的信号。对于你识别的每个信号,做以下其中一项:
对于特定于模型(非共享)的信号数据,将信号添加到Code Mappings编辑器中。在模型中,在信号线上方的省略号上暂停以打开操作条。单击添加信号按钮将信号添加到“代码映射”编辑器。
对于共享信号数据,创建和配置
金宝app仿真软件。信号
对象。看到模型界面元素的C代码生成配置而且生成代码中的控制信号和状态初始化.
配置单个数据元素。在Code Mappings编辑器中,单击类别选项卡,选择一个数据元素,并设置存储类。在属性检查器中,设置存储类属性值。更改模型配置参数的设置默认参数行为单击指示存储类设置为时的行为的链接
汽车
.在“模型配置参数”对话框中,将参数设置更改为可调
或内联
.要查看存储在基本工作空间或数据字典中的外部数据对象,请在“代码映射”编辑器中单击“代码映射”编辑器刷新按钮。
生成并审查代码。