当前位置:首页 > 风云人物 > 细说DBC(一)——初识

细说DBC(一)——初识

2023-09-26 06:20:33 来源:金风故事网

不要对生活抱有期望,这样,你才能偶有惊喜,常无惊吓 ——《新灵基躺》

一、什么是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文件后的窗口界面,左侧窗格含有一个树型导航目录,右侧窗格展示当前选中目标的详细内容:

如果你有留意前面讲什么是DBC时我提到的三个关键词,就会发现这里树型目录的分类正好与此一一对应:Networks —— 网络Networknodes ——电子节点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指定网络报文的周期时间:500msNmAsrMessageCount指定网络上最大支持的网络报文数量:32NmAsrRepeatMessageTime指定网络管理处于RepeatMessage状态的时间:1500msNmAsrTimeoutTime指定网络处于Network Mode下的超时时间:4000msNmAsrWaitBusSleepTime指定网络从PrepareBusSleep状态进入BusSleep状态需要等待的时间:4000msBusOffRecoveryTime指定BusOff的恢复时间:160msBusType指定总线协议类型:CANBaudrate指定总线的通信波特率:500kbpsSamplePointMax指定采样点的最大值:85SamplePointMin指定采样点的最小值:75SyncJumpWidthMax指定同步跳转宽度的最大值:4SyncJumpWidthMin指定同步跳转宽度的最小值:3Manufacturer制造商信息:VectorVersionNumber版本信息VersionWeekVersionYear如果你既不了解Autosar NM机制,也不熟悉CAN协议,那么上述大部分的参数可能都看不明白,而且你的参数项和我图示里的也可能不完全一样,甚至于完全不一样。对于看不明白的参数,建议先查阅资料了解参数对应的背景功能,比如先了解Autosar NM的机制再来看相关的'NmAsr-'参数,而对于参数项不一样的情况,其实这些参数是可以创建、修改以及删除的,通过点击工具栏的Attribute Definitions按钮可以查看当前创建的属性信息,如下图所示:

从Type Of Object列可以看到除了Network以外,Node、Message及Signal都有自己的属性定义,需要注意的是虽然可以任意新建用户自定义的属性项,但是某些属性(那些可以被协议栈配置工具识别的属性)必须按照要求(名称、类型、取值)定义才能起作用。最简单的增加属性方式就是直接导入现有的属性信息:

通过点击File菜单下的Import Attribute Definitions可以选择导入其它DBC里的属性信息,注意:如果当前DBC和导入DBC有同名属性,这些同名属性不会导入。
Netwrok的属性主要是对涉及整个网络或多个节点的一些行为进行定义,比如波特率、采样点需要所有节点遵守才能保证总线正常通信,又如网络管理相关的参数需要相关节点遵守才能实现整个网络内的管理功能。

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帧类型:标准帧或扩展帧
DLC[Byte]报文长度通常为8个字节Tx Method报文发送方式:Cyclic、NoMsgSendType
同GenMsgSendTypeCycle Time报文周期时间,单位ms同GenMsgCycleTimeComment注释信息
NmAsrMessage是否为Autosar NM报文网络报文该项设置为YesDiagState功能寻址请求报文,该项设置为Yes诊断报文相关属性DiagRequest物理寻址请求报文,该项设置为YesDiagResponse物理寻址响应报文,该项设置为YesGenMsgSendType报文发送方式:Cyclic、NoMsgSendType报文最终的表现形式取决于报文和信号发送类型的逻辑或GenMsgCycleTime报文周期时间,单位ms
GenMsgCycleTimeFast报文快发阶段周期时间,单位ms
GenMsgNrOfRepetition报文快发阶段发送次数
GenMsgDelayTime报文发送最小间隔时间,单位ms
GenMsgILSupport报文是否由IL或COM层处理APP报文设置为Yes,NM和DIAG报文设置为NoGenMsgStartDelayTime报文首次发送的延迟时间,单位ms

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个。
和查看Messages属性类似,通过点击Tx Mesasges或Rx Messages下的任意一条报文,可以查看信号属性:

属性名

描述备注Name信号名称通常信号名会用于生成代码,请确保符合C语言标识符命名规范Message信号所在的报文名
Multiplexing/Group复用/组信号
Startbit信号起始位
Length[Bit]信号长度
Byte Order信号在报文内的字节序,分Motorola和Intel两种格式

通常使用Motorola格式,两种格式的区别主要体现在跨字节分布的信号上,对于Motorola信号的高位在前低位在后,而Intel则是信号的低位在前高位在后

Value Type信号值类型:Signed、Unsigned、IEEE Float、IEEE Double

通常使用Unsigned类型

Initial Value信号初始值

物理值

Factor信号因子这两项构成信号的计算公式:Physical value=(Raw value *Factor) + Offset,其中Raw value表示总线值Offset信号偏移量Minimum信号最小值

物理值

Maximum信号最大值

物理值

Unit信号值单位

信号表示的物理值单位,如Kg、m

Value Table信号的取值表

定义信号取值含义

Comment注释信息
GenSigSendType

信号发送方式:

Cyclic、

OnWrite、OnWriteWithRepetition、OnChange、OnChangeWithRepetition、IfActive、IfActiveWithRepeition、NoSigSendType

报文最终的表现形式取决于报文和信号发送类型的逻辑或

GenSigSendTopBottom信号边界发送方式:
None、SendOnTop、SendOnBottom、
SendOnTopBottom
用于无符号数值,SendOnTop-信号值达到Maximum时发送;SenOnBottom-信号值达到Minimum时发送;SendOnTopBottom-信号值达到Maximum或Minimum时均发送GenSigDeltaValue信号的Delta量值

如果信号的当前值与上次发送的值差值大于Delta,则再次发送信号

GenSigStartValue

信号的默认值

发送信号的默认值

GenSigInactiveValue

指示信号无效的值

用于IfActive型的发送

GenSigTimeoutValue

信号超时值

接收信号超时后的值

Messages和Signal的大部分属性配合表格里的说明应该很容易看明白,但仍然有一部分属性没那么“显而易见”,包括Byte Order的细节区别、Multiplexing/Group的含义用法以及报文信号的组合发送形式和涉及到的控制参数,这些内容我会在下一篇文章中详细介绍。再次强调一下,正如在介绍Network时所讲,Node、Message和Signal的属性参数也不是一成不变的,像Message和Signal除了基本的属性以外,其它的属性(尤其是“Gen-”开头的属性)都是不定的,根据你使用的功能多少,这些属性或多或少,而对于每种类别下具体支持哪些属性,建议参考Vector官方文档或者咨询有经验人士。

四、DBC的用途

DBC的用途主要体现在软件开发和软件测试两个方面:

软件开发方面主要配合Vector的Geny或Davinic Configuration协议栈配置工具来实现CAN通信栈的配置及代码生成,如果DBC的各种属性设置得当,可以简化不少手动配置及调整代码的工作。ETAS的ISOLAR工具也支持导入DBC,但是对DBC属性参数的支持不太完善,只能识别一部分基础参数。

软件测试方面主要配合Vector的CANoe、CANalyzer、CANape等测试工具来实现节点仿真、报文解析等功能,此外,其它的一些工具如英特佩斯的neoVI FIRE也支持导入DBC。

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
相关内容推荐
与文章关键字相关的新闻
风云人物最新文章
精华推荐
热门图文