メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

MDF ファイルから物理データと生データを読み取る

この例では、MDF ファイルからチャネル データを物理値と生の値として読み取る方法を示します。

ASAM MDF変換ルールの概要

ASAM MDF 規格によれば、MDF チャネルで符号化されたデータ値は生の値として示されます。変換規則を使用して工学単位の物理値に変換できます。変換ルールは、生の値を物理値に変換するためにチャネル レベルで定義される方法です。

ASAM MDF V4.2.0 は次の変換規則をサポートしています。

変換なし

  • CC_タイプ 0:恒等 (“1:1”) 変換

値から値への変換

  • CC_タイプ1:線形変換

  • CC_タイプ2:有理変換式

  • CC_タイプ3:代数変換

  • CC_タイプ4:補間による値から値の表形式の検索

  • CC_タイプ5:補間なしの値対値の表形式の検索

  • CC_タイプ6:値の範囲から値の表形式の検索

値からテキストへの変換

  • CC_タイプ7:値からテキスト/スケールへの変換表形式の検索

  • CC_タイプ8:値の範囲からテキスト/スケールへの変換表形式のルックアップ

テキストから値への変換

  • CC_タイプ9:テキストから値への表形式の検索

テキストからテキストへの変換

  • CC_タイプ10:テキスト間の表形式の検索

その他の変換

  • CC_タイプ11:ビットフィールドテキストテーブル

mdfRead 関数はデフォルトで MDF ファイルから物理値を読み取りますが、ReadRaw オプションを使用して生の値を読み取る機能も提供します。

  • ReadRawfalse (デフォルト) — すべての数値およびテキスト変換を適用します (CC_Type 1-10)。すべてのデータは物理値として読み取られます。

  • ReadRawtrue です — 変換は適用されません。すべてのデータは生の値として読み取られます。

チャネル内に恒等変換 (CC_Type 0) または非変換 (変換ルールなし) がある場合、指定された ReadRaw オプションに関係なく、データは生の値として読み取られることに注意してください。

チャネルの詳細を見る

mdfChannelInfo 関数を使用して、MDF_Conversion_Example.mf4 内のすべてのチャネルの詳細を表示します。追加のメタデータを含めるには、AdditionalMetadata オプションを true として指定します。これには、DataType および NumBits の生のデータ型に関する情報と、ConversionType の変換ルールが含まれます。

chanInfo = mdfChannelInfo("MDF_Conversion_Example.mf4", AdditionalMetadata=true)
chanInfo=6×25 table
                 Name                 GroupNumber    GroupNumSamples     GroupAcquisitionName      GroupComment        GroupSourceName            GroupSourcePath        DisplayName       Unit          Comment        ExtendedNamePrefix             SourceName                 SourcePath                Type         SyncType             DataType              NumBits    ComponentType    CompositionType    ConversionType    SourceComment    SourceType     SourceBusType    SourceBusChannelNumber    SourceSimulated
    ______________________________    ___________    _______________    _______________________    ____________    _______________________    _______________________    ___________    ___________    ___________    _______________________    _______________________    _______________________    ______________    ________    ___________________________    _______    _____________    _______________    ______________    _____________    ___________    _____________    ______________________    _______________

    "Ambient temperature"                  1                5           Signal with conversions    <undefined>     Signal with conversions    Signal with conversions        ""         °F             <undefined>    <undefined>                <undefined>                <undefined>                FixedLength         None      RealLittleEndian                 64           None              None           Unspecified           ""          Unspecified     Unspecified               0                    false     
    "Engine temperature"                   1                5           Signal with conversions    <undefined>     Signal with conversions    Signal with conversions        ""         °C             <undefined>    <undefined>                <undefined>                <undefined>                FixedLength         None      IntegerSignedLittleEndian        32           None              None           Linear                ""          Unspecified     Unspecified               0                    false     
    "Fault code"                           1                5           Signal with conversions    <undefined>     Signal with conversions    Signal with conversions        ""         <undefined>    <undefined>    <undefined>                <undefined>                <undefined>                VariableLength      None      StringUTF8                       64           None              None           TextToText            ""          Unspecified     Unspecified               0                    false     
    "Gear position"                        1                5           Signal with conversions    <undefined>     Signal with conversions    Signal with conversions        ""         <undefined>    <undefined>    <undefined>                <undefined>                <undefined>                FixedLength         None      IntegerUnsignedLittleEndian       8           None              None           ValueToText           ""          Unspecified     Unspecified               0                    false     
    "Windshield wiper speed level"         1                5           Signal with conversions    <undefined>     Signal with conversions    Signal with conversions        ""         <undefined>    <undefined>    <undefined>                <undefined>                <undefined>                VariableLength      None      StringUTF8                       64           None              None           TextToValue           ""          Unspecified     Unspecified               0                    false     
    "time"                                 1                5           Signal with conversions    <undefined>     Signal with conversions    Signal with conversions        ""         s              <undefined>    Signal with conversions    Signal with conversions    Signal with conversions    Master              Time      RealLittleEndian                 64           None              None           Unspecified           ""          Tool            None                      0                    false     

返されたテーブルには、NameGroupNumberGroupNumSamplesUnitDataTypeNumBitsConversionType などの関連する変数のみが表示されます。

chanInfo(:, ["Name", "GroupNumber", "GroupNumSamples", "Unit", "DataType", "NumBits", "ConversionType"])
ans=6×7 table
                 Name                 GroupNumber    GroupNumSamples       Unit                 DataType              NumBits    ConversionType
    ______________________________    ___________    _______________    ___________    ___________________________    _______    ______________

    "Ambient temperature"                  1                5           °F             RealLittleEndian                 64        Unspecified  
    "Engine temperature"                   1                5           °C             IntegerSignedLittleEndian        32        Linear       
    "Fault code"                           1                5           <undefined>    StringUTF8                       64        TextToText   
    "Gear position"                        1                5           <undefined>    IntegerUnsignedLittleEndian       8        ValueToText  
    "Windshield wiper speed level"         1                5           <undefined>    StringUTF8                       64        TextToValue  
    "time"                                 1                5           s              RealLittleEndian                 64        Unspecified  

値から値への変換によるチャネルからのデータの読み取り

「エンジン温度」という名前のチャネルには、Linear 変換 (CC_Type 1) が含まれています。

chanInfo.ConversionType(chanInfo.Name == "Engine temperature")
ans = 
  ChannelConversionType enumeration

    Linear

「エンジン温度」からデータを読み取ります。デフォルトでは、データ型 double の物理値が返されます。

engTempPhy = mdfRead("MDF_Conversion_Example.mf4", Channel="Engine temperature");
engTempPhy{1}
ans=5×1 timetable
          time      Engine temperature
        ________    __________________

        0 sec                 35      
        0.25 sec          35.556      
        0.5 sec           36.111      
        0.75 sec          36.667      
        1 sec             37.222      

class(engTempPhy{1}.("Engine temperature"))
ans = 
'double'

オプション ReadRawtrue に設定して、「エンジン温度」のデータをデータ型 int32 の生の値として読み取ります。生のデータ型は、DataTypeではIntegerSignedLittleEndian(2)、NumBitsでは32として定義されています。

engTempRaw = mdfRead("MDF_Conversion_Example.mf4", Channel="Engine temperature", ReadRaw=true);
engTempRaw{1}
ans=5×1 timetable
          time      Engine temperature
        ________    __________________

        0 sec               95        
        0.25 sec            96        
        0.5 sec             97        
        0.75 sec            98        
        1 sec               99        

class(engTempRaw{1}.("Engine temperature"))
ans = 
'int32'

値をテキストに変換してチャネルからデータを読み取る

「ギア位置」という名前のチャネルには、ValueToText 変換 (CC_Type 7) が含まれています。

chanInfo.ConversionType(chanInfo.Name == "Gear position")
ans = 
  ChannelConversionType enumeration

    ValueToText

「ギア位置」からデータを読み取ります。デフォルトでは、データ型 string の物理値が返されます。

gearPosPhy = mdfRead("MDF_Conversion_Example.mf4", Channel="Gear position");
gearPosPhy{1}
ans=5×1 timetable
          time        Gear position  
        ________    _________________

        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(gearPosPhy{1}.("Gear position"))
ans = 
'string'

オプション ReadRawtrue に設定すると、「ギア位置」のデータがデータ型 uint8 の生の値として読み取られます。生のデータ型は、DataType では IntegerUnsignedLittleEndian (0)、NumBits では 8 として定義されています。

gearPosRaw = mdfRead("MDF_Conversion_Example.mf4", Channel="Gear position", ReadRaw=true);
gearPosRaw{1}
ans=5×1 timetable
          time      Gear position
        ________    _____________

        0 sec             2      
        0.25 sec          3      
        0.5 sec           0      
        0.75 sec          2      
        1 sec             1      

class(gearPosRaw{1}.("Gear position"))
ans = 
'uint8'

変換なしでチャネルからデータを読み取る

「周囲温度」という名前のチャネルには変換が含まれていません。

chanInfo.ConversionType(chanInfo.Name == "Ambient temperature")
ans = 
  ChannelConversionType enumeration

    Unspecified

「周囲温度」から物理値と生の値の両方でデータを読み取ります。チャネルには変換がないため、返される物理値は返される生の値と同一になります。

物理値は生の値と同じデータ型 (double) であることに注意してください。生のデータ型は、DataTypeではRealLittleEndian(4)、NumBitsでは64として定義されています。

ambTempPhy = mdfRead("MDF_Conversion_Example.mf4", Channel="Ambient temperature");
ambTempPhy{1}
ans=5×1 timetable
          time      Ambient temperature
        ________    ___________________

        0 sec              81.7        
        0.25 sec           81.9        
        0.5 sec              82        
        0.75 sec           81.8        
        1 sec              81.9        

class(ambTempPhy{1}.("Ambient temperature"))
ans = 
'double'
ambTempRaw = mdfRead("MDF_Conversion_Example.mf4", Channel="Ambient temperature", ReadRaw=true);
ambTempRaw{1}
ans=5×1 timetable
          time      Ambient temperature
        ________    ___________________

        0 sec              81.7        
        0.25 sec           81.9        
        0.5 sec              82        
        0.75 sec           81.8        
        1 sec              81.9        

class(ambTempRaw{1}.("Ambient temperature"))
ans = 
'double'

その他の変換例

MDF ファイルには他の 2 つのチャネルが存在します。

「ワイパー速度レベル」という名前のチャネルには、TextToValue 変換 (CC_Type 9) が含まれています。

chanInfo.ConversionType(chanInfo.Name == "Windshield wiper speed level")
ans = 
  ChannelConversionType enumeration

    TextToValue

「障害コード」という名前のチャネルには、TextToText 変換 (CC_Type 10) が含まれています。

chanInfo.ConversionType(chanInfo.Name == "Fault code")
ans = 
  ChannelConversionType enumeration

    TextToText

さまざまな ReadRaw オプションを使用して、これらのチャネルからデータを読み取ることができます。