关于DBC文件的格式解析

  • 摘要
  • 1、版本与新符号
  • 2、波特率定义
  • 3、网络节点的定义
  • 4、报文帧的定义
  • 5、信号的定义
  • 6、注解部分
  • 7、属性定义部分
  • 8、数值表部分
  • 小结

摘要

在之前的文章里,我们通过一条报文示例展示了创建dbc文件的操作步骤。通过记事本打开在“关于DBC文件的创建”一文中创建的dbc文件,此时界面如下图所示:

如上图所示,一般dbc文件中包含了如下的8种信息:
1、版本与新符号
2、波特率定义
3、网络节点的定义
4、报文帧的定义
5、信号的定义
6、注解部分
7、属性定义部分
8、数值表部分

其中第2点、第3点是必须项,缺少这两项的dbc文件是不能用CANdb++ Editor软件打开的;接下来我们结合例子对dbc文件的这几项信息进行逐步解析介绍。

1、版本与新符号

如下图,Dbc文件头部包含着”version”与”new symbol”的信息;
        (1)、 ”version”信息可以为空,也可以由用户自定定义;
        (2)、 ”new symbol”信息在我们创建dbc文件时就已经自动生成;
所以这一部分的信息我们无需过多留意,一般默认即可。

2、波特率定义

格式如下:
                        BS_:[baudrate:BTR1,BTR2];
        其中BS_为关键字,用于定义CAN网络的波特率;[ ]内容表示为可选部分,可以省略(如下图例子中即把该部分省略了);但关键字”BS_:”必须存在,省略则会出错

3、网络节点的定义

格式如下:
                        BU_:Nodename1 Nodename2 Nodename3 ……
        其中BU_为关键字,表示网络节点,格式中的Nodename1、Nodename2表示定义的网络节点名字,由用户自己定义;但需保证节点命名的唯一性。

如示例中的BU_: AVNT ACU HUD :表示定义了AVNT、ACU、HUD这三个网络节点

4、报文帧的定义

格式如下:
                        BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter

(1)、BO_为关键字,表示报文;
        (2)、MessageId为定义的报文ID,是以10进制数表示的;如例子中的996,代表报文ID为0x3E4;
        (3)、MessageName表示该报文的名字,命名规则和C语言变量相同;
        (4)、MessageSize表示该报文数据域字节数,为无符号整型数据;
        (5)、Transmitter表示发送该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为” Vector__XXX”。

如示例中的BO_ 996 HUD_1_B: 8 HUD:表示定义了一条由HUD这个节点发送,数据域长度为8字节,ID为996(0x3E4),名字命名为HUD_1_B的报文

5、信号的定义

格式如下:
                        SG_ SignalName : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver

(1)、SG_为关键字,表示信号;
        (2)、SignalName、 StartBit、 SignalSize分别表示该信号的名字、起始位、信号长度;
        (3)、ByteOrder表示信号的字节顺序:0代表Motorola格式,1代表Inter格式
        (4)、 ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数
        (5)、Factor表示因子,Offset表示偏移量;这两个值于该信号的原始值与物理值之间的转换。
        转换如下:物理值=原始值*因子+偏移量;
        (6)、Min|Max表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型;
        (7)、Unit表示该信号的单位,为字符串类型;
        (8)、Receiver表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为” Vector__XXX”。

如示例中的 SG_ HUD_BrightnessLv : 15|4@0+ (1,0) [0|15] “lv” ACU,AVNT
表示定义了一个命名为HUD_BrightnessLv的信号,其起始位是第15位,信号长度4个位;信号是Motorola格式,数值类型为无符号类型数;因子为1,偏移量为0;信号取值范围为0到15;信号单位为字符串”lv”;该信号接收节点为ACU、AVNT这两个节点。

6、注解部分

格式如下:
                        CM_ Object MessageId/NodeName “Comment”

(1)、 CM_为关键字,表示注解信息;
        (2)、 Object表示进行注解的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”;
        (3)、 MessageId/NodeName 表示进行注解的对象,若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示);若前面的对象类型为节点,则这里的值应为节点的名字;
        (4)、 Comment表示进行注解的文本信息;

如示例中的 CM_ SG_ 996 HUD_HeightLv “Control hud height level”;
表示对ID为996(0x3E4)这条报文下的名为”HUD_HeightLv ”的信号进行注解说明,说明的内容为"Control hud height level"。

又如 CM_ BU_ HUD “Head Up Display";表示对HUD这个节点进行注解说明,说明的内容为" Head Up Display "。

7、属性定义部分

格式如下:
                        BA_DEF_ Object AttributeName ValueType Min Max;
                        BA_DEF_DEF_ AttributeName DefaultValue;

(1)、 BA_DEF_为关键字,表示属性定义;
        (2)、 Object表示属性定义的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”、网络节点” ”(用空格表示)等;
        (3)、 AttributeName表示进行定义的属性名字;
        (4)、 ValueType表示属性值的类型,可以是整型、字符串、浮点型、枚举类型等;
        (5)、Min/Max表示属性值的上下最值,即指定了取值范围(字符串类型没有此项)。
        (6)、 BA_DEF_DEF_为关键字,表示定义属性的初始值;
        (7)、 DefaultValue表示该属性的初始值。

如示例中的 BA_DEF_ SG_ “MyTry” INT 0 11;
                             BA_DEF_DEF_ “MyTry” 0;
        表示对定义了一个针对信号类型的属性,属性名为”MyTry”,属性值是整型数据,取值范围在0到11之间,初始值为0。

8、数值表部分

格式如下:
                        VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;

(1)、VAL_为关键字,表示数值表定义;
        (2)、 MessageId表示该信号所属的报文ID(10进制数表示);
        (3)、 SignalName表示信号名;
        (4)、 N “DefineN” …… 0 “Define0”表示定义的数值表内容,即该信号的有效值分别用什么符号表示 。

如示例中的 VAL_ 996 HUD_OffSt 1 “Active” 0 “Not Active”;
        表示对ID为996(0x3E4)的这条报文下的,一个命名为”HUD_OffSt”的信号,进行其数值表的定义;用”Active”取代1;用”Not Active”取代0。

小结

本文通过示例将常见dbc文件的格式分成了以下八点进行了阐述介绍。
        1、版本与新符号
        2、波特率定义
        3、网络节点的定义
        4、报文帧的定义
        5、信号的定义
        6、注解部分
        7、属性定义部分
        8、数值表部分

        其中第2点、第3点是必须项,其他项不一定都有。当我们对dbc文件的结构比较熟悉之后,可以在文本模式下直接对dbc文件进行修改编辑;例如直接拷贝数值表进行修改定义等操作,会比在"CANdb ++ Editor"界面下操作更方便。

【无标题】关于DBC文件的格式解析(DBC文件系列其二)相关推荐

  1. 关于DBC文件的格式解析(DBC文件系列其二)

    关于DBC文件的格式解析 摘要 1.版本与新符号 2.波特率定义 3.网络节点的定义 4.报文帧的定义 5.信号的定义 6.注解部分 7.属性定义部分 8.数值表部分 小结 摘要 在之前的文章里,我们 ...

  2. golang 读取excel(xlsx文件) 时间格式解析

    问题起源 最近在写一个读取xlsx文件,并解析其中数据的项目,在所有的数据都就绪之后,却遇到了时间格式获取不正确的问题 时间格式 我查询到的结果 我的代码 func main() {f, err := ...

  3. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  4. spark解析csv文件_Spark:解析CSV文件并按列值分组

    spark解析csv文件 我发现自己经常使用大型CSV文件,并且意识到我现有的工具集不能让我快速浏览它们,我以为我会花一些时间在Spark上看看是否有帮助. 我正在使用芝加哥市发布的犯罪数据集 :它的 ...

  5. 生成XML文件的步骤 解析XML文件

    ##生成XML文件的步骤 1.初始化一个xml的序列化器 XmlSerializer serializer = Xml.newSerializer(); 2.设置序列化器的参数 serializer. ...

  6. python读取svg文件_Python lxml解析svg文件

    我试图从 http://kanjivg.tagaini.net/解析.svg文件,但我无法成功提取内部信息. 0f9ab.svg的一部分如下所示: 我的.py文件: import lxml.etree ...

  7. 【无标题】使用Oracle官方提供的ova文件建立Oracle 19c学习环境

    Oracle官方提供了安装好的Oracle 19c虚拟机,打包成ova文件.可以使用这个文件建立一个oracle 19c的学习环境. 下载Oracle官方的虚拟机(OVA文件) Oracle官方提供了 ...

  8. python读取hdf文件 高效_Python解析HDF文件

    前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级 ...

  9. excel文件存入mysql_解析excel文件并将数据导入到数据库中

    今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...

最新文章

  1. PHP-Ajax跨域解决方案
  2. 超图桌面版加载obj 3D模型 - 2
  3. vue引入包mysql_vue中import引入文件和使用的方式总结
  4. hdu 3671 Boonie and Clyde
  5. apache的httpd.conf中文注释
  6. 怎样对ZBrush中的材料进行渲染和着色
  7. DjangoORM字段介绍
  8. Divide and conquer:Dropping tests(POJ 2976)
  9. [读书笔记] 敏捷软件开发:原则、模式与实践
  10. 物联网卡设置_物联网卡该怎样设置和使用——酷易充物联
  11. Spring Framework 源码解析课程大纲
  12. http://www.cnblogs.com/huxj/archive/2009/11/21/1607791.html
  13. 邮件误删不用怕,试试这个方法帮你找回来
  14. 【QGIS】【OsGeo4w】安装方法
  15. 小程序对wxParse 使用
  16. iphone163邮件服务器设置,怎样在iphone上设置网易免费企业邮箱收发邮件
  17. ImportError:cannot import name 'distribute_covar_matrix_to_match_covariance_type'
  18. Fires Dynamics Simulator(FDS)软件运行代码说明
  19. 珠峰高 8848 米,一张纸 0.01 米,这张纸对折多少次后高度超过珠峰
  20. Dynamic , Static or Seperate Schema Design (Convert No-SQL to ORDBMS)

热门文章

  1. Java程序员最全面的学习路线图
  2. linux 软件安装及卸载
  3. 如果我有一颗私人卫星……|潮科技有奖问答评论精选 ②
  4. jenkins配置master-slave并发布dubbo服务
  5. tesseract 识别图片应用一
  6. 输入空间、输出空间、特征空间与假设空间
  7. python 证书-python requests证书问题解决
  8. 欧拉中的俯仰、横滚、偏航角
  9. mapDispatchToProps
  10. Allegro软件操作——绘制完成后检查内容,Gerberout