AUTOSAR CAN:DBC(Data Base CAN)文件解析

DBC 文件

VERSION "1.0"
NS_ :
BS_ "GenMsgCycleTime" INT 0 65535 ;

BU_ : BU1 ;
BU_ : BU2 ;

BO_ 1000 MY_MESSAGE: 8 BU1 ;
 SG_ MY_SIGNAL : 0|8@1+ (0,255) [0|255] "unit" MY_MESSAGE ;
 EV_ MY_EVENT 1 "event_name" BU1 ;

CM_ "This is a comment." ;

BA_DEF_ BO_ "GenMsgCycleTime" INT 0 65535 ;
BA_ "GenMsgCycleTime" BO_ 100 ;

VAL_ MY_SIGNAL 0 "value0" 1 "value1" ;

SIG_VALTYPE_ MY_SIGNAL ENUM "value0" 0 "value1" 1 ;

SIG_GROUP_ MY_SIGNAL_GROUP SG_ MY_SIGNAL1 SG_ MY_SIGNAL2 ;

BS_ "GenSigStartValue" INT 0 255 ;
BA_DEF_ SG_ "GenSigStartValue" INT 0 255 ;
BA_ "GenSigStartValue" SG_ 0 ;

这个DBC文件包含了以下内容:

版本号为1.0。 定义了两个节点:BU1和BU2。
定义了一个消息ID为1000的消息,名为MY_MESSAGE,长度为8字节,发送方为BU1。
定义了一个信号,名为MY_SIGNAL,起始位为0,长度为8位,数据类型为无符号整数,因子为1,偏移量为0,最小值为0,最大值为255,单位为"unit",所属消息为MY_MESSAGE。
为消息ID为1000的消息添加了基本属性"GenMsgCycleTime",并为信号MY_SIGNAL添加了基本属性"GenSigStartValue"。
定义了一个事件,名为MY_EVENT,优先级为1,事件名称为"event_name",所属节点为BU1。 添加了一个注释,内容为"This
is a comment.“。 定义了一个基础属性,名为"GenMsgCycleTime”,数据类型为整数,范围为0到65535。
为消息ID为1000的消息添加了一个基础属性值,“GenMsgCycleTime"为100。
定义了信号MY_SIGNAL的两个值,值为0时对应的描述为"value0”,值为1时对应的描述为"value1"。
定义了信号MY_SIGNAL的值类型为枚举,值为0对应的描述为"value0",值为1对应的描述为"value1"。
定义了信号组MY_SIGNAL_GROUP,包含了信号MY_SIGNAL1和信号MY_SIGNAL2

版本与新符号

VERSION

定义:VERSION字段用于指定DBC文件的版本号。
示例:VERSION “1.0”
解释:该示例中,VERSION字段指定了DBC文件的版本号为1.0。

NS_

定义:NS_字段用于定义命名空间(Namespace)。
示例:NS_ :
解释:NS_字段后面可以跟一个冒号,表示开始定义命名空间。命名空间用于对CAN网络中的节点、消息和信号进行分组和分类,以便更好地组织和管理CAN网络的配置信息。

使用DBC文件时,可以根据需要对VERSION和NS_字段进行设置和配置。
VERSION字段可以指定任意的版本号,用于标识和识别不同版本的DBC文件。通常情况下,建议使用语义化的版本号格式,如"1.0"、"2.1"等。
NS_字段用于定义命名空间,可以根据具体的CAN网络和应用需求进行设置和命名。在命名空间中,可以定义和组织节点、消息和信号,以便更好地管理和查找相关配置信息。

波特率

BS_属性是DBC文件的一部分,它定义了CAN总线的基本设置。

BS_:[baudrate:BTR1,BTR2];

包括以下信息:

“baudrate”:这是CAN总线的波特率,即每秒传输的比特数。这是一个非常重要的参数,因为它决定了数据传输的速度。
“BTR1"和"BTR0”:这两个参数定义了CAN控制器的位定时寄存器的值。这两个参数与波特率的设置有关。
“BS”:这是一个可选参数,它定义了总线的采样点。这个参数通常用于优化数据的传输。

在使用DBC文件时,通常会通过CAN工具软件(如CANoe或CANalyzer)来生成和编辑DBC文件。在这些软件中,可以直接设置BS_属性的值,然后保存为DBC文件。

在生成DBC文件时,BS_属性的设置取决于实际的CAN硬件和网络环境。例如,如果CAN硬件支持的最大波特率为500Kbps,那么就应该将BS_属性的"baudrate"设置为500。同时,也需要根据硬件的说明文档来设置"BTR1"和"BTR0"的值。

网络节点

BU_属性用于定义网络节点。
BU_属性后面跟随的就是网络中的节点(Node)名称。在CAN网络中,每一个设备都可以被看作是一个节点,例如传感器、控制器等。每个节点都有一个唯一的名称。
定义和解释

BU_字段用于定义CAN网络中的节点(ECU)。
BU_字段后面跟着节点的名称,例如:BU_ BU1;
节点名称必须是唯一的,用于标识CAN网络中的不同节点。
节点可以是发送者,也可以是接收者。

报文帧的定义

报文帧(Message Frame)用于定义CAN网络中的消息属性。

BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter

定义和解释

BO_字段用于定义CAN网络中的报文帧(消息)属性。
BO_字段后面跟着报文帧的ID、名称和长度,例如:BO_ 1000 MyMessage: 8 MyNode;
MessageId:报文帧ID是报文帧的唯一标识符,用于在CAN网络中识别不同的报文帧。
报文帧名称是可选的,用于描述报文帧的用途或内容。
MessageSize :报文帧长度是报文帧的数据长度,以字节为单位。
Transmitter:该报文的网络节点;如果该报文没有指定发送节点,则该值需设置为” Vector__XXX”。

信号的定义

信号(Signal)用于定义报文帧中的数据字段。

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

定义和解释

SG_:SG_字段用于定义报文帧中的信号属性。
SG_字段后面跟着信号的名称、起始位、长度、因子、偏移量、最小值、最大值、单位和接收节点,例如:SG_ Signal1 : 0|8@1+ (1,0) [0|255] “GenSigStartValue” MyNode;
SignalName:信号名称是信号的唯一标识符,用于在报文帧中识别不同的信号。

  • a)空,表示普通信号。
  • b)M,表示多路选择器信号。
  • c)m50,表示被多路选择器选择的信号,50,表示当M定义的信号的值等于50的时候,该报文使用此通路

StartBit:信号的起始位是信号在报文帧中的起始位索引,以位为单位。
SignalSize: 信号的长度是信号的数据长度,以位为单位。
ValueType:表示该信号的数值类型:+表示无符号数,-表示有符号数;
Factor,Offset :信号的因子和偏移量用于将信号的原始值转换为物理值。因子是一个乘数,偏移量是一个加数。两个值用于信号的原始值与物理值之间的转换。转换:物理值=原始值*因子+偏移量;
Min|Max: 信号的最小值和最大值是信号的物理值的范围, 这两个值为double类型。
Unit: 信号的单位是信号的物理值的单位, 字符串类型。
Receiver : 信号的接收节点是接收该信号的节点, 若该信号没有指定的接收节点,则必须设置为” Vector__XXX”。

示例

BO_ 1000 MyMessage: 8 MyNode ;

SG_ Signal1 : 0|8@1+ (1,0) [0|255] "GenSigStartValue" MyNode ;
BA_DEF_ SG_ "GenSigStartValue" INT 0 255 ;
BA_ "GenSigStartValue" SG_ 100 ;

这个示例中,定义了一个报文帧:ID为1000,名称为MyMessage,长度为8字节,发送节点为MyNode。报文帧的定义以BO_字段开头,后面是报文帧的ID、名称和长度。
定义了一个信号Signal1,位于报文帧MyMessage中,起始位为0,长度为8位,数据类型为无符号整数,因子和偏移量为1和0,取值范围为0到255。信号的定义以SG_字段开头,后面是信号的名称、起始位、长度、因子、偏移量、最小值、最大值、单位和接收节点。

示例中还展示了如何定义信号的起始值属性,使用BA_DEF_字段来定义信号的起始值属性,属性名称为"GenSigStartValue",数据类型为INT,取值范围为0到255。使用BA_字段为信号Signal1添加了起始值属性值,属性名称为"GenSigStartValue",属性值为100。

注解部分

注解(Comment)是DBC文件中用于对对象(Object)进行描述和解释的字段。
格式

CM_ Object MessageId/NodeName “Comment”

定义和解释

CM_字段用于定义对象的注解属性。
CM_字段后面跟着对象的类型(MessageId或NodeName)和注解内容,例如:CM_ MessageId 1000 “This is a message”;
对象的类型可以是消息ID(MessageId)或节点名称(NodeName)。
注解内容是对对象进行描述和解释的文本。

示例

BO_ 1000 MyMessage: 8 MyNode ;

CM_ MessageId 1000 "This is a message" ;
CM_ NodeName MyNode "This is a node" ;

这个示例中,定义了一个报文帧:ID为1000,名称为MyMessage,长度为8字节,发送节点为MyNode。报文帧的定义以BO_字段开头,后面是报文帧的ID、名称和长度。
示例中使用了CM_字段来定义报文帧和节点的注解属性。第一行定义了报文帧ID为1000的注解,注解内容为"This is a message"。第二行定义了节点名称为MyNode的注解,注解内容为"This is a node"。

特征

BA_DEF、BA_DEF_DEF_和BA_是用于定义和设置信号属性的标签。
BA_DEF 标签

BA_DEF_ Object AttributeName ValueType [Min Max];

BA_DEF标签用于定义信号属性的属性定义(Attribute Definition)。
BA_DEF标签后面跟着属性名称、属性数据类型、属性最小值和最大值等信息。 属性名称是自定义的,用于标识属性。
属性数据类型可以是INT、FLOAT、ENUM或STRING。
属性最小值和最大值用于定义属性值的取值范围,可选字段。

BA_DEF_DEF_ 标签

BA_DEF_DEF_ AttributeName DefaultValue;

AttributeName 特征名称(C语言变量格式)
DefaultValue 该特征的默认设置值

BA_ 标签

BA_ AttributeName projectValue;`

-AttributeName 特征名称(C语言变量格式)
projectValue 该特征的设置值

数值表

VAL_用于定义信号的数值表。数值表提供了信号值和实际物理值之间的映射关系

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

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

使用VAL_标签可以为信号提供更直观的含义和描述。在CAN通信中,接收方可以根据VAL_定义的数值表将接收到的数值转换为对应的物理值,以便更好地理解信号的含义。

你可能感兴趣的:(can,autosar,can)