主要内容

部署代码生成定义

如上所述为软件架构定义存储类、内存段和函数模板,您可以创建您和其他用户可以应用于模型元素(如数据和函数)的代码生成定义。代码定义控制生成代码中这些元素的外观。

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

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

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

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

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

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

金宝appSimulink为Embedded Coder提供版本处理®词典。当发生这些事件时,Simulink在数据字典中同步金宝app数据,包括嵌入式编码器词典,与模型一起使用,无论用于创建模型的Simulink版本如何。

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

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

您还可以选择导出(保存)嵌入式编码器字典,以与使用代码生成器的不同版本(上一个或旧)创建的模型一起使用。

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

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

在设置要由多个模型共享的嵌入式编码器字典时,可以映射模型数据和函数类别的默认代码定义。在本例中,您将嵌入式编码器字典的默认代码定义映射到exSharedCodeDefs.sldd

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

  2. 当前文件夹窗格的MATLAB命令窗口,双击您的副本的文件名exSharedCodeDefs.sldd

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

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

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

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

    • 数据默认值选项卡,为以下数据类别配置存储类和内存部分(如果适用的话):

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

      恒定值块输出和无法内向的参数。出于以下原因之一,这些值存储在变量中。

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

      • 在代码中需要值address。

    • 功能默认值选项卡,配置功能自定义模板,如果适用的内存部分,则为这些类别的功能:

      模型函数类别 描述
      初始化/终止 用于初始化和终止的入口点函数
      执行 用于启动执行和重置的入口点函数
      共享效用 共享效用函数

    类别的默认映射应用于整个模型中类别中的元素。

    对于本例,为数据类别设置存储类港口外港,全球数据存储ExportedGlobal

  7. 应用您的更改并关闭对话框。点击申请.然后,单击好吧

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

在模型之间共享嵌入式编码器字典定义

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

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

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

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

  • modelOne.slxmodelTwo.slx是不同的模型文件。

  • dataForModelOne.sldddataForModelTwo.sldd数据字典。每个字典存储一个模型的设计数据,比如MATLAB的数值变量。

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

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

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

  1. 在命令提示符下,打开模型资源管理器。

    daexplr

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

  3. 说明字典coderDefs.sldd

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

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

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

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

  8. 对于新的存储类,在物业检查员窗格,套的名字Internalsinfile.

  9. 在模型浏览器中模型层次结构窗格中,右键单击coderDefs并选择保存更改

将模型链接到数据字典

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

  1. 打开模型。

    rtwdemo_configinterface 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_CONFIGINTFACE.到名为的字典rtwdemo_configinterface_data.sldd

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

  11. 配置rtwdemo_configinterface_data.slddcoderDefs.sldd

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

通过将其作为内部数据的默认设置应用并检查生成的代码,确认共享定义可以在模型中使用。

  1. RTWDEMO_ROLL.,单击C代码选项卡。如果工具条没有显示C代码选项卡,打开嵌入式编码器应用程序。

  2. 代码的映射>数据默认值,信号、状态和内部数据行,设置存储类Internalsinfile.

  3. RTWDEMO_CONFIGINTFACE.,使用代码映射编辑器来设置存储类Internalsinfile.信号、状态和内部数据行。

  4. 生成代码RTWDEMO_ROLL.

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

    /*存储类'internalsInFile' */ real32_T rtwdemo__FixPtUnitDelay1_DSTATE;real32_T rtwdemo_roll_Integrator_DSTATE;int8_T rtwde_Integrator_PrevResetState;

  6. 可选地,生成代码RTWDEMO_CONFIGINTFACE.并确认代码符合预期。

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

如果您在模型的Embedded Coder Dictionary中创建代码生成定义,则定义将存储在模型文件中。如果你想在模型之间共享定义:

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

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

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

  3. 可选地,通过使用代码映射编辑器的编程接口将代码映射编辑器设置从源模型复制到其他模型(请参阅以编程方式配置默认数据和功能代码).

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

创建引用模型

  1. 打开示例模型RTWDEMO_ROLL.

    RTWDEMO_ROLL.

  2. 在模型中,右键单击BasicRollMode子系统和选择子系统及模型参考>转换成>引用的模型

  3. 点击转换

    新的参考模型,BasicRollMode,打开。模型文件位于当前文件夹中。

创建和应用存储类

  1. 在顶级模特RTWDEMO_ROLL.,单击C代码选项卡。如果工具条没有显示C代码选项卡,打开嵌入式编码器应用程序。

  2. 点击代码界面>嵌入式编码字典

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

  4. 对于新的存储类,设置以下属性值:

    • 的名字Internalsinfile.

    • 头文件R_internal.h美元

    • 定义文件R_internal.c美元

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

被引用的模型不能访问父模型的Embedded Coder Dictionary中的代码生成定义。现在,将存储类从父模型移到共享数据字典中。

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

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

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

  1. RTWDEMO_ROLL.,在建模选项卡,设计画廊,点击链接到数据字典

  2. 在模型属性对话框中,单击

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

  4. 在模型属性对话框中,单击好吧

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

  6. BasicRollMode模型,使用模型属性对话框将模型链接到一个名为basicRollMode_data.sldd

  7. 点击,好吧

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

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

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

  3. 创建一个名为coderDefs.sldd

  4. 在模型浏览器中模型层次结构窗格,选择RTWDEMO_ROLL_DATA.节点。

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

  6. 添加引用到coderDefs.sldd

  7. 配置basicRollMode_data.slddcoderDefs.sldd

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

  9. 在命令提示符下,移动代码生成定义RTWDEMO_ROLL.模型文件到coderDefs.sldd数据字典。

    coder.dictionary.move (“rtwdemo_roll”“coderDefs.sldd”);

现在,这两个模型都可以访问存储类Internalsinfile.

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

新引用的模型不使用父模型使用的代码映射编辑器设置。要将父模型复制到引用的模型,请使用代码映射编辑器的程序化接口。

在命令提示符处,复制存储类设置信号、状态和内部数据RTWDEMO_ROLL.BasicRollMode

roll_mapping = coder.mapping.api.get (“rtwdemo_roll”);roll_sc = getDataDefault (roll_mapping,“InternalData”“StorageClass”);mode_mapping = coder.mapping.api.get (“BasicRollMode”);setdatadefault(mode_mapping,“InternalData”“StorageClass”, roll_sc);

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

使用数据字典存储代码定义而不是设计数据

Si金宝appmulink数据字典可以存储设计数据,如MATLAB变量和金宝app仿真软件。AliasType对象(见全局共享数据:数据字典).然而,将大型模型或多个模型的设计数据从基本工作空间迁移到数据字典可能需要时间和仔细的规划。

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

也可以看看

相关的话题