このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
ARXML を使用して MDF ファイルからデータを読み取る
この例では、ARXML をデータベースとして使用して MDF ファイルからデータを読み取る方法を示します。
MDF ファイルの詳細を表示
mdfInfo
関数を使用して MDF ファイルのメタデータを表示します。
mdfInfo("MDF_ARXML.mf4")
ans = MDFInfo with properties: File Details Name: "MDF_ARXML.mf4" Path: "C:\ExampleManager772791\user.Example_ARXMLCANDecoding\vnt-ex37098395\MDF_ARXML.mf4" Author: "" Department: "" Project: "" Subject: "" Comment: "" Version: "4.20" InitialTimestamp: 2024-11-15 23:06:16.345000000 Creator Details ProgramIdentifier: "MDF4Lib" CreatorVendorName: "Vector Informatik GmbH" CreatorToolName: "CANoe" CreatorToolVersion: "18.2.65" CreatorUserName: "siyingl" CreatorComment: "Created using MdfLog version 1.7.7.0 and Mdf4Lib version 1.9.0.0 X64 (2022-08-31)" File Contents Attachment: [5×7 table] ChannelGroupCount: 5 Event: [0×8 eventtable]
CAN データフレームを識別する
バス ロギングの関連規格である ASAM MDF によれば、CAN バス システムに定義されるイベント タイプは、「CAN_DataFrame」、「CAN_RemoteFrame」、「CAN_ErrorFrame」、または「CAN_OverloadFrame」になります。この例では、CAN データ フレームの抽出に重点を置いているため、例として「CAN_DataFrame」イベント タイプを使用してバス ログ記録標準について説明します。さらに、標準の CAN データ フレームのペイロードには最大 8 バイトが含まれ、信号値の転送に使用されることに注意してください。
標準では、イベント構造のチャネル名の前にイベント タイプ名 (例: 「CAN_DataFrame」) を付ける必要があることが規定されています。通常、メンバー チャネルを指定するには、区切り文字としてドットが使用されます (例: "CAN_DataFrame.ID" または "CAN_DataFrame.DataLength")。
mdfChannelInfo
関数を使用して、「CAN_DataFrame.*」に一致するチャネル名を見つけます。一致したチャネルに関する情報を含むテーブルが返されます。
mdfChannelInfo("MDF_ARXML.mf4", Channel="CAN_DataFrame.*")
ans=24×13 table
Name GroupNumber GroupNumSamples GroupAcquisitionName GroupComment GroupSourceName GroupSourcePath DisplayName Unit Comment ExtendedNamePrefix SourceName SourcePath
_____________________________ ___________ _______________ ____________________ ____________ _______________ _______________ _______________ ___________ __________________________________________________________ __________________ ___________ __________
"CAN_DataFrame.BitCount" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "BitCount" <undefined> Frame length in bits. CAN2 <undefined> CAN2
"CAN_DataFrame.BitCount" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "BitCount" <undefined> Frame length in bits. CAN1 <undefined> CAN1
"CAN_DataFrame.BusChannel" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "BusChannel" <undefined> Logical bus channel number the frame was sent or received. CAN2 <undefined> CAN2
"CAN_DataFrame.BusChannel" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "BusChannel" <undefined> Logical bus channel number the frame was sent or received. CAN1 <undefined> CAN1
"CAN_DataFrame.DLC" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "DLC" <undefined> Data length code. CAN2 <undefined> CAN2
"CAN_DataFrame.DLC" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "DLC" <undefined> Data length code. CAN1 <undefined> CAN1
"CAN_DataFrame.DataBytes" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "DataBytes" <undefined> Payload data bytes containing the signal values. CAN2 <undefined> CAN2
"CAN_DataFrame.DataBytes" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "DataBytes" <undefined> Payload data bytes containing the signal values. CAN1 <undefined> CAN1
"CAN_DataFrame.DataLength" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "DataLength" <undefined> Length of stored payload in bytes. CAN2 <undefined> CAN2
"CAN_DataFrame.DataLength" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "DataLength" <undefined> Length of stored payload in bytes. CAN1 <undefined> CAN1
"CAN_DataFrame.Dir" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "Dir" <undefined> Bit signal indicating the direction (Rx, Tx). CAN2 <undefined> CAN2
"CAN_DataFrame.Dir" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "Dir" <undefined> Bit signal indicating the direction (Rx, Tx). CAN1 <undefined> CAN1
"CAN_DataFrame.Flags" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "Flags" <undefined> Combination of bit flags for the message. CAN2 <undefined> CAN2
"CAN_DataFrame.Flags" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "Flags" <undefined> Combination of bit flags for the message. CAN1 <undefined> CAN1
"CAN_DataFrame.FrameDuration" 2 6 CAN2 <undefined> <undefined> CAN_DataFrame "FrameDuration" ns Duration for transmission of the frame in nanoseconds. CAN2 <undefined> CAN2
"CAN_DataFrame.FrameDuration" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "FrameDuration" ns Duration for transmission of the frame in nanoseconds. CAN1 <undefined> CAN1
⋮
関心のあるデータは、CAN 1 ネットワークから記録されました。上記の出力は、CAN 1 ネットワークからのデータが MDF ファイルのチャネル グループ 3 に保存されていることを示しています。GroupNumber
オプションを指定して、mdfChannelGroupInfo
関数を使用してチャネル グループ 3 の詳細を表示します。
mdfChannelGroupInfo("MDF_ARXML.mf4", GroupNumber=3)
ans=1×13 table
GroupNumber AcquisitionName Comment NumSamples DataSize Sorted SourceName SourcePath SourceComment SourceType SourceBusType SourceBusChannelNumber SourceSimulated
___________ _______________ ___________ __________ ________ ______ ___________ _____________ _____________ __________ _____________ ______________________ _______________
3 CAN1 <undefined> 6070 163890 true <undefined> CAN_DataFrame <undefined> Bus CAN 1 false
mdfChannelInfo
を使用して、チャネル グループ 3 内のすべてのチャネルの詳細を表示します。
mdfChannelInfo("MDF_ARXML.mf4", GroupNumber=3)
ans=13×13 table
Name GroupNumber GroupNumSamples GroupAcquisitionName GroupComment GroupSourceName GroupSourcePath DisplayName Unit Comment ExtendedNamePrefix SourceName SourcePath
_____________________________ ___________ _______________ ____________________ ____________ _______________ _______________ _______________ ___________ __________________________________________________________ __________________ ___________ ___________
"CAN_DataFrame.BitCount" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "BitCount" <undefined> Frame length in bits. CAN1 <undefined> CAN1
"CAN_DataFrame.BusChannel" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "BusChannel" <undefined> Logical bus channel number the frame was sent or received. CAN1 <undefined> CAN1
"CAN_DataFrame.DLC" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "DLC" <undefined> Data length code. CAN1 <undefined> CAN1
"CAN_DataFrame.DataBytes" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "DataBytes" <undefined> Payload data bytes containing the signal values. CAN1 <undefined> CAN1
"CAN_DataFrame.DataLength" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "DataLength" <undefined> Length of stored payload in bytes. CAN1 <undefined> CAN1
"CAN_DataFrame.Dir" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "Dir" <undefined> Bit signal indicating the direction (Rx, Tx). CAN1 <undefined> CAN1
"CAN_DataFrame.Flags" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "Flags" <undefined> Combination of bit flags for the message. CAN1 <undefined> CAN1
"CAN_DataFrame.FrameDuration" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "FrameDuration" ns Duration for transmission of the frame in nanoseconds. CAN1 <undefined> CAN1
"CAN_DataFrame.ID" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "ID" <undefined> ID of the CAN message. CAN1 <undefined> CAN1
"CAN_DataFrame.IDE" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "IDE" <undefined> Identifier Extension bit. CAN1 <undefined> CAN1
"CAN_DataFrame.SingleWire" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "SingleWire" <undefined> Bit flag indicating a single wire operation. CAN1 <undefined> CAN1
"CAN_DataFrame.WakeUp" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "WakeUp" <undefined> Bit flag indicating a wake-up message (high voltage). CAN1 <undefined> CAN1
"t" 3 6070 CAN1 <undefined> <undefined> CAN_DataFrame "" s <undefined> CAN1 <undefined> <undefined>
MDF ファイルから MDF データを読み込む
mdfRead
関数を使用して、チャネル グループ 3 内のすべてのデータを timetable に読み取ります。timetable は、ASAM MDF 規格のログ形式に従って構成されています。各行はバスからの 1 つの生の CAN フレームを表し、各列は指定されたチャネル グループ内のチャネルを表します。
mdfData = mdfRead("MDF_ARXML.mf4", GroupNumber=3);
mdfData{1}
ans=6070×12 timetable
t CAN_DataFrame.BusChannel CAN_DataFrame.Flags CAN_DataFrame.Dir CAN_DataFrame.SingleWire CAN_DataFrame.WakeUp CAN_DataFrame.ID CAN_DataFrame.IDE CAN_DataFrame.FrameDuration CAN_DataFrame.BitCount CAN_DataFrame.DLC CAN_DataFrame.DataLength CAN_DataFrame.DataBytes
____________ ________________________ ___________________ _________________ ________________________ ____________________ ________________ _________________ ___________________________ ______________________ _________________ ________________________ __________________________________
0.050294 sec 1 1 "Tx" 0 0 2147485696 1 288000 147 8 8 {[ 250 0 16 0 4 0 1 0]}
0.050526 sec 1 1 "Tx" 0 0 3 0 226000 116 8 8 {[210 236 104 118 52 187 124 192]}
0.050694 sec 1 1 "Tx" 0 0 16 0 162000 84 4 4 {[ 0 3 89 100]}
0.050898 sec 1 1 "Tx" 0 0 2047 0 198000 102 6 6 {[ 226 99 235 64 255 255]}
0.051184 sec 1 1 "Tx" 0 0 2684354559 1 280000 143 8 8 {[ 0 0 45 10 68 26 184 161]}
0.10029 sec 1 1 "Tx" 0 0 2147485696 1 286000 146 8 8 {[ 237 0 12 0 6 0 0 0]}
0.10053 sec 1 1 "Tx" 0 0 3 0 236000 121 8 8 {[ 0 56 252 27 254 13 75 64]}
0.10071 sec 1 1 "Tx" 0 0 16 0 166000 86 4 4 {[ 0 252 200 92]}
0.10091 sec 1 1 "Tx" 0 0 2047 0 196000 101 6 6 {[ 68 41 41 64 249 255]}
0.1012 sec 1 1 "Tx" 0 0 2684354559 1 282000 144 8 8 {[ 0 64 126 0 196 46 248 98]}
0.15029 sec 1 1 "Tx" 0 0 2147485696 1 286000 146 8 8 {[ 118 0 24 0 4 0 0 0]}
0.15052 sec 1 1 "Tx" 0 0 3 0 226000 116 8 8 {[ 120 21 188 10 94 69 132 64]}
0.15069 sec 1 1 "Tx" 0 0 16 0 162000 84 4 4 {[ 0 252 161 14]}
0.15089 sec 1 1 "Tx" 0 0 2047 0 196000 101 6 6 {[ 41 48 20 192 254 255]}
0.15118 sec 1 1 "Tx" 0 0 2684354559 1 278000 142 8 8 {[ 0 128 93 2 67 178 109 45]}
0.20029 sec 1 1 "Tx" 0 0 2147485696 1 284000 145 8 8 {[ 152 0 24 0 4 0 1 0]}
⋮
ARXML ファイル オブジェクトを使用して CAN メッセージを復号化する
arxmlDatabase 関数を使用して ARXML ファイル DecodingExample.arxml
を開きます。
arxmlObj = arxmlDatabase("DecodingExample.arxml")
arxmlObj = Database with properties: Name: "DecodingExample.arxml" Path: "C:\ExampleManager772791\user.Example_ARXMLCANDecoding\vnt-ex37098395\DecodingExample.arxml" CAN: [1×1 shared.vnt.arxml.protocol.CAN]
canMessageTimetable
関数を呼び出して、復号化された CAN message timetable を作成します。ASAM 標準ログ形式データの timetable は、Vehicle Network Toolbox™ CAN message timetable に変換されます。arxmlObj
は、関数の Database
入力引数の値として使用され、データのデコード用の参照データベース情報を提供します。
decodedData = canMessageTimetable(mdfData{1}, arxmlObj)
decodedData=6070×8 timetable
Time ID Extended Name Data Length Signals Error Remote
____________ _________ ________ __________ __________________________________ ______ ____________ _____ ______
0.050294 sec 2048 true {'Frame2'} {[ 250 0 16 0 4 0 1 0]} 8 {1×1 struct} false false
0.050526 sec 3 false {'Frame4'} {[210 236 104 118 52 187 124 192]} 8 {1×1 struct} false false
0.050694 sec 16 false {'Frame5'} {[ 0 3 89 100]} 4 {1×1 struct} false false
0.050898 sec 2047 false {'Frame1'} {[ 226 99 235 64 255 255]} 6 {1×1 struct} false false
0.051184 sec 536870911 true {'Frame3'} {[ 0 0 45 10 68 26 184 161]} 8 {1×1 struct} false false
0.10029 sec 2048 true {'Frame2'} {[ 237 0 12 0 6 0 0 0]} 8 {1×1 struct} false false
0.10053 sec 3 false {'Frame4'} {[ 0 56 252 27 254 13 75 64]} 8 {1×1 struct} false false
0.10071 sec 16 false {'Frame5'} {[ 0 252 200 92]} 4 {1×1 struct} false false
0.10091 sec 2047 false {'Frame1'} {[ 68 41 41 64 249 255]} 6 {1×1 struct} false false
0.1012 sec 536870911 true {'Frame3'} {[ 0 64 126 0 196 46 248 98]} 8 {1×1 struct} false false
0.15029 sec 2048 true {'Frame2'} {[ 118 0 24 0 4 0 0 0]} 8 {1×1 struct} false false
0.15052 sec 3 false {'Frame4'} {[ 120 21 188 10 94 69 132 64]} 8 {1×1 struct} false false
0.15069 sec 16 false {'Frame5'} {[ 0 252 161 14]} 4 {1×1 struct} false false
0.15089 sec 2047 false {'Frame1'} {[ 41 48 20 192 254 255]} 6 {1×1 struct} false false
0.15118 sec 536870911 true {'Frame3'} {[ 0 128 93 2 67 178 109 45]} 8 {1×1 struct} false false
0.20029 sec 2048 true {'Frame2'} {[ 152 0 24 0 4 0 1 0]} 8 {1×1 struct} false false
⋮
CAN 生メッセージから復号化された信号は、Signals
列に格納されます。
decodedData.Signals{1}
ans = struct with fields:
Signal5: 27
Signal11: 7
関心のある信号値を再パッケージ化して可視化する
canSignalTimetable
を使用して信号値を観察します。この例では、Frame2
内の Signal5
の値を調べます。
signalTimetable = canSignalTimetable(decodedData, "Frame2")
signalTimetable=1214×2 timetable
Time Signal5 Signal11
____________ _______ ________
0.050294 sec 27 7
0.10029 sec 20.5 6.5
0.15029 sec 89 8
0.20029 sec -22 8
0.25029 sec 68 7
0.30029 sec 10.5 7
0.35029 sec -19 7.5
0.40029 sec 13 6
0.4503 sec 40.5 5.5
0.50029 sec 51.5 6.5
0.55029 sec -4 6.5
0.60029 sec -8 6.5
0.65029 sec -14 5.5
0.70029 sec -28 6.5
0.75029 sec -11.5 7
0.8003 sec 61 7
⋮
関心のある信号を可視化するために、signal timetable の列を時間の経過に沿ってプロットし、さらに解析することができます。プロットには、Signal5
の最初の 5 秒間の値が表示されます。
plot(signalTimetable.Time, signalTimetable.Signal5); xlim(seconds([0 5]));
ARXML ファイルを閉じる
ワークスペースから変数をクリアして、ARXML ファイルへのアクセスを閉じます。
clear arxmlObj