文章目录
前言
dbc文件是汽车行业常见的数据库文件,用于描述CAN总线数据的物理值、单位、发送周期、计算公式、信号名称等信息。
用Python处理dbc文件的库有很多,比如 python-can,cantools和canmatrix,甚至可以用正则表达式自行进行解析。其解析本质差不多,下面分享下canmatrix常用的一些方法。
1. 相关库安装
canmatrix使用时直接"import canmatrix"即可,但是会打印出一些 "xxx is not supported"的提示信息,这是使用到的库没安装导致的。
在.\canmatrix\formats路径下有很多 xxx.py文件,这些文件用于解析相对应后缀名的文件。打开"xxx is not supported"对应的.py,安装文件中用到(import)的三方库即可。
2. dbc和Excel格式互转
安装canmatrix后,在\Python\PythonXX\Scripts路径下,会有一个canconvert.exe。可以直接在命令行中:
- 输入"canconvert xxx.dbc xxx.xlsx"将dbc转成xlsx格式。(表格中一些单元格中的字体是透明的,可以全选改成黑色。)
- 输入"canconvert xxx.xls xxx.dbc"将xls转成dbc格式。(不支持xlsx格式,可先将xlsx导出为xls格式)
也可以用canmatrix.convert py脚本,比如:
from canmatrix import convert
convert.convert(
r'aa.dbc',
r'aa.xlsx'
)
canconvert导入导出的表格是有固定格式的,常用于临时查看dbc中的报文和信号。一般公司会有matrix特定的表格格式,这就需要特定处理了。
3. 读取dbc文件
3.1 matrix信息
import canmatrix
file = r'Test.dbc'
dbs = canmatrix.formats.loadp(file)
print(type(dbs), dbs)
- canmatrix.formats.loadp(file)用于load不同格式的文件。打印其信息,是一个字典类型。
matrix = dbs.get('')
print(type(matrix), matrix)
for k, v in matrix.__dict__.items():
print(k, v)
- 获取字典中的value,其类型是CanMatrix,dbc中的信息都在这里。打印其中包含的信息,如下图所示:
3.2 Ecu信息
for ecu in matrix.ecus: