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: '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 = 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 UpperLimit: 3 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 UpperLimit: 5 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 函数(例如 readDAQ
和 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 文件的变量来关闭对该文件的访问权限。
clear a2lfile