目录[-]

目录:

  1. 新建 DBC 文件
  2. 新建节点
  3. 创建 CAN 报文
  4. 创建 CAN 报文下的信号
  5. 将信号与报文关联
  6. 为报文设置“发送者”和“接收者”
  7. DBC 使用

—————————————————————————————————————————————————

一、新建DBC文件

 

打开CANoe,菜单栏Tools,点击CANb++

进入后,点击File,在弹出窗,选择Create DataBase

弹出窗,显示的模板,二选一,CANoeTemplate.dbc、CANTemplate.dbc,我们选的后一种。

在目录:D:\CANoe_CAN\DBC,保存MyDBC.dbc

————

二、新建节点

 

在NetWork nodes处点击鼠标,点击New新建一个节点(ECU),这里新建2个节点,

ECU_01和ECU_02

新建节点后,2个节点下, 报文:Message;信号:Signals,都是空的,

————

三、创建CAN报文

 

在Messages鼠标右键,点击New

Name:报文名称,不能使用中文,不能以数字开头

Type:CAN Standard,有2个选项,标准帧和扩展帧,正常情况下,使用默认的标准帧

ID:填写CAN报文的ID,比如0x123、0x196之类

DLC:报文长度,通常是8位,如00 00 00 00,但是也可以不手动输入,而是根据信号的长度,自动换算,比如创建报文下有8个信号,每个信号占用1位,那么DLC自动填充为数字1

创建2个报文

————

四、创建CAN报文信号

 

信号代表的是CAN报文中,每个bit位的值含义,比如:1个信号可以只占1个bit,代表运行状态(0静止、1运行),也可以代表具体的值,车速等

在Signals,鼠标右键点击New一个信号

Name:信号名称

Length:信号长度,信号可以占用1位,也可以占用更多

Byte Order:字节序,有2个选型,Inter和Motorola,Inter字节内部排序从高位开始,Motorola从低位开始,车企使用较多,如byte(0)=0x12,byte(1)=0x89,则显示0x1289,但如果是Inter序,则显示0x8912

ValueType:值的类型,有符号整数、无符号整数、浮点数类型

Offset:偏移量

Minimum、Maximum:最小值和最大值

创建4个信号,其中123的2个信号,长度改成4;而321的2个信号,长度设置8

————

五、将信号与报文关联

 

信号归属于报文,将123信号拖拽到报文123里,也可以点进报文详情页再加入

点击后,如果DLC设置的比添加进去的信号所占的字节多,就会弹出窗口

双击左侧CAN报文,在弹出的窗口中点击layout,可以看到该报文下,所有信号的起始位和排序,比如下图,0-3位是123信号1,4-8位是123信号2

————

六、为报文设置发送者和接收者

 

现在有2个完整的CAN报文,但是没有设定发送方和接收方,配置123发送,321接收

双击Network nodes下的ECU_01

切换到Mapped Rx Sig. 将报文绑定ECU_01,这个选项是接收报文,将命名ECU_01_CANMsg(0x321)的报文,加入到ECU里,再继续将Tx Messages加入发送报文ECU_01_CANMsg(0x123)

添加后的报文显示

再绑定ECU_02,现在的结构是这样的

ECU_01:发送0x123,接收0x321

——》Tx Message:ECU_01_CAMsg(0x123)

——》Rx Message:ECU_02_CAMsg(0x321)

ECU_02:发送0x321,接收0x123

——》Tx Message:ECU_01_CAMsg(0x321)

——》Rx Message:ECU_02_CAMsg(0x123)

————

七、DBC 使用

 

新建的CANoe工程导入后,可以编写CAPL代码控制发送报文,也可以通过IL层直接控制发出的信号,需要将DBC导入总线后,在CAN总线,右键Network,选择Open IL Configuration

 

dbc文件显示

需要注意的是,在Network nodes下,有2个ECU,这里的名字需要和仿真页面的ECU名字相同,每个ECU下包含了1个发送和1个接收信号,这里Tx和Rx都填上了,所以才不会报错

————

真实车载数据案例 

一、新建DBC文件

 

1.选择CANoeTemplate.dbc

2.设置名字为:test.dbc,并保存

3.保存后的样式,总线上有一个test网络,它下面可以放入报文和信号,但是目前是空的

————

二、根据通讯协议,新建报文Messages

 

1、通讯协议(这个等下面用到时,按照不同界面需要的参数放不同的图)

2、打开新建的DBC文件,选择Message右键点击New

3.在弹出的窗口中,输入报文名称、报文类型、报文名标识符、DLC长度

用到了图上的4个字段,注意,报文ID长度,应该是扩展帧,Type需选择Extended

————

三、根据通讯协议,新建信号Signal

 

1.选择Signal右键新建New,添加第一个信号:

VCU_McuInputCurrent(电机控制器输入电流)

2.在弹出窗口中,上面有5个字段:信号名称、信号长度、字段排序、单位、数据类型,下面有4个字段:精度、偏移量、物理最小值、物理最大值

3.在Comment填写信号描述

4.同样的方式添加其他4个信号:VCU_MotorSpd(电机转速)、VCU_GearSts(档位)、VCU_VehSpd(车速)、VCU_ACC_Pedal(加速踏板开度)

————

四、根据通讯协议,在新建的Messages中增加新建的Signal

 

1.选择新建的报文VCU_1鼠标右键点击Edit Message,编辑报文信息

2.在弹出窗口中,切换第2个踏板Signals-Add,添加信号

3.批量添加信号后,查看Layout,注意,此时的位置和excel对比是完全不对的

4.再点击每个信号,修改信号起始位

5.重新打开layout,得到的顺序就没问题了

————

五、新建网络节点,并添加报文Message

 

1.鼠标右键Network nodes,新建New

2.默认第1个标签Definition,命名为A

3.选择Tx Messages选项卡,选择添加新建的Messages VCU_1,点击OK

4.确认后,网络节点也创建完毕

————

六、新建Value Tables解析文件,并关联至信号Signal

 

1.在菜单栏选择View-Value Tables

2.空白处右键新建弹出窗口,根据通讯协议,档位信号根据报文解析出对应的档位名称,在列表字段Signal Value Description,查看哪一个有值,如果有值则新建对应解析文件

比如下图

3.切换到Value Descriptions选项卡,点击Add添加数值:0x0、0x1、0x2、0x3和对应的描述信息

4.回到首页,点击VCU_GearSts,下拉列表Value Table,选择一条数据

————

七、保存DBC文件

————

八、测试DBC文件

 

设置后,有一个属性没有配置

Signal Send Type(信号发送类型):Cycle

方法1:添加CAN IG节点

方法2:CAPL脚本

 

报文VCU_1下面有5个信号,比如车速VCU_VehSpd,占用40-47字节,对应的是byte(5),byte(5)的值是06,所以车速就是6km/h

/*@!Encoding:65001*/ includes { } variables { message VCU_1 msg_vcu_1; msTimer tmr1; } on timer tmr1{ output(msg_vcu_1); } on message VCU_1{ msg_vcu_1.byte(0)=0x01;msg_vcu_1.byte(1)=0x02;msg_vcu_1.byte(2)=0x03; msg_vcu_1.byte(3)=0x04;msg_vcu_1.byte(4)=0x05;msg_vcu_1.byte(5)=0x06; msg_vcu_1.byte(6)=0x07;msg_vcu_1.byte(7)=0x08; } on start{ write("start:开始发送报文"); setTimerCyclic(tmr1,2000); }

生成的dbc文件,只要正确绑定canoe工程文件,就可以正常使用。

 

END