本篇是CANoe使用入门的第二篇,DBC是Database Can的缩写,其代表的是CAN的数据库文件,里面定义了CAN总线上有哪些CAN节点、每个节点各自发出什么CAN报文,每个报文下又有哪些信号,CAN总线不管是开发、测试还是分析,DBC文件都是必不可少的。
目录
一、新建DBC文件
二、新建节点
三、创建CAN报文
四、创建CAN报文的信号
五、将信号与报文相关联
六、为报文设置发送者和接收者
七、创建的DBC使用
一、新建DBC文件
打开CANoe,在CANoe的Tools菜单栏内,点击CANdb++Editor 打开DBC编辑软件
DBC编辑器打开后的界面如下
点击File,在弹出的窗口中选择Create DataBase
弹出如下窗口,用于选择DBC模板,我一般选择CANoeTemplate或者CAN Template
本次选择CAN Template,点击ok,在随后弹出的窗口中,选择一个文件夹作为这个DBC的路径,点击保存即可。
保存后的界面如图所示,点击一下放大按钮把界面放大便于观看
二、新建节点
节点(NODE)是本DBC中所有报文的发送者和接收者的定义(可以简单认为是ECU)。
在Network node处右击鼠标,点击new新建一个节点(ECU),给这个节点赋予一个名称,随后点击确定即可,本文新建两个节点ECU01和ECU02来进行互相的收发
节点创建好后,界面如下
三、创建CAN报文
CAN总线,CAN报文自然是核心,接下来我们创建两条CAN报文。
同样的,在message处,右键鼠标,选择new,新建一个message
在Name处输入本条CAN message的名称,注意(不得使用中文,不得以数字开头)
在Type处选择CAN Standard(标准CAN)
在ID处填入此CAN报文的CAN ID
DLC处写入此报文的长度(单位是字节)
随后点击OK
再次创建第二条CAN报文,完成后如图所示。
四、创建CAN报文的信号
信号代表的是CAN报文中的各个bit位的值含义。
一个信号既可以只占一个bit,如代表电机的运行状态(0是静止,1是电机正在运行)
通常来说,一个信号占多长的长度,取决于这个信号会有多少种可能得值,比如说A信号的取值从0~12,总共需要13个数,那么它所需要的长度就至少是4Bit(4Bit可以表示0~0xF,总共16个值)
具体的信号需要占用多少个bit位,可以查看客户给予的CAN矩阵表,或者自己根据需要定义。
首先新建一个信号。
同样的,在Signals处右击new一个信号
在Name处键入此信号的名称
Length处填入此信号的长度(单位为Bit)
Byte Order(字节序)选择以Intel型填充还是以Motorola型填充。
Intel型 :小端字节序,字节内部bit排序从高位开始
Motorola型:大端字节序,字节内部bit排序从低位开始
ValueType:值的类型,有符号整数和无符号整数以及浮点数类型
此处以Intel格式为例
偏移系数和最大值最小值可以不填
如下填写后点击ok
随后再次创建三个信号
四个信号都创建完成后,如图所示
可以看到,已经有了四个信号
五、将信号与报文相关联
既然信号是报文中某几个bit位的含义,那么信号就应当与报文一一对应起来
接下来,我们将信号与报文进行绑定(把信号放到报文中去)
在左侧双击CAN报文0x123 打开CAN报文界面
点击Signals切换到信号栏下
点击右下角的Add将信号添加到报文中
选择需要添加进去的信号,然后ok。这里我将0x123的两个信号Signal1和signal2放进来
再点击右下角的确定按钮,信号就添加完成了。
点击后如果DLC设置得比添加进去的信号所占的字节数多,就会弹出这个窗口,点击否(N)即可,如果点击是(Y),系统会修改这条CAN报文的长度为刚刚添加进去的信号所占的字节数
添加完成后如图所示,右边会列出这个报文里所有的信号,以及信号所占的字节和起始位。
此时,如果想修改信号在报文中,所占的位置,可以双击红框中的Startbit处修改起始位
随后点击确定即可。
也可以在这条CAN报文的Layout中通过鼠标拖动修改信号所处的位置。
双击左侧CAN报文,在弹出的窗口中点击layout,鼠标按住方框中标记的信号拖动即可改变信号所在的位置
接下来以同样的方法,把另外两个信号添加到0x321的CAN报文中去
添加完后在左侧展开两个CAN报文,即可看到这样的界面
六、为报文设置发送者和接收者
我们现在已经有了两条完整的CAN报文,但是还没有规定这两条报文由谁进行收和发
接下来,我们需要为报文指定接收者和发送者。
在左侧点击红框中的+号,展开节点视图
可以看到,节点ECU01和ECU02下都是空的,TX message和RX message都没有。
双击节点ECU01,在MappedRXSig里面Add需要接收的报文中的信号
添加完毕后,如下图
再切换到Tx message栏目,把该节点发送的报文Add进来,随后点击确定
此时我们展开左侧,可以看到ECU01已经有了对应的tx 和rx报文以及信号
如法炮制,为ECU02添加接收和发送的报文及信号
完成后如图所示,ECU01和ECU02都已经具有了Tx和Rx报文。
ECU01发送0x123,接收0x321
ECU02发送0x321,接收0x123
至此,一个简略版的CAN DBC就制作完成了。
七、创建的DBC使用
可以新建一个CANoe工程导入对这个DBC进行使用了。
如果使用CAPL进行控制,则直接编写脚本即可。
如果不使用CAPL,采取第一篇文章的方式,通过IL层直接控制发出的信号,需要将DBC导入CANoe之后,在CAN总线上,右键Network,选择Open IL Configuration
在SendType中选择Cyclic,并在后面的Cyclic Time中给定一个时间之后,方可激活IL的自动发送,随后使用IL控制
设置完成之后,启动CANoe,即可看到我们的报文在自动发送了。
之后想修改信号值等操作,就可以参照第一篇文章的控制方法了。