DBC学习(一)

DBC是描述CAN网络通信的数据库文件,用于定义电子节点和CAN信息。本文介绍了DBC的打开方式,使用CANdb++ Editor工具进行编辑,并详细解析了DBC中的网络、节点、消息和信号等内容,阐述了DBC在软件开发和测试中的应用。

一、什么是DBC?

DBC(CAN data base)是描述网络上所有电子节点(ECU)之间CAN通信信息的数据库文件。注意三个关键词:网络电子节点CAN信息,DBC文件只用于描述CAN通信,通常一个DBC文件只能包含一个CAN网络的节点信息,因此,为了描述整车的网络拓扑信息,需要多个DBC文件。

例如下面的整车网络拓扑示意图:

众多电子节点划分为不同的功能区块,区块内的节点通过CAN总线相互连接形成独立的功能子网(如动力子网PTCAN、车身子网BodyCAN等),中央网关(GateWay)将不同的功能子网相连为跨网通信提供支持,不同子网上的节点还可以通过单独连接建立私有通信,某些节点(如BCM)还会通过LIN总线建立下属网络。这里功能子网的通信就需要用DBC来描述,并且每一个功能子网都有自己的DBC文件。

二、如何打开DBC?

使用Vector CANdb++ Editor工具可以打开、编辑以及创建DBC文件,通常在安装了CANoe或CANalyzer软件之后会带有该工具:CANdb.exe,执行文件位于软件安装目录下的Exec32文件夹下:

一般如果安装了CANdb工具系统会自动关联DBC文件格式(.dbc),这样便可以直接双击DBC文件打开。

DBC文件也可以通过文本方式打开(如使用windows系统的记事本程序),但是可读性远不如CANdb工具,但这种方式在研究DBC某些内容或想要通过脚本解析DBC文件时比较有用。

另外,需要说明的是CANdb工具分两个版本,CANdb++ Standard和CANdb++ Admin,Admin版支持的功能更多更强,我们一般使用的都是Standard版,后文介绍均基于该版本进行。

三、DBC里有什么?

下图是用CANdb工具打开DBC文件后的窗口界面,左侧窗格含有一个树型导航目录,右侧窗格展示当前选中目标的详细内容:

树型目录的分类与前面提到的三个关键词刚好对应:

Networks —— 网络

Network nodes —— 电子节点

Messages & Signals —— CAN信息

除此之外,这里还有ECUs和Environment variables两项,ECUs下包含的其实是每个ECU的Network Node和Environment Variables,Network Node就是上面说的电子节点,这个在后面会讲,Environment Variables在使用CANoe仿真节点时会用到。

  • Networks

Networks从网络的视角来观察总线上存在的节点、报文及信号,我们展开Networks下的PTCAN网络可以看到下面包括Tx Messages、Signals和本网络上的多个节点,如下图所示:

Tx Messages下列出了该网络总线上所有的报文,其实就是每个节点发送报文的集合。Signals下列出了该网络总线上所有的信号。节点部分列出了每个节点自身的发送和接收信号。

下面来看一下Network的属性参数,通过右击网络名(PTCAN)选择Edit Network打开网络编辑对话框,在Attributes选项卡下可以查看当前支持的参数项:

下面简要说明一下图示中各项属性参数的含义:

参数项

说明

NmType

指定网络管理类型:NmAsr(AutosarNm)

NmAsrBaseAddress

指定网络报文ID的基址,即此网络上所有节点的网络报文ID要基于此地址增加不同的偏移量来确定,这里为0x600,那么其它节点网络报文ID为0x6XX,如0x610、0x611、0x612等

NmAsrCanMsgCycleTime

指定网络报文的周期时间:500ms

NmAsrMessageCount<

### 如何创建和生成 DBC 文件 DBC(Database CAN)文件种用于描述CAN网络中各逻辑节点及其通信协议的配置文件。以下是关于如何创建和生成DBC文件的相关信息。 #### 使用工具创建DBC文件 通常情况下,DBC文件可以通过专用软件进行创建和编辑。常用的工具有Vector公司的 **CANdb++** 和其他类似的工具。这些工具提供了图形化界面,可以简化DBC文件的创建过程[^4]。 #### 创建流程概述 1. 打开工具并新建个数据库文件。 2. 定义CAN网络的基本参数,例如波特率、网络名称等。 3. 添加网络节点(Node)。每个节点代表个ECU(电子控制单元),需要为其指定唯的ID。 4. 定义消息帧(Message Frame)。每条消息都有其特定的ID、长度和其他属性。 5. 定义信号(Signal)。对于每条消息,需定义其中包含的具体信号及其位宽、起始位置、大小端模式等属性。 6. 设置注释部分。为了便于理解和维护,可以在DBC文件中添加必要的注释说明。 7. 定义属性部分。某些高级功能可能涉及自定义属性设置,这步可以根据实际需求完成。 8. 导出最终的DBC文件以便后续使用或共享[^5]。 #### 示例代码片段 以下是个简单的Python脚本示例,展示如何利用第三方库 `cantools` 来操作已有的DBC文件: ```python import cantools # 加载现有的dbc文件 db = cantools.database.load_file('example.dbc') # 输出所有的消息 for message in db.messages: print(f"Message ID: {message.frame_id}, Name: {message.name}") # 编码条具体的消息 data = db.encode_message('ExampleMessage', {'SignalName': 42}) print(data) # 解码接收到的数据 decoded_data = db.decode_message('ExampleMessage', data) print(decoded_data) ``` #### 工具推荐 如果希望手动构建DBC文件而不依赖现成模板,则可以选择文本编辑器直接编写;不过更高效的方式还是借助专业工具如CANdb++来进行可视化管理[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值