DBC 文件详解

1. DBC 文件解读

  • DBC 是由 vector 公司定义的 CAN 网络通信文件格式,具体规范可参考《DBC File Format Document》。
  • DBC 文件常用 Vector CANdb++ Editor 工具打开。打开后的界面如下:
    在这里插入图片描述

在这里插入图片描述

  • Network nodes 中定义了本 DBC 文件所有报文的发送及接收节点;展开节点 NEO 可查看该节点的发送及接收报文。
    在这里插入图片描述
  • Node Name 定义了报文的发送节点;Massage Name 定义了报文名称。
    在这里插入图片描述
  • Name 还是对应报文名称;ID 对应报文 ID,十六机制,每个 CAN 报文都有自己唯一对应的 ID 号;DLC 为该报文的长度,单位为 Byte;Cycle Time 为循环发送时间,即应每隔多久发送一次,此处为 0。
    在这里插入图片描述
  • Signals 为该帧报文包含的信号;Transmitters 为该报文的发送节点;Receivers 为该报文的接收节点;
    在这里插入图片描述
  • Layout 的排版格式如上,具体含义需结合下面的信号格式解读。
    在这里插入图片描述
  • 注意左上角标题:Node Rx Signal’LAT_DIST’,即某节点的接收信号,而报文的左上角标题为’Massage’,注意区分。
  • Node Name定义了信号的发送节点;Massage Name 定义了信号所在的报文名称;Signal Name 定义了信号名称。
    在这里插入图片描述
  • 由于该面板是在Massage选项框下的,故所有信息均为报文TRACK_3的信息。
    在这里插入图片描述
  • 该面板是在Signal选项框下的,故所有信息均为信号LAT_DIST的信息。
  • 长为10个bit;Layout对应的排序方式为Motorola;单位为m;数据类型为有符号整型;初始值为0;精度为0.0625;偏移量为0;最小值0;最大值63.5。
  • 该信号所代表的实际物理值 = 原始值(二进制转为十进制)*因子+偏移量。
    在这里插入图片描述
  • Motorola格式,从起始位开始自右向左倒退。
    在这里插入图片描述
  • Inter格式,从起始位开始自右向左前进。
  • 当信号在一个字节内实现(信号不跨字节)时,Intel 格式和 Motorola 格式的信号排序完全一致,信号的高位(MSB)放在该字节的高位,信号的低位(LSB)放在该字节的低位。
  • 当信号在多个字节内实现(信号跨字节)时,Intel 格式和 Motorola 格式的信号排序有所不同:
    • Intel 格式:信号的高位(MSB)放在高字节的高位,信号的低位(LSB)放在低字节的低位;
    • Motorola格式:信号的高位(MSB)放在低字节的高位,信号的低位(LSB)放在高字节的低位。
  • 不管是 Intel 格式,还是 Motorola 格式,起始位都为该信号的低位。

2. DBC文件的底层实现逻辑

  • 用记事本或Nodepad++打开一份DBC文件,如下:
VERSION ""

NS_ :
	NS_DESC_
	CM_
	BA_DEF_
	BA_
	VAL_
	...
	BU_SG_REL_
	BU_EV_REL_
	BU_BO_REL_
	SG_MUL_VAL_

BS_:

BU_: K182_PACM K43_PSCM K17_EBCM NEO K124_ASCM
  • VERSION:定义DBC文件的版本信息,这里并未给出。
  • NS_(New Symbol) :定义DBC文件使用的命名空间,该信息在创建DBC文件时自动生成,一般无需理会。
  • BS_:用于定义CAN网络通讯的波特率,内容可以省略,但该关键字必须存在。
  • BU_:定义总线上的节点,在这个例子中有5个节点:K182_PACM、K43_PSCM、K17_EBCM、NEO和K124_ASCM。
    在这里插入图片描述
BO_ 823 PACMParkAssitCmd: 7 NEO
 SG_ RollingCounter : 35|2@0+ (1,0) [0|0] ""  NEO
 SG_ SteeringWheelChecksum : 47|16@0+ (1,0) [0|0] ""  NEO
 SG_ SteeringWheelCmd : 23|16@0+ (1,0) [0|0] ""  NEO
  • BO_:定义了一个数据帧,即一帧报文,其ID为823(十六进制对应0x337);该帧报文的名称为:PACMParkAssitCmd;整个报文长为7个字节,CAN 2.0最长为8字节,CAN FD最长为64字节;发送节点为NEO。如果该报文没有指定发送节点,则发送节点处设置为” Vector__XXX”。
    在这里插入图片描述
    在这里插入图片描述
  • SG_:定义了该报文包含的信号,共RollingCounter、SteeringWheelChecksum和SteeringWheelCmd,3个信号。
    在这里插入图片描述
// BO_ 1073 TRACK_1: 8 RADAR
 SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m"  NEO
  • 定义了一个名为LONG_DIST的信号;从第7位开始;长为12个bit;@0表示信号的字节顺序,0代表Motorola,1代表Inter;+表示无符号数,-表示有符号数;Factor=0.0625;OffSet=0;min=0;max=255.5;单位为"m ";接收节点为NEO。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
 SIG_GROUP_ 896 VehBattU 1 : VehBattUSysU VehBattUSysUQf;
  • 定义信号组VehBattU,包含两个信号VehBattUSysU和VehBattUSysUQf。
    在这里插入图片描述
CM_ SG_ 1024 RADAR_STATE "need to find out more diagnostic values";
  • CM_(Comment):用于添加备注和注释,方便用户理解文件内容。上述代码的含义为:RADAR_STATE的信号ID为1024(十六机制为0x400),含义为"need to find out more diagnostic values"。
  • 可以进行注解的对象类型不仅限于信号,还可以是节点“BU_”、报文“BO_”等。
    在这里插入图片描述
VAL_ 1024 RADAR_STATE 121 "ok" 110 "faulted" 105 "wrong_config";
  • VAL_(Value Table):给信号添加值域描述。定义报文ID为1024(十六机制为0x400)的信号RADAR_STATE为枚举变量,当其值为121时表示"ok";110时表示"faulted";105时表示"wrong_config"。
    在这里插入图片描述

参考资料:Author:bitbug123

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java DBC文件解析是指使用Java编程语言对DBC文件进行解析和处理的过程。DBC文件是CAN网络通信协议的描述文件,它定义了CAN协议的消息,信号,节点等信息。 在Java中解析DBC文件涉及到以下几个步骤: 1. 导入相关的Java库:首先需要导入相关的Java库来处理和解析DBC文件。比如,可以使用Apache POI库来读取和解析Excel格式的DBC文件,或者使用自定义的DBC解析库。 2. 读取DBC文件:使用Java代码读取和加载DBC文件,可以将DBC文件读取到内存中,以便后续的解析和处理。 3. 解析DBC文件:解析DBC文件的过程包括解析消息、信号、节点等信息。根据DBC文件的格式和结构,可以使用Java代码逐行解析DBC文件,并将解析的结果存储到相应的数据结构中,比如使用Java的类和对象来表示消息、信号和节点等。 4. 处理和利用解析结果:解析完DBC文件后,可以根据解析结果进行各种操作和处理。例如,可以根据解析的节点信息,生成相应的代码来实现CAN节点的功能;或者根据解析的消息和信号信息,构建CAN消息的发送和接收逻辑。 5. 错误处理和异常处理:在解析DBC文件的过程中,可能会遇到各种错误和异常情况,比如文件路径错误、文件格式错误等。在Java代码中需要适当处理这些错误和异常情况,以保证程序的稳定性和可靠性。 总之,Java DBC文件解析是一项比较复杂的任务,需要熟悉DBC文件的格式和结构,以及相关的Java编程知识和技巧。通过解析和处理DBC文件,可以方便地获取和利用CAN协议的消息和信号等信息,从而实现相应的功能和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值