gitee仓库地址:HuangJunzeng/dbc_Parse

在工作中难免会遇到需要手动解析CAN报文的需求。从dbc或excel文件手动做CAN报文的解析接口,非常繁琐且容易出错。使用Python开源库如cantools等可以自动生成解析接口,但生成的文件、接口形式总是不能完全满足需求。

索性自己开发一个python小工具。目前可以实现从dbc文件直接生成CAN报文的解析、打包接口。

生成的接口文件借鉴了AUTOSAR的设计思路:
1)读取dbc文件,生成CAN报文、CAN信号的配置文件。CAN信号的配置结构体中包含该信号的数据类型、起始位、长度等信息。
2)手动编写静态解析/打包接口,可以根据CAN报文、CAN信号的配置信息,解析CAN信号,或将CAN信号打包至CAN报文原始数据中。

这种设计的优势是:
1)代码解耦,读取dbc文件生成配置文件的部分,与解析/打包的静态代码可以分开设计实现。
2)基于代码的解耦,方便后续对工具进行维护升级,如目前工具还不支持intel格式、不支持信号复用格式等等。后续读取dbc文件生成配置代码、静态代码部分可以分开进行功能扩展和测试。

这种设计的劣势是:
1)解析/打包的函数接口运行效率较低。
2)占用Flash或RAM空间较多。由于每个CAN信号都要生成相应的配置结构体,如果CAN信号较多,则要占据较大的RAM空间。考虑对单片机来说RAM资源更宝贵,在生成配置结构体时将其配置为const类型,改存到Flash中。

其实有另一种接口生成的思路,就是直接在接口中对CAN原始报文进行移位操作、计算分辨率和偏移量,这种设计的代码运行效率显然更高。但代价就是工具本身的代码耦合性高,不方便后期的功能升级和维护。笔者在做好这版工具后会考虑按这种思路再做一版。

工具还在开发中,尚未充分测试,笔者会在readme.md中记录相关信息,使用工具前注意下工具开发进度。