不要对生活抱有期望,这样,你才能偶有惊喜,常无惊吓 ——《新灵基躺》
一、什么是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文件时比较有用。三、DBC里有什么?
下图是用CANdb工具打开DBC文件后的窗口界面,左侧窗格含有一个树型导航目录,右侧窗格展示当前选中目标的详细内容:说正好对应似乎不太恰当,因为这里还多了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选项卡下可以查看当前支持的参数项:下面简要说明一下图示中各项属性参数的含义:Network nodes
与Networks不同,Nodes部分从单个节点的视角来观察与节点相关的总线报文及信号,以VBU节点为例,展开后下面包含Tx Messages、Rx Messages、Mapped Tx Signals以及Mapped Rx Signals,见下图所示:其中Tx Messages下包含本节点所有的发送报文。
Rx Messages下包含本节点所有的接收报文。
Mapped Tx Signals下包含本节点所有的发送信号。
Mapped Rx Signals下包含本节点所有的接收信号。
那这里的收发报文信号和树型目录最下部的Messages和Signals有什么区别呢:
有两点区别:
1. Messages与Signals下包含的报文信号比节点下的报文信号要多,并且有可能会包含实际没用到的报文信号,因为所有创建的报文信号都会在Messages与Signals下显示,但只有映射到节点的报文信号才会在Network及Node下显示。
2. 针对同一条报文,从节点的Rx Messages下看到的信号数量可能会比从Messages下看到的要少。比如我们观察下图所示的AC_0x254这条报文:
对于某一条报文而言,节点可能只关心其中的几个信号,那么只接收这几个有用的信号当然是最佳选择。
基于以上两点原因,建议从节点下去查看相关的报文信号。
下面来看一下Node的属性参数,同样我们以下面的图示为例说明:
简要说明一下图示各项属性参数的含义:参数项说明NodeLayerModules指定dll文件可以配合CANoe实现仿真测试功能ILUsed指定是否使用交互层(对Geny或Davinic Configuration工具很重要)NmAsrNode指定节点是否为AutosarNM节点NmAsrCanMsgCycleOffset指定网络报文的偏移时间NmAsrCanMsgReducedTime指定BusloadReduction功能相关的时间参数Nodes属性主要涉及各个节点自身,通常每个节点根据需要可以做不同的配置,比如节点是否使用ILUsed,是否支持AutosarNM等。Messages
Message是CAN总线上传输信息的最小单位,一条Message最大包含8个Byte的数据(CAN FD则最大支持64个Byte的数据),Messages从用途角度可以分为三大类:应用(APP)报文、网络(NM)报文和诊断(DIAG)报文。通过点击Node下的Tx Messages或RxMessages,可以查看报文属性:下面是对报文属性的简要说明:
属性名描述备注Message报文名称通常报文名会用于生成代码,请确保符合C语言标识符命名规范Node发送节点名称只有发送报文有此项属性ID报文ID标准帧ID为11bit,扩展帧ID为29bitID-FormatCAN帧类型:标准帧或扩展帧Signals
Signal是Message里最小的元素单位,通过在某条报文上右击选择Edit Message打开报文编辑窗口,然后选择Layout选项卡可以查看当前报文的信号布局:Layout中纵向表示字节顺序,从上到下为Byte0~Byte7,横向表示字节内的bit位顺序,从左至右为Bit7~Bit0,Signal在Message里的位置由Byte Order、Startbit和Length三个参数决定,Byte Order主要用于跨多个字节的信号,例如上图中横跨Byte1和Byte2的粉色信号,如果选择Motorola格式,则Byte1为信号的高bit位,Byte2为低bit位,选择Intel的话正好相反;Startbit用于确定信号的起始位置,通常要么为信号的最高bit位(msb)要么为最低bit位(lsb);length决定了信号的实际有效长度。从这里可以看出报文里的信号数量是可变的,对于一条8个Byte的报文,其信号数量最小为1个,最大为64个。属性名
描述备注Name信号名称通常信号名会用于生成代码,请确保符合C语言标识符命名规范Message信号所在的报文名通常使用Motorola格式,两种格式的区别主要体现在跨字节分布的信号上,对于Motorola信号的高位在前低位在后,而Intel则是信号的低位在前高位在后
通常使用Unsigned类型
Initial Value信号初始值物理值
Factor信号因子这两项构成信号的计算公式:Physical value=(Raw value *Factor) + Offset,其中Raw value表示总线值Offset信号偏移量Minimum信号最小值物理值
Maximum信号最大值物理值
Unit信号值单位信号表示的物理值单位,如Kg、m
Value Table信号的取值表定义信号取值含义
信号发送方式:
Cyclic、
OnWrite、OnWriteWithRepetition、OnChange、OnChangeWithRepetition、IfActive、IfActiveWithRepeition、NoSigSendType报文最终的表现形式取决于报文和信号发送类型的逻辑或
GenSigSendTopBottom信号边界发送方式:如果信号的当前值与上次发送的值差值大于Delta,则再次发送信号
信号的默认值
发送信号的默认值
指示信号无效的值
用于IfActive型的发送
信号超时值
接收信号超时后的值
四、DBC的用途
DBC的用途主要体现在软件开发和软件测试两个方面:
软件开发方面主要配合Vector的Geny或Davinic Configuration协议栈配置工具来实现CAN通信栈的配置及代码生成,如果DBC的各种属性设置得当,可以简化不少手动配置及调整代码的工作。ETAS的ISOLAR工具也支持导入DBC,但是对DBC属性参数的支持不太完善,只能识别一部分基础参数。
软件测试方面主要配合Vector的CANoe、CANalyzer、CANape等测试工具来实现节点仿真、报文解析等功能,此外,其它的一些工具如英特佩斯的neoVI FIRE也支持导入DBC。