文章目录
- 一、前期准备
- 二、新建DBC文件
- 三、添加报文(Msg)
- 四、添加信号
- 4.1 大小端模式
- 4.2 创建数值表
- 4.3 添加信号
- 五、关联信号和报文
- 六、设置报文发送类型和周期
- 七、编辑通信矩阵
一、前期准备
首先需要安装制作DBC文件的软件,这里使用的是CANdb++。由于博主刚开始接触汽车电子相关知识,如果有其他常用的制作DBC文件的软件,欢迎大家在评论区留言。
其次就是需要制作的报文,也就是通信协议。其中包括报文名称(Msg Name),报文ID(Msg ID),报文发送类型(Msg Send Type),报文周期时间(Msg Cycle Time(ms))报文长度(Msg Length Byte),信号名称(Signal Name),信号描述(Signal Description),排列格式(Byte Order),起始字节(Start Byte),起始位(Start Bit),信号发送类型(Signal Send Type),信号长度(Bit Length),数据类型(Data Type),精度(分辨率,Resolution),偏移量(offset),物理最大值(Singal Value Max(phys)),物理最小值(Signal Value Min(phys)),总线(十六进制)最小值(Signal Min Value(Hex)),总线最大值(Signal Value Max(Hex)),初始值(Initial Value(Hex)),单位(Unit),无效值(Invalid Value(Hex))信号描述(Singal Value Description)等。这里博主自己简单列一个报文。
Msg Name | Msg ID | Msg Send Type | Msg Cycle Time(ms) | Msg Length Byte | Signal Name | Signal Description | Start Byte | Byte Orde | Start Bit | Signal Send Type | Bit Length | Data Type | Resolution | offset | Signal Value Min(phys) | Singal Value Max(phys) | Signal Min Value(Hex) | Signal Value Max(Hex) | Initial Value(Hex) | Unit | Singal Value Description |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CAR | 0x0404 | Cycle | 10 | 8 | Enable | 发动机使能 | 0 | Motorola LSB | 2 | Cycle | 1 | Unsigned | 1 | 0 | 0 | 1 | 0x0 | 0x1 | 0x1 | 0:不使能;1:使能 | |
CAR | 0x0404 | Cycle | 10 | 8 | Speed | 发动机转速 | 2 | Motorola LSB | 16 | Cycle | 16 | Unsigned | 0.25 | 0 | 0 | 16000 | 0x0 | 0x3E80 | 0x0 | rpm |
二、新建DBC文件
三、添加报文(Msg)
新建完成后,点击左侧的“Message”来新建报文。
根据通信协议,填入报文的相关信息。
其中“Type”有两种,一种是“CAN Standard”,标准的CAN。一种是“CAN Extended”,扩展的CAN。
标准帧的ID取值范围是0x0~0x7FF,而扩展帧的ID可以更大。CAN标准帧和扩展帧只是在ID的长度上不一样,以能扩展更多的CAN节点,更好地支持上层协议而已。如果“Type”选择错误,ID超出范围会报错。
其中DLC(Data Length Code)是发送报文的长度。
创建好的报文如下
四、添加信号
在介绍如何添加信号之前,先介绍一下大小端模式和如何新建数值表。
4.1 大小端模式
简单来讲,Intel是小端模式(Little-Endian小端序),Motorola是大端模式(Big-Endian大端序)。
小端模式——低字节存放在低地址端,高字节存放在高地址端
大端模式——低字节存放在高地址端,高字节存放在低地址端
举一个简单的例子,比如需要存储0x12 34 56 78
大端模式存储时,低字节放在高地址,高字节放在低地址。
存储时为 0x12 | 0x34 | 0x56 | 0x78
小端模式存储时,低字节放在低地址,高字节放在高地址。
存储时为 0x78 | 0x56 | 0x34 | 0x12
4.2 创建数值表
数值表就是用来指示信号中值的含义。点击“View”,选择“Value Tables”。
创建好的数值表如下
4.3 添加信号
点击左侧的“Singal”,右键右侧空白处,选择“New”。
按照通信协议要求,添加信号。在“Comment”窗口添加信号描述。
- Byte Order
这是排列格式,有两种。一种是小端模式,另一种是大端模式。关于小端模式和大端模式,下面会有相应的补充介绍。 - Uint
单位,没有可以不写 - Factor
对应通信协议中的精度,分辨率(Resolution) - Minimum和Maxmum
物理最小值和物理最大值 - Value Table
数值表,用来指示每一个数值的含义。需要自己创建。
创建好的发动机使能信号如下
创建好的发动机转速信号如下
五、关联信号和报文
创建完信号和报文之后,需要将信号添加到报文中。再次点击左侧的“Message”。选择“Signal”,点击下方的“Add”添加信号,将上面创建的信号添加进来。
六、设置报文发送类型和周期
双击打开新建的报文,选择“Attributes”窗口,根据通信协议来设定报文的发送类型和周期。
七、编辑通信矩阵
- 双击创建的Message(报文),选择“Layout”
- 点击“Add…”添加信号,根据通信协议规定的起始字节和起始位将信号添加进去