第四期内容,主要讲解如何使用 CANoe 自带的 CANdb++ Editor 工具,根据信号矩阵表来手动创建 DBC 文件。以下是根据文件内容整理的系统性结构:
CANoe 教程第四期:使用 CANdb++ 制作 DBC 文件
一、 课程回顾与本期目标
- 回顾: 上一期(第三期)学习了加载 DBC 文件后,CANoe 可以方便地解析和显示报文中的信号信息
。 - 本期目标: 学习 DBC 文件是如何制作出来的,重点是使用 CANdb++ Editor 工具,依据主机厂提供的信号矩阵表,手动创建包含报文和信号定义的 DBC 文件
。 - 示例: 以信号矩阵表中 ID 为 196 (EMS 发出) 的报文及其包含的两个信号(Engine Speed, Engine Speed Error)为例进行创建演示
。
二、 准备工作与工具介绍
- 信号矩阵表: 创建 DBC 的依据,包含了报文 ID、信号名称、起始位、长度、字节序、系数、偏移量、单位、值范围、含义等关键信息
。 (需要理解这些参数,可参考贾老师 CAN 总线通信系列视频第五期 )。 - CANdb++ Editor:
- 安装 CANoe 时会自动附带安装的工具
。 - 用于创建、编辑和管理 DBC 文件
。 - 启动方式:从 Windows 应用列表的 Vector 文件夹下找到并打开
。
- 安装 CANoe 时会自动附带安装的工具
三、 使用 CANdb++ 创建 DBC 文件步骤
- 新建数据库 (DBC 文件):
- 启动 CANdb++
。 File->New Database。 - 选择模板
CAN Standard Template,点击OK。 - 选择保存位置(建议在 CANoe 项目下建一个
can_db文件夹),命名文件(如sample.dbc),保存。
- 启动 CANdb++
- 创建信号 (Signals): (推荐先创建信号再创建报文
) - 在左侧导航栏找到
Signals节点。 - 右键
Signals->New,创建第一个信号 (EMS_EngineSpeed)。 - 配置信号属性 (依据信号矩阵表)
: Name: 信号名称 (如EMS_EngineSpeed)。 Comment: 中文注释/描述 (如 “发动机转速”)。 Length [Bit]: 信号长度,单位是位 (如 16)。 Byte Order: 字节序 (一般选Motorola)。 Value Type: 值类型 (如Unsigned无符号)。 Factor: 系数 (如 0.25)。 Offset: 偏移量 (如 0)。 Unit: 单位 (如rpm)。 Minimum/Maximum: 最小/最大物理值 (可手动填或点Calculate Min/Max后根据矩阵表调整)。 Value Table: 值表(本次未使用)。 - 点击
Apply(应用) 和OK。
- 重复上述步骤,创建第二个信号 (
EMS_EngineSpeedError),注意其长度为 1 位,无单位,Min=0, Max=1。 - 注意: 此时创建的信号带有小叉图标,表示尚未关联到任何报文
。起始位 (Startbit) 在此时也无法设置,需要在关联报文后设置 。
- 在左侧导航栏找到
- 创建报文 (Messages):
- 在左侧导航栏找到
Messages节点。 - 右键
Messages->New,创建报文。 - 配置报文属性 (依据信号矩阵表)
: Name: 报文名称 (可自定义,如EMS_0x196)。 ID: 报文标识符 (如196,注意是十六进制)。 DLC(Data Length Code): 数据长度码,表示数据域字节数 (一般为 8)。 Type: 帧类型 (一般选CAN Standard标准帧)。 Comment: 报文描述 (如 “EMS 周期发出的报文”)。 - 点击
Apply和OK。
- 在左侧导航栏找到
- 关联信号到报文:
- 在
Signals节点下,选中已创建的信号 (EMS_EngineSpeed,EMS_EngineSpeedError)。 - 将信号拖拽到
Messages节点下对应的报文 (EMS_0x196) 上。
- 在
- 设置信号的起始位 (Startbit):
- 在
Messages节点下,展开报文 (EMS_0x196),可以看到其包含的信号。 - 双击报文下的某个信号 (如
EMS_EngineSpeed) 打开编辑窗口。 - 在
Definition选项卡中,找到Startbit字段,填入信号矩阵表规定的起始位 (如EMS_EngineSpeed是 24,EMS_EngineSpeedError是 12)。 - 点击
Apply和OK。 - 为该报文下的所有信号都设置好起始位
。
- 在
- 检查布局 (Layout) (可选):
- 双击报文 (
EMS_0x196),切换到Layout选项卡。 - 可以可视化地看到信号在 8 个字节(64 位)中的分布情况,高亮区域表示信号占用的位
。
- 双击报文 (
- 保存 DBC 文件: 编辑完成后,记得保存 (
File->Save) 或关闭时提示保存。
四、 在 CANoe 中验证创建的 DBC 文件
- 打开 CANoe 工程: 打开之前使用的
demo_canoe_project01。 - 移除旧 DBC (如有): 确保
Databases节点下没有加载其他的 DBC 文件。 - 运行工程 (无 DBC): 启动工程,观察 Trace 窗口,报文没有名称,无法展开看信号
。 - 加载新创建的 DBC:
- 停止工程
。 - 右键
Databases->Add,添加刚刚创建的sample.dbc文件。
- 停止工程
- 再次运行工程 (有 DBC):
- 重新启动工程
。 - 观察 Trace 窗口:
- ID 196 的报文现在显示了名称 (
EMS_0x196)。 - 报文可以展开,显示了定义的两个信号 (
EMS_EngineSpeed,EMS_EngineSpeedError) 及其物理值、单位、中文名等。 - ID 28B 的报文因为没有在
sample.dbc中定义,所以仍然是原始状态,无法解析。
- ID 196 的报文现在显示了名称 (
- 这证明了自己创建的 DBC 文件是有效的
。
- 重新启动工程
五、 总结与后续
- 本期演示了如何使用 CANdb++ 根据信号矩阵表创建基本的 DBC 文件,包含信号和报文定义
。 - 强调了 DBC 文件对于在 CANoe 中方便解析信号的重要性
。