主要内容

使用 ARXML 从 BLF 文件读取数据

此示例说明如何使用 ARXML 作为数据库从 BLF 文件读取数据。

打开 ARXML 文件

使用 arxmlDatabase 函数打开 ARXML 文件 DecodingExample.arxml

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]

查看 BLF 文件的详细信息

检索和查看有关 BLF 文件的信息。函数 blfinfo 解析有关 Vector 二进制记录格式 BLF 文件的格式和内容的一般信息,并将信息以结构体形式返回。

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

从 BLF 文件读取数据

感兴趣的数据存储在 BLF 文件的通道 1 中。使用 blfread 函数读取 CAN 数据。您还可以向函数调用提供 ARXML 文件以启用报文名称查找和信号值解码。

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
      ⋮

查看 Frame2 报文中包含的感兴趣信号。

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

重新打包并可视化感兴趣的信号值

使用 canSignalTimetable 函数将来自总线上每个唯一报文的信号数据重新打包为一个信号时间表。

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
      ⋮

为了可视化感兴趣的信号,可以绘制信号时间表中的列随时间变化的图,以便进一步分析。该图显示 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.