В этом примере показано, как получить доступ и просмотреть информацию, хранившую в A2L-файлах.
XCP (Универсальный Протокол Измерения и Калибровки) является сетевым протоколом, обычно используемым в автомобильной промышленности для соединения калибровочных систем к электронным блокам управления (ЭКЮ). Калибровочная система обычно упоминается как клиент и ECU как сервер. XCP включает доступ для чтения и доступ для записи к переменным и содержанию памяти во времени выполнения.
Наборы данных в целом могут быть получены или стимулированы синхронные к событиям, инициированным таймерами или условиями работы. Спецификация протокола XCP задана ASAM (Ассоциация для Стандартизации Автоматизации и Измеряющихся Систем), и допускает множество транспортных уровней, таких как XCP по CAN или Ethernet.
A2L-файл является структурированным текстовым ASCII-файлом, который содержит измерение, калибровку и определения события, используемые с XCP для получения и стимулирования данных. Этот пример использует A2L-файл, сконфигурированный для XCP по Ethernet. A2L-файл следует стандарту ASAM MCD-2 MC (ASAP2), который задает формат описания внутренних серверных переменных, используемых в измерении и калибровке. .a2l расширение файла является сокращением "языка ASAM MCD-2 MC".
A2L-файл содержит измерение, калибровку и определения события за одно или несколько ЭКЮ. Если вы намереваетесь считать данные из или записать данные непосредственно к памяти о сервере 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]
Измерение описывает свойства записываемой, внутренней переменной сервера. Эта переменная может быть скаляром или массивом. Битовые маски и битовые операции могут быть применены к измерению. Адрес, порядок байтов, метод расчета, верхний и нижние пределы и другие свойства, описаны. Стандарт также позволяет писать в объекты измерения, чтобы стимулировать сервер во время времени выполнения.
Просмотрите все доступные измерения через Measurements свойство объекта A2L-файла.
a2lfile.Measurements
ans = 1×6 cell
{'Sine'} {'SineAfterGain'} {'SineAfterTable'} {'XCPServer_DW.lastCos'} {'XCPServer_DW.lastSin'} {'XCPServer_DW.systemEnable'}
Получите информацию о Sine измерение с помощью getMeasurementInfo функция. Эта функция возвращает информацию о заданном измерении из заданного 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 можно считать и записать данные об измерении непосредственно в память о сервере XCP с readMeasurement и writeMeasurement функции, соответственно. readMeasurement функционируйте читает и масштабирует значение для заданного measurement через XCP образовывают канал объект. Это действие выполняет прямое чтение из памяти о сервере. writeMeasurement функционируйте масштабирует и пишет значение для заданного measurement через XCP образовывают канал объект. Это действие выполняет прямую запись к памяти о сервере.
Характеристика описывает свойства настраиваемого параметра (Калибровка). Возможные типы настраиваемых параметров включают скаляры, строки и интерполяционные таблицы. Адрес, размещение записи, метод расчета, верхние и более низкие калибровочные пределы заданы.
Просмотрите все доступные характеристики по наименованию через Characteristics свойство объекта A2L-файла.
a2lfile.Characteristics
ans = 1×2 cell
{'Gain'} {'ydata'}
Получите информацию о Gain характеристика с помощью getCharacteristicInfo функция. Эта функция возвращает информацию о заданной характеристике из заданного 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 можно считать и записать характеристические данные непосредственно в память о сервере XCP с помощью readCharacteristic и writeCharacteristic функции, соответственно. readCharacteristic функционируйте читает и масштабирует значение для заданного characteristic через канал XCP. Это действие выполняет прямое чтение из памяти о сервере. writeCharacteristic функционируйте масштабирует и пишет значение для заданного characteristic через XCP образовывают канал объект. Это действие выполняет прямую запись к памяти о сервере.
Данные могут быть получены или стимулированы синхронные к событиям, инициированным таймерами или условиями работы.
Просмотрите все доступные события через Events свойство объекта A2L-файла.
a2lfile.Events
ans = 1×1 cell array
{'100 ms'}
Получите информацию о 100 ms событие с помощью getEventInfo функция. Эта функция возвращает информацию о заданном событии из заданного 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 and writeSTIM. Использование событий, чтобы получить данные об измерении далее исследуется в Чтении в качестве примера Измерения XCP с Динамическими Списками DAQ.
Слой протокола задает часть базовой операции и организация обмена сообщениями между сервером XCP и клиентом. Это включает калибровку и структуру байтов в сообщениях команды и ответа XCP.
Отобразите детали слоя протокола через ProtocolLayerInfo свойство объекта A2L-файла.
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
XCP предлагает синхронный режим (DAQ) сбора данных, как описано в ASAM MDC-2 MC. DAQ является одной из основных услуг XCP, которые может предоставить сервер. События XCP DAQ могут быть заданы клиентом, чтобы инициировать выборку данных об измерении. Когда алгоритм в сервере достигает местоположения такого события выборки, сервер собирает значения параметров измерения и отправляет их клиенту. Отобразите детали DAQ через DAQInfo свойство объекта A2L-файла.
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 или Ethernet.
Этот пример использует A2L-файл, сконфигурированный для XCP по Ethernet, который требует IP-адреса и порта. Они заданы в A2L-файле.
Отобразите детали транспортного уровня через TransportLayerTCPInfo свойство объекта A2L-файла.
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-файлу путем очищения его переменной из рабочей области.
clear a2lfile