公开资料
Ubuntu下Nginx安装并配置负载均衡
如何使用JavaScript实现纯前端读取和导出excel文件
将组态王配置为OPC服务器的方法
国家标准公开系统
Vim使用教程
Docker镜像加速列表
S7-1500冗余系统图
华为服务器安装Ubuntu 20.04系统并实现向日葵远程桌面
Ubuntu下keepalived和nginx实现高可用性负载均衡
Ubuntu系统配置
CAN DBC文件解析
东南大学齿轮箱振动数据集(含轴承、齿轮、复合故障)
Redis常用数据类型
在Ubuntu中安装Redis
一图看懂Linux文件权限
Linux命令速查
ubuntu apt卸载命令
本文档使用 MrDoc 发布
-
+
首页
CAN DBC文件解析
protuesjzy写过两篇dbc文件的介绍 https://blog.csdn.net/u012923807/article/details/96568412 https://blog.csdn.net/u012923807/article/details/94620323 写的很好,大家可以浏览,本篇是基于对dbc的了解,在protuesjzy的基础上进行细化。 # 1、基础介绍 DBC是vector公司定义的can网络通信文件格式,vector的规范《DBC File Format Document》从下面链接获得 百度网盘:https://pan.baidu.com/s/1GUvfEHv1NQbJ2bL2e7ZL5w 提取码:d622 # 2、DBC文件 DBC文件是以Tag(标签)来标识每一个元素。 ## 2.0、先来一篇全貌 第55号小白鸭写过一篇dbc文件的介绍 他有一张全貌的图,借用来给大家一个overview:  如上图所示,一般dbc文件中包含了如下的8种信息: 1、版本与新符号 2、波特率定义 3、网络节点的定义 4、报文帧的定义 5、信号的定义 6、注解部分 7、特征部分 8、数值表部分 下面一个一个详细解释。 ## 2.1、开头是Version 和 new_symbols两个Tag。  ## 2.2、波特率定义(BS_:) 格式如下: BS_:[baudrate:BTR1,BTR2] 其中BS为关键字,用于定义CAN网络的波特率;[ ]内容表示为可选部分,可以省略(如下图例子中即把该部分省略了); 但关键字”BS:”必须存在,省略则会出错。《DBC File Format Document》规范中明确提醒,必须保留BS_: 标签。  ## 2.3、网络节点的定义(BU_:) 格式如下: BU_: Nodename1 Nodename2 Nodename3 …… - 解释: BU_ 为关键字,表示网络节点 Nodename1、Nodename2 网络节点名字,由用户自己定义; >注意事项:需要保证节点命名的唯一性 如示例中的 BU_: VCU_Vehicle_Control_Unit MotorCtrol SCU PC Vector__XXX  表示定义了: VCU_Vehicle_Control_Unit MotorCtrol SCU PC Vector__XXX这五个网络节点  ## 2.4、报文帧的定义(BO_) 格式如下: BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter - 解释: 1)、BO_ 为关键字,表示报文; 2)、MessageId 报文ID,是以10进制数表示的; (如例子中的996,代表报文ID为0x3E4,是longlong类型,也就是CAN ID的值;) 3)、MessageName 报文的名字,命名规则和C语言变量相同; 4)、MessageSize 报文数据域字节数,为无符号整型数据,CAN 2.0为最大8字节,CAN FD 最大64字节; 5)、Transmitter 该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为Vector__XXX。 如示例中的 BO_ 201959408 MSG1: 8 VCU_Vehicle_Control_Unit 报文ID:201959408(0xC09A7F0) 报文名:MSG1 分隔符 : “:” 报文长度:8字节 报文发送者:VCU_Vehicle_Control_Unit (由VCU_Vehicle_Control_Unit这个节点发出的,数据域长度为8字节,ID为201959408(0xC09A7F0),名字命名为MSG1的报文)  ## 2.5、信号的定义(SG_) 格式如下: SG_ SignalName (SigTypeDefinition) : StartBit|SignalSize@ByteOrder ValueType (Factor,Offset) [Min|Max] Unit Receiver - 解释: 1)、SG_ 为关键字,表示信号; 2)、SignalName(SigTypeDefinition) : 表示该信号的名字 和 多路选择信号的定义; 2.1) SigTypeDefinition是可选项,有3种格式: a)空,表示普通信号。 b)M,表示多路选择器信号。 c)m50,表示被多路选择器选择的信号,50,表示当M定义的信号的值等于50的时候,该报文使用此通路。 3)、StartBit、 SignalSize 表示该信号起始位、信号长度; 4)、ByteOrder 表示信号的字节顺序:0代表Motorola格式,1代表Inter格式; 5)、 ValueType 表示该信号的数值类型:+表示无符号数,-表示有符号数; 6)、Factor,Offset 表示因子,偏移量;这两个值用于信号的原始值与物理值之间的转换。 转换如下:物理值=原始值*因子+偏移量; 7)、Min|Max 表示该信号的最小值和最大值,即指定了该信号值的范围;这两个值为double类型; 8)、Unit 表示该信号的物理单位,为字符串类型; 9)、Receiver 表示该信号的接收节点;若该信号没有指定的接收节点,则必须设置为Vector__XXX。 如示下面的例中: 第一个信号 : SG_ S_Check : 45|10@0+ (0.00625,0) [0|160] “M” EL3160_60,ESC; 表示定义了一个命名为 S_Check的普通信号,其起始位是第45位,信号长度10 bit; 信号是Motorola格式,数值类型为无符号类型数;因子为0.00625,偏移量为0;信号取值范围为0到160; 信号物理单位为字符串”M”;该信号接收节点为EL3160_60,ESC这两个节点。 第二个信号: SG_ Send_Mux M : 7|8@0+ (1,0) [0|0] “” EL3160_60,ESC; 表示定义了一个命名为 Send_Mux的多路选择器信号,其起始位是第7位,信号长度8 bit; 信号是Motorola格式,数值类型为无符号类型数;因子为1,偏移量为0;信号取值范围为0到0; 信号物理单位为字符串””;该信号接收节点为EL3160_60,ESC这两个节点。 该信号做选择通道使用。 第三个信号: SG_ S_Level_A_Voltage m50 : 15|16@0+ (0.00625,0) [0|160] “V” EL3160_60,ESC; 表示定义了一个命名为S_Level_A_Voltage的被选择信号,其起始位是第15位,信号长度16 bit; 信号是Motorola格式,数值类型为无符号类型数;因子为0.00625,偏移量为0;信号取值范围为0到160; 信号物理单位为字符串”V”;该信号接收节点为EL3160_60,ESC这两个节点。 Send_Mux 作为选择通路使用,这个例子中,当Send_Mux 等于50、51、52、54时,代表后面的选择的通路。   ## 2.6、注解部分(CM_) 格式如下: 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。 **注释以 “” 包围,注释内部不允许出现“号。**  ## 2.7、特征(BA_DEF_)定义部分: 和特征相关的Tag一共有三条: 1)BA_DEF_ 特征名称类型定义。格式如下: BA_DEF_ Object AttributeName ValueType Min Max; - 解释: BA_DEF_标签 Object 特征类型,可以是BU(节点特征定义)、BO(报文特征定义)、SG_(信号特征定义)、空格(项目特征定义); AttributeName 特征名称(C语言变量格式) ValueType 特征值类型(只能是十进制、十六进制、浮点数、枚举、字符5种类型) Min、Max 数值类型这里出现范围,枚举类型这里是枚举值,字符类型,这里是空。  2)BADEF_DEF 特征默认值定义。格式如下: BA_DEF_DEF_ AttributeName DefaultValue; - 解释: BA_DEF_DEF_ 标签 AttributeName 特征名称(C语言变量格式) DefaultValue 该特征的默认设置值  3)BA_ 特征项目设置值定义,格式如下: ``` BA_ AttributeName BU_ NodeName AttributeValue;//网络节点的属性定义 BA_ AttributeName BO_ CanId AttributeValue;//报文帧属性定义 BA_ AttributeName SG_ CanId SignalName AttributeValue;//信号的属性定义 BA_ AttributeName AttributeValue;//项目特征属性的定义 ```  举例: ``` BA_DEF_ BO_ “GenMsgCycleTime” INT 0 65535; BA_DEF_DEF_ “GenMsgCycleTime” 2200; BA_ “GenMsgCycleTime” BO_ 400 100; ``` 表示对定义了一个针对消息类型的特征,特征名为”GenMsgCycleTime”,特征值是整型数据,取值范围在0到65535之间; 默认值为2200; 项目设置值 CAN ID ==400的消息的该特征值设置为100  在DBCView4.3里面是把BADEF 和 BADEF_DEF合并在一起了,用了特征视图来管理,如下图。 然后把 特征项目设置值定义 BA_ AttributeName projectValue; 和元素合并在一起了。  ## 2.8、数值表部分(VAL_) 格式如下: 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。只有自然数类型的信号才可以使用数值表表示。  信号的值的表示方法有两种: 1) 物理值=原始值*因子+偏移量;(常规表示,前面有提到) 2) 数字表,用来表示逻辑值;  DBCView这里可以下载: 链接:https://pan.baidu.com/s/1obK62q7gt4G595tuiOmgHw?pwd=fred 提取码:fred # 参考文献 [DBC文件解析](https://blog.csdn.net/u010808702/article/details/127433636) [DBC文件格式解析](https://zhuanlan.zhihu.com/p/141408513)
wangjp
2024年8月18日 08:49
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码