张宁的个人博客

莫道君行早,更有早行人。

cantools库 ①快速了解入门

张宁的个人博客/发布时间:2023-07-19/分类:软件&硬件/ 浏览量:9149

一、cantool库介绍

1. 什么是cantools

Cantools是一个基于Python 3的CAN总线工具集,提供了丰富的功能来处理CAN消息和信号。Cantools能够轻松集成到各种开发和测试环境中。此外,它还提供了C源代码生成功能,使得在嵌入式系统中使用CAN协议变得更加便捷。Cantools是一个功能强大且易于使用的CAN总线工具,无论是汽车电子开发、工业自动化还是科研教育,都能提供极大的帮助。如果你正在寻找一个全面的CAN总线解决方案,Cantools绝对值得一试。cantools依赖python-can,其在安装时会自动安装python-can库。python-can参见《python-can》

项目主页:https://github.com/cantools/cantools 

文档介绍:https://cantools.readthedocs.io/   

2. cantools可以做什么

其可以完成如下功能:

  • DBC、KCD、SYM、ARXML 3&4和CDD文件解析。(最常用功能)

  • CAN消息编码和解码。(最常用功能)

  • 简单和扩展的信号多路复用。

  • 诊断DO编码和解码。

  • candump输出解码器。

  • 节点测试器。

  • C源代码生成器。

  • CAN总线监视器。

  • 信号的图形图。

3. 安装方法

使用pip安装cantools库(使用了清华的国内镜像源,加速下载):

$ pip install cantools -i https://pypi.tuna.tsinghua.edu.cn/simple

二、案例简介

下面介绍一个使用cantools解析DBC文件的例子。关于DBC介绍参见:https://zgc261.com/post/20230970.html 

import can
import cantools
import cantools.database
import cantools.database.can.signal
       
if __name__ == "__main__":
    dbc1 = cantools.database.load_file("dbc/can_test.dbc")  #解析DBC文件
    print(dbc1)

使用了cantools.database.load_file()函数读取并解析了can_test.dbc文件。输出如下:

  1. DBC文件版本

  2. 节点信息

  3. message信息(包含具体signal信号)- 重点信息,后面会基于DBC的结构,对BDC进行解析,以按正确的格式解析实时CAN数据或Blf报文数据。

version('')     

node('GW', None)
node('BDC', None)
... ...

message('THU_50A', 0x50a, False, 8, None)
  signal('IP_FuelLeftover', 7, 7, 'big_endian', False, 0, 1, 0, 0, 127, 'L', False, None, None, None, None) 
  ... ...

message('GW_3FC', 0x3fc, False, 64, None)
  signal('PCU_ChrgImaxlimtFB', 7, 3, 'big_endian', False, 0, 1, 0, 0, 6, '/', False, None, None, None, None)  
  signal('PCU_EngStrtEnableFbk', 4, 2, 'big_endian', False, 0, 1, 0, 0, 3, '/', False, None, None, None, None)
  ... ...

... ...

-完-

文章关键词
python
CAN
cantools
发表评论