Этот пример показывает вам, как считать данные о канале, применяющие правила преобразования от 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