E88新能源汽车网关软件设计方案.docx
《E88新能源汽车网关软件设计方案.docx》由会员分享,可在线阅读,更多相关《E88新能源汽车网关软件设计方案.docx(26页珍藏版)》请在冰点文库上搜索。
E88新能源汽车网关软件设计方案
密级:
E88新能源汽车网关软件设计方案
长春启阳信息技术股份有限公司
1引言(Introduction)3
1.1网关软件设计5
1.2网关路由功能设计5
1.2.1接收中断处理5
1.2.2接收处理任务7
1.3报文周期发送报警处理7
1.3.1采用操作系统提供的报警7
1.3.2发送定时器更新模块9
1.3.3路由过程中发送定时器处理模块9
1.4报文发送任务10
1.5报文处理10
2网关直接网络管理功能设计及实现12
2.1OSEK/VDX直接网络管理介绍12
2.1.1直接网络管理概念12
2.1.2直接网络管理的内部状态12
2.1.3直接网络管理的通信消息12
2.2.1任务总体设计14
2.2.2定时器总体设计16
2.2.3NMPDU到CAN报文的映射17
3网关间接网络管理功能设计及实现18
3.1OSEK/VDX间接网络管理介绍18
3.2间接网络管理功能设计19
3.2.1报文接收状态配置表19
3.2.2接收定时器19
3.2.3报文接收过滤及处理模块21
3.2.4接收定时器更新模块22
3.2.5接收超时处理模块23
1引言(Introduction)
针对电动汽车车身网络平台而言,作为网络交通枢纽的中央网关控制器需要将接收到的报文存入数据缓冲区,同时还需要将转发的数据重新拆分打包,进行协议转换出来,因此在网关控制器的选择上要求其具有较高的内存容量和较快的处理速度。
随着全球汽车电子行业的迅猛发展,从C51单片机到ARM9微处理器,车内控制器的性能一直不断提高。
目前32位RISC内核微处理器不但占据了高端控制器市场,同时也向低端控制器领域发展,凭借其低功耗、高性价比等提点,在汽车控制网络中得到广泛应用是可以预见的,因此本方案选取了NXP公司汽车专用的V850ES/FK3的32位RISC内核微处理器,其丰富的外设接口和强大性能有利于后续网络的扩展功能。
本文档介绍网关的基本工作原理和系统结构,提出基于CAN/LIN总线的车身网关功能定义和整体设计方案,针对电动汽车特点制定了基于SAEJ1939的CAN应用层协议。
CAN/LIN网关在硬件架构上采用了NEC基于RISC内核内核的32位控制器V850ES/FK3和容错低速CAN接收器(TJA1054)。
CAN节点采用V850ES/FK3系列单片机,完成了电动机控制节点和状态显示节点的电路板制作和程序设计。
最后将各节点与网关组合起来,借助硬件节点与仿真软件相结合的方法对整个通信网络的关键性能进行测试分析,在调试过程中对设计中存在的不足进行优化和改善。
实验结果表明CAN、LIN节点与网关软硬件工作稳定,实现了网关的报文转发和模拟电动机控制、车身控制台和门锁控制节点的功能,对车身控制中的其他部分有着借鉴意义,为整车控制网络平台和其他功能节点提供了参考模型
1.1网关软件设计
网关软件整体结构包括三部分,分别是操作系统,底层驱动程序和应用软件,其中应用软件部分包括路由功能模块和网络管理模块。
。
网关软件整体结构如下图1所示。
图1网关软件整体结构
操作系统采用符合OSEK/VDX标准的osCAN实现,由于osCAN硬件平台基于MPC555,因此该部分重点是针对网关所采用的控制器进行操作系统的移植。
OSEK操作系统在NEC32位硬件平台的移植工作已经完成,经过验证,目前操作系统在32位NEC单片机中可以正常运行。
单片机底层驱动程序的设计与实现中,重点针对网关的实际应用,对CAN模块、定时器模块以及中断模块等底层驱动程序进行了设计及实现。
CAN底层驱动程序包括CAN模块寄存器初始化、CAN报文发送、CAN报文接收、CAN中断设置以及总线睡眠与唤醒设置等。
应用软件是实现网关信息交互和网络管理功能的关键,本文档主要介绍网关应用软件的设计。
1.2网关路由功能设计
1.2.1接收中断处理
为了减少中断处理时间,在接收中断中只进行接收滤波工作,包括接收报文帧类型、报文ID以及报文数据长度滤波,然后将需要路由的报文存入接收队列缓冲区中,同时激活接收处理任务。
接收队列的结构设计如下:
#defineRX_FRM_QUEUE_LEN(GATEWAY_RX_FRM_CNT<<1)
/*CANFrameRxQueueDefinition*/
typedefstruct_RX_FRM
{
tRxFrmDescr*pRxFrmDescr;/*pointertoframeinrxtable*/
unsignedcharaucData[8];/*MsgData*/
}
RX_FRM;
typedefstruct_RX_FRM_QUEUE
{
RX_FRMastrRxFrm[RX_FRM_QUEUE_LEN];
unsignedcharucWriteIndex;/*writeindexofthequeue*/
unsignedcharucReadIndex;/*readindexofthequeue*/
}
RX_FRM_QUEUE;
接收中断处理程序流程图5如下:
图5接收中断处理程序流程图
1.2.2接收处理任务
接收处理任务主要负责对接收队列操作,将接收队列头部报文路由至目标发送缓冲区中,同时将目的报文放入发送队列中,激活报文发送任务,最后更新接收队列。
接收处理任务程序流程如下图6所示。
图6接收处理任务程序流程图
1.3报文周期发送报警处理
1.3.1采用操作系统提供的报警
一、对于周期发送的报文,有些需要设置周期发送定时器。
在系统设计时,可以根据发送报文表对存在周期发送方式的每个报文均设定周期报警定时器。
1、对于报文转发的情形,根据源报文和目的报文的发送周期相同与否考虑是否需要设定发送定时器。
2、但是对于信号路由的报文,则需要使用周期发送定时器,因为仅依赖于事件触发方式时难以满足周期发送的要求!
二、对于周期发送简要设计如下:
在接收处理任务中,如果源报文ID与目的报文ID相同,则为报文转发,此时如果报文发送周期相同,则直接将报文按事件触发方式处理,不设置发送定时器;如果报文发送周期不相同,则需要设置发送定时器。
1、如果源报文ID与目的报文ID不相同时,则为信号路由。
此时如果目的报文支持事件触发,则直接将报文写入发送队列;如果目的报文支持周期发送,则同时激活发送定时器,定时时间为发送周期,而在发送定时中断中主要负责将待发送报文写入发送队列中。
2、对于信号路由的目的报文,网关在初始化后是否需要立即周期发送默认值需要考虑(还是某个信号更新之后再开始发送)。
三、对于周期报警发送的信号路由的报文:
1、如果网关未接收到源报文,则网关自动以一定周期发送默认值;
2、如果网关接收到源报文,但是不支持事件触发,那么网关仍然以原来的报警周期发送该报文;
3、如果网关接收到源报文,并且支持事件触发方式,那么在将目的报文插入发送队列的同时,要将报警清零,重新设置报警,防止在较短时间内同时发送两帧报文的情形,目的报文以被插入发送队列时刻为新的周期起点进行周期发送。
4、如果网关之前正常接收源报文,但突然没有接收某个源报文,那么目的报文中的信号保持最后一次的值。
四、对于周期发送的报文转发方式的报文:
1、直接按照事件触发处理,即如果接收到报文,则执行转发操作;
2、如果接收不到源报文,则不发送任何报文。
3、对于报文路由但源报文和目的报文周期不相同时,采取与信号路由相同的方式,但是当接收不到源报文时,立即停止发送目的报文,同时目的报文的发送起始点是接收到第一帧源报文的时刻。
五、根据上述设计,需要对接收处理任务略做更改,同时增加发送定时报警处理。
在发送定时报警中,根据报警的类型将指定报文插入队列中,同时更新发送报警计数。
六、在实际整车网络协议中,如果接收报文ID和发送报文ID相同,那么必为报文路由,报文发送周期一定是相同的,因此对报文ID相同但发送周期不同的情况网关软件设计时目前不予考虑。
1.3.2发送定时器更新模块
此模块负责在系统定时中断中更新发送定时器计数值,判断定时器是否溢出并调用报文发送程序将目的报文插入发送队列。
发送定时器更新流程如下图7所示。
图7发送定时器更新流程
1.3.3路由过程中发送定时器处理模块
路由过程中发送定时器处理算法如下:
1、如果目的报文为周期发送,并且发送定时器未启动,则启动发送定时器;
2、如果目的报文为周期发送,并且为信号路由方式,则该目的报文只在自身周期定时器溢出时进行发送,在收到源报文时并不立即转发,防止短时间内发送两次目的报文;
3、如果目的报文为周期发送,并且为报文转发方式,则该目的报文在接收到源报文时立即转发,并且设置报文立即转发标志位为1;在目的报文周期定时器溢出时,会检查报文立即转发标志位,如果为1则不发送报文,如果为0表示定时周期内未接收到任何源报文,发送上一次的目的报文;
4、如果目的报文不是周期发送而是事件发送方式,比如诊断报文,则该目的报文在接收到源报文时立即转发,并且设置报文立即转发标志位为1。
1.4报文发送任务
报文发送任务主要负责操作发送队列,基于FIFO或ID优先级机制选择待发送报文,然后将报文发送到目的总线。
程序流程图8如下所示。
图8报文发送任务处理流程
1.5报文处理
数据处理部分的程序流程图如图9:
图9数据处理部分的程序流程图
2网关直接网络管理功能设计及实现
2.1OSEK/VDX直接网络管理介绍
直接网络管理概念、网络状态、节点操作模式、NMPDU的映射、网络管理消息类型、定时器;
几点关键:
网络启动、节点加入和退出、节点跳过、逻辑后继节点的更新
2.1.1直接网络管理概念
直接网络管理使用逻辑环来实现网络监控信息的同步。
在逻辑环内,每个节点有一个地址,通信顺序独立于网络结构,每个节点都指定一个逻辑后继节点,第一个节点是逻辑环中最后一个节点的逻辑后继。
直接网络管理要求网络实现广播类型的消息传输,以便于每个节点都能接收到网络上其它节点发送的消息。
通过在应用层实现站-站通信,并监控逻辑环上的消息传递来实现对ECU和整个网络的管理。
2.1.2直接网络管理的内部状态
NM组件使用传输的消息信息来确定网络的状态和配置。
网络的状态提供网络管理当前工作阶段的信息。
网络管理的三个主要的状态为NMOff、NMOn和NMShutDown。
其中NMOn包括:
NM初始化NMInit、NM的激活状态NMAwake、NM处于睡眠模式NMBusSleep、使能NM通信NMActive和禁止NM通信NMPassive。
其中NMAwake包括:
确定节点自身可操作的状态NMReset、直接监控处理NMNormal、节点自身故障处理NMLimpHome状态。
下图是直接网络管理简化的状态转换图。
大多数网络管理工作都是在NMNormal状态下执行的。
在这个状态下,周期性地发送和接收网络管理环消息,并且管理网络配置。
当网络管理状态或配置改变时,NM组件能够通知应用程序。
2.1.3直接网络管理的通信消息
网络管理协议数据单元包含所有网络管理要求的消息,外加可选的数据。
表4-1网络管理协议数据单元
地址域
控制域
数据域
源节点标识符
目的节点标识符
操作码
数据
必选部分
可选部分
源节点标识符表示发送NMPDU的节点,目的节点标识符表示NMPDU将要被发送到的外部节点,操作码表示正在使用的NMPDU的类型。
网络管理消息具有三种类型,分别为Alive消息、Ring消息及Limphome消息。
其中Alive消息在逻辑环启动或节点由故障状态恢复正常时发送;Ring消息是组成逻辑环的核心,在逻辑环稳定时发送;Limphome消息是当节点进入LimpHome状态后周期发送。
图9直接NM简化的状态转换图
逻辑环的建立和维护是通过两类消息实现的:
alive消息和ring消息。
alive消息被异步地广播,表示发送者申请加入逻辑环;ring消息表示发送者在逻辑环中处于活动状态。
为了保证有节点加入或失效时逻辑环能够重新建立并由此可以监控到失效的节点和新加入的节点,每个节点接收到网络上消息后需要更新逻辑后继和判断本地节点是否被跳过。
根据是否发送或接收到NM消息,将节点状态区分如下:
被监控的节点具有两种状态:
1、节点在线:
接收到特定的NM消息(alive或ring);
2、节点离线:
在定时器超时内未接收到特定的NM消息;
监控节点自身具有两种状态:
1、在线或非沉默:
发送特定的NM消息(alive或ring);
2、离线或沉默:
在定时器超时内未发送特定的NM消息。
2.2直接网络管理功能设计
2.2.1任务总体设计
直接网络管理模块包含网络管理消息处理任务、Ttyp报警处理任务,Tmax报警处理任务,Ttx报警处理任务,Terror报警处理任务。
任务的类型、优先级、执行的功能等情况列在表4-2中。
任务名
任务属性
DealMsgTask
TmaxTask
TtypTask
TerrorTask
TtxTask
类型
扩展任务
基本任务
基本任务
基本任务
基本任务
优先级
9
10
8
7
6
调度
抢占式
非抢占式
非抢占式
非抢占式
非抢占式
自动启动
TRUE
FALSE
FALSE
FALSE
FALSE
激活数目
1
NUM_OF_
NETID
NUM_OF_
NETID
NUM_OF_
NETID
NUM_OF_
NETID
激活方式
事件激活
报警激活
报警激活
报警激活
报警激活
堆栈大小
200
200
200
200
200
实现功能
处理接收到的网络管理消息
响应Tmax定时器到时的动作
响应Ttyp定时器到时的动作
响应Terror定时器到时的动作
响应Ttx定时器到时的动作
对表4-2中任务属性的选择作如下说明:
1)任务TmaxTask被激活的条件是本地节点在规定的时间Tmax内没有接收到任何其他节点发送的Ring消息。
任务TmaxTask通常情况下执行的动作是初始化直接网络管理的配置信息和发送alive消息。
在任务TmaxTask结束之后,本地节点会根据接收到的网络管理消息更新直接网络管理的配置信息。
配置信息更新的越快,网络管理的逻辑环从瞬态到稳态的过渡时间越短。
若扩展任务DealMsgTask的优先级高于任务TmaxTask,会湮灭掉一部分网络管理信息,使任务TmaxTask结束之后配置信息的更新减慢,从而导致网络管理的逻辑环从瞬态到稳态的过渡时间变长。
因此,将任务TmaxTask的优先级配置为高于任务DealMsgTask的优先级。
2)由表4-2可知,五个任务之间均存在共享全局变量的情况,在设计基于osCAN直接网络管理的整体构架时应该保证在某个时间段内,全局变量为某个任务独享。
为实现上述目的,将任务TmaxTask、TtypTask、TerrorTask和TtxTask的属性配置为非抢占式基本任务,保证他们在运行过程中不会被更高优先级的任务抢占。
同时,任务TmaxTask、TtypTask、TerrorTask和TtxTask实现的功能较为简单,运行期间占用CPU的时间较少。
因此,将上述四个任务的属性配置为非抢占式基本任务对osCAN实时操作系统中更高优先级任务的延迟影响不大。
3)任务TtypTask被激活的条件是本地节点在规定的时间Ttyp到时,向物理网络上发送Ring消息。
直接网络管理算法规定:
若在本地节点准备发送Ring消息到物理网络时,接收到物理网络上的其他节点发送的Ring消息,本地节点将取消正在准备发送的Ring消息。
为实现这一规定,将任务TtypTask的优先级设置为低于扩展任务DealMsgTask的优先级。
同时,这样配置任务TtypTask和任务DealMsgTask优先级的另一个优点是:
可以不必为这两个任务配置osCAN资源对象,就可以实现两个任务的共享全局变量在某个时间段内为某个任务独享。
4)任务TerrorTask实现的功能是:
当本地节点处于LimpHome状态时,该任务周期性的向物理网络发送limphome消息。
任务TtxTask实现的功能:
当本地节点准备向物理网络发送直接网络管理消息,但此时本地节点的CAN发送缓冲区为满,这时系统会等待一段时间Ttx后驱动任务TtxTask重新向物理网络发送该直接网络管理消息。
由这两个任务实现的功能可看出,两个任务对实时性要求不高。
因此,将任务TerrorTask和任务TtxTask的优先级配置为五个任务优先级中最低的两个。
5)任务DealMsgTask实现的功能较为复杂,运行过程中占用CPU的时间较多。
因此,为使基于osCAN的直接网络管理算法嵌入到节点时,网络管理算法配置的任务对节点已有任务的实时性影响较小,将任务DealMsgTask配置为抢占式扩展任务。
在任务属性的配置表中将四个基本任务的激活数目配置为NUM_OF_NETID。
宏NUM_OF_NETID被定义为与网关ECU连接的物理网络中使用直接网络管理算法的网络数目。
2.2.2定时器总体设计
直接网络管理按照OSEK/VDXNM规范中定义包含五个定时器。
表4-2对这五个定时器做了简要的概述。
表4-3定时器描述
定时器
描述
典型值/ms
范围
TTyp
从接收到一个Ring消息到重传该消息的典型时间
100
全局
TTx
重传一个Ring消息之前等待的时间
25
局部
TMax
传输完Ring消息到确定目标节点
不在线之间的最大时间
250
全局
TError
两个LimpHome消息传输之间的时间
1000
局部
TWaitBusSleep
总线睡眠请求被确认到总线
进入NMBusSleep之间的时间
1500
全局
注:
当定时器是全局定时器时,它的值在物理网络的所有节点上都必须是相同的。
而局部定时器的值可以根据本地节点的需要自行设定,与物理网络上的其它节点没有关系。
定时器的设计规则如下:
逻辑环的定义需要如果ring消息以延时TTyp传递,没有报警TMax溢出。
这得出对网络系统内部报警精度的需求(不考虑消息发送时间和软件实时性)。
(TMax)|K>(TTyp)|JK,J∈[0;N-1]
被监控节点的故障必须被逻辑环内所有其他节点识别,当NMReset后的第一个ring消息被发送时,所有节点必须再次进入NMNormal。
这就得出对网络系统内部报警精度的要求(不考虑消息发送时间和软件的实时性)。
(TMax+TTyp)|K>(TTyp)|JK,J∈[0;N-1]
对于每个节点,每个报警都应具有一个容许范围(…|min和…|max)。
在网络内部所以节点必须满足如下要求:
(TMax|min+TTyp|min)|K>(TTyp|max)|JK,J∈[0;N-1]
(TMax|min)|K>(TTyp|max)|JK,J∈[0;N-1]
对于报警TError没有特别需要考虑的要求。
报警TError的典型值是TTyp的10倍。
范围计算不重要。
在具有设定位sleep.ack的ring消息成功发送后,在发送队列中仍然可以有用户消息。
处于状态limp-home的节点正以延时TError发送limp-home消息。
在此周期中几个limp-home消息可以被接收,因此状态NMBusSleep的转换可以正常进行。
时间TWaitBusSleep的定义遵照定时器TError。
在网络范围内要满足TWaitBusSleep|min≥TError|max。
TWaitBusSleep典型值为TError的1.5倍。
2.2.3NMPDU到CAN报文的映射
网络管理协议数据单元(NMDPU)通常应该包括用于区别网络管理消息和其它应用消息的IDBase、本地节点的标识号sourceID、目的节点的标识号destinationID、标识网络管理消息类型的操作码opCode、物理网络的标识号NetID和网络状态数据NetworkStatus。
将这些信息映射成CAN数据帧,如表4-4所示。
表4-4NMPDU到CAN的映射
CAN标识符
CAN数据域(位)
IDBase
SourceID
DestinationID
opCode
NetID
NetworkStatus
Data
3(21)
8
8
8
8
16
网络管理报文过滤
发送节点的标识号
目的节点的标识号
网络管理消息类型
网络号
网络配置数据
操作码格式为xxxx0000,其中从最右面开始第一位和第二位代表消息类型是Ring消息或Alive消息或LimpHome消息,第三位代表是否要求总线睡眠,第四位代表是否确定总线睡眠,具体如下图。
操作码(xxxx0000)
含义
xxxx0100
睡眠指示位sleep.ind
xxxx1000
睡眠确认位sleep.ack
xxxx0001
Ring消息
xxxx0010
Alive消息
xxxx0011
LimpHome消息
网络状态数据NetworkStatus长度为16位,采用位编码方式时最多可以标识16种网络状态。
目前网络状态数据定义如下表所示。
表4-5网络状态的译码
位
描述
置0的解释
置1的解释
0
当前网络配置稳定
不稳定
稳定
1
网络物理接口的操作模式
没有错误
错误,总线阻塞
2
NM模式active/passive
NMPassive
NMActive
3
NM模式on/off
NMOn
NMOff
4
LimpHome模式
不是NMLimpHome
是NMLimpHome
5
BusSleep模式
不是NMBusSleep
是NMBusSleep
6
等待总线睡眠
不等待Twbs到时
等待Twbs到时
7
Ring数据有效
允许Ring数据访问
不允许Ring数据访问
8
GoToMode调用
Awake调用
BusSleep调用
1)在逻辑环中最后的NM消息循环中配置保持不变;
2)NM消息成功接收和发送
3)比如CANbusoff
3网关间接网络管理功能设计及实现
3.1OSEK/VDX间接网络管理介绍
间接网络管理通过监控周期性应用消息来确定连接至网络中的节点状态,也就是说,一个节点发出的特定周期信息被一个或多个节点接收,接收节点通过监督这个周期性信息完成间接网络管理。
间接网络管理常用于中央控制型网络,由功能强大的独立网关作为网络管理的主ECU,其他节点ECU被网关节点监控,每个节点ECU必须要发送特定的周期性信息来实现被监督。
一个网络节点存在两种状态:
接收状态或者发送状态。
对于给定节点i,发送方状态用于检查节点i是否确实能够发送报文。
包括两种情况:
节点不是沉默的(特定的应用消息可以被发送);节点沉默(特定的应用消息没有在一个超时期间被发送,扩展时为节点静态沉默,指特定的应用消息没有在数个超时期间被发送)。
对于接收方状态,给定的节点i监控网络中的k个节点,节点i仅仅监控它接收周期性应用消息的源节点。
因此节点i会保持k个接收方状态子集,k