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/
其可以完成如下功能:
DBC、KCD、SYM、ARXML 3&4和CDD文件解析。(最常用功能)
CAN消息编码和解码。(最常用功能)
简单和扩展的信号多路复用。
诊断DO编码和解码。
candump输出解码器。
节点测试器。
C源代码生成器。
CAN总线监视器。
信号的图形图。
使用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文件。输出如下:
DBC文件版本
节点信息
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) ... ... ... ...
-完-