![321bd3338776db6a17b58b742400a7a8.png](https://i-blog.csdnimg.cn/blog_migrate/9efbaf3ec8206295a140875edb299aa6.jpeg)
本篇文章主要介绍 CAN总线工具
第一节 Excel2DBC工具
基于python脚本的excel2dbc工具,可以实现从excel矩阵文件自动化转换成dbc文件,转换过程中,能够检查excel文件中的错误,生成错误检查报告,实现一周的工作10分钟完成,大幅提高工作效率,节省出来的时间,可以用来学习新技术,然后运用在工作中的其他领域,善用工具,实现正向循环。
Dbc文件格式是Vector公司的CAN总线数据库文件,可以用Vector的CANdb++软件编辑,该文件格式也被Vspy、周立功等CAN工具支持。先先说一下dbc文件的格式吧,用notepad++打开dbc文件,可以看到很多奇怪的符号,其实就是值表、报文和信号、注释、dbc文件属性等内容。每项内容前面都会用关键字标志出来,BU_:后面接控制器名称,比如BCM,VAL_TABLE_表示值表,格式为:VAL_TABLE_ 信号名 值 “值描述”, BO_是报文,格式为BO_ CANID(10进制) 报文名: DLC 发送节点;SG_是信号,格式为SG_ 信号名 :起始位(从1计数)|信号长度@interl格式(1)/摩托罗拉格式(2)数据格式(+表示unsigned) (精度,偏移量) [最小值|最大值] “单位” Vector__XXX(就是一个标志,也可以是其他的);CM_表示注释,后面是报文和信号的描述;BA_DEF_是dbc文件定义的属性,BA_DEF_DEF_是dbc文件使用的属性;BA_发送类型和报文类型的表述,见图7-1-1最后一个数字,GenMsgSendType为发送类型,0表示周期型(这个在BA_DEF_字段自定义的),VframeFormat表示报文类型,3表示可以标准帧(这个也在BA_DEF_字段自定义);VAL_字段是信号值的表述,格式为VAL_ CANID 信号名 值 “值描述”。以上基本就是一个dbc文件的所有字段了。
![abf21a916bbaa7c8cafa83cbe1faded4.png](https://i-blog.csdnimg.cn/blog_migrate/11e4f827945b9aa0bd88fff0eeecf7c1.png)
基于python的excel2dbc转换工具,其核心原理就是读取excel文件中报文和信号的属性,将其封装为结构体数组,见图7-1-2,构造了Msg类和Sig类,分别封装报文和信号的相关属性,比如报文名称、报文ID、报文数据长度、发送节点和周期、信号名称、信号所在字节和位、信号精度和偏移量等等,读取excel矩阵的内容,填充这些类,为后续操作做准备。在读取的过程中,转换工具会检查excel文件中的语法错误,生成错误报告,只有当所有的语法错误都修改后,才能生成dbc文件。
![cea7b8a0fbbeb71c842cfd3aeca59598.png](https://i-blog.csdnimg.cn/blog_migrate/192bc7446d83c2804f785bf52dda4b97.jpeg)
整个工具运行流程见图7-1-3,首先加载excel矩阵文件(矩阵文件的格式暂时固定,用标准模板),将所有的报文和信号的属性封装起来,存放在计算机内存,然后会读取这些封装的内容,检查excel文件中存在的错误,如果没有错误,则直接生成dbc文件,如果有错误,则生成错误检查报告,用户根据错误检查报告的提示,修改excel矩阵文件中的错误,常见错误包括信号值为空、报文周期未定义、报文发送节点未定义等等,修改完错误后,再次运行工具,就能生成dbc文件了。
生成dbc文件以后,当我们用CANdb++打开dbc文件时,可能还会报错,见图7-1-4,根据提示,用notepad++打开dbc文件,找到对应的行数(一般出错的地方都是在报错行数的下一行),错误原因一般是命名不符合C语言规范,多了特殊字符等原因,修改了这些错误以后,dbc文件就能正常打开了。
![749d2e4d80dd29942dfa216119964ef0.png](https://i-blog.csdnimg.cn/blog_migrate/869b80e90e6ab1bd3e6983b8d677b1e8.png)
![21955f06d934d165c7ce58de535b93ef.png](https://i-blog.csdnimg.cn/blog_migrate/7b712c436ae933a51ff3f46390710213.png)