Main Content

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

生成 ASAP2 和 CDF 标定文件 (Embedded Coder) 是生成 ASAP2 文件的推荐方式,因为它允许您根据 ASAM 标准生成最新版本的 ASAP2 文件,并提供生成标定文件工具。

使用生成标定文件工具生成 ASAP2 文件

打开生成标定文件工具

  1. 打开模型。

  2. 打开 Embedded Coder。

  3. 为模型生成代码。

  4. C 代码选项卡上,选择共享 > 生成标定文件

注意

对于 AUTOSAR 模型,选择 Autosar > 共享 > 生成标定文件

使用该工具,您可以同时为一个模型生成 A2L 和 cdfx 文件。您可以将该工具用于使用以下系统目标文件配置的模型:基于 ERT、基于 GRT、Simulink Real-Time、 Classic AUTOSAR 或 Adaptive AUTOSAR 系统目标文件。该工具会记住上次使用的设置,如 ASAP2 文件的版本,包含或排除注释,关闭或打开 ASAP2 文件和 CDF 文件生成。Simulink 将这些设置保存在 MATLAB 预设项中。这些设置将覆盖默认设置。

对于 Adaptive AUTOSAR 和 Simulink Real-Time 系统目标文件,可以生成 C++ 语言的 ASAP2 文件。对于基于 GRT 和 ERT 的系统目标文件,只能生成 C 语言的 ASAP2 文件。

对于 Classic AUTOSAR 模型,该工具允许您使用 Include AUTOSAR RTE elements 选项在 ASAP2 文件中包含或排除 RTE 元素。

ASAP2 文件生成

ASAP2 定义当应用程序执行时用于调整参数和测量信号数据的内部 ECU 变量的描述格式。要生成 ASAP2 文件,请执行以下操作:

  1. 默认情况下,生成 ASAP2 选项处于启用状态。如果未启用,请将生成 ASAP2 滑动到打开位置以启用 A2L 生成。

  2. 要更改 A2L 文件的名称,请在文件名字段中指定名称。

  3. 默认情况下,代码生成器使用编译文件夹作为所选模型的文件夹路径。如果您要为 A2L 文件指定不同的文件夹路径,可以在文件夹路径字段中指定。

  4. 要替换 A2L 文件中的 ECU 地址,请在符号文件字段中提供与应用程序可执行文件相关联的符号文件。否则,请取消选中地址替换字段。

    该工具支持 ELF、PDB、DWARF 或可执行文件作为替换 ECU 地址的符号文件。

  5. 版本设置为要生成的 A2L 文件的所需版本。默认版本是 1.71。

  6. 要排除 A2L 文件中的注释,请取消选中包括注释

  7. 对于 Classic AUTOSAR 模型,要排除 A2L 文件中的 RTE 元素,请清除包括 AUTOSAR RTE 元素

  8. 点击生成

要以编程方式生成 A2L 文件,请使用 coder.asap2.export 函数。

使用 ASAP2Interface 参数生成 ASAP2 文件

ASAP2Interface 参数不再出现在配置参数中。在即将发布的版本中,该参数将被彻底删除。您可以使用生成标定文件工具或 coder.asap2.export (Embedded Coder) 函数生成 ASAP2 文件。有关详细信息,请参阅生成 ASAP2 和 CDF 标定文件 (Embedded Coder)

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

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

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

基础知识

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

支持 ASAP2 的系统目标文件

您可以基于不同的系统目标文件配置来生成 ASAP2 文件。例如,基于 GRT 和基于 ERT 的配置使您能够在代码生成和编译过程中生成 ASAP2 文件。

对于 Adaptive AUTOSAR 目标和 Simulink Real-Time 目标,可以生成 C++ 语言的 ASAP2 文件。对于 ERT 和 GRT 目标,只能生成 C 语言的 ASAP2 文件,不支持 C++ 语言。

有关使用系统目标文件配置生成 ASAP2 文件的过程,请参阅 ASAP2 接口

定义 ASAP2 信息

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

使用模型数据编辑器和内置的 Simulink 数据对象来提供信息,例如使用 Simulink.Signal 对象来提供 MEASUREMENT(测量)信息,使用 Simulink.Parameter 对象来提供 CHARACTERISTIC(特征)信息。您可以使用从 Simulink.SignalSimulink.Parameter 派生的数据类中的数据对象来提供信息。请参阅 数据对象模型数据编辑器

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

数据属性

定义位置

属性名称

名称(符号)

模型和数据对象

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

描述

数据对象

Description

数据类型

模型或数据对象

DataType

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

模型或数据对象

DataType

允许的最小值

模型或数据对象

Min

允许的最大值

模型或数据对象

Max

单位

模型或数据对象

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) (Embedded Coder)

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

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

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

ASAP2 对象属性(以前)

Simulink 对象属性(当前)

LONGID_ASAP2

描述

PhysicalMin_ASAP2

最小值

PhysicalMax_ASAP2

最大值

Units_ASAP2

单位

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 模块之一来建立查找表模型:

  • 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. 您也可以为参数对象指定单位最小值最大值属性。

以下是 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

生成 ASAP2 文件

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

使用具有内置 ASAP2 支持的系统目标文件生成 ASAP2 文件。

使用基于 GRT 或基于 ERT 的系统目标文件.  要使用一般实时 (GRT) 系统目标文件或 Embedded Coder 系统目标文件为模型生成 ASAP2 数据定义,请执行下列步骤:

  1. 使用代码映射编辑器 - C 将存储类应用于信号、模块状态和模型参数,如C Data Code Interface Configuration for Model Interface Elements中所述。

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

    • 您应用了存储类自动文件作用域结构体默认(通过模型默认)。

    • 您通过 Embedded Coder 字典应用了存储类。

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

  2. 使用属性检查器为每个数据元素配置其余的存储类属性。

  3. 将模型配置参数系统目标文件设置为基于 GRT 或基于 ERT 的系统目标文件。

  4. 使用以下命令启用配置参数 ASAP2 接口

    set_param('model_Name','GenerateASAP2',true);

    注意

    您无法再从“模型配置参数”对话框中启用 ASAP2 文件的生成。如 生成 ASAP2 和 CDF 标定文件 所述,请使用 Generate Calibration Files 工具,或使用命令行模型配置参数 GenerateASAP2

  5. 选择参数仅生成代码

  6. 点击应用

  7. 生成代码。

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

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

要为引用模型生成 ASAP2 文件,请为顶层模型和引用层次结构中的每个引用模型选择 ASAP2 文件生成。

合并顶层模型和引用模型的 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 中。

ASAP2 文件的结构

下表概述了 ASAP2 文件的基本结构,并说明用于创建该文件的每个部分的目标语言编译器 (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

相关主题