主要内容

部署代码生成定义

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

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

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

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

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

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

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

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

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

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

您还可以选择导出(保存)嵌入式Coder Dictionary,以用于使用不同版本(以前或更老版本)的代码生成器创建的模型。

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

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

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

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

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

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

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

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

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

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

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

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

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

      • 在代码中需要address值。

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

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

    一个

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

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

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

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

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

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

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

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

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

  • modelOne.slx而且modelTwo.slx是不同的模型文件。

  • dataForModelOne.sldd而且dataForModelTwo.sldd是数据字典。每个字典都存储其中一个模型的设计数据,例如数值MATLAB变量。

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

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

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

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

    daexplr

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

  3. 给字典命名coderDefs.sldd

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

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

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

  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_configinterface到一本名为rtwdemo_configinterface_data.sldd

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

  11. 配置rtwdemo_configinterface_data.sldd参考coderDefs.sldd

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

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

  1. rtwdemo_roll,按C代码选项卡。工具条未显示C代码选项卡,打开嵌入式编码器应用程序。

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

  3. rtwdemo_configinterface,使用“代码映射”编辑器进行设置存储类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_configinterface并确认代码按预期显示。

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

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

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

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

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

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

在本例中,您将子系统转换为引用模型。然后,在顶级模型的Embedded Coder Dictionary中创建存储类,并在Code Mappings编辑器中使用存储类。要对顶级模型和引用模型使用相同的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

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

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

作为最佳实践,将每个模型链接到单独的数据字典(.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. 在Dialog窗格(右侧窗格)中,在引用字典,点击添加

  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_rollBasicRollMode

Roll_mapping = code .mapping.api.get(“rtwdemo_roll”);roll_sc = getDataDefault(roll_mapping,“InternalData”,“StorageClass”);Mode_mapping = code .mapping.api.get(“BasicRollMode”);setDataDefault (mode_mapping“InternalData”,“StorageClass”, roll_sc);

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

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

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

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

另请参阅

相关的话题