官方下载地址:https://www.vector.com/cn/zh/download/candb-31-sp5/

点击左上角File->Creat Datebase,选择CANTemplate.dbc


然后给DBC取一个名字,然后保存:

这里主要是制作关于BMS的dbc文件,所以只用到Messages和Signals,这两个有什么含义呢?
Messages:中文叫消息,在CAN里面的消息指一帧报文,一帧报文叫做一条消息。比如0x4200的报文,这一条报文叫做一个消息。
Signals:中文叫信号,在CAN里面的一个量叫做一个信号。比如电压可以叫做一个信号。
除了这两个还有一些CAN的基础知识:
Motorola和IntelCAN协议的数据帧中,数据字段(Data Field)的字节排列方式有两种标准:
摩托罗拉格式(Motorola):大端模式,高位字节在前(低地址),低位字节在后(高地址),所以Motorola需要将报文反一反来阅读,比如派能协议。
英特尔格式(Intel):小端模式,低位字节在前(低地址),高位字节在后(高地址),所以Intel格式不需要反过来,阅读起来更加方便。
了解完这个,下面就可以开始制作dbc文件了。
以Pylon CAN bus protocol V2.0.6_220510.pdf协议为例:
单击Signals选中右键 --> New

名称填写PL_Charge_Volt_Lim_CVL,字节长度为16,单位V,intel类型,精度0.1,偏移0,最小值0.最大值65535。
那么这些数据怎么来的?
Name:名称,名称就是这个信号的名称,比如电压、电流、温度等。
Length「bit」:长度,假如CAN报文传过来的电压原始值为FF FF,那么换算到二进制就是1111 1111 1111 1111,16个1,那么每个1代表一个bit,也就是这里的长度。这个是假如需要解析故障的时候可以用上!
byte Order:字节顺序,上面讲过Motorola和Intel,这里就不再讲解了。
Unit:单位。
Value Type:数据类型,这里的数据类型有 Signed(有符号)、Unsigned(无符号)、IEEE Float(IEEE 754 标准、单精度32位)、IEEE Double(IEEE 754 标准、双精度64位)。如何选择:比如电压和SOC全都是大于0的数,就选择Unsigned,比如电流和温度有正负的数就选择Signed,其他的小数位比较多的就选择Float或者Double。
Factor:精度,协议里面会有。
Offset:偏移,协议里面会有。
Min和Max:一般随便填写。
Comment:评论,可以写备注。


好,现在就得到一个信号:

按照这个形式,将第一帧报文的四个变量全部写进去:

添加一帧0x351的帧ID,Messages右键->New

填好Name、Type、ID和DLC,点击确定。

点击Signals->Add,把刚刚写好的信号按照顺序添加进来,点击确定:

然后恭喜你得到了第一帧报文:

好,到这一步就会解析基本的电压电流了,但是还有其他量,比如告警保护故障位(即bit位)、AA(使能)、55(禁能)。那么怎么解析呢?往下看
在解析告警保护故障时,需要用到。
在DBC解析中,按照下面来解析的:
| byte0 | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 |
|---|---|---|---|---|---|---|---|
| bit0-bit7 | bit8-bit15 | bit16-bit23 | bit24-bit31 | bit32-bit39 | bit40-bit47 | bit48-bit55 | bit56-bit63 |
按照表格里面就能进行故障位解析,以下是示例:
把所有告警保护位都添加到Signal中,比如过压告警,因为每一个告警占用一个bit,所以Length全部为1:

然后把所有写好的告警保护位都添加到Message中,然后双击即可调整Startbit的位置,根据上面的byte和bit对应的表格和协议调整即可。

最终解析的样子就为:

可能有的小伙伴注意到了,派能协议0x359的最后两个值解析为P和N,那么这个怎么做到的呢?这就是下面要讲的。
Value Tables更像一个对应关系,比如:
AA表示使能,55表示禁能;
ASCII码的80对应P,ASCII码的78对应N等等。
其实都是对应关系,创建这种对应关系就会用到Value Tables。
Value Tables的创建在左上角点击View-->Value Tables即可打开。

打开以后是空白的,什么都没有,这是只要点击右键-->New即可创建一个tables,可以创建很多个:

比如说我创建一个存放ASCII码表来解析厂商名称:

然后在Value Descriptions中,点击Add即可添加Value和Description。
下面这个添加参考ASCII码表:https://tool.hiofd.com/ascii-table/

Note
有些特殊字符比如Ï,可能CANdb++显示不出来而显示问号。
或者使用AA55:

总之对应关系用Value Tables准没错。
Value Tables的使用创建好了怎么使用呢?
点击总览即可返回。

找到需要解析的ASCII码或者其他需要解析的数字,然后下面点击Value Tables,选择刚刚创建的表即可。
