首先,先简单描述一下使用Vector工具包变更CAN应用报文、信号的整个流程(网管报文、诊断报文是另外的配置方法)。

        1、在DBC里面添加CAN报文信号(填好报文、信号的各种参数,报文属性等)

        2、使用Configurator软件打开代码配置工程,把DBC导入至Configurator中,配置好Can、CanIf、PDUR、COM等模块

        3、使用Developer软件打开代码配置工程(与Configurator软件打开的是同一份代码配置工程,),因为第2步已经操作完成,因此打开Developer软件后,可以看到对应在DBC里面新增的报文信号了,接下来就是Mapping报文信号,也就是将报文信号映射到应用层架构的各个模块里面,供应用层使用。

        具体开发流程操作如下:

另外:本篇文章讲的是Vector工具包信号开发的配置流程,对于具体的各个参数配置项不做深入讲解(这些也讲的话,涉及太多太多了)。       

步骤1:在DBC中进行报文、信号变更

     在DBC中添加报文时,要注意报文的属性(Attribute),在Attribute界面配置好对应报文的属性,不同的报文属性不一样。应用报文、网管报文、诊断报文,都有对应属性,这样在把DBC导入Configurator软件时软件才能识别出对应的报文。

remove 没成功 remove can_单片机

        另外需要注意的是,你需要变更的报文、信号需要添加到DBC中的一个节点里面去,导入DBC至Configurator之后,需要你选择对应的节点导入,并且只能选择一个节点。也就是说,代码里面的所有发送和接收报文都需要添加到DBC的一个节点里面。如下图OBC节点:

remove 没成功 remove can_autosar_02

        另外提一嘴。

        操作过DBC的人都知道,在DBC里面添加报文和信号非常浪费实际,添加一两个报文或者信号还好。但在实际的工作过程中,需要添加的信号量非常大,操作起来非常费时间。所以一般企业都会有工具通过Excel表等方式直接转成DBC。(比如我们公司,我进去的时候居然没有这种工具,弄了几次我受不了了,我TM当场把Python给学了,弄了个Excel转DBC工具)

步骤2:导入DBC至Configurator

        打开Configurator之后,点击InputFile,即可导入DBC

        

remove 没成功 remove can_mcu_03

        导入DBC后,在ECU Instance处选择DBC里面的节点,这也就是上面所说的,要在一个节点里面变更报文信号,其它节点的报文信号,Configurator工程是不理会的。

remove 没成功 remove can_单片机_04

        添加DBC后,需要Update工程,如下图:

       

remove 没成功 remove can_mcu_05

       ( 注意:若是DBC的报文、信号有变更,一定要点击Complete Update,否则在Developer软件进行报文信号映射(Mapping)的时候,同一个信号组的信号会以数组的形式存在。正常情况,同一个信号组的信号我们都是希望它以结构体的形式供应用层使用。关于这一点,如果看不懂的话可以不理会,上手开发之后,在开发过程中慢慢就理解了)

步骤3:配置Configurator中所变更报文信号的各个模块的相关属性

        配置之前,先看下Container这个东西,(所谓Container,就是下图所示的一个个像容器的东西,配置的东西都在这些容器里面)

        

remove 没成功 remove can_remove 没成功_06

1、CAN模块:

CAN控制器(CanController):        

当填加一个新的DBC之后,Configurator中会在CAN模块生成新的一路CAN控制器,因为一个节点必须要一路CAN通道。如下图所示,这个工程就有2路CAN通道 ,工程里面共添加了2个DBC

   

remove 没成功 remove can_remove 没成功_07

        至于CAN控制器的各个参数配置,涉及的东西都是关于CAN控制器的,内容较多,我另外会用一篇文章去讲解。

CAN邮箱(CanHardwareObject):

        新增个DBC文件后,除了会生成一路CAN控制器,另外还会在CanHardwareObject里面自动生成两个邮箱(一个TX,一个RX),如下图所示:

        

remove 没成功 remove can_汽车_08

        关于CAN邮箱,类型有Full-can和Basic-can,简单来说:就是配置成Full-can,那么一个邮箱只能存一个ID的报文。配置成Basic-can,那么一个邮箱就能存放多个不同ID的报文。

2、CANIF模块:

       在导入DBC后,CANIF会根据所导入的DBC生成相应的报文Container(容器)。Vector软件会自动将CANIF模块的报文与CAN模块中的CAN控制器和邮箱索引起来(在上面CAN模块中有说,导入DBC会自动在CAN模块生成对应的CAN控制器和邮箱,所以,该DBC中的报文也会自动索引到对应的CAN控制器和邮箱中。当有多个DBC和多路的CAN控制器时,CAN报文自然不会索引到错误的CAN控制和邮箱了)

        CANIF模块的接收报文如图所示:(包含应用报文、NM报文、诊断报文、烧录报文等) 

remove 没成功 remove can_remove 没成功_09

        CANIF模块的发送报文如图所示:(包含应用报文、NM报文、诊断报文、烧录报文等) 

remove 没成功 remove can_汽车_10

        在CANIF模块中,可以配置各帧CAN报文的类型,可以配置为CAN格式、CANFD格式,扩展帧格式等(实际上在DBC配好后,这些会根据DBC自动帮你配好)

3、PDUR模块:

        导入DBC后,Pdur模块也会自动生成DBC节点中的报文。这个模块通常配置的项比较少。

remove 没成功 remove can_mcu_11

4、COM模块:

         

remove 没成功 remove can_单片机_12

         在该模块可以配置报文的周期、报文发送的偏置时间、事件型报文触发后的发送次数,配置界面如下(通常这些参数也是在DBC里面直接配好了):

remove 没成功 remove can_remove 没成功_13


当把这上述四个模块配置好后,应用报文的底层配置基本是没什么问题,然后可以生成COM(Communication)代码了,界面如下图所示:

        

remove 没成功 remove can_autosar_14

        若所配置的工程没有问题,生成代码应当是全部通过。

remove 没成功 remove can_remove 没成功_15


        底层Configurator弄好后,接下来就是使用Developer软件把报文信号Mapping(映射)到应用层中去了。

          Developer中,报文数据Mapping界面如下:

remove 没成功 remove can_autosar_16

        Mapping完成后,就是使用模型把各个报文信号连到应用层各个模块中去了,界面如下:

        

remove 没成功 remove can_单片机_17

        完成Develoer的操作后,若是操作无误,则可在Configurator中生成RTE和OS文件了,界面如下:

        


         使用Vector工具链开发应用报文的整个流程就是这些了。但实际上开发起来的细节是非常多的,对于新手来说不太友好。

        我是通信工程师,因此在这整个开发流程中,我实际上只用开发Configurator部分。因为对于各个报文信号在哪里写、在哪里读是由应用层决定的,因此Developer部分是由应用层同事开发,他们把报文信号Mapping至对应的模块直接使用就可以了。

        事实上,开发流程熟悉后其实不难。主要还是出现问题后如何去查,该怎么查,这就要求对代码和架构比较熟悉了。比如开发完之后,发现被你开发过,工程跑起来连报文都发不出,这可咋整。我刚开发的时候就出现过这样的问题,后面查代码才发现是收发器没有跟CANIF层索引起来,然后再Configurator里面配一下就好了。

remove 没成功 remove can_汽车_18