Contenuto principale

Read Data from BLF Files Using ARXML

This example shows you how to read data from a BLF file using ARXML as the database.

Open the ARXML File

Open the ARXML file DecodingExample.arxml using arxmlDatabase function.

arxmlObj = arxmlDatabase("DecodingExample.arxml")
arxmlObj = 
  Database with properties:

    Name: "DecodingExample.arxml"
    Path: "C:\ExampleManager772791\user.Example_ARXMLCANDecoding\vnt-ex11728030\DecodingExample.arxml"
     CAN: [1×1 shared.vnt.arxml.protocol.CAN]

View Details of the BLF File

Retrieve and view information about the BLF file. The blfinfo function parses general information about the format and contents of the Vector Binary Logging Format (BLF) file and returns the information as a structure.

blfin = blfinfo("BLF_ARXML.blf")
blfin = struct with fields:
                  Name: "BLF_ARXML.blf"
                  Path: "C:\ExampleManager772791\user.Example_ARXMLCANDecoding\vnt-ex11728030\BLF_ARXML.blf"
           Application: "CANoe"
    ApplicationVersion: "18.2.65"
               Objects: 6075
             StartTime: 15-Nov-2024 18:06:16.345
               EndTime: 15-Nov-2024 18:07:17.460
           ChannelList: [2×3 table]

blfin.ChannelList
ans=2×3 table
    1    "CAN"    6070
    2    "CAN"       0

Read Data from the BLF File

The data of interest was stored in channel 1 of the BLF file. Read the CAN data using the blfread function. You can also provide the ARXML file to the function call to enable message name lookup and signal value decoding.

blfData = blfread("BLF_ARXML.blf", 1, "Database", arxmlObj)
blfData=6070×8 timetable
    0.050294 sec         2048    1    'Frame2'                [250,0,16,0,4,0,1,0]    8    1×1 struct    0    0
    0.050526 sec            3    0    'Frame4'    [210,236,104,118,52,187,124,192]    8    1×1 struct    0    0
    0.050694 sec           16    0    'Frame5'                        [0,3,89,100]    4    1×1 struct    0    0
    0.050898 sec         2047    0    'Frame1'             [226,99,235,64,255,255]    6    1×1 struct    0    0
    0.051184 sec    536870911    1    'Frame3'           [0,0,45,10,68,26,184,161]    8    1×1 struct    0    0
     0.10029 sec         2048    1    'Frame2'                [237,0,12,0,6,0,0,0]    8    1×1 struct    0    0
     0.10053 sec            3    0    'Frame4'          [0,56,252,27,254,13,75,64]    8    1×1 struct    0    0
     0.10071 sec           16    0    'Frame5'                      [0,252,200,92]    4    1×1 struct    0    0
     0.10091 sec         2047    0    'Frame1'               [68,41,41,64,249,255]    6    1×1 struct    0    0
      0.1012 sec    536870911    1    'Frame3'          [0,64,126,0,196,46,248,98]    8    1×1 struct    0    0
     0.15029 sec         2048    1    'Frame2'                [118,0,24,0,4,0,0,0]    8    1×1 struct    0    0
     0.15052 sec            3    0    'Frame4'        [120,21,188,10,94,69,132,64]    8    1×1 struct    0    0
     0.15069 sec           16    0    'Frame5'                      [0,252,161,14]    4    1×1 struct    0    0
     0.15089 sec         2047    0    'Frame1'              [41,48,20,192,254,255]    6    1×1 struct    0    0
      ⋮

View the signals of interest included in the Frame2 message.

blfData.Signals{1}
ans = struct with fields:
     Signal5: 27
    Signal11: 7

Repackage and Visualize Signal Values of Interest

Use the canSignalTimetable function to repackage signal data from each unique message on the bus into a signal timetable.

signalTimetable = canSignalTimetable(blfData, "Frame2")
signalTimetable=1214×2 timetable
    0.050294 sec         27         7
     0.10029 sec    20.5000    6.5000
     0.15029 sec         89         8
     0.20029 sec        -22         8
     0.25029 sec         68         7
     0.30029 sec    10.5000         7
     0.35029 sec        -19    7.5000
     0.40029 sec         13         6
      0.4503 sec    40.5000    5.5000
     0.50029 sec    51.5000    6.5000
     0.55029 sec         -4    6.5000
     0.60029 sec         -8    6.5000
     0.65029 sec        -14    5.5000
     0.70029 sec        -28    6.5000
      ⋮

To visualize the signals of interest, columns from the signal timetables can be plotted over time for further analysis. The plot shows the first 5 seconds value for the Signal5.

plot(signalTimetable.Time, signalTimetable.Signal5); 
xlim(seconds([0 5])); 

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