メインコンテンツ

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

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])); 

Figure contains an axes object. The axes object contains an object of type line.

ARXML ファイルを閉じる

ワークスペースから変数をクリアして、ARXML ファイルへのアクセスを閉じます。

clear arxmlObj