Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

代码映射编辑器 - C

将模型元素与代码接口定义相关联

自 R2020b 起

说明

代码映射编辑器采用图形界面,您可以在其中为代码生成配置模型中的数据元素。模型引用层次结构中的每个模型都有自己的代码映射。将模型数据元素的每个类别与整个模型中的特定存储类相关联。然后,根据需要为特定数据元素覆盖这些设置。

存储类定义代码生成器在为关联的数据生成代码时使用的属性,如形式和位置。

要为代码生成配置数据元素和函数,请使用代码映射编辑器显示中的选项卡:

  • 数据默认值

  • 输入端口

  • 输出端口

  • 参数

  • 数据存储

  • 信号/状态

当存在可以为模型元素配置的其他代码映射属性时,您可以通过在活动表中选择一行并点击 Icon to configure additional code mapping properties 图标来配置这些属性。

您需要将信号添加到模型代码映射中,才能配置该信号以进行代码生成。通过将鼠标悬停在信号线上方或下方出现的省略号上以打开操作栏,在代码映射中添加和删除信号。点击添加信号删除信号按钮。在代码映射编辑器中的信号/状态选项卡上也可以找到这些按钮。

打开 代码映射编辑器 - C

执行以下操作之一:

  • 打开 Simulink® Coder™C 代码选项卡上,选择代码接口 > 默认代码映射代码接口 > 个体元素代码映射

  • 打开 Simulink Coder。在 Simulink 编辑器窗口左下角的 C 代码选项卡上,点击代码映射选项卡。

  • 在 Simulink 编辑器窗口的模型画布中,点击右下角的透视控件并选择代码。然后,点击代码映射选项卡。

示例

为根级 Inport 和 Outport 模块配置代码生成

为整个模型中的根级 InportOutport 模块配置代码生成。应用默认配置可以节省时间,尤其是对于使用大量数据的大型模型。应用默认映射后,您可以调整单个数据元素的映射。

设置示例环境
  1. 打开模型。

    openExample('ConfigurationRapidPrototypingInterface')

  2. 打开 Simulink CoderC 代码选项卡包括代码映射编辑器。

配置默认映射

配置代码生成器,以在生成的文件 ConfigurationRapidPrototypingInterface.hConfigurationRapidPrototypingInterface.c 中声明和定义输入端口与输出端口的全局变量。

  1. C 代码选项卡中,选择代码接口 > 默认代码映射

  2. 数据默认值选项卡的输入端口和输出端口下,选择输入端口行。然后,将存储类设置为 ImportedExternPointer。将输出端口的存储类设置为 ExportedGlobal。编辑器会更新两个所选数据元素类别的默认存储类设置。

为默认配置配置单个输入端口和输出端口
  1. 在代码映射编辑器中,点击输入端口选项卡。当存储类设置为 Auto 时,出于优化目的,代码生成器可能会消除或更改相关代码的表示。如果无法进行优化,代码生成器将应用模型默认配置。

  2. 强制代码生成器使用输入端口的默认配置,即存储类 ImportedExternPointer。按 Ctrl 键并选择输入端口。对于其中一个所选输入端口,将存储类设置为模型默认:ImportedExternPointer。编辑器会更新所选输入端口的存储类设置。

  3. 强制代码生成器对模型根输出端口使用存储类 ExportedGlobal。点击输出端口选项卡。选择 Out2 的行。然后,将存储类设置为模型默认值:ExportedGlobal

配置单个数据元素

要配置单个数据元素的属性(例如,当您需要覆盖默认配置设置时),请使用不同数据元素类型的选项卡。对于此示例,我们将覆盖 Inport 模块 In1 的默认存储类设置。

默认情况下,代码生成器根据模型中的 InportOutport 模块名称来命名输入端口和输出端口变量。当使用 Auto 以外的存储类设置配置数据元素时,可以通过设置存储类属性标识符来覆盖单个元素的默认设置。此属性使您能够在不修改模型设计的情况下为代码指定标识符。

在此示例中,为 InportOutport 模块设置标识符

  1. 在代码映射编辑器中,点击输入端口选项卡。

  2. 对于 In1,将存储类设置为 ImportedExtern

  3. 对于每个输入端口,选择对应的行。然后,点击 Icon to configure additional code mapping properties 图标。按如下方式设置标识符属性:

    • In1 设置为 input1

    • In2 设置为 input2

    • In3 设置为 input3

    • In4 设置为 input4

  4. 点击输出端口

  5. 选择输出端口 Out1。点击 Icon to configure additional code mapping properties 图标,并将标识符属性设置为 output

生成和验证代码

生成代码,并验证为 InportOutput 模块生成的代码是否如预期所示。例如:

  • ConfigurationRapidPrototypingInterface_private.h 包含以下声明:

    /* Imported (extern) block signals */
    extern real_T input1;                  /* '<Root>/In1' */
    
    /* Exported data declaration */
    
    /* Data with Imported storage (pointer) */
    extern real_T *input2;                 /* '<Root>/In2' */
    extern real_T *input3;                 /* '<Root>/In3' */
    extern real_T *input4;                 /* '<Root>/In4' */
  • ConfigurationRapidPrototypingInterface.h 包含以下声明。

    /* Data with Exported storage */
    extern real_T output;                  /* '<Root>/Out1' */
    
  • 以下代码片段显示表示 In1input1 的变量,该变量用于生成的单步入口函数。

    /* Model step function */
    void ConfigurationRapidPrototypingInterface_step(void)
    {
      /* DataStoreWrite: '<Root>/Data Store Write' incorporates:
       *  Constant: '<Root>/Constant1'
       *  Constant: '<Root>/Constant2'
       *  Inport: '<Root>/In1'
       *  Logic: '<Root>/LogOp'
       *  RelationalOperator: '<Root>/RelOp1'
       *  RelationalOperator: '<Root>/RelOp2'
       */
      mode = ((input1 > 10.0) || (input1 < -10.0));
    .
    .
    .
    

相关示例

参数

全部展开

数据默认值

为某一类别的 Simulink 模型数据元素命名。为一个类别设置的存储类适用于整个模型中属于该类别的元素。

模型元素类别描述
输入端口模型的根级输入端口,如 InportIn Bus Element 模块。
输出端口模型的根级输出端口,如 OutportOut Bus Element 模块。
信号、状态和内部数据模型内部的数据元素,如模块输出信号、离散模块状态、数据存储和过零信号。
共享局部数据存储设置了跨模型实例共享模块参数的 Data Store Memory 模块。这些数据存储只在定义它们的模型中可访问。数据存储值在模型的实例之间共享。
全局数据存储由基础工作区或数据字典中的信号对象定义的数据存储。一个应用程序中的多个模型可以使用这些数据存储。要在代码映射编辑器中查看和配置这些数据存储,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。
模型参数在模型中定义的参数,例如模型工作区中的参数。不包括模型实参。
外部参数在基础工作区或数据字典中定义为对象的参数。一个应用程序中的多个模型可以使用这些参数。要在代码映射编辑器中查看和配置这些参数,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。

代码映射编辑器显示给定类别的有效存储类选项。这些选项可以包括:

  • 未指定的存储类(默认)。代码生成器将数据元素类别的代码放置在标准结构体中,例如 B_ExtY_ExtU_DW_P_。请参阅Data Structures in the Generated Code

  • 相关的预定义存储类,如 ExportedGlobal

  • 可用包中的相关存储类,如 ImportFromFile(需要 Embedded Coder®

  • 在 Embedded Coder 字典中定义的存储类(需要 Embedded Coder)

代码生成器用于确定它为模型数据元素生成的代码的属性(如外观和位置)的定义(设定)。有效设置为 DefaultExportedGlobalImportedExternImportedExternPointer请参阅Choose Storage Class for Controlling Data Representation in Generated Code

输入端口

标识模型中的根 Inport 模块或 In Bus Element 模块的元素(例如 InBus1.signal1)。如果元素解析为数据对象,则代码映射编辑器会在源名称的右侧显示“解析为信号对象”图标,并根据元素的存储类设置是否为 Auto 来解析配置。如果存储类是 Auto,则数据元素采用数据对象指定的代码配置。编辑器将存储类列中的显示文本更改为 From signal object:,后跟数据对象的存储类名称。如果存储类不是 Auto,则数据元素采用您在代码映射编辑器中指定的配置。

代码生成器用于确定它为根输入端口生成的代码的属性(例如外观和位置)的定义。有效设置为 AutoModel defaultExportedGlobalImportedExternImportedExternPointer请参阅Choose Storage Class for Controlling Data Representation in Generated Code

在生成的代码中表示输入端口的变量的名称。

为输入端口选择 Calibration 以启用标定。选择 NoCalibration 以查看输入端口的值并禁用标定。

为便于阅读而将 ECU 内部值转换为物理值的方法的名称。

标定工具中用于测量目的的输入端口的可选显示名称,它不同于 Simulink 模型中的输入端口名称。

为标定工具中的测量指定的特殊显示格式。此格式设定优先于在输入端口的 CompuMethod 中指定的显示格式。

输出端口

标识模型中的根级 Outport 模块或 Out Bus Element 模块的元素(例如 OutBus1.signal1)。如果元素解析为数据对象,则代码映射编辑器会在源名称的右侧显示“解析为信号对象”图标,并根据元素的存储类设置是否为 Auto 来解析配置。如果存储类是 Auto,则数据元素采用数据对象指定的代码配置。编辑器将存储类列中的显示文本更改为 From signal object:,后跟数据对象的存储类名称。如果存储类不是 Auto,则数据元素采用您在代码映射编辑器中指定的配置。

代码生成器用于确定它为根输出端口生成的代码的属性(例如外观和位置)的定义。有效设置为 AutoModel defaultExportedGlobalImportedExternImportedExternPointer请参阅Choose Storage Class for Controlling Data Representation in Generated Code

在生成的代码中表示输出端口的变量的名称。

为输出端口选择 Calibration 以启用标定。选择 NoCalibration 以查看输出端口的值并禁用标定。

为便于阅读而将 ECU 内部值转换为物理值的方法的名称。

标定工具中用于测量目的的输出端口的可选显示名称,它不同于 Simulink 模型中的输出端口名称。

为标定工具中的测量指定的特殊显示格式。此格式设定优先于在输出端口的 CompuMethod 中指定的显示格式。

参数

标识模型中的参数。如果元素解析为数据对象,则代码映射编辑器会在源名称的右侧显示“解析为参数对象”图标,并根据元素的存储类设置是否为 Auto 来解析配置。如果存储类是 Auto,则数据元素采用数据对象指定的代码配置。编辑器将存储类列中的显示文本更改为 From parameter object:,后跟数据对象的存储类名称。如果存储类不是 Auto,则数据元素采用您在代码映射中指定的配置。

下表列出了参数元素的类型。

参数元素的类型描述
模型参数在模型中定义的参数,例如模型工作区中的参数。不包括模型实参。
外部参数在基础工作区或数据字典中定义为对象的参数。一个应用程序中的多个模型可以使用这些参数。仅当模型使用这样的元素时,这种参数分组才会出现在编辑器中。要在代码映射编辑器中查看和配置这些参数,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。

代码生成器用于确定它为参数生成的代码的属性(例如外观和位置)的定义。对于外部参数,在您点击类别名称右侧的 Refresh 链接后,编译的存储类(例如,为外部参数配置的存储类)将出现在存储类列的右侧。有效设置为 AutoModel defaultExportedGlobalImportedExternImportedExternPointer请参阅Choose Storage Class for Controlling Data Representation in Generated Code

在生成的代码中表示模型参数或模型参数参量的变量的名称。

为模型参数选择 Calibration 以启用标定。选择 NoCalibration 以查看模型参数的值并禁用标定。

为便于阅读而将 ECU 内部值转换为物理值的方法的名称。

标定工具中用于测量目的的模型参数的可选显示名称,它不同于 Simulink 模型中的输出端口名称。

为标定工具中的测量指定的特殊显示格式。此格式设定优先于模型参数的 CompuMethod 中指定的显示格式。

数据存储

标识模型中的数据存储。如果元素解析为数据对象,则代码映射编辑器会在源名称的右侧显示“解析为信号对象”图标,并根据元素的存储类设置是否为 Auto 来解析配置。如果存储类是 Auto,则数据元素采用数据对象指定的代码配置。编辑器将存储类列中的显示文本更改为 From signal object:,后跟数据对象的存储类名称。如果存储类不是 Auto,则数据元素采用您在代码映射中指定的配置。

下表列出了数据存储元素的类型。

数据存储元素的类型描述
局部数据存储可从模型层次结构(该模型层次结构是您定义该数据存储所在的级别或其下面的级别)的任意位置访问的数据存储。通过在模型工作区中包含一个 Data Store Memory 模块或创建一个信号对象(合成的数据存储),可以在模型中以图形方式定义局部数据存储。
共享局部数据存储设置了跨模型实例共享模块参数的 Data Store Memory 模块。这些数据存储只在定义它们的模型中可访问。数据存储值在模型的实例之间共享。仅当模型中存在这样的元素时,这种数据存储分组才会出现在编辑器中。
全局数据存储由基础工作区或数据字典中的信号对象定义的数据存储。一个应用程序中的多个模型可以使用这些数据存储。这些数据存储在代码映射中是不可配置的。点击“刷新”按钮后,它们会以只读状态出现在代码映射编辑器中,以用于查看目的。仅当模型使用这样的元素时,这种数据存储分组才会出现在编辑器中。要在代码映射编辑器中查看和配置这些数据存储,请点击类别名称右侧的 Refresh 链接。点击此链接可更新模型图。

局部和共享局部数据存储的名称以 block-name: data-store-name 格式显示。

根据数据存储元素在模型中的表示和配置方式,局部和共享局部数据存储可以解析为模型工作区、基础工作区或数据字典中的信号对象。全局数据存储解析为基础工作区或数据字典中的信号对象。

代码生成器用于确定它为数据存储生成的代码的属性(例如外观和位置)的定义。对于全局数据存储,在您点击类别名称右侧的 Refresh 链接后,编译的存储类(例如,为全局数据存储配置的存储类)将出现在存储类列的右侧。有效设置为 AutoModel defaultExportedGlobalImportedExternImportedExternPointer请参阅Choose Storage Class for Controlling Data Representation in Generated Code

链接,点击该链接可以在模型图中高亮显示数据存储。

在生成的代码中表示数据存储的变量的名称。

为数据存储选择 Calibration 以启用标定。选择 NoCalibration 以查看数据存储的值并禁用标定。

为便于阅读而将 ECU 内部值转换为物理值的方法的名称。

标定工具中用于测量目的的数据存储的可选显示名称,它不同于 Simulink 模型中的输出端口名称。

为标定工具中的测量指定的特殊显示格式。此格式设定优先于在数据存储的 CompuMethod 中指定的显示格式。

信号/状态

标识模型中的信号线或状态。如果元素解析为数据对象,则代码映射编辑器会在源名称的右侧显示“解析为信号对象”图标,并根据元素的存储类设置是否为 Auto 来解析配置。如果存储类是 Auto,则数据元素采用数据对象指定的代码配置。编辑器将存储类列中的显示文本更改为 From signal object:,后跟数据对象的存储类名称。如果存储类不是 Auto,则数据元素采用您在代码映射编辑器中指定的配置。

代码映射编辑器会:

  • 使用数据元素名称列出命名信号和状态

  • 使用 source-block: port-number 格式列出未命名信号

  • 使用 block-name: state-name 格式列出在多个模块中使用的状态

要在模型的代码映射编辑器中配置单个信号线,首先必须将该信号添加到映射中。请参阅Configure Signal Data for C Code Generation

代码生成器用于确定它为信号线或状态生成的代码的属性(例如外观和位置)的定义。有效设置为 AutoModel defaultExportedGlobalImportedExternImportedExternPointer请参阅Choose Storage Class for Controlling Data Representation in Generated Code

链接,点击该链接可在模型图中高亮显示使用该状态的信号线或模块。

在生成的代码中表示该信号或状态的变量的名称。

为信号或状态选择 Calibration 以启用标定。选择 NoCalibration 以查看信号或状态的值并禁用标定。

为便于阅读而将 ECU 内部值转换为物理值的方法的名称。

标定工具中用于测量目的的信号或状态的可选显示名称,它不同于 Simulink 模型中的输出端口名称。

为标定工具中的测量指定的特殊显示格式。此格式设定优先于在信号或状态的 CompuMethod 中指定的显示格式。

版本历史记录

在 R2020b 中推出