主要内容

使用 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
    ChannelID    Protocol    Objects
    _________    ________    _______

        1         "CAN"       6070  
        2         "CAN"          0  

从 BLF 文件读取数据

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

blfData = blfread("BLF_ARXML.blf", 1, "Database", arxmlObj)
blfData=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 
      ⋮

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

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

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

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

signalTimetable = canSignalTimetable(blfData, "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   
      ⋮

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