В этом примере показано, как получить доступ и просмотреть информацию, хранившую в 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