DBC文件解析及CAN通信矩阵

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

VERSOIN ""			//版本信息,为空,也可以自定义
NS_:				//NS为 new symbol 的缩写,后面紧跟着一堆ns,一般是创建dbc时自动生成,不用太关心
	NS_DESC_
	CM_
	BA_DEF_
	BA_
	VAL_
	CAT_DEF_
	CAT_
	FILTER
	BA_DEF_DEF_
	EV_DATA_
	ENVVAR_DATA_
	SGTYPE_
	SGTYPE_VAL_
	BA_DEF_SGTYPE_
	BA_SGTYPE_
	SIG_TYPE_REF_
	VAL_TABLE_
	SIG_GROUP_
	SIG_VALTYPE_
	SIGTYPE_VALTYPE_
	BO_TX_BU_
	BA_DEF_REL_
	BA_REL_
	BA_DEF_DEF_REL_
	BU_SG_REL_
	BU_EV_REL_
	BU_BO_REL_
	SG_MUL_VAL_
BS_:[baudrate:BTR1,BTR2];			
//波特率设置,BS_为关键字,其中[]中为可选部分
BU_:Nodename1 Nodename2 Nodename3 ……			
//网络节点定义,其中Nodename为网络节点名字,用户自定义,名字需要唯一性
BO_ MessageId MessageName: MessageSize Transmitter			
//报文帧定义,其中 
		MessageId 为10进制表示的报文ID,类型为longlogn型,即CAN ID
		MessageName 报文的名字,与C语言命令规范相同
		MessageSize 报文数据段字节数
		Transmitter 该报文的网络节点,如果该报文没有指定发送节点,则该值需设置为”Vector__XXX”
SG_ SignalName (SigTypeDefinition) : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver
//信号的定义,SG_为关键字,表示信号,其它字段含义如下:
	SignalName (SigTypeDefinition) 表示该信号的名字 和 多路选择信号的定义
		SigTypeDefinition是可选项,有3种格式:
				a> 空
				b> M 表示多路选择器信号
				c> m50 表示被多路选择器选择的信号,50表示当‘M’定义的信号的值等于50的时候,该报文使用此通路
	StartBit|SignalSize 表示该信号的起始位及信号长度
	ByteOrder 表示信号的字节顺序:0代表Motorola格式,1代表Inter格式
	ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数
	Factor,Offset 表示因子,偏移量;这两个值用于信号的原始值与物理值之间的转换。 转换公式:物理值=原始值*因子+偏移量
	Min|Max 表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型
	Unit 表示该信号的物理单位,为字符串类型
	Receiver 表示该信号的接收节点(可以是多个节点);若该信号没有指定的接收节点,则必须设置为” Vector__XXX”
	举例:SG_ S_Check : 45|10@0+ (0.00625,0) [0|160] "M" EL3160,ESC
CM_ Object MessageId/NodeName “Comment”  
	//注解信息,其它字段含义:
			Object 表示注解的对象类型,可以是节点“BU_”、报文“BO_”、消息”SG_”
			MessageId/NodeName 表示进行注解的对象,若前面的对象类型是信号或者报文,则这里的值应为报文的ID(10进制数表示);若前面的对象类型为节点,则这里的值应为节点的名字
			Comment 表示进行注解的文本信息
与特征(属性)的Tag一共有三条,如下:
BA_DEF_ Object AttributeName ValueType Min Max;		
	//1. 特征名称类型定义,其它字段含义:
			Object 特征类型,可以是BU_(节点特征定义)、BO_(报文特征定义)、SG_(信号特征定义)、空格(项目特征定义)
			AttributeName 特征名称(C语言变量格式)
			ValueType 特征值类型(只能是十进制、十六进制、浮点数、枚举、字符5种类型)
			Min Max 数值类型这里出现范围,枚举类型这里是枚举值,字符类型,这里是空
															
BA_DEF_DEF_ AttributeName DefaultValue;				
	//2. 特征默认值定义,其它字段含义:
			AttributeName 特征名称
			DefaultValue 该特征的默认设置值
															
BA_ AttributeName projectValue;						
	//3. 特征项目设置值定义,其它字段含义如下:
			AttributeName 特征名称
			projectValue 该特征的设置值

VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;		
	//数值表部分,其它字段含义如下:
			MessageId 表示该信号所属的报文ID(10进制数表示)
			SignalName 表示信号名
			N “DefineN” …… 0 “Define0” 表示定义的数值表内容,即该信号的有效值分别用什么符号表示

通信矩阵的填写是根据DBC文件中 SG_ 所定义的信号规则来填充的。

填格子的方式分为Intel和Motorola两种:
Intel格式也即小端,MSB存放在高字节单元,反映到矩阵图中就是以起始位为原点,自上而下填充。
在这里插入图片描述

Motorola格式也即大端,MSB存放在低字节单元,反映到矩阵图中就是以起始位为原点,自下而上填充。
在这里插入图片描述

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值