CAN DBC 解析规则

目录

CAN 总线的拓扑图:

CAN 报文的解析规则:

DBC 文件介绍:

1.版本和新符号

2.波特率定义:

3.网络节点的定义

4.报文帧的定义

5.信号的定义

6.注解部分

7.属性定义部分

8.数值表部分

​编辑 Can 报文实际解析:

CAN 总线的拓扑图:

 

CAN 报文的解析规则

通常是讲接收到的16进制数据翻译成字符串格式的数据,根据dbc 文件中定义的规则来进行解析。

 

DBC 文件介绍:

以CDCU_ICAN_Release.dbc为例来介绍:

1.版本和新符号

2.波特率定义

   BS_:[baudrate:BTR1,BTR2];其中BS_为关键字,用于定义CAN网络的波特率;[ ]内容表示为可选部分,可以省略关键字”BS_:”必须存在,省略则会出错

 

3.网络节点的定义

        格式如下:

        BU_:Nodename1 Nodename2 Nodename3 ……

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

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”。

 

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”。

6.注解部分

        格式如下:

        CM_ Object MessageId/NodeName “Comment”

        (1)、 CM_为关键字,表示注解信息;

        (2)、 Object表示进行注解的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”;

        (3)、 MessageId/NodeName 表示进行注解的对象,若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示);若前面的对象类型为节点,则这里的值应为节点的名字;

        (4)、 Comment表示进行注解的文本信息;

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表示该属性的初始值。

 

8.数值表部分

        格式如下:

        VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;

        (1)、VAL_为关键字,表示数值表定义;

        (2)、 MessageId表示该信号所属的报文ID(10进制数表示);

        (3)、 SignalName表示信号名;

        (4)、 N “DefineN” …… 0 “Define0”表示定义的数值表内容,即该信号的有效值分别用什么符号表示

 Can 报文实际解析:

使用can lin 串口工具抓取rawdata :

30 2E 71 00 00 00 00 00 00 00 00 25 49 15 00 00 00 01 10 00 00 00 00 00 00 00 00 00 00 00 0A 00 34 1D 07 41 D0 40 3C 3C 00 00 28 FF FF FF FF FF FF FF FE 00 00 00 00 00 00 00 00 00 00 00 00 00

通过dbc 文件找到报文的定义:

BO_ 816 I_CDCU_State: 64 CDCU

解析第一个signal:

RawData:30------>0011 0000 从第六位开始2个bit

信号:SG_ I_CDCU_KL15State 

7

6

5

4

3

2

1

0

0

0

1

1

0

0

0

0

值定义:

VAL_ 816 I_CDCU_KL15State 0 "IG_OFF" 1 "LOCAL_IG_ON" 2 "REMOTE_IG_ON" 3 "Reserved" ;

值:1 ------->LOCAL_IG_ON

再解析 I_CDCU_SWITCH_Temp

 SG_ I_CDCU_SWITCH_Temp : 319|8@0+ (1,-40) [-40|100] "degC" Vector__XXX

Rawdata:3C ---------> 00111100

 I_CDCU_SWITCH_Temp的定义从第319 开始8个bit,rawdata 中找到对应的字节是第40个字节3C

第40个字节的二进制排列

319bit

318bit

317bit

316bit

315bit

314bit

313bit

312bit

0

0

1

1

1

1

0

0

根据公式计算出来对应的值:1*60-40=20;加上单位为20degC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值