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