Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

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

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

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

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

rtwdemo_asap

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

基础知识

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

支持 ASAP2 的系统目标文件

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

有关使用系统目标文件配置生成 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

模型或数据对象

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 文件

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

使用具有内置 ASAP2 支持的系统目标文件生成 ASAP2 文件。例如,请参阅 ASAP2 示例模型 rtwdemo_asap2

使用基于 GRT 或基于 ERT 的系统目标文件

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

  1. 使用 Code Mappings 编辑器将存储类应用于信号、模块状态和模型参数,如模型接口元素的 C 代码生成配置中所述。

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

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

    • 您通过 “Embedded Coder Dictionary” 应用了存储类。

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

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

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

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

  5. 选择参数 Generate code only

  6. 点击 Apply

  7. 生成代码。

    代码生成器将 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 文件生成。

相关主题