用CANoe读取信号时,需要加载DBC文件。信号是报文的主要组成部分,通过DBC数据库,可以在测试过程中进行信号解析。 CANoe的Tools菜单下打开CANdb++: 一、 CANdb++左侧网络拓扑区域 二、 CANdb++右侧对象详细信息 三、主要数据对象详解 3.1 Network 网络 众多电子节点划分为不同的功能区块,区块内的节点通过CAN总线相互连接形成独立的功能子网(如动力子网PTCAN、车身子网BodyCAN等),中央网关(GateWay)将不同的功能子网相连为跨网通信提供支持,不同子网上的节点还可以通过单独连接建立私有通信,某些节点(如BCM)还会通过LIN总线建立下属网络。这里功能子网的通信就需要用DBC来描述,并且每一个功能子网都有自己的DBC文件。 Networks从网络的视角来观察总线上存在的节点、报文及信号,展开Networks下的PTCAN网络可以看到下面包括Tx Messages、Signals和本网络上的多个节点,如下图所示: 3.2 Network nodes 网络节点 与Networks不同,Nodes部分从单个节点的视角观察与节点相关的总线报文及信号,以VBU节点为例,展开后下面包含Tx Messages、Rx Messages、Mapped Tx Signals以及Mapped Rx Signals,见下图所示: 3.3 Messages 报文 Message是CAN总线上传输信息的最小单位,一条Message最大包含8个Byte的数据(CAN FD则最大支持64个Byte的数据),Messages从用途角度可以分为三大类:应用(APP)报文、网络(NM)报文和诊断(DIAG)报文。通过点击Node下的Tx Messages或Rx Messages,可以查看报文属性: 3.4 Signals 信号 Signal是Message里最小的元素单位,通过在某条报文上右击选择Edit Message打开报文编辑窗口,然后选择Layout选项卡可以查看当前报文的信号布局: Layout中纵向表示字节顺序,从上到下为Byte0~Byte7,横向表示字节内的bit位顺序,从左至右为Bit7~Bit0 Signal在Message里的位置由Byte Order、Startbit和Length三个参数决定 Byte Order主要用于跨多个字节的信号,例如上图中横跨Byte1和Byte2的粉色信号,如果选择Motorola格式,则Byte1为信号的高bit位,Byte2为低bit位,选择Intel的话正好相反; Startbit用于确定信号的起始位置,通常要么为信号的最高bit位(msb)要么为最低bit位(lsb);length决定了信号的实际有效长度。 报文里的信号数量是可变的,对于一条8个Byte的报文,其信号数量最小为1个,最大为64个。 3.5 ECUs 控制单元: 包含每个ECU的Network Node和Environment Variables 3.6 Environment Variable 环境变量 四、 dbc文件的创建过程可分为以下几个部分: 1、新建一个CAN数据库文件 2、创建信号要用到的数值表Value Tables 3、创建信号Signals,关联该信号的数值表 4、创建报文Messages 5、创建网络节点Network nodes 6、将信号、报文及网络节点进行关联链接 7、创建或导入自定义属性,并进行修改 8、一致性检查 Ps:关于上面提到的第2点到第5点的信息,一般车厂都会通过通讯矩阵更新给出。我们按照通讯矩阵中的信息进行信号、报文、网络节点等信息的创建关联。 接下来以如下一条报文为例,介绍在CANdb++ Editor工具下创建编辑dbc文件的详细步骤。 分析: 其ID是0x3E4;报文中包含了3个信号值(要注意每个信号值其数值的代表意义,用于做该信号的数值表),是由HUD这个网络节点发送的,然后由ACU、AVNT这两个网络节点接收。也就是说,在这个示例中,需要新建3个信号、1条报文、3个网络节点,并对其进行链接关联。 4.1、新建一个CAN数据库文件 打开CANdb++ Editor软件,点击工具栏"File"下的"Create Database",此时界面如图1所示。按需求选择模板,点击ok,即完成dbc数据库文件的创建了。 图1 4.2、创建信号要用到的数值表Value Tables 数值表的创建,其实是用符号标识符来表示信号值或环境变量值,避免信号值意义不明确。具体操作如下: 点击工具栏"View"下的"Value Tables",此时界面如图4.2.1所示。右键空白部分,选择"New"进行新建。此时界面如图4.2.2所示,完成数值表名字及数值定义后,点击确定即完成该信号数值表的创建了,依次再将其他的两个信号的数值表完成创建。此时再看"Value Tables"的界面已经如图4.2.3所示。 4.2.1 4.2.2 4.2.3 4.3 创建信号Signals,关联该信号的数值表 如图4.3.1所示,右击"Signals"选择"New"进行信号的新建,此时界面如图4.3.2所示。根据通讯矩阵中对于该信号的定义进行设置,并关联上上一步创建的该信号的数值表,点击确定即完成了信号的创建(其他列的信息我们这里先不用进行设置),依次完成其他两个信号的创建工作(可以直接New新建,也可以前面建好的信号为模板选择Copy/Paste,再双击进行修改完成创建)。完成三个信号创建后的界面如图4.3.3所示 4.3.1 4.3.2 4.3.3 4.4 创建报文Messages 右击"Message",选择"New",此时设置界面如图4.4.1所示,按通讯矩阵定义的报文信息进行设置,点击确定即完成当前报文的建立工作。在建立其他报文时,可以以这个为模板进行Copy操作再进行修改;也可以新New创建。 4.4.1 4.5 创建网络节点Network nodes 右击"Network nodes",选择"New",此时的设置界面如图4.5.1所示,这里只需输入创建的网络节点名字进行新建操作就行。依次完成另外两个接收节点的创建。完成后的界面如图4.5.2所示 4.5.1 4.5.2 4.6 将信号、报文及网络节点进行关联链接 前面已经完成了信号、报文、网络节点的创建工作。接下来介绍如何将他们进行链接关联。 4.6.1、信号与报文的关联工作 4.6.1.1 方法一:鼠标直接拖放 (1)鼠标点击"Message"下要进行关联操作的报文; (2)将要关联到该报文的信号直接拖拽到右侧的空白区,或者拖拽到该报文位置(即下图4.6.1.1示例中的"HUD_1_B(0x3E4)的位置") 4.6.1.1 4.6.1.2 方法二:在该报文的"Signals"配置下进行添加关联 (1)、双击"Message"下要进行关联工作的报文,在弹出的设置界面下切换到"Signals"设置项; (2)、点击"Add",选择要关联到该报文的信号,点击OK即完成了关联工作(可以一次添加多个关联的信号)。如下图4.6.1.2所示 4.6.1.2 Ps:在完成报文与信号的关联后,此时还需设置下信号在报文的起始位; (1)双击报文下的信号值,进入"Definition"设置界面; (2)设置该信号的起始位。如下: 4.6.2、报文与网络节点的关联工作 示例中的报文,其发送节点是HUD,接收节点是ACU和AVNT。其关联工作步骤如下: 4.6.2.1 报文与发送节点的关联 跟前面介绍的信号与报文的关联一样,有两种方法: (1)方法一:直接将报文拖拽到要关联的节点(注意直接拖拽到节点的操作,默认是当做该节点的发送报文的); (2)方法二:双击要进行关联工作的节点,进入设置界面,在"Tx Messages"界面下的点击"Add"进行报文添加工作。如下图4.6.2.1所示 4.6.2.1 4.6.2.2 报文与接收节点的关联 若当前报文是想作为要关联节点的接收报文,操作如下: 双击要进行关联工作的节点,进入设置界面,在"MappedRxSig"界面下的点击"Add"进行报文添加工作;如下图4.6.2.2所示(注意作为节点接收报文的不能通过直接拖拽进行关联)。 4.6.2.2 4.7创建或导入自定义属性,并进行修改 4.7.1 创建自定义属性 在"View"下点击"Attribute Definitions",右击选择New,按需要可以进行对报文、信号、节点、环境变量等进行属性创建。此时界面如下图4.7.1所示: 4.7.2 属性的导入操作 Attribute Definitions中的属性也可以通过从其他已有的dbc文件中进行导入。操作如下:在File中选择Import Attribute Definitions,选择要导入的dbc文件,即可将该dbc中的属性定义导入到我们现在的dbc文件中来。 4.7.3 属性的修改操作 根据上面的步骤完成了属性的自定义或导入工作;此时再双击打开信号、报文、或者节点,在其Attributes项下可以看到前面定义/导入的属性及其值;此时可根据通讯矩阵的定义对其进行修改设置。 例如图4.7.3.1是对报文属性的修改;图4.7.3.2是对信号属性的修改操作;如下: 4.7.3.1 4.7.3.2 4.8 一致性检查 经过前面的几个步骤已经完成数据库文件的创建了。但还需要通过一致性检查来确保数据库文件中的对象及内部关系的一致性。操作方法如下: 在"File"中选择"Consistency Check",此时会在一致性检查窗口中输出检查结果。如下:会有状态信息及对应的说明,以供检查出错/警告报警的原因。此时界面如下图4.8.1所示: