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/Bdoc25b_2988451_1428583/tpf364ba40/vnt-ex00266724/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 = 1×6 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: [1×1 xcp.a2l.CompuMethod]
Resolution: 0
Accuracy: 0
LowerLimit: -3.0000
UpperLimit: 3.0000
Dimension: 1
ArraySize: []
BitMask: []
BitOperation: [1×0 xcp.a2l.BitOperation]
ByteOrder: MSB_LAST
Discrete: []
ECUAddress: 1586712
ECUAddressExtension: 0
Format: ''
Layout: ROW_DIR
PhysUnit: ''
ReadWrite: []
使用 xcpChannel,您可以分别使用 readMeasurement 和 writeMeasurement 函数直接读取 XCP 服务器的内存中的测量数据或将测量数据直接写入。readMeasurement 函数通过 XCP 通道对象读取并缩放指定 measurement 的值。此操作直接从服务器的内存中读取。writeMeasurement 函数通过 XCP 通道对象 缩放并写入指定 measurement 的值。此操作执行对服务器内存的直接写入。
访问特征变量信息
特征变量描述可调参数(标定)的属性。可调参数的可能类型包括标量、字符串和查找表。它们定义地址、记录布局、计算方法、标定上限和下限。
通过 A2L 文件对象的 Characteristics 属性按名称查看所有可用特征变量。
a2lfile.Characteristics
ans = 1×2 cell
{'Gain'} {'ydata'}
使用 getCharacteristicInfo 函数获取有关 Gain 特征变量的信息。此函数从指定的 A2L 文件中返回有关指定特征变量的信息。
charInfo = getCharacteristicInfo(a2lfile,"Gain")charInfo =
Characteristic with properties:
Name: 'Gain'
LongIdentifier: ''
CharacteristicType: VALUE
ECUAddress: 549960
Deposit: [1×1 xcp.a2l.RecordLayout]
MaxDiff: 0
Conversion: [1×1 xcp.a2l.CompuMethod]
LowerLimit: -5.0000
UpperLimit: 5.0000
Dimension: 1
AxisConversion: {1×0 cell}
BitMask: []
ByteOrder: MSB_LAST
Discrete: []
ECUAddressExtension: 0
Format: ''
Number: []
PhysUnit: ''
使用 xcpChannel,您可以分别使用 readCharacteristic 和 writeCharacteristic 函数直接读取 XCP 服务器的内存中的特征变量数据或将特征变量数据直接写入。readCharacteristic 函数通过 XCP 通道读取并缩放指定 characteristic 的值。此操作直接从服务器的内存中读取。writeCharacteristic 函数通过 XCP 通道对象 缩放并写入指定 characteristic 的值。此操作执行对服务器内存的直接写入。
访问事件信息
数据可以与由计时器或操作条件触发的事件同步采集或激励。
通过 A2L 文件对象的 Events 属性查看所有可用的事件。
a2lfile.Events
ans = 1×1 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 函数(例如 readDAQList 和 writeSTIM)采集和激励测量变量值。示例使用动态 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: [1×0 xcp.a2l.STIM]
Timestamp: [1×1 xcp.a2l.TimestampSupported]
Events: [1×1 xcp.a2l.Event Map]
查看传输层信息
XCP 数据包嵌入在传输层的帧中,该帧是所选传输协议的数据包。A2L 文件为其支持的协议提供传输层信息。如果特定协议的传输层信息为空,则服务器不支持该传输。XCP 协议规范允许多个传输层,如在 CAN 或以太网上。
此示例使用为以太网上的 XCP 配置的 A2L 文件,因此需要 IP 地址和端口。这些在 A2L 文件中指定。
通过 A2L 文件对象的 TransportLayerTCPInfo 属性显示传输层详细信息。
a2lfile.TransportLayerTCPInfo
ans =
XCPonIP with properties:
CommonParameters: [1×1 xcp.a2l.CommonParameters]
TransportLayerInstance: ''
Port: 17725
Address: 2.1307e+09
AddressString: '127.0.0.1'
关闭 A2L 文件
通过从工作区中清除 A2L 文件的变量,关闭对该 A2L 文件的访问。
clear a2lfile