主要内容

从 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")

Figure contains an object of type stackedplot. The chart of type stackedplot has title Signals from 'GWE\_01' Message.