从 BLF 文件解码 LIN 数据
此示例说明如何在 MATLAB® 中从 BLF 文件中导入和解码 LIN 数据进行分析。此示例中使用的 BLF 文件是从 Vector CANoe™ 生成的。此示例还使用 LIN 描述文件 (LDF) ExteriorLight_LIN_CH4.ldf
来解码 LIN 网络信息。
打开 LDF 文件
使用 linDatabase
函数打开描述源 LIN 网络的数据库文件。
ldb = linDatabase("ExteriorLight_LIN_CH4.ldf")
ldb = Database with properties: File Information Name: "ExteriorLight_LIN_CH4.ldf" Path: "/tmp/Bdoc25b_2988451_1430519/tpe4ace63d/vnt-ex26110327/ExteriorLight_LIN_CH4.ldf" ProtocolVersion: 2.2000 LanguageVersion: 2.2000 BusSpeed: 19.2000 Network Information Nodes: [6×3 table] Frames: [7×5 table] Signals: [19×5 table]
调查 BLF 文件
检索和查看有关 BLF 文件的信息。函数 blfinfo
解析有关 Vector 二进制记录格式 BLF 文件的格式和内容的一般信息,并将信息以结构体形式返回。通道详细信息主要按协议组织,CAN 和 CAN FD 分组在一起,然后是 LIN 协议,接着按 ChannelID 排序。在此示例中,显示 7 个 CAN/CAN FD 通道,因为检测到的最高通道是 7;任何缺失数据的通道将显示 0 个对象。此外,列出 6 个 LIN 通道,因为检测到的具有 LIN 数据的最高通道是 6。
info = blfinfo("Logging.blf")
info = struct with fields:
Name: "Logging.blf"
Path: "/tmp/Bdoc25b_2988451_1430519/tpe4ace63d/vnt-ex26110327/Logging.blf"
Application: "CANoe"
ApplicationVersion: "18.2.65"
Objects: 3568
StartTime: 16-Jan-2025 14:44:41.936
EndTime: 16-Jan-2025 14:44:59.137
ChannelList: [13×3 table]
info.ChannelList
ans=13×3 table
ChannelID Protocol Objects
_________ ________ _______
1 "CAN FD" 314
2 "CAN" 0
3 "CAN" 258
4 "CAN FD" 314
5 "CAN" 0
6 "CAN" 0
7 "CAN" 86
1 "LIN" 0
2 "LIN" 0
3 "LIN" 1281
4 "LIN" 939
5 "LIN" 0
6 "LIN" 285
从 BLF 文件中读取数据
感兴趣的 LIN 数据存储在 BLF 文件的通道 4 中。根据 blfinfo
函数的输出,LIN 协议的通道 4 包含 939 条 LIN 报文。使用 blfread
函数读取 LIN 数据。要访问 LIN 数据,请将 "ProtocolMode
" NV 对组值指定为 "LIN"。此外,向函数调用提供 LIN 数据库对象,这将启用报文名称查找和信号值解码。
blfData = blfread("Logging.blf", ChannelID = 4, ProtocolMode ="LIN", Database = ldb)
blfData=939×8 timetable
Time ID Name Data Length Signals ErrorType ChecksumType Checksum
___________ __ ___________ ____________________________________________________ ______ ____________ _________ ____________ ________
0.10573 sec 21 DLFLeft_01 255 0 255 206 255 255 0 0 6 {1×1 struct} None Enhanced 219
0.1125 sec 22 DLFRight_01 254 0 255 255 255 255 161 255 8 {1×1 struct} None Enhanced 136
0.11875 sec 25 GWE_01 224 0 255 247 255 255 203 0 7 {1×1 struct} None Enhanced 193
0.12187 sec 26 GWE_02 244 0 0 0 0 0 0 0 1 {1×1 struct} None Enhanced 240
0.20625 sec 23 DLRLeft_01 0 254 34 255 255 255 255 0 7 {1×1 struct} None Enhanced 71
0.21146 sec 24 DLRRight_01 16 254 55 255 255 0 0 0 5 {1×1 struct} None Enhanced 224
0.21562 sec 27 WWS_01 253 4 170 0 0 0 0 0 3 {1×1 struct} None Enhanced 247
0.22135 sec 21 DLFLeft_01 255 0 255 235 255 255 0 0 6 {1×1 struct} None Enhanced 190
0.22812 sec 22 DLFRight_01 253 0 255 255 255 255 52 255 8 {1×1 struct} None Enhanced 246
0.23437 sec 25 GWE_01 224 0 255 247 255 255 122 0 7 {1×1 struct} None Enhanced 19
0.2375 sec 26 GWE_02 236 0 0 0 0 0 0 0 1 {1×1 struct} None Enhanced 248
0.30573 sec 21 DLFLeft_01 252 0 255 36 255 255 0 0 6 {1×1 struct} None Enhanced 137
0.3125 sec 22 DLFRight_01 253 0 255 255 255 255 116 255 8 {1×1 struct} None Enhanced 182
0.31875 sec 25 GWE_01 224 0 255 247 255 255 108 0 7 {1×1 struct} None Enhanced 33
0.32187 sec 26 GWE_02 236 0 0 0 0 0 0 0 1 {1×1 struct} None Enhanced 248
0.40625 sec 23 DLRLeft_01 0 254 128 255 255 255 255 0 7 {1×1 struct} None Enhanced 232
⋮
查看来自第一个 GWE_01
报文的信号。
blfData.Signals{3}
ans = struct with fields:
GWE_TurnIndicationLeft: 0
GWE_TurnIndicationRight: 0
GWE_WarningLight: 0
GWE_DrivingLight: 1
GWE_Reserved: 203
重新打包并可视化感兴趣的信号值
要将来自总线上每个唯一报文的信号数据组织为一个信号时间表,请使用 hLINSignalTimetable
辅助函数。此示例说明如何为 LIN 报文时间表中感兴趣的特定报文 "GWI_01
" 创建信号时间表。"GWI_01
" 报文包括以下信号:左转、右转、警告/危险灯和驾驶灯。
signalTimetable = hLINSignalTimetable(blfData,'GWE_01')
signalTimetable=171×5 timetable
Time GWE_TurnIndicationLeft GWE_TurnIndicationRight GWE_WarningLight GWE_DrivingLight GWE_Reserved
___________ ______________________ _______________________ ________________ ________________ ____________
0.11875 sec 0 0 0 1 203
0.23437 sec 0 0 0 1 122
0.31875 sec 0 0 0 1 108
0.43437 sec 0 0 0 1 248
0.51875 sec 0 0 0 1 199
0.63437 sec 0 0 0 1 197
0.71875 sec 0 0 0 1 245
0.83437 sec 0 0 0 1 119
0.91875 sec 0 0 0 1 67
1.0344 sec 0 0 0 1 198
1.1187 sec 0 0 0 1 86
1.2344 sec 0 0 0 1 14
1.3187 sec 0 0 0 1 134
1.4344 sec 0 0 0 1 233
1.5187 sec 0 0 0 1 153
1.6344 sec 0 0 0 1 26
⋮
为了可视化感兴趣的信号,可以绘制信号时间表中的列随时间变化的图,以便进一步分析。
stackedplot(signalTimetable,{"GWE_TurnIndicationLeft","GWE_TurnIndicationRight","GWE_WarningLight","GWE_DrivingLight"},marker=".") title("Signals from 'GWE\_01' Message")