主要内容

部署代码生成定义

中描述的为软件架构定义存储类,内存部分和功能模板,您可以创建代码生成定义,即您和其他用户可以应用于诸如数据和函数的模型元素。代码定义控制生成的代码中的这些元素的外观。

在具有多个模型和用户的大型组织中,您可以通过将代码生成定义存储在相互可访问的位置来共享代码生成定义。共享代码定义的过程被调用部署

在多个模型和用户之间共享代码生成定义

创建自定义代码生成定义时,要在模型和其他用户之间共享定义:

  • 当您使用自定义存储类设计器在包中创建定义时,对于每个用户,将包含包文件夹的文件夹放置在MATLAB中®路径。有关更多信息,请参见什么是MATLAB搜索路径?

  • 当您在嵌入式编码器字典中创建定义时,请将定义存储在Simulink中金宝app®数据字典。然后,将每个模型链接到单独的数据字典。配置每个单独的字典以引用包含代码生成定义的字典。例如,看到分享模型之间的嵌入式编码器字典定义

使用不同版本的Simulink创建的模型的字典用法金宝app

金宝appSimulink为Embedded Coder提供版本处理®字典。当这些事件发生时,Simulink将同步数据字典中金宝app的数据,包括嵌入式编码器字典,以便与模型一起使用,而不管用于创建模型的Simulink版本是什么。

  • 您将模型链接到以前版本的Simulink中保存的数据字典(例如,您将在R2018b中开发的模型链接到R2018a中保存的字典)。金宝app

  • 在比当前版本旧的Simulink版本中打开具有本地嵌入式编码器词典的模型(例如,您在R2018a中开发了一个使用本地词典的模型,并在R2018b中打开该模型以金宝app继续开发)。

您还可以选择导出(保存)Embedded Coder Dictionary,以便与使用不同版本(先前或更早版本)的代码生成器创建的模型一起使用。

有关更多信息,请参见使用不同版本的Simulink创建的模型的字典用法金宝app

在共享词典中配置默认​​代码映射

在设置嵌入的编码器字典时,旨在由多个模型共享,您可以为模型数据和功能类别映射默认代码定义。在此示例中,您将映射嵌入式编码器字典的默认代码定义exsharedcodefs.sldd

  1. 如果尚未定义,请在数据字典中定义代码定义(存储类、函数自定义模板和内存段)。对于本例,您在数据字典中定义代码定义exsharedcodefs.sldd.将此文件的副本放在可写位置。

  2. 在里面当前文件夹在MATLAB命令窗口的窗格中,双击exsharedcodefs.sldd

  3. 模型层次结构窗格中,右键单击字典节点并选择显示空的部分.模型资源管理器列出的节点设计数据配置嵌入式编码词典,及其他数据

  4. 打开嵌入式编码器字典。在模型层次结构窗格中,单击嵌入式编码词典.然后,在右侧窗格中单击打开嵌入式编码器字典

  5. 在“嵌入式编码器字典”对话框中,单击配置默认值

  6. 在“配置字典默认值”对话框中,配置数据和函数类别的默认代码定义。

    • 在这一点数据默认值选项卡,配置存储类,如果适用,则内存部分,用于这些类别的数据:

      模型元素类别 描述
      inports. 模型的根级输入端口,例如输入在公共汽车元素阻碍。
      前哨 型号的根级输出端口,例如外港总线外元件阻碍。
      信号,状态和内部数据 模型内部的数据元素,如块输出信号、离散块状态、数据存储和过零信号。
      共享本地数据存储 数据存储存储器具有block参数的块分享模型实例设置这些数据存储只能在定义它们的模型中访问。数据存储值在模型实例之间共享。
      全球数据商店 由基本工作区或数据字典中的信号对象定义的数据存储。应用程序中的多个模型可以使用这些数据存储。要在代码映射编辑器中查看和配置这些数据存储,请单击刷新链接到类别名称的右侧。单击此链接更新模型图。
      模型参数参数 您配置为模型参数的模型工作空间中的参数。这些参数在模型块处暴露,以使每个模型实例能够提供自己的值。要将参数指定为模型参数,请选择模型数据编辑器>参数>论点复选框。
      模型参数 在模型中定义的参数,例如模型工作区中的参数。不包括模型参数。
      外部参数 在基本工作区或数据字典中定义为对象的参数。应用程序中的多个模型可以使用这些参数。要在代码映射编辑器中查看和配置这些参数,请单击刷新链接到类别名称的右侧。单击此链接更新模型图。
      常量

      常量值块输出和不能内联的参数。这些值存储在变量中是出于以下原因之一。

      • 该值是一个大于循环展开阈值的数组。

      • 代码中需要值地址。

    • 在这一点功能默认值选项卡,为以下类别的函数配置函数定制模板和内存部分(如果适用的话):

      模型功能类别 描述
      初始化和终止 初始化和终止的入口点函数
      执行 开始执行和复位的入口点函数
      共享效用 共享效用函数

    类别的默认映射适用于在模型中的类别中的元素。

    对于本例,请为数据类别设置存储类inports.前哨,及全球数据商店ExportedGlobal

  7. 应用更改并关闭对话框。点击应用.然后,点击

  8. 关闭嵌入式编码器字典和模型资源管理器。

分享模型之间的嵌入式编码器字典定义

此示例显示如何创建一个存储类,在生成的代码中产生单独的全局变量,并在两个模型之间共享存储类,rtwdemo_rollrtwdemo_configinterface. 然后,将每个模型配置为使用存储类作为内部数据(包括块状态)的默认代码生成设置。

最佳实践是将共享代码生成定义存储在独立的数据字典中,这意味着没有模型直接链接到字典。然后,您可以将目标模型链接到一个或多个额外的中间字典,将其配置为引用独立字典。使用这种模块化字典层次结构,每个模型都可以独立于代码生成定义存储其他数据,如设计数据。

在引用的数据字典的层次结构中(参见字典引用),只有一个字典可以在嵌入式编码器字典中存储代码生成定义。如果模型可以通过引用的数据字典访问多个嵌入式编码器字典,则使用函数Coder.dictionary.move.coder.dictionary.remove传输和删除嵌入式编码器字典,直到字典层次结构中只存在一个字典。

图中显示了一个字典层次结构示例。图中:

  • ModelOne.slx.modeltwo.slx.是不同的模型文件。

  • dataForModelOne.sldddataForModelTwo.sldd是数据词典。每个字典都存储一个模型之一的设计数据,例如数字matlab变量。

  • coderdefs.sldd是一个共享数据字典,存储两个模型的代码生成定义。其他字典引用coderdefs.sldd

在独立数据字典中创建代码生成定义

创建数据字典。然后,在字典中创建存储类。

  1. 在命令提示符处,打开Model Explorer。

    daexplr

  2. 在模型资源管理器中,选择文件>新的>数据字典

  3. 名字字典coderdefs.sldd

  4. 在模特资源管理器中模型层次结构窗格中,右键单击coderDefs并选择显示空的部分

  5. 选择嵌入式编码词典节点。

  6. 在对话框窗格(右侧窗格)中,单击打开嵌入式编码器字典

  7. 在“嵌入式编码器字典”对话框中,单击添加

  8. 对于新存储类,请在属性检查器窗格中,设置名称internalsInFile

  9. 在模特资源管理器中模型层次结构窗格中,右键单击coderDefs并选择保存更改

将模型链接到数据字典

将每个模型链接到一个单独的数据字典。配置每个字典以引用独立字典(coderdefs.sldd).

  1. 打开模型。

    RTWDEMO_CONFIGINTFACE RTWDEMO_ROLL.

  2. 在里面rtwdemo_roll,在这方面造型选项卡,在设计图库,单击链接到数据字典

  3. 在“模型属性”对话框中,单击新的

  4. 创建一个名为RTWDEMO_ROLL_DATA.SLDD.通过使用“创建新数据字典”对话框。

  5. 在“模型属性”对话框中,单击

    金宝appSimulink将模型链接到新字典。字典不包含任何数据,因为模型不使用基本工作空间中的数据。

  6. 在模型资源管理器中打开字典。在模型的左下角,单击模型数据徽章,然后单击外部数据链接在外部数据节点,选择RTWDEMO_ROLL_DATA.SLDD.

  7. 在对话框中,在引用字典,点击添加

  8. 在“打开数据字典”对话框中,双击coderdefs.sldd

  9. 使用模型层次结构窗格以保存对所做的更改RTWDEMO_ROLL_DATA.SLDD.

  10. 链接rtwdemo_configinterface到名为RTWDEMO_CONFIGINTFACE_DATA.SLDD.

    rtwdemo_configinterface在基础工作区中使用变量。要将变量迁移到字典中,请在“模型属性”对话框中,单击迁移数据.然后按照说明将模型链接到字典并复制引用的变量。

  11. 配置RTWDEMO_CONFIGINTFACE_DATA.SLDD.参考coderdefs.sldd

在模型中应用代码生成定义

确认共享定义可用于通过将其作为内部数据的默认设置和检查生成的代码来使用模型中的可供使用。

  1. 在里面rtwdemo_roll,单击C代码标签。如果工具串没有显示C代码选项卡,打开嵌入式编码器应用程序。

  2. 在下面代码映射>数据默认值,信号,状态和内部数据行,设置存储类internalsInFile

  3. 在里面rtwdemo_configinterface,使用代码映射编辑器来设置存储类internalsInFile信号,状态和内部数据一行

  4. 生成代码rtwdemo_roll

  5. 代码查看、检查生成的文件rtwdemo_roll.c.该文件定义了与模型中的状态数据相对应的全局变量,例如积分器块的基础罗兰码子系统。

    /*存储类'internalsInFile'*/real32_T rtwdemo___fixtunitdelay1_DSTATE;real32_T rtwdemo_roll_Integrator_DSTATE;int8_T rtwde_积分器_PrevResetState;

  6. 可选地,生成代码rtwdemo_configinterface并确认代码显示为预期。

将定义从模型文件迁移到共享数据字典

如果在模型的嵌入式编码器字典中创建代码生成定义,则定义存储在模型文件中。如果要在模型之间共享定义:

  1. 创建共享数据字典,如中所示分享模型之间的嵌入式编码器字典定义.在继续下一步之前,请确保所有目标模型都能访问共享字典。

  2. 使用Coder.dictionary.move.函数将定义从源模型文件迁移到共享数据字典。

    要迁移单个定义,请在“嵌入式编码器词典”对话框中,使用粘贴快速访问工具栏上的按钮。

  3. 可以选择使用Code Mappings编辑器的编程接口将代码映射编辑器设置从源模型复制到其他模型(请参阅以编程方式配置默认数据和函数代码生成).

在本例中,将子系统转换为参照模型。然后,在顶级模型的嵌入式编码器字典中创建一个存储类,并在代码映射编辑器中使用该存储类。要对顶级模型和引用模型使用相同的代码映射编辑器设置,必须将存储类提取到共享数据字典中(.sldd).

创建引用模型

  1. 打开示例模型rtwdemo_roll

    rtwdemo_roll

  2. 在模型中,右键单击基础罗兰码子系统和选择子系统和模型参考>转换为>引用模型

  3. 点击兑换

    新引用模型,基础罗兰码,打开。模型文件在当前文件夹中。

创建和应用存储类

  1. 在顶级模型中rtwdemo_roll,单击C代码标签。如果工具串没有显示C代码选项卡,打开嵌入式编码器应用程序。

  2. 点击代码接口>嵌入式编码词典

  3. 在“嵌入式编码器字典”对话框中,在存储类选项卡上,单击添加

  4. 对于新存储类,请设置这些属性值:

    • 名称internalsInFile

    • 头文件$ r_internal.h.

    • 定义文件$ r_internal.c.

  5. 在模型中,在代码映射编辑器中,为此数据默认值>信号,状态和内部数据行,设置存储类internalsInFile

引用的模型无法访问父模型的嵌入式编码器字典中的代码生成定义。现在,将存储类移出父模型,并移入共享数据字典。

将存储类移动到共享数据字典

作为最佳实践,将每个模型链接到一个单独的数据字典(.sldd),创建一个共享的独立数据字典来存储代码生成定义(存储类),并配置字典引用,以便所有模型都可以使用代码生成定义。

将模型链接到单独的字典:

  1. 在里面rtwdemo_roll,在这方面造型选项卡,在设计图库,单击链接到数据字典

  2. 在“模型属性”对话框中,单击新的

  3. 使用“创建新数据字典”对话框创建名为的字典RTWDEMO_ROLL_DATA.SLDD.

  4. 在“模型属性”对话框中,单击

  5. 在“将模型链接到数据字典”对话框中,单击只更改此模型

  6. 基础罗兰码模型,使用模型属性对话框将模型链接到名为的新数据字典basicRollMode_data.sldd

  7. 点击,

要创建共享的、独立的字典并将代码生成定义存储在其中:

  1. 在这两种模型中,在模型资源管理器中打开字典。在方框图的左下角,单击模型数据标记,然后单击外部数据链接在外部数据节点,选择字典。

  2. 在模型资源管理器中,选择文件>新的>数据字典

  3. 创建名为的数据字典coderdefs.sldd

  4. 在模特资源管理器中模型层次结构窗格中,选择rtwdemo_roll_data节点。

  5. 在对话框窗格(右侧窗格)中,在引用字典,点击添加

  6. 添加对的引用coderdefs.sldd

  7. 配置basicRollMode_data.sldd参考coderdefs.sldd

  8. 模型层次结构窗格中,右键单击rtwdemo_roll_data节点并选择保存更改

  9. 在命令提示符处,将代码生成定义从rtwdemo_roll模型文件到coderdefs.sldd数据字典。

    Coder.Dictionary.move(“rtwdemo_roll”“coderDefs.sldd”);

现在,两种模型都可以访问存储类internalsInFile

将代码映射编辑器设置从父模型复制到引用模型

新的引用模型不使用父模型使用的Code Mappings编辑器设置。要将设置从父模型复制到引用模型,请使用Code Mappings编辑器的编程接口。

在命令提示符下,复制存储类设置信号,状态和内部数据rtwdemo_roll基础罗兰码

roll\u mapping=coder.mapping.api.get(“rtwdemo_roll”);roll_sc = getDataDefault (roll_mapping,“InternalData”“存储类”);mode_mapping = coder.mapping.api.get (“BasicRollMode”);setDataDefault (mode_mapping“InternalData”“存储类”, roll_sc);

现在,这两个模型使用相同的Code Mappings编辑器设置。有关代码映射编辑器的编程接口的更多信息,请参见以编程方式配置默认数据和函数代码生成

使用数据字典存储代码定义,但不存储设计数据

Si金宝appmulink数据字典可以存储诸如MATLAB变量的设计数据和金宝appsimulink.aliaStype.对象(见全局和共享数据:数据字典). 但是,将大型模型或多个模型的设计数据从基本工作区迁移到数据字典可能需要时间和仔细规划。

如果要在数据字典中存储共享代码生成定义,但不想迁移模型的设计数据,请在“模型属性”对话框中的外部数据选项卡上,选择启用模型访问基础工作区财产。模型可以使用来自基本工作空间的设计数据,以及来自字典或引用字典的代码生成定义。有关更多信息,请参见继续在基础工作区中使用共享数据

另请参阅

相关话题