В этом примере показано, как считывать данные канала, применяя правила преобразования из MDF-файла, и настраивать различные параметры чтения в MATLAB.
Согласно стандарту ASAM MDF значение данных, закодированное в канале MDF, обозначается как необработанное значение. Его можно преобразовать в физическое значение инженерной единицы с помощью правила преобразования, которое описывает данные. Правила преобразования - это методы, определенные на уровне канала для преобразования исходного значения в физическое.
ASAM MDF V4.2.0 поддерживает следующие правила преобразования для преобразования значения необработанного сигнала в физическое значение:
Без преобразования
CC_Type 0: Преобразование идентификатора («1:1»)
Числовые преобразования в числовые
CC_Type 1: Линейное преобразование
CC_Type 2: Формула рационального преобразования
CC_Type 3: Алгебраическое преобразование
CC_Type 4: Табличный поиск значений с интерполяцией
CC_Type 5: Табличный поиск значений без интерполяции
CC_Type 6: Диапазон значений для табличного просмотра значений
Преобразования числа в текст
CC_Type 7: Табличное преобразование значения в текст/масштаб
CC_Type 8: Диапазон значений для табличного преобразования текста/масштаба
Преобразование текста в число
CC_Type 9: Текст для табличного просмотра
Преобразование текста в текст
CC_Type 10: Текстовый табличный поиск
Другое преобразование
CC_Type 11: текстовая таблица Битфилда
Vehicle Network Toolbox предоставляет функциональные возможности для чтения требуемых данных из MDF-файла с различными Conversion варианты. Допустимыми опциями являются:
Numeric - Обратитесь только числовой к числовым преобразованиям (CC_Type 1-6). Данные с другими правилами преобразования считываются как необработанные значения.
None - Не применять преобразование. Все данные считываются как необработанные значения.
All - Примените все числовые преобразования и текстовые преобразования (CC_Type 1-10). Все данные считываются как физические значения.
Следует отметить, что при наличии в канале преобразования идентификатора (CC_Type 0) или преобразования «нет» (без правила преобразования) данные считываются как необработанные значения независимо от того, Conversion указан параметр.
Откройте доступ к MDF-файлу с помощью mdf функция. Объект mdfObj имеет свойство Conversion со значением по умолчанию Numeric.
mdfObj = mdf('MDF_Conversion_Example.mf4')mdfObj =
MDF with properties:
File Details
Name: 'MDF_Conversion_Example.mf4'
Path: 'C:\Users\kuanliu\OneDrive - MathWorks\Documents\MATLAB\Examples\vnt-ex96016136\MDF_Conversion_Example.mf4'
Author: ''
Department: ''
Project: ''
Subject: ''
Comment: ''
Version: '4.10'
DataSize: 185
InitialTimestamp: 1980-01-01 05:00:00.000000000
Creator Details
ProgramIdentifier: 'amdf5206'
Creator: [1×1 struct]
File Contents
Attachment: [0×1 struct]
ChannelNames: {{6×1 cell}}
ChannelGroup: [1×1 struct]
Options
Conversion: Numeric
Используйте channelList для просмотра списка каналов, доступных в mdfObj
channelList(mdfObj)
ans=6×9 table
ChannelName ChannelGroupNumber ChannelGroupNumSamples ChannelGroupAcquisitionName ChannelGroupComment ChannelDisplayName ChannelUnit ChannelComment ChannelDescription
______________________________ __________________ ______________________ ___________________________ ___________________ __________________ ___________ ______________ __________________
"Ambient temperature" 1 5 Signal with conversions <undefined> "" °F <undefined> ""
"Engine temperature" 1 5 Signal with conversions <undefined> "" °C <undefined> ""
"Fault code" 1 5 Signal with conversions <undefined> "" <undefined> <undefined> ""
"Gear position" 1 5 Signal with conversions <undefined> "" <undefined> <undefined> ""
"time" 1 5 Signal with conversions <undefined> "" s <undefined> ""
"Windshield wiper speed level" 1 5 Signal with conversions <undefined> "" <undefined> <undefined> ""
Conversion Собственность и Conversion Пара «имя-значение»Вы можете выбрать Conversion применяется при чтении данных из MDF-файла в MATLAB. Параметр задается одним из следующих способов:
Установите Conversion свойства объекта MDF и вызовите read функция.
Укажите Conversion пара имя-значение при вызове read функция.
Просмотр сведений о канале Engine temperature в группе каналов 1. Выходные данные показывают, что он имеет Linear преобразование (CC_Type 1).
mdfObj.ChannelGroup(1).Channel(2)
ans = struct with fields:
Name: 'Engine temperature'
DisplayName: ''
ExtendedNamePrefix: ''
Description: ''
Comment: ''
Unit: '°C'
Type: FixedLength
DataType: IntegerSignedLittleEndian
NumBits: 32
ComponentType: None
CompositionType: None
ConversionType: Linear
Можно установить Conversion имущества mdfObj быть Numeric и считывать данные из канала Engine temperature в группе каналов 1.
mdfObj.Conversion = "Numeric"mdfObj =
MDF with properties:
File Details
Name: 'MDF_Conversion_Example.mf4'
Path: 'C:\Users\kuanliu\OneDrive - MathWorks\Documents\MATLAB\Examples\vnt-ex96016136\MDF_Conversion_Example.mf4'
Author: ''
Department: ''
Project: ''
Subject: ''
Comment: ''
Version: '4.10'
DataSize: 185
InitialTimestamp: 1980-01-01 05:00:00.000000000
Creator Details
ProgramIdentifier: 'amdf5206'
Creator: [1×1 struct]
File Contents
Attachment: [0×1 struct]
ChannelNames: {{6×1 cell}}
ChannelGroup: [1×1 struct]
Options
Conversion: Numeric
dataPropNum = read(mdfObj, 1, "Engine temperature")dataPropNum=5×1 timetable
Time EngineTemperature
________ _________________
0 sec 35
0.25 sec 35.556
0.5 sec 36.111
0.75 sec 36.667
1 sec 37.222
Также можно считывать данные с парой имя-значение Conversion, None. Обратите внимание, что Conversion пара имя-значение имеет более высокий приоритет, чем Conversion , что означает, что пара имя-значение применяется, когда значения отличаются.
dataNameValueNone = read(mdfObj, 1, "Engine temperature", "Conversion", "None")
dataNameValueNone=5×1 timetable
Time EngineTemperature
________ _________________
0 sec 95
0.25 sec 96
0.5 sec 97
0.75 sec 98
1 sec 99
Использование Conversion пара имя-значение не изменяет Conversion имущество mdfObj. Conversion значение свойства mdfObj после считывания данных с парой имя-значение остается Numeric.
mdfObj.Conversion
ans = Numeric
Conversion Параметры преобразования числа в числоСледующий код показывает, как считывать требуемые данные из канала с числовым преобразованием. Канал Engine temperature имеет Linear преобразование (CC_Type 1) и выбирается для представления поведения чтения числовых и числовых преобразований (CC_Type 1-6).
Считывание данных с парой имя-значение Conversion, Numeric. В этом случае Linear применяется при чтении данных, поскольку Numeric поддерживает преобразование числа в число. Физические данные возвращаются, а физические числовые данные имеют тип данных double.
dataLinearNum = read(mdfObj, 1, "Engine temperature", "Conversion", "Numeric")
dataLinearNum=5×1 timetable
Time EngineTemperature
________ _________________
0 sec 35
0.25 sec 35.556
0.5 sec 36.111
0.75 sec 36.667
1 sec 37.222
class(dataLinearNum.EngineTemperature)
ans = 'double'
Считывание данных с парой имя-значение Conversion,None. В этом случае Linear преобразование не применяется при чтении данных, поскольку None не применяет преобразование. Необработанные данные возвращаются с исходным типом данных, который является int32.
dataLinearNone = read(mdfObj, 1, "Engine temperature", "Conversion", "None")
dataLinearNone=5×1 timetable
Time EngineTemperature
________ _________________
0 sec 95
0.25 sec 96
0.5 sec 97
0.75 sec 98
1 sec 99
class(dataLinearNone.EngineTemperature)
ans = 'int32'
Считывание данных с парой имя-значение "Conversion","All". В этом случае Linear применяется при чтении данных, поскольку All поддерживает все числовые и текстовые преобразования. Физические данные возвращаются, а физические числовые данные имеют тип данных double.
dataLinearAll = read(mdfObj, 1, "Engine temperature", "Conversion", "All")
dataLinearAll=5×1 timetable
Time EngineTemperature
________ _________________
0 sec 35
0.25 sec 35.556
0.5 sec 36.111
0.75 sec 36.667
1 sec 37.222
class(dataLinearAll.EngineTemperature)
ans = 'double'
Conversion Параметры преобразования числа в текстСледующий код показывает, как считывать требуемые данные из канала с преобразованием числа в текст. Канал Gear position имеет ValueToText преобразование (CC_Type 7) и оно выбрано для представления поведения чтения числовых преобразований в текст (CC_Type 7-8).
Просмотр сведений о канале Gear position в группе каналов 1. Выходные данные показывают, что он имеет ValueToText преобразование.
mdfObj.ChannelGroup(1).Channel(3)
ans = struct with fields:
Name: 'Gear position'
DisplayName: ''
ExtendedNamePrefix: ''
Description: ''
Comment: ''
Unit: ''
Type: FixedLength
DataType: IntegerUnsignedLittleEndian
NumBits: 8
ComponentType: None
CompositionType: None
ConversionType: ValueToText
Считывание данных с парой имя-значение Conversion,Numeric. В этом случае ValueToText преобразование не применяется при чтении данных, поскольку Numeric поддерживает только числовые преобразования. Необработанные данные возвращаются с исходным типом данных, который является int8.
dataV2TNum = read(mdfObj, 1, "Gear position", "Conversion", "Numeric")
dataV2TNum=5×1 timetable
Time GearPosition
________ ____________
0 sec 2
0.25 sec 3
0.5 sec 0
0.75 sec 2
1 sec 1
class(dataV2TNum.GearPosition)
ans = 'uint8'
Считывание данных с парой имя-значение Conversion,None. В этом случае ValueToText преобразование не применяется при чтении данных, поскольку None не применяет преобразование. Необработанные данные возвращаются с исходным типом данных, который является int8.
dataV2TNone = read(mdfObj, 1, "Gear position", "Conversion", "None")
dataV2TNone=5×1 timetable
Time GearPosition
________ ____________
0 sec 2
0.25 sec 3
0.5 sec 0
0.75 sec 2
1 sec 1
class(dataV2TNone.GearPosition)
ans = 'uint8'
Считывание данных с парой имя-значение Conversion,All. В этом случае ValueToText применяется при чтении данных, поскольку All поддерживает все числовые и текстовые преобразования. Возвращаются физические данные, а физические текстовые данные имеют тип данных. char.
dataV2TAll = read(mdfObj, 1, "Gear position", "Conversion", "All")
dataV2TAll=5×1 timetable
Time GearPosition
________ ___________________
0 sec {'Gear position 2'}
0.25 sec {'Gear position 3'}
0.5 sec {'Invalid' }
0.75 sec {'Gear position 2'}
1 sec {'Gear position 1'}
class(dataV2TAll.GearPosition{1})ans = 'char'
Есть некоторые другие каналы в mdfObj. Каналы Ambient temperature, Windshield wiper speed level и Fault code иметь преобразования None, TextToValue, и TextToTextсоответственно. Вы можете попробовать прочитать эти каналы с различными Conversion варианты.
Просмотр сведений о канале Ambient temperature в группе каналов 1. Выходные данные показывают, что он имеет None преобразование.
mdfObj.ChannelGroup(1).Channel(1)
ans = struct with fields:
Name: 'Ambient temperature'
DisplayName: ''
ExtendedNamePrefix: ''
Description: ''
Comment: ''
Unit: '°F'
Type: FixedLength
DataType: RealLittleEndian
NumBits: 64
ComponentType: None
CompositionType: None
ConversionType: None
Просмотр сведений о канале Windshield wiper speed level в группе каналов 1. Выходные данные показывают, что он имеет TextToValue преобразование.
mdfObj.ChannelGroup(1).Channel(4)
ans = struct with fields:
Name: 'Windshield wiper speed level'
DisplayName: ''
ExtendedNamePrefix: ''
Description: ''
Comment: ''
Unit: ''
Type: VariableLength
DataType: StringUTF8
NumBits: 64
ComponentType: None
CompositionType: None
ConversionType: TextToValue
Просмотр сведений о канале Fault cod"в группе каналов 1. Выходные данные показывают, что он имеет TextToText преобразование.
mdfObj.ChannelGroup(1).Channel(5)
ans = struct with fields:
Name: 'Fault code'
DisplayName: ''
ExtendedNamePrefix: ''
Description: ''
Comment: ''
Unit: ''
Type: VariableLength
DataType: StringUTF8
NumBits: 64
ComponentType: None
CompositionType: None
ConversionType: TextToText
Закройте доступ к MDF-файлу, удалив переменную из рабочей области.
clear mdfObj