Считайте данные из MDF-файлов с прикладными правилами преобразования

Этот пример показывает вам, как считать данные о канале, применяющие правила преобразования от MDF-файла, и сконфигурировать различные опции чтения в MATLAB.

Введение в правила преобразования ASAM MDF

Согласно стандарту 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-файлу с помощью mdf функция. Объект mdfObj имеет свойство Conversion со значением по умолчанию Numeric.

mdfObj = mdf("MDF_Conversion_Example.mf4")
mdfObj = 
  MDF with properties:

   File Details
                 Name: 'MDF_Conversion_Example.mf4'
                 Path: '/tmp/BR2021bd_1751886_255755/mlx_to_docbook1/tp43650a5e/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: [1x1 struct]

   File Contents
           Attachment: [0x1 struct]
         ChannelNames: {{6x1 cell}}
         ChannelGroup: [1x1 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: '/tmp/BR2021bd_1751886_255755/mlx_to_docbook1/tp43650a5e/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: [1x1 struct]

   File Contents
           Attachment: [0x1 struct]
         ChannelNames: {{6x1 cell}}
         ChannelGroup: [1x1 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 = 
  Conversion enumeration

    Numeric

Считайте данные с различным Conversion Опции на числовом к числовым преобразованиям

Следующий код показывает, как считать ваши желаемые данные из канала с числовым к числовому преобразованию. Канал Engine temperature имеет Linear преобразование (CC_Type 1) и это выбраны, чтобы представлять поведение чтения числовых к числовым преобразованиям (CC_Type 1-6).

Считайте данные с парой "имя-значение" ConversionЧисловой. В этом случае, 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все. В этом случае, 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Числовой. В этом случае, 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все. В этом случае, 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 code в группе 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