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