技术博客

21/10/2019 作者 Magnus Carlsson

通过Kvaser Memorator Light HS v2用kvmlib读取记录文件

The Kvaser Memorator Light HS v2具备一个CAN通道,但有两个CAN报文缓存 – 使用环形(FIFO)缓存。一个缓存区记录总线上的所有报文,另一个缓存区分别记录在任何错误帧出现之前和出现之后的约1000条报文。Kvaser Memorator Light HS v2还能自动判断正确的CAN总线比特率,因此无需配置。

将Kvaser Memorator Light HS v2连接到Kvaser Memorator配置工具时,每个记录文件都会被标记为存储“Err(错误帧)”或“All(所有报文)”,依据该记录文件来自哪一个缓存。

图1:查看Kvaser Memorator配置工具中Kvaser Memorator Light HS v2存储的两种不同类型的记录文件。

读取记录文件的方式与通过任何Kvaser Memorator读取记录文件的方式相同,唯一的区别是‘logfile.log_type‘现在为源自错误帧缓存区的文件提供“Err”标记,该缓存仅在错误帧出现时被触发(约分别记录错误帧出现前后的1000个报文)。 

# 01_list_loggfiles.py
    from canlib import EAN, Device
    from canlib import kvmlib
    
     #通过 EAN 73-30130-01058-1连接到我们的 Kvaser Memorator Light HS v2 
     # 并加到存储区
     dev = Device.find(ean=EAN('01058-1'))
     memo = kvmlib.openDevice(dev.channel_number(), mount=True)
    
     fileCount = len(memo.log)
     print('Found {} file{} on card.'.format(
        fileCount,
        "s" if fileCount > 1 else "")
     )
   
     # 将所有记录文件包括进来并写上关于它们的信息
     for i, logfile in enumerate(memo.log):
         track = logfile.log_type  # 标注该文件来自哪一个缓存区
         events = logfile.event_count_estimation()
         start = logfile.start_time.isoformat(' ')
         stop = logfile.end_time.isoformat(' ')
         print("%s: %s %s events, start: %s, stop: %s" % (i, track, events, start, stop))
    
         # 读取第一个事件来获取EAN/系列号
         for event in logfile:
            print(str(event)[10:])  # 再次使用内嵌格式化, 移除 
               time part
            break  # 我们仅对第一个事件感兴趣,所以跳过其他步骤
  
        # 关闭Kvaser Memorator
        memo.close()

列表 1: 把记录下来的文件列入stdout

运行该程序报告的信息与Kvaser Memorator配置工具中显示的信息相同。

Found 7 files on card.
 0: LogFileType.ERR 1420 events, start: 2019-08-22 13:13:06, stop: 2019-08-22 13:13:30
       - EAN:73-30130-01058-1 s/n:204 FW:v3.16.100 LIO:v4.0
 1: LogFileType.ERR 2140 events, start: 2019-08-22 13:13:30, stop: 2019-08-22 13:13:49
       - EAN:73-30130-01058-1 s/n:204 FW:v3.16.100 LIO:v4.0
 2: LogFileType.ERR 2940 events, start: 2019-08-22 13:14:11, stop: 2019-08-22 13:14:56
       - EAN:73-30130-01058-1 s/n:204 FW:v3.16.100 LIO:v4.0
 3: LogFileType.ERR 2900 events, start: 2019-08-22 13:15:24, stop: 2019-08-22 13:15:43
       - EAN:73-30130-01058-1 s/n:204 FW:v3.16.100 LIO:v4.0
 4: LogFileType.ALL 3500 events, start: 2019-08-22 13:13:05, stop: 2019-08-22 13:13:49
       - EAN:73-30130-01058-1 s/n:204 FW:v3.16.100 LIO:v4.0
 5: LogFileType.ALL 2500 events, start: 2019-08-22 13:14:08, stop: 2019-08-22 13:14:56
       - EAN:73-30130-01058-1 s/n:204 FW:v3.16.100 LIO:v4.0
 6: LogFileType.ALL 2500 events, start: 2019-08-22 13:15:13, stop: 2019-08-22 13:15:43
       - EAN:73-30130-01058-1 s/n:204 FW:v3.16.100 LIO:v4.0
Author Image

Magnus Carlsson

Margus Carlsson是Kvaser AB公司的软件开发人员,从2007年以来深度参与了Kvaser固件和软件的开发。他还为Kvaser的技术博客撰写了许多用流行的Python语言编写应用程序的文章。