Main Content

A2L 文件快速入门

此示例说明如何访问和查看存储在 A2L 文件中的信息。

XCP(通用测量和标定协议)是一种网络协议,通常用于汽车行业将标定系统连接到电子控制单元 (ECU)。标定系统通常称为客户端,而 ECU 称为服务器。XCP 支持在运行时对变量和内存内容进行读写访问。

整个数据集可以与由计时器或操作条件触发的事件同步采集或激励。XCP 协议规范由 ASAM(自动化和测量系统标准化协会) 定义,并允许多个传输层,如 CAN 或以太网上的 XCP。

A2L 文件是结构化的 ASCII 文本文件,其中包含测量变量、标定变量(也称为特征变量)和事件定义,与 XCP 一起使用来采集和激励数据。此示例使用为以太网上的 XCP 配置的 A2L 文件。A2L 文件遵循 ASAM MCD-2 MC 标准 (ASAP2),该标准定义测量和标定中使用的内部服务器变量的描述格式。.a2l 文件扩展名是 ASAM MCD-2 MC Language 的缩写。

打开 A2L 文件

A2L 文件包含一个或多个 ECU 的测量变量、标定变量和事件定义。如果您打算直接读取 XCP 服务器的内存中的数据或将数据直接写入,则第一步是打开表示该系统的 A2L 文件。要访问 A2L 文件,请在 MATLAB® 会话中使用 xcpA2L 函数创建一个文件对象:

a2lfile = xcpA2L("XCPServerSineWaveGenerator.a2l")
a2lfile = 
  A2L with properties:

   File Details
                 FileName: 'XCPServerSineWaveGenerator.a2l'
                 FilePath: '/tmp/Bdoc24a_2511836_3070643/tp8879c7f7/vnt-ex00266724/XCPServerSineWaveGenerator.a2l'
               ServerName: 'ModuleName'
                 Warnings: [0x0 string]

   Parameter Details
                   Events: {'100 ms'}
                EventInfo: [1x1 xcp.a2l.Event]
             Measurements: {'Sine'  'SineAfterGain'  'SineAfterTable'  'XCPServer_DW.lastCos'  'XCPServer_DW.lastSin'  'XCPServer_DW.systemEnable'}
          MeasurementInfo: [6x1 containers.Map]
          Characteristics: {'Gain'  'ydata'}
       CharacteristicInfo: [2x1 containers.Map]
                 AxisInfo: [1x1 containers.Map]
            RecordLayouts: [4x1 containers.Map]
             CompuMethods: [3x1 containers.Map]
                CompuTabs: [0x1 containers.Map]
               CompuVTabs: [0x1 containers.Map]

   XCP Protocol Details
        ProtocolLayerInfo: [1x1 xcp.a2l.ProtocolLayer]
                  DAQInfo: [1x1 xcp.a2l.DAQ]
    TransportLayerCANInfo: [0x0 xcp.a2l.XCPonCAN]
    TransportLayerUDPInfo: [0x0 xcp.a2l.XCPonIP]
    TransportLayerTCPInfo: [1x1 xcp.a2l.XCPonIP]

a2lfile = 
  A2L with properties:

   File Details
                 FileName: 'XCPServerSineWaveGenerator.a2l'
                 FilePath: 'C:\examplefiles\XCPServerSineWaveGenerator.a2l'
               ServerName: 'ModuleName'
                 Warnings: [0×0 string]

   Parameter Details
                   Events: {'100 ms'}
                EventInfo: [1×1 xcp.a2l.Event]
             Measurements: {'Sine'  'SineAfterGain'  'SineAfterTable'  'XCPServer_DW.lastCos'  'XCPServer_DW.lastSin'  'XCPServer_DW.systemEnable'}
          MeasurementInfo: [6×1 containers.Map]
          Characteristics: {'Gain'  'ydata'}
       CharacteristicInfo: [2×1 containers.Map]
                 AxisInfo: [1×1 containers.Map]
            RecordLayouts: [4×1 containers.Map]
             CompuMethods: [3×1 containers.Map]
                CompuTabs: [0×1 containers.Map]
               CompuVTabs: [0×1 containers.Map]

   XCP Protocol Details
        ProtocolLayerInfo: [1×1 xcp.a2l.ProtocolLayer]
                  DAQInfo: [1×1 xcp.a2l.DAQ]
    TransportLayerCANInfo: [0×0 xcp.a2l.XCPonCAN]
    TransportLayerUDPInfo: [0×0 xcp.a2l.XCPonIP]
    TransportLayerTCPInfo: [1×1 xcp.a2l.XCPonIP]

访问测量变量信息

测量变量描述了可记录的服务器内部变量的属性。此变量可以是标量或数组。可以对测量变量应用位掩码和位运算。测量变量描述了变量的地址、字节顺序、计算方法、上限和下限及其他属性。该标准还允许在运行时写入测量变量对象来激励服务器。

通过 A2L 文件对象的 Measurements 属性查看所有可用的测量变量。

a2lfile.Measurements
ans = 1x6 cell
    {'Sine'}    {'SineAfterGain'}    {'SineAfterTable'}    {'XCPServer_DW.lastCos'}    {'XCPServer_DW.lastSin'}    {'XCPServer_DW.systemEnable'}

使用 getMeasurementInfo 函数获取有关 Sine 测量变量的信息。此函数从指定的 A2L 文件返回有关指定测量变量的信息。

measInfo = getMeasurementInfo(a2lfile,"Sine")
measInfo = 
  Measurement with properties:
                   Name: 'Sine'
         LongIdentifier: 'Sine wave signal'
            LocDataType: FLOAT64_IEEE
             Conversion: [1x1 xcp.a2l.CompuMethod]
             Resolution: 0
               Accuracy: 0
             LowerLimit: -3.0000
             UpperLimit: 3.0000
              Dimension: 1
              ArraySize: []
                BitMask: []
           BitOperation: [1x0 xcp.a2l.BitOperation]
              ByteOrder: MSB_LAST
               Discrete: []
             ECUAddress: 1586712
    ECUAddressExtension: 0
                 Format: ''
                 Layout: ROW_DIR
               PhysUnit: ''
              ReadWrite: []

使用 xcpChannel,您可以分别使用 readMeasurementwriteMeasurement 函数直接读取 XCP 服务器的内存中的测量数据或将测量数据直接写入。readMeasurement 函数通过 XCP 通道对象读取并缩放指定 measurement 的值。此操作直接从服务器的内存中读取。writeMeasurement 函数通过 XCP 通道对象 缩放并写入指定 measurement 的值。此操作执行对服务器内存的直接写入。

访问特征变量信息

特征变量描述可调参数(标定)的属性。可调参数的可能类型包括标量、字符串和查找表。它们定义地址、记录布局、计算方法、标定上限和下限。

通过 A2L 文件对象的 Characteristics 属性按名称查看所有可用特征变量。

a2lfile.Characteristics
ans = 1x2 cell
    {'Gain'}    {'ydata'}

使用 getCharacteristicInfo 函数获取有关 Gain 特征变量的信息。此函数从指定的 A2L 文件中返回有关指定特征变量的信息。

charInfo = getCharacteristicInfo(a2lfile,"Gain")
charInfo = 
  Characteristic with properties:
                   Name: 'Gain'
         LongIdentifier: ''
     CharacteristicType: VALUE
             ECUAddress: 549960
                Deposit: [1x1 xcp.a2l.RecordLayout]
                MaxDiff: 0
             Conversion: [1x1 xcp.a2l.CompuMethod]
             LowerLimit: -5.0000
             UpperLimit: 5.0000
              Dimension: 1
         AxisConversion: {1x0 cell}
                BitMask: []
              ByteOrder: MSB_LAST
               Discrete: []
    ECUAddressExtension: 0
                 Format: ''
                 Number: []
               PhysUnit: ''

使用 xcpChannel,您可以分别使用 readCharacteristicwriteCharacteristic 函数直接读取 XCP 服务器的内存中的特征变量数据或将特征变量数据直接写入。readCharacteristic 函数通过 XCP 通道读取并缩放指定 characteristic 的值。此操作直接从服务器的内存中读取。writeCharacteristic 函数通过 XCP 通道对象 缩放并写入指定 characteristic 的值。此操作执行对服务器内存的直接写入。

访问事件信息

数据可以与由计时器或操作条件触发的事件同步采集或激励。

通过 A2L 文件对象的 Events 属性查看所有可用的事件。

a2lfile.Events
ans = 1x1 cell array
    {'100 ms'}

使用 getEventInfo 函数获取有关 100 ms 事件的信息。此函数从指定的 A2L 文件中返回有关指定事件的信息。

eventInfo = getEventInfo(a2lfile, "100 ms")
eventInfo = 
  Event with properties:
                         Name: '100 ms'
                    ShortName: '100 ms'
                ChannelNumber: 0
                    Direction: DAQ
                   MaxDAQList: 255
             ChannelTimeCycle: 1
              ChannelTimeUnit: 8
              ChannelPriority: 0
    ChannelTimeCycleInSeconds: 0.1000

通过使用 xcpChannel 并指定事件,您可以使用可用的 XCP 函数(例如 readDAQListwriteSTIM)采集和激励测量变量值。示例使用动态 DAQ 列表读取 XCP 测量变量中进一步探讨了如何使用事件来采集测量数据。

查看协议层信息

协议层定义 XCP 服务器和客户端之间报文传输的一些核心操作和组织。这包括 XCP 命令和响应报文中字节的大小调整和结构体。

通过 A2L 文件对象的 ProtocolLayerInfo 属性显示协议层详细信息。

a2lfile.ProtocolLayerInfo
ans = 
  ProtocolLayer with properties:
                    T1: 1000
                    T2: 200
                    T3: 0
                    T4: 0
                    T5: 0
                    T6: 0
                    T7: 0
                MaxCTO: 255
                MaxDTO: 65532
             ByteOrder: BYTE_ORDER_MSB_LAST
    AddressGranularity: ADDRESS_GRANULARITY_BYTE

查看 DAQ 信息

XCP 提供同步的数据采集 (DAQ) 模式,如 ASAM MDC-2 MC 中所述。DAQ 是服务器提供的主要 XCP 服务之一。客户端可以定义 XCP DAQ 事件来触发测量数据的采样。当服务器中的算法执行到达此类采样事件的位置时,服务器收集测量变量参数的值并将其发送给客户端。通过 A2L 文件对象的 DAQInfo 属性显示 DAQ 详细信息。

a2lfile.DAQInfo
ans = 
  DAQ with properties:
                    ConfigType: DYNAMIC
                        MaxDAQ: 65535
              MaxEventChannels: 128
                        MinDAQ: 0
              OptimizationType: OPTIMISATION_TYPE_DEFAULT
              AddressExtension: ADDRESS_EXTENSION_FREE
       IdentificationFieldType: IDENTIFICATION_FIELD_TYPE_ABSOLUTE
    GranularityODTEntrySizeDAQ: GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE
            MaxODTEntrySizeDAQ: 255
            OverloadIndication: NO_OVERLOAD_INDICATION
       DAQAlternatingSupported: []
            PrescalerSupported: []
               ResumeSupported: []
                          STIM: [1x0 xcp.a2l.STIM]
                     Timestamp: [1x1 xcp.a2l.TimestampSupported]
                        Events: [1x1 xcp.a2l.Event Map]

查看传输层信息

XCP 数据包嵌入在传输层的帧中,该帧是所选传输协议的数据包。A2L 文件为其支持的协议提供传输层信息。如果特定协议的传输层信息为空,则服务器不支持该传输。XCP 协议规范允许多个传输层,如在 CAN 或以太网上。

此示例使用为以太网上的 XCP 配置的 A2L 文件,因此需要 IP 地址和端口。这些在 A2L 文件中指定。

通过 A2L 文件对象的 TransportLayerTCPInfo 属性显示传输层详细信息。

a2lfile.TransportLayerTCPInfo
ans = 
  XCPonIP with properties:
          CommonParameters: [1x1 xcp.a2l.CommonParameters]
    TransportLayerInstance: ''
                      Port: 17725
                   Address: 2.1307e+09
             AddressString: '127.0.0.1'

关闭 A2L 文件

通过从工作区中清除 A2L 文件的变量,关闭对该 A2L 文件的访问。

clear a2lfile