主要内容

Cross-Release代码集成

如果你有嵌入式编码器®许可证,您可以集成从以前的版本(R2010a和更高版本)生成的C代码与当前版本生成的代码,当源代码模型是单一的,生成的C代码来自:

  • 使用不可重用功能代码接口的顶层模型或子系统构建过程。

  • 抑制错误状态监视的单个或多个实例模型引用构建流程(SuppressErrorStatus).

如果可以不经过修改就重用现有代码,就可以减少重新验证的成本。

工作流

考虑该控制系统模型。

控制器模型块引用一个由三个组件组成的模型:

  • P1是一个模型block,其中引用了以前版本开发的模型,例如R2015b。生成的模型代码和独立的代码接口在文件夹中P1_ert_rtw

  • C1.是一个模型块,它引用当前版本中正在开发的模型。

  • P2是与先前版本开发的子系统块,例如R2016A。生成的子系统代码位于文件夹中P2_ert_rtw

  • P3是一个模型块,引用与先前释放开发的模型,例如R2016B。生成的模型代码,使用模型参考代码界面处于文件夹中slprj / ert / P3

要将代码从当前版本与生成的代码集成,请使用此工作流程:

  1. 指定一个现有的共享代码文件夹

  2. 将组件导入当前版本

  3. 将组件合并到当前版本模型中

限制

交叉发布代码集成工作流不支持:金宝app

  • ERT代码的导出功能模型。

  • 金宝appSimulink功能函数调用者跨越不同版本生成的ERT代码的边界块。

  • 从R2010a之前的版本中生成的代码的集成。

  • 将生成的代码从当前版本导入到以前的版本(向前兼容)。

  • 导出位于Matlab中的文件®上一版本的根文件夹,例如blockset库文件。

  • 来自具有非inlined S函数的模型的生成代码的导出和导入。

  • c api(嵌入式编码)

在模型构建过程的末尾,代码生成报告显示集成模型直接使用的共享文件,例如,控制器.该报告不显示模型组件使用的共享文件,例如,P1P2

如果您的模型有:

  • 一个交叉释放SIL或PIL块,你不能运行快速加速模式模拟。

  • 一种模型块引用包含跨释放SIL或Pill块的模型,无法运行加速器模式或快速加速器模式模拟。

您可以运行:

  • 包含交叉释放SIL或PIL块的模型的顶级SIL模拟。模型不能包含交叉发布的AUTOSAR模型块。

  • 模型阻止包含交叉释放SIL或Pillocks的引用模型的SIL模拟。引用的模型不得包含跨发布的AutoAR模型块。

有关其他交叉发布AUTOSAR代码集成限制的信息,请参见从上一个版本导入AutoSar代码

金宝app仿真软件。公共汽车金宝app

要使用总线对象作为数据类型的交叉释放ERT代码集成,请使用其中一种方法。

方法 代码出口 代码导入
自动

在上一个版本中,在生成代码之前,设置DataScope财产的金宝app仿真软件。公共汽车对象汽车.不要给?赋值HeaderFile财产。

代码生成器创建金宝app仿真软件。公共汽车默认的数据类型定义标题文件(嵌入式编码),它位于模型的代码生成文件夹中。

在运行之前在当前版本中crossReleaseImport(嵌入式编码),设置DataScope财产的金宝app仿真软件。公共汽车对象汽车

构建集成模型时,构建过程使用金宝app仿真软件。公共汽车导入代码中的头文件中的数据类型。

出口巴士

在上一个版本中,在生成代码之前,指定金宝app仿真软件。公共汽车对象:

  • DataScope——设置为出口

  • HeaderFile—指定文件名,例如:prevRelBusType

代码生成器创建prevRelBusType.h在共享实用程序代码文件夹中。此标题文件包含该定义金宝app仿真软件。公共汽车数据类型。用sharedCodeUpdate(嵌入式编码)添加prevRelBusType.h的共享代码文件夹ExistingSharedCode指定。

对于R2010A和R2010B,DataScope物业不可用。不要给?赋值HeaderFile财产。代码生成器创建金宝app仿真软件。公共汽车数据类型定义modelName_types.h,它位于模型的代码生成文件夹中。

在运行之前在当前版本中crossReleaseImport(嵌入式编码),设置DataScope财产的金宝app仿真软件。公共汽车对象进口

当您构建包含导入的SIL或Pill块的集成模型时,构建过程使用金宝app仿真软件。公共汽车数据类型定义prevRelBusType.h

如果导入的代码来自R2010a或R2010b,则指定金宝app仿真软件。公共汽车对象:

  • DataScope——设置为进口

  • HeaderFile—设置文件路径modelName_types.h,它位于导入的代码文件夹中。

构建集成模型时,构建过程使用金宝app仿真软件。公共汽车数据类型定义modelName_types.h

进口汽车

在上一个版本中,在生成代码之前,指定金宝app仿真软件。公共汽车对象:

  • DataScope——设置为进口

  • HeaderFile—指定包含。的文件路径金宝app仿真软件。公共汽车数据类型定义,例如,abustype.h.

对于R2010A和R2010B,DataScope物业不可用。为HeaderFile属性时,指定包含的文件的路径金宝app仿真软件。公共汽车数据类型定义,例如,abustype.h.

在当前版本中,导入生成的代码后,不必更改金宝app仿真软件。公共汽车

当您构建包含导入的SIL或Pill块的集成模型时,构建过程使用金宝app仿真软件。公共汽车数据类型定义abustype.h.

如果导入的代码来自R2010a或R2010b,则指定金宝app仿真软件。公共汽车对象:

  • DataScope——设置为进口

  • HeaderFile——设置为abustype.h.

构建集成模型时,构建过程使用金宝app仿真软件。公共汽车数据类型定义abustype.h.

生成代码中的全局变量的根级I / O

当从以前的版本导入ERT代码时,通过全局变量实现输入或输出端口,从集成模型生成的代码依赖于连接到集成模型中端口的信号的属性。

如果集成模型信号没有映射到与导入代码中的信号同名的生成代码变量,则生成的代码:

  • 如果变量在导入的代码中声明但未定义,则定义该变量。

  • 创建附加代码以复制从集成模型生成的变量和导入代码中的变量之间的数据。

如果集成模型信号映射到与导入代码中的信号同名的变量,则导入代码使用的变量也会被集成模型生成的代码使用。必须为信号使用兼容的存储类。

存储类属性 属性值支持金宝app
类型 非结构化只有
数据访问

无法将实现为a的端口连接指针变量导入代码中的同名信号,该信号通过直接集成模型中的存储类

无法将实现为a的端口连接直接变量被导入代码中的同名信号,该信号被实现为指针在集成模型中

数据范围

如果导入的代码声明但没有定义变量(即代码是由使用进口值),则需要以下选项之一:

  • 集成模型使用出口价值。

  • 外部代码定义变量。

如果导入的代码定义了变量(即代码是由使用出口值):

  • 对于集成模型中连接到根级I/O端口的信号:

    • 设置EnabledataOndhipership.配置参数

    • 使用具有这些属性的自定义存储类:

      • 类型-非结构化

      • 数据访问-直接

      • 数据范围-出口

      • 老板- 非空值不是集成模型的名称。例如,该值可以是导入组件的名称。

  • 对于集成模型中没有连接到根级I/O端口的信号,使用具有以下属性值的自定义存储类:

    • 数据范围-进口

    • 数据访问-直接

通过全局数据存储在当前和以前的发布组件之间进行通信

当前和以前的版本组件可以通过关联的全局数据存储进行通信金宝app仿真软件。信号对象或Simulink数据字典。金宝app这里描述的工作流适用于交叉发布ERT代码集成。

代码生成配置

在旧版本中生成模型组件代码之前,配置数据存储内存以使用导入外部代码的存储类。

如果顶层模型或子系统构建过程生成代码,则设置存储类财产的金宝app仿真软件。信号对象到其中一个类:

  • ImportedExtern

  • ImportedExternPointer

  • ImportFromFile定制的存储类

如果模型引用构建过程生成了代码,你也可以使用这些类:

  • ExportedGlobal

  • ExportToFile定制的存储类

导入配置

在当前版本中,在运行之前crossReleaseImport,定义A.金宝app仿真软件。信号对象,或要导入组件的每个全局数据存储的Simulink数据字典:金宝app

  1. 对象名和数据类型复杂,方面对象属性,指定与要导入的组件中对应对象的值相匹配的值。

  2. 存储类属性时,指定一个兼容的值。如果之前的发布值为ImportedExtern,为当前版本指定其中一个值:

    • ImportedExtern

    • ExportedGlobal

    • ImportFromFileExportToFile自定义存储类。

    如果之前的发布值为ImportedExternPointer,然后指定ImportedExternPointer当前版本。

  3. 标识符属性,只有在为要导入的组件中的对象指定了属性时,才指定匹配的值。

  4. 保存金宝app仿真软件。信号对象。每次模拟或构建导入的SIL或PIL块时都需要这些对象。

有关更多信息,请参见生成代码中的数据存储

参数调优

交叉发布的ERT代码集成工作流支持集成模型中的参数调优,该模型包含包含来自以前版本的可调参数的组金宝app件代码。

在当前版本中,在运行之前crossReleaseImport,用于要导入的组件的每个可调参数:

  1. 定义一个金宝app仿真软件。参数对象或Simulink数据字典。金宝app

  2. 对象名和数据类型复杂,方面对象属性,指定与先前发布对象值匹配的值。如果导入的源代码中的变量没有与对象相同的名称,则为标识符属性时,指定与变量名匹配的值。

  3. 如果上一个版本对象使用GetSet自定义存储类,指定:

    金宝app的支持GetSet以前版本的自定义存储类只适用于R2011a和以后的版本。

对于前一个版本中由顶级模型或子系统构建过程生成的代码,有以下限制:

  • 参数指定的可调参数金宝app仿真软件。参数对象将存储类设置为ExportedGlobal的存储类金宝app仿真软件。参数对象也是ExportedGlobal,则在构建集成模型时发生错误。

  • 在Mac操作系统上,如果一个可调参数由金宝app仿真软件。参数对象将存储类设置为ExportedGlobal的存储类,则无法构建集成模型金宝app仿真软件。参数对象(具有相同名称或别名)中的ImportedExtern.要解决这个限制,请修改默认设置:

    1. 从默认工具链获取构建工具。

      tc = coder.make.getDefaultToolchain;cComp = tc.getBuildTool (C编译器的);

    2. 提取C编译器的标准选项。

      stdmaps = ccomp.金宝appsupportedstandard.getlangStandardMaps;optionValues = stdmaps.getCompilerOptions(‘*’);

    3. 删除-fno-common.C和c++编译器的标准选项。

      optiontoremove ='-fno-common';optionsToKeep = strrep(optionValues, optionToRemove,'');c_standard_opts_id =“(C_STANDARD_OPTS)美元”;custToolChainOpts = get_param(模型,“CustomToolchainOptions”);custToolChainOpts {2} =...strrep (custToolChainOpts {2}, c_standard_opts_id optionsToKeep);set_param(模型,“CustomToolchainOptions”, custToolChainOpts);

使用可重用引用模型生成的代码的多个实例

使用可重用的引用模型,您可以指定唯一的模型参数值父模型中被引用模型的每个实例。将先前为可重用引用模型生成的代码作为参数化的交叉版本SIL或PIL块导入当前版本,然后将块的多个实例插入集成模型。对于每个块实例,您可以指定唯一的模型参数值。

  1. 更新现有的共享代码文件夹。

    sharedCodeUpdate (sourcefolder.destinationFolder的)

  2. 将可重用引用模型生成的代码作为参数化的跨版本块导入当前版本,例如,SIL块。

    handleSILBlock= crossReleaseImport (reusableReferencedModelcodeLocation, ...configSetIntegrationModel、“SimulationMode”、“银”);

  3. 例如,在集成模型中,将引用模型的两个实例替换为跨版本SIL块的实例。

    open_system (integrationModel);blockInstanceName1= 'RefmodelinstanceName1.'blockinstanceName2= 'RefmodelinstanceName2.'SILBlockFullName= getfullname (handleSILBlock);replace_block (integrationModel“名称”,blockInstanceName1, ...SILBlockFullName、“noprompt”);replace_block (integrationModel“名称”,blockInstanceName2, ...SILBlockFullName、“noprompt”);

  4. 假设可重用的引用模型有模型参数paramAparamB,以及引用的模型实例的值,RefmodelinstanceName1.RefmodelinstanceName2.,是工作空间变量。在这种情况下,您可以为作为工作区变量的跨发布块实例指定参数值。

    pathtoblockinstanceName1.= (integrationModel' / ',blockInstanceName1];pathtoblockinstanceName2.= (integrationModel' / ',blockInstanceName2];set_param(pathtoblockinstanceName1., 'paramA”、“paramA_instName1');set_param(pathtoblockinstanceName1., 'paramB”、“paramb_instname1.');set_param(pathtoblockinstanceName2., 'paramA”、“paramA_instName2');set_param(pathtoblockinstanceName2., 'paramB”、“paramb_instname2.');

  5. 要为集成模型中的块实例指定唯一的模型参数值,请将值赋给工作区变量,paramA_instName1paramb_instname1.paramA_instName2,paramb_instname2.

比较当前版本中模型组件的模拟行为和以前版本中生成的代码

在前一个版本中,假设您开发了一个模型组件,为组件生成的代码,并测试和部署生成的代码。现在,在当前版本中,您希望将功能添加到模型组件,并在系统开发和代码生成中使用模型组件。在继续之前,您可以将模型组件的功能行为和生成的代码从上一个版本进行比较。

要测试模型组件和先前版本生成的代码之间的数值等价性,请使用金宝app仿真软件测试™.与之测试经理(金宝appSimulink测试),您可以执行背靠背的测试和输出比较:

  1. 将模型组件作为一个模型块与模拟模式块参数设置为正常的

  2. 与之模型块,创建指定测试输入数据的顶级模型。

  3. 将前一个版本中生成的代码作为SIL块导入当前版本中。

  4. 使用SIL块,创建另一个顶部模型,指定相同的测试输入数据。

  5. 在测试管理器中,创建运行顶部模型的模拟的等效测试用例并进行比较输出。

  6. 运行测试案例并查看结果。

有关更多信息,请参见测试两个等效模拟(金宝appSimulink测试)

笔记

如果您想比较当前版本和以前版本生成的代码的行为,请在步骤1中指定这些代码模型块参数:

  • 模拟模式Software-in-the-loop(银)Processor-in-the-loop(公益诉讼)

  • 代码界面顶级模特

从上一个版本导入AutoSar代码

如果您安装了AUTOSAR标准的嵌入式编码器支持包,您可以导入到当前金宝app版本的AUTOSAR组件代码,您生成的上一个版本。

当您运行crossReleaseImport(嵌入式编码),该函数导入AUTOSAR代码作为一个交叉发布的模型块,而不是SIL或PIL块。这模拟模式参数的模型块被设置为Software-in-the-loop(银)Processor-in-the-loop(公益诉讼).合并模型阻塞到当前的发布模型中。

这些限制适用:

  • 跨版本工作流不支持访问NVRAM的每个实例内存。金宝app

  • 可调参数必须映射到AUTOSAR校准参数或AUTOSAR内部校准参数。

  • 如果原始模型使用变体或符号维(维度变体),则导入的模型只能使用与在前一个版本中生成代码时使用的相同的变体和符号维配置。

也可以看看

(嵌入式编码)|(嵌入式编码)|(嵌入式编码)

相关的话题