このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
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 オプションを使用して生の値を読み取る機能も提供します。
ReadRawはfalse(デフォルト) — すべての数値およびテキスト変換を適用します (CC_Type 1-10)。すべてのデータは物理値として読み取られます。ReadRawはtrueです — 変換は適用されません。すべてのデータは生の値として読み取られます。
チャネル内に恒等変換 (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
返されたテーブルには、Name、GroupNumber、GroupNumSamples、Unit、DataType、NumBits、ConversionType などの関連する変数のみが表示されます。
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'
オプション ReadRaw を true に設定して、「エンジン温度」のデータをデータ型 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'
オプション ReadRaw を true に設定すると、「ギア位置」のデータがデータ型 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 オプションを使用して、これらのチャネルからデータを読み取ることができます。