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