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