Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

导出 ASAP2 文件用于数据测量和标定

ASAM MCD-2 MC 标准,也称为 ASAP2,是由自动化和测量系统标准化协会 (ASAM) 提出的数据定义标准。ASAP2 是用于测量、标定和诊断系统的数据的非面向对象的说明。有关 ASAM 和 ASAM MCD-2 MC (ASAP2) 标准的详细信息,请参阅 ASAM 网站,网址为 https://www.asam.net

通过代码生成器,您可以在代码生成过程中导出包含模型信息的 ASAP2 文件。

您可以运行一个交互式的 ASAP2 文件生成示例。要在 MATLAB® 命令提示符下打开该示例,请输入以下命令:

rtwdemo_asap2

注意

Simulink® Coder™ 对 ASAP2 文件生成的支持与版本无关。默认情况下,软件生成 ASAP2 版本 1.31 格式,但是,生成的模型信息通常与其他 ASAP2 版本兼容。ASAP2 文件生成过程也与 ASAP2 测量和标定工具的特定需求无关。该软件提供自定义 API,您可以使用这些 API 自定义 ASAP2 文件生成,以生成某一 ASAP2 版本并满足您的 ASAP2 工具的特定需求。

基础知识

要使用 ASAP2 文件生成,您应该熟悉以下主题:

支持 ASAP2 的目标

您可以基于不同的系统目标文件配置来生成 ASAP2 文件。例如,

  • Generic Real-Time Target” (grt.tlc) 允许您在代码生成和编译过程中生成 ASAP2 文件。

  • Embedded Coder” (ert.tlc) 系统目标文件选择同样允许您在代码生成和编译过程中生成 ASAP2 文件。

  • ASAM-ASAP2 Data Definition Target” (asap2.tlc) 允许您仅生成 ASAP2 文件,而不编译可执行程序。

生成 ASAP2 文件中给出了使用这些目标配置生成 ASAP2 文件的过程。

定义 ASAP2 信息

为参数和信号定义 ASAP2 信息

ASAP2 文件生成过程需要关于模型中参数和信号的信息。其中一些信息包含在模型本身中。您必须在工作区或数据字典中使用 Simulink 数据对象来提供其余信息。在某些情况下,工作区对象的使用是可选的。

请使用 Model Data Editor 和内置的 Simulink 数据对象来提供信息。例如,您可以使用 Simulink.Signal 对象提供 MEASUREMENT 信息,使用 Simulink.Parameter 对象提供 CHARACTERISTIC 信息。此外,您还可以使用从 Simulink.SignalSimulink.Parameter 派生的数据类中的数据对象来提供信息。有关数据对象的信息,请参阅数据对象。有关 Model Data Editor 的信息,请参阅使用 Model Data Editor 配置数据属性

下表包含生成 ASAP2 文件时必需的数据属性。一些数据属性在模型中定义;其他则在对象的属性中提供。对于在 Simulink.SignalSimulink.Parameter 对象中定义的属性,下表给出了相关联的属性名称。

数据属性

定义位置

属性名称

名称(符号)

模型和数据对象

从作为参数或信号名称解析目标的数据对象的句柄继承

说明

数据对象

Description

数据类型

模型或数据对象

DataType

定标
(如果是定点数据类型)

模型或数据对象

DataType

允许的最小值

模型或数据对象

Min

允许的最大值

模型或数据对象

Max

Unit

模型或数据对象

Unit

内存地址(可选)

模型或数据对象

MemoryAddress_ASAP2(可选;请参阅内存地址属性。)

内存地址属性

如果在代码生成之前内存地址属性未知,代码生成器将在生成的 ASAP2 文件中插入 ECU Address 占位符文本。您可以在后期对生成的文件进行处理,用实际地址代替占位符。有关示例,请参阅文件 matlabroot/toolbox/rtw/targets/asap2/asap2/asap2post.masap2post.m 解析您提供的链接器映射文件,并用实际内存地址替换 ASAP2 文件中的 ECU Address 占位符。由于链接器映射文件因编译器而异,您可能需要修改 asap2post.m 中的正则表达式代码,以匹配您使用的链接器映射的格式。

注意

如果 Embedded Coder 已获得使用许可并安装在您的系统上,并且您正在为嵌入式目标生成可执行与可链接格式 (ELF) 或程序数据库 (PDB) 文件,则可以使用 rtw.asap2SetAddress 函数自动执行 ECU 地址替换。有关详细信息,请参阅 ASAP2 文件的自动 ECU 地址替换 (Embedded Coder)

如果在代码生成之前内存地址属性是已知的,可以在数据项或数据对象中定义它。默认情况下,Simulink.SignalSimulink.Parameter 数据对象类中不存在 MemoryAddress_ASAP2 属性。如果要添加属性,请将名为 MemoryAddress_ASAP2 的属性添加到自定义类中,该类是 SimulinkASAP2 类的子类。有关子类化 Simulink 数据类的信息,请参阅定义数据类

下表显示的 Simulink 对象属性取代了以前版本的 ASAP2 对象属性:

ASAP2 和 Simulink 参数和信号对象属性之间的差异

ASAP2 对象属性(以前)

Simulink 对象属性(当前)

LONGID_ASAP2

说明

PhysicalMin_ASAP2

Min

PhysicalMax_ASAP2

Max

Units_ASAP2

Unit

ASAP2 文件的自动 ECU 地址替换 (Embedded Coder)

如果您的系统中已安装 Embedded Coder 并获得了使用许可,并且您要为嵌入式目标生成可执行与可链接格式 (ELF) 或程序数据库 (PDB) 文件,则可以使用 rtw.asap2SetAddress 函数自动地在生成的 ASAP2 文件中用实际地址替换 ECU Address 占位符内存地址值。

如果在代码生成之前内存地址属性未知,代码生成器将在生成的 ASAP2 文件中插入 ECU Address 占位符文本,如下例所示。

/begin CHARACTERISTIC
  /* Name            */ Ki
  /* Long Identifier */ ""
  /* Type            */ VALUE
  /* ECU Address     */ 0x0000 /* @ECU_Address@Ki@ */

要用实际地址代替 ECU Address 占位符,请使用 rtw.asap2SetAddress 函数处理生成的 ASAP2 文件。一般语法如下:

rtw.asap2SetAddress(ASAP2File,InfoFile)

参数是字符向量,用于指定生成的 ASAP2 文件的名称和生成的可执行 ELF 文件、来自 Microsoft 工具链的 PDB 文件或模型的 DWARF 调试信息文件的名称。调用时,rtw.asap2SetAddress 从指定的 ELF、PDB 或 DWARF 文件中提取实际 ECU 地址,并用实际地址替换 ASAP2 文件中的占位符,例如:

/begin CHARACTERISTIC
  /* Name            */ Ki
  /* Long Identifier */ ""
  /* Type            */ VALUE
  /* ECU Address     */ 0x40009E60

为查找表定义 ASAP2 信息

Simulink Coder 软件为查找表数据及其断点生成 ASAP2 描述信息。软件将一维表数据表示为 CURVE 信息,将二维表数据表示为 MAP 信息,将断点表示为 AXIS_DESCRAXIS_PTS 信息。您可以使用以下 Simulink Lookup Table 模块之一为查找表建模:

  • Direct Lookup Table (n-D) - 一维和二维

  • Interpolation Using Prelookup - 一维和二维

  • 1–D Lookup Table

  • 2–D Lookup Table

  • n-D Lookup Table - 一维和二维

软件支持以下类型的查找表断点(轴点):

断点类型生成信息
可调整并在多个表轴中共享(公共轴)

COM_AXIS

固定和不可调(固定轴)

FIX_AXIS 的以下形式之一:

  • FIX_AXIS_PAR(如果断点是具有等距间隔的整数并且等距间隔是 2 的幂)

  • FIX_AXIS_PAR_DIST(如果断点是具有等距间隔的整数)

  • FIX_AXIS_PAR_LIST(如果断点是具有非等距间距的整数)

可调但不在多个表中共享(标准轴)

STD_AXIS

当您为 ASAP2 代码生成配置模块时:

  • 对于表数据,请使用具有非 Auto 存储类的 Simulink.Parameter 数据对象。

  • 对于在多个表轴中共享的可调断点数据 (COM_AXIS),请使用具有非 Auto 存储类的 Simulink.Parameter 数据对象。

  • 对于固定的、不可调的断点数据 (FIX_AXIS),请使用模块参数对话框中指定的工作区变量或数组。断点应在代码中存储为整数,因此数据类型应为内置整数类型(int8int16int32uint8uint16uint32)、定点数据类型或等效别名类型。

  • 对于不在多个表轴中共享的可调断点数据 (STD_AXIS):

    1. 创建 Simulink.Bus 对象来定义 struct 打包(字段的名称和顺序)。参数结构体的字段必须对应于查找表数据和查找表模块的每个轴。例如,在二维的 n-D Lookup Table 模块中,结构体必须仅包含三个字段。此总线对象说明查找特性的记录布局。

    2. 创建一个表示可调参数的 Simulink.Parameter 对象。

    3. 创建表和轴值。

    4. 您也可以为参数对象指定 UnitsMinimumMaximum 属性。这些属性将仅应用于表数据。

以下是 n-D Lookup Table 记录生成为标准轴格式的 ASAP2 文件的示例:

/begin CHARACTERISTIC
  /* Name */  STDAxisParam
  ...
  /* Record Layout */   Lookup1D_X_WORD_Y_FLOAT32_IEEE
  ...
  begin AXIS_DESCR
    /* Description of X-Axis Points */
    /* Axis Type */      STD_AXIS
    ...
  /end AXIS_DESCR
/end CHARACTERISTIC

/begin RECORD_LAYOUT Lookup1D_X_WORD_Y_FLOAT32_IEEE
  AXIS_PTS_X 1 WORD INDEX_INCR DIRECT
  FNC_VALUES 2 FLOAT32_IEEE COLUMN_DIR DIRECT
/end   RECORD_LAYOUT

注意

示例模型 rtwdemo_asap2 说明如何为 Lookup Table 模块生成 ASAP2 文件,其中包括可调 (COM_AXIS) 和固定 (FIX_AXIS) 查找表断点。

生成 ASAP2 文件

关于生成 ASAP2 文件

您可以通过以下方式之一从模型中生成 ASAP2 文件:

  • 在代码生成和编译过程中,使用一般实时目标或 Embedded Coder 目标来生成 ASAP2 文件。

  • 使用 ASAM-ASAP2 数据定义目标仅生成 ASAP2 文件,而不编译可执行文件。

本节讨论如何使用具有内置 ASAP2 支持的目标生成 ASAP2 文件。例如,请参阅 ASAP2 示例模型 rtwdemo_asap2

使用 GRT 或 ERT 系统目标文件

使用一般实时目标或 Embedded Coder 系统目标文件为模型生成 ASAP2 数据定义的过程如下:

  1. 使用 Model Data Editor 将存储类应用于信号、模块状态和模块参数,如将存储类应用于单个信号、状态和参数数据元素中所述。使用信号和状态名称来引用对应的 MEASUREMENT 记录,使用参数对象名称来引用 CHARACTERISTIC 记录。

    使用除 “Auto”、“FileScope” 之外的存储类,如果您在 Code Mapping 编辑器中将对应数据类别的默认存储类设置为 “Default”(默认设置),则也不能使用 “Model default”。例如,使用 “ExportedGlobal” 将数据项配置为生成代码中的非结构化全局变量。

    注意

    如果存在以下一个或多个条件,则 ASAP2 文件中不会表示参数:

    • 您可以应用存储类 “Auto”、“FileScope” 或 “Default”(通过 “Model default”)。

    • 您应用了一个存储类,而该类会导致代码生成器生成宏或不可寻址的变量。

  2. 使用 Model Data Editor 为每个数据项配置所需的其余属性。

  3. Code Generation 窗格中,点击 Browse 打开 System Target File Browser。在浏览器中,选择 “grt.tlc” 或一个基于 ERT 的目标文件,然后点击 OK

  4. 选择模型配置参数 ASAP2 interface

  5. 选择参数 Generate code only

  6. 点击 Apply

  7. 生成代码。

    代码生成器将 ASAP2 文件写入编译文件夹。默认情况下,文件命名为 model.a2l,其中 model 是模型的名称。ASAP2 设置文件控制 ASAP2 文件名。有关详细信息,请参阅Customize Generated ASAP2 File

使用 ASAM-ASAP2 数据定义目标

使用 ASAM-ASAP2 数据定义目标为模型生成 ASAP2 数据定义的过程如下:

  1. 使用 Model Data Editor 将存储类应用于信号、模块状态和模块参数,如将存储类应用于单个信号、状态和参数数据元素中所述。使用信号和状态名称来引用对应的 MEASUREMENT 记录,使用参数对象名称来引用 CHARACTERISTIC 记录。

    使用除 “Auto”、“FileScope” 之外的存储类或自定义存储类,如果您在 Code Mapping Editor 中将对应数据类别的默认存储类设置为 “Default”(默认设置),则也不能使用 “Model default”。例如,使用 “ExportedGlobal” 将数据项配置为生成代码中的非结构化全局变量。

    注意

    如果存在以下一个或多个条件,则 ASAP2 文件中不会表示数据项:

    • 您应用了以下存储类之一:“Auto”、“FileScope” 或 “Default”(通过 “Model default”)。

    • 您应用了一个自定义存储类,而该类会导致代码生成器生成宏或不可寻址的变量。

  2. 使用 Model Data Editor 为每个数据项配置所需的其余属性。

  3. Code Generation 窗格中,点击 Browse 打开 System Target File Browser。在浏览器中,选择 “asap2.tlc”,然后点击 OK

  4. 选择模型配置参数 Generate code only

  5. 点击 Apply

  6. 生成代码。

    代码生成器将 ASAP2 文件写入编译文件夹。默认情况下,文件命名为 model.a2l,其中 model 是模型的名称。ASAP2 设置文件控制 ASAP2 文件名。有关详细信息,请参阅Customize Generated ASAP2 File

为引用模型生成 ASAP2 文件

编译过程可以为模型引用层次结构中的每个引用模型生成一个 ASAP2 文件。在生成的 ASAP2 文件中,MEASUREMENT 记录表示引用模型内的信号和状态。

要为引用模型生成 ASAP2 文件,请为顶层模型和引用层次结构中的每个引用模型选择 ASAP2 文件生成。例如,如果您正在使用一般实时目标或 Embedded Coder 目标,请对顶层模型和每个引用模型按照使用 GRT 或 ERT 系统目标文件中所述的过程操作。

合并顶层模型和引用模型的 ASAP2 文件

使用函数 rtw.asap2MergeMdlRefs 合并为顶层模型和引用模型生成的 ASAP2 文件。该函数使用以下语法:

[status,info] = rtw.asap2MergeMdlRefs(topModelName,asap2FileName)

  • topModelName 是包含一个或多个引用模型的模型的名称。

  • asap2FileName 是您为合并的 ASAP2 文件指定的名称。

  • 可选:如果合并完成,status 返回 false(逻辑值 0),否则返回 true(逻辑值 1)。

  • 可选:如果 status 为 true,则 info 返回有关合并失败的其他信息。否则,它将返回空字符向量。

请参考以下示例。

[status,info] = rtw.asap2MergeMdlRefs('myTopMdl','merged.a2l')
该命令将把为顶层模型 myTopMdl 及其引用的模型生成的 ASAP2 文件合并到文件 merged.a2l 中。

示例模型 rtwdemo_asap2 包括合并 ASAP2 文件的示例。

ASAP2 文件的结构

下表概述了 ASAP2 文件的基本结构,并说明用于创建该文件的每个部分的 Target Language Compiler (TLC) 函数和文件:

  • ASAP2 文件的静态部分以粗体显示。

  • 函数调用由 %<FunctionName()> 指示。

文件部分

asap2main.tlc 的内容

包含函数定义的 TLC 文件

文件头

%<ASAP2UserFcnWriteFileHead()>

asap2userlib.tlc

/begin PROJECT ""

/begin PROJECT "%<ASAP2ProjectName>"

asap2setup.tlc

/begin HEADER ""
HEADER 内容

/begin HEADER"%<ASAP2HeaderName>"
%<ASAP2UserFcnWriteHeader()>

asap2setup.tlc
asap2userlib.tlc

/end HEADER

/end HEADER

asap2userlib.tlc

/begin MODULE ""
MODULE 内容:

/begin MODULE "%<ASAP2ModuleName>"}

asap2setup.tlc
asap2userlib.tlc

- A2ML
- MOD_PAR
- MOD_COMMON
...

%<ASAP2UserFcnWriteHardwareInterface()>

asap2userlib.tlc

依赖模型的 MODULE 内容:

%<SLibASAP2WriteDynamicContents()>
调用用户定义的函数:

asap2lib.tlc

- RECORD_LAYOUT
- CHARACTERISTIC
- ParameterGroups
- ModelParameters

...WriteRecordLayout_TemplateName()

  ...WriteCharacteristic_TemplateName()
  ...WriteCharacteristic_Scalar()

user/templates/...

- MEASUREMENT
- ExternalInputs
- BlockOutputs

...WriteMeasurement()

asap2userlib.tlc

- COMPU_METHOD

...WriteCompuMethod()

asap2userlib.tlc

/end MODULE

/end MODULE

 

文件尾部

%<ASAP2UserFcnWriteFileTail()>

asap2userlib.tlc

为数据测量和标定创建基于主机的 ASAM-ASAP2 数据定义文件

此模型显示 ASAP2 数据导出。ASAP2 是由自动化和测量系统标准化协会 (ASAM) 提出的数据定义标准。

打开示例模型

打开模型示例 rtwdemo_asap2

open_system('rtwdemo_asap2');

ASAP2 以非面向对象的形式描述用于测量、标定和诊断系统的数据。有关 ASAM 和 ASAP2 标准的详细信息,请参阅 ASAM 网站:https://www.asam.net

ASAP2 数据定义是通过 Simulink® 数据对象和测试点信号实现的。使用 Target Language Compiler (TLC),您可以为您的应用程序创建高度自定义的解决方案。有关生成 ASAP2 文件的详细信息,请参阅 Simulink Coder® 文档。

您可以通过在 Configuration Parameters 对话框的 Code Generation > Interface 窗格中选择 ASAP2 interface 来配置 ASAP2 文件生成。

相关主题