纯电动汽车控制系统集成开发设计
上QQ阅读APP看书,第一时间看更新

2.5.2 OSEK网络管理

1.间接网络管理

(1)要求 此处的间接网络管理需求是基于OSEK NM间接网络管理制定的,所有参与间接网络管理的ECU节点需要符合本章需求的定义。

(2)网络状态 间接网络管理节点ECU的网络状态如下:

1)关闭状态。

①KL15 OFF。

②ECU无通信功能。

2)初始化状态。

①KL15 ON。

②执行初始化动作。

③网络通信功能启动。

3)工作状态(无错误)。

①KL15 ON。

②初始化完成。

③网络通信功能正常。

4)工作状态(有错误)。

①KL15 ON。

②网络通信功能受限。

5)掉电状态。

①KL15 OFF。

②网络通信功能关闭。

节点网络状态迁移图如图2-31所示。

图2-31 节点网络状态迁移图

(3)网络管理

1)初始化。KL15上电且供电电压达到6.5V时,ECU进行CAN通信初始化,以下时间参数定义了整个初始化过程。

①T[CANACK]:ECU从KL15上电,到准备好提供ACK置位的时间。

②T[CANInit]:ECU从KL15上电,到发送第一个显性电平的时间。此时,ECU应完成通信相关硬件和软件的初始化,并且准备好接收和发送报文。

③T[MessageStart]:ECU从KL15上电,到至少完整发送一次所有周期型和周期事件型报文的时间。

④T[SignalValue]:ECU从KL15上电,到发送报文的所有信号值为真实值的时间。

网络初始化如图2-32所示,初始化时间参数见表2-11。

图2-32 网络初始化

表2-11 初始化时间参数

注:具有特殊功能的ECU,可以自定义T[SignalValue]时间,但必须经过系统集成部确认。

2)掉电。KL15关闭后,网络节点不再有通信需求,网络状态将切换到关闭状态以减少电流消耗。

KL15供电ECU,KL15关闭后的最大通信延迟时间T[Shutdown]为100ms。

KL30供电ECU,KL15关闭后的最大通信延迟时间T[Shutdown]为1000ms。具有特殊功能的ECU可以自定义T[Shutdown]时间,但必须经过系统集成部确认。

2.直接网络管理

(1)要求

此处的直接网络管理需求是基于OSEK NM直接网络管理制定的,所有参与直接网络管理的ECU节点需要符合本章需求的定义。

(2)节点状态 CAN网络节点具有NM运行大状态,其中NM运行又包括网络唤醒、网络睡眠、主动网络管理、被动网络管理四个子状态。网络唤醒状态可以细分为正常运行、跛行两个子状态。节点网络状态迁移如图2-33所示,状态迁移条件见表2-12。

图2-33 节点网络状态迁移

表2-12 状态迁移条件

(3)逻辑环机制 网络中的每个逻辑节点都有一个逻辑地址,且每个节点都有一个后继节点,从而建立一个逻辑环。

后继节点定义为,按照NM地址段节点地址大小排列,小地址节点→大地址节点,依次传递网络管理报文,直到最大地址节点→最小地址节点。在设计直接网络管理时,节点必须能自动识别同基地址内所有节点,而且能自动将同基地址的新节点加入逻辑环中,逻辑环机制如图2-34所示。

图2-34 逻辑环机制

(4)节点跳过判断机制 在直接网络管理中,节点需监测同基地址节点的NM报文,并将报文目标地址与自己源地址进行比较,判断自己是否被跳过。为此,每个节点每次接收到非跛行的NM报文时,都需要判断自己节点是否被跳过。当发现自己被跳过后,节点需要发送一个Alive报文声明要加入逻辑环。节点跳过判断机制见表2-13。

表2-13 节点跳过判断机制

注:S表示发送节点的源地址,D表示发送目标地址,R表示接收节点的源地址。

其判断逻辑流程如图2-35所示。

图2-35 节点跳过判断逻辑流程

(5)网络管理报文

1)PDU结构。网络管理报文PDU(协议数据单元)的结构见表2-14。

表2-14 PDU结构

源地址(Source ID)即发送该网络管理报文的节点地址;目标地址(Destination ID)即接收该网络管理报文的节点地址;操作码OpCode(Operation Code)表示控制场;Data1~Data6,当前保留,用“0x00”填充。

2)OpCode。根据网络管理报文控制场中的不同取值,网络管理报文可分为Alive报文、Ring报文、跛行报文。

当节点知道后继节点时,网络管理报文的目标地址为后继节点的源地址。当节点不知道后继节点时,网络管理报文的目标地址为源地址,OpCode定义见表2-15,OpCode示例见表2-16。

表2-15 OpCode定义

表2-16 OpCode示例

①Alive报文。网络管理节点会在如下情况下,发出Alive报文:

a.开始阶段。如果一个ECU准备通过CAN进行通信或者检测其他ECU的通信请求,需要发送Alive报文在逻辑环中进行注册。

b.正常运行。如果ECU检测到自己被跳过,则再次发送Alive报文在逻辑环中进行注册。

c.错误状态。如果ECU检测到其他节点的错误(Tmax时间内没收到Ring报文),会再次发送Alive报文在逻辑环中进行注册。

②Ring报文。向后继节点传递报文,用来形成逻辑环。每当节点监测到自身满足睡眠条件后,在发送Ring报文时,需将“sleep.ind”位置“1”,声明自己当前状态不需要网络通信,允许网络睡眠。任何节点监测到网络中所有节点发送“Sleep.ind=1”的Ring报文后,在发送Ring报文时,需将“sleep.ack”位置“1”。命令所有节点进入睡眠准备状态。发送或接收到“sleep.ack=1”的Ring报文后,所有节点定时Twbs定时器,同时停止网络通信。Twbs超时后,整个网络进入睡眠状态。

③跛行报文。当接收/发送错误计数器超过其阈值时,节点进入跛行状态,并以T[error]周期发送跛行报文。跛行报文由跛行节点发送。

④报文冲突策略。在节点接收到目标地址等于本地地址的Ring报文后,节点定时Ttyp定时器。在Ttyp超时时间内,如果再次接收到目标地址等于本地地址的Ring报文,节点重启Ttyp定时器,进行重新定时。如果接收到的Ring报文目标地址不等于本地地址,则取消Ttyp定时器,启动Tmax定时器。报文冲突策略如图2-36所示。

图2-36 报文冲突策略

发送了Ring报文后,在接收到数据链路层ACK应答前,如果接收到了Ring报文,节点需要忽略此帧报文。在发送Ring报文以后,节点开始定时Tmax定时器。如图2-37所示。

图2-37 报文冲突策略

(6)网络管理状态 所有CAN节点采用相同的网络管理策略。网络管理策略的目的是建立与维护节点间的联系,协调网络睡眠。网络管理策略向节点应用层提供当前网络的状态信息,而不同状态的控制、处理策略由节点的应用程序负责。

当节点上电时,节点进入NM运行状态。在NM工作状态中,包含了网络唤醒、网络睡眠和主动网络管理、被动网络管理两组并列的工作子状态。

1)网络唤醒状态(NMAwake)。当节点满足控制器唤醒条件时,节点进入网络唤醒状态。在直接网络管理中,节点长期保持在此状态,维持网络管理运行、监控网络节点运行状态、负责节点网络睡眠。其包括正常运行(NMNormal)、跛行(NMLimpHome)两个子状态和重置(NMReset)过程。

2)网络睡眠状态(NMBusSleep)。当所有节点满足控制器睡眠条件后,睡眠类型节点进入网络睡眠状态。在此状态中,网络通信停止,但CAN收发器监测网络活动。

3)主动网络管理。网络节点主动参与逻辑环建立、逻辑环维持、睡眠指示、睡眠命令等网络管理活动。

4)被动网络管理。网络节点监听网络状态,但不参与网络管理活动。

网络管理功能基于OSEK NM规范,基本的NM状态如下:

①NM初始化。在网络管理初始化状态下,通过CAN总线唤醒或本地唤醒后,执行初始化动作,对芯片硬件进行初始化,ECU的初始化过程需要满足如下时间要求,初始化如图2-38所示,初始化时间参数见表2-11。

a.T[CANACK]:ECU从被唤醒到准备好提供ACK置位的时间。

b.T[CANInit]:ECU从被唤醒到发送第一个显性电平的时间。此时,ECU应完成通信相关硬件和软件的初始化,并且准备好接收和发送报文。

c.T[MessageStart]:ECU从被唤醒到至少完整发送一次所有周期型和周期事件型报文的时间。

d.T[SignalValue]:ECU从被唤醒到发送报文的所有信号值为真实值的时间。

ECU唤醒后首先发送网络管理报文,然后发送应用报文,应用报文发送独立于网络管理状态。

图2-38 NM初始化

②NM重置。初始化完成后,ECU从NM初始化状态进入NM重置状态。清空NMrxcount和NMtxcount,配置目标地址,NMrxcount进行加1,同时发送Alive报文并将NMtxcount进行加1。如果接收和发送计数器均未超过阈值,则启动定时器Ttyp,超时后进入常规运行状态。否则启动定时器Terror,超时后进入跛行状态。当节点唤醒、退出跛行状态、总线出现严重错误时,节点将进入跛行状态,其详细流程如图2-39所示。

图2-39 NM重置流程

③NM正常。当节点初始化完成发送Alive报文后,且当接收、发送计数器都小于阈值时,ECU进入NM正常状态,发送Ring报文给逻辑继承者以建立逻辑环。如果逻辑继承者未知,则将使用自己的网络地址。如果检测到其他ECU丢失或者被跳过,ECU再次发送Alive报文。

在正常运行过程中,接收到NM报文后,首先将接收计数器清零,然后判断报文类型。若为跛行报文,则将更新配置,标记跛行节点。否则确定逻辑继承者,并再次判断报文类型;若为Alive报文,则使网络稳定参数为0,当前逻辑环处于网络不稳定状态;若为Ring报文,首先取消Ttyp和Tmax定时器,判断目标地址是否和本地地址一致,若一致则启动Ttyp,否则启动Tmax定时器,Tmax超时后判断节点是否被跳过,如果被跳过并且允许睡眠,则发送ind=1的Alive报文,不允许睡眠则发送Alive报文。其流程如图2-40所示,T[typ]、T[max]定义见表2-17所示。

图2-40 NM正常流程

表2-17 T[typ]、T[max]定义

a.NM报文接收。在常规运行状态中,如果在Tmax超时范围内接收到NM报文,节点进入NM报文接收流程。在流程中,节点首先进入接收后定时、跳过判断流程。判断完成后,再对报文类型进行判断,如果为睡眠命令报文,且本节点满足睡眠条件,则节点进入睡眠初始化。如果节点不满足条件,则退回到常规运行状态。NM报文接收流程如图2-41所示。

图2-41 NM报文接收流程

b.NM报文发送。当节点接收到的Ring报文目标地址等于本地地址时,节点启动Ttyp定时器。当Ttyp超时后,节点进入报文发送流程。当节点处于主动网络管理状态时,如果节点自身满足睡眠条件,且NMtxcount≤tx_Limit时,节点发送“Sleep.ind=1”的Ring报文,并配置网络状态。如果NMtxcount>tx_Limit,则节点进入跛行状态。当Ttyp超时后,NM报文发送流程如图2-42所示。

c.NM报文成功发送。在常规运行状态中,在节点发送了NM报文后,当数据链路层返回报文成功发送后,节点进入NM成功发送流程。节点对NMtxcount计数器进行清零,并对Tmax定时器重新进行定时。如果发送的报文为“Sleep.ind=1”的Ring报文,则判断节点当前是否满足睡眠条件。如果满足,则将“Sleep.ack”位置“1”,并进入预睡眠状态,否则节点返回常规运行状态。当NM报文成功发送后,其详细流程如图2-43所示。

d.Tmax超时处理。当定时参数Tmax超时时,节点复位,再次进入节点初始化。计数器NMrxcount+1,发送Alive报文后,NMtxcount+1。并判断NMrxcount、NMtxcount两个计数器。当NMrxcount或NMtxcount大于阈值时,节点进入跛行状态。其流程如图2-44所示。

图2-42 NM报文发送流程

图2-43 NM报文成功发送流程

④NM睡眠。当节点满足睡眠条件后,判断当前节点是主动状态还是被动状态。当节点处于被动状态时,节点进入预睡眠状态。当节点处于主动状态时,节点返回常规运行状态。其流程如图2-45所示。

图2-44 Tmax超时处理流程

图2-45 NM睡眠流程

a.预睡眠。当节点进入预睡眠状态后,在等待其他节点发送“Sleep.ind=1”的Ring报文期间,如果本节点检测到不满足睡眠时,退出预睡眠状态。当节点收到任意NM报文时,首先进入接收后定时、跳过判断流程,再判断接收到的NM报文“Sleep.ind”是否为“1”,如果不为“1”,节点退出预睡眠状态。如果满足条件,再次判断是否为“Sleep.ack=1”的睡眠命令报文。如果是,节点进行睡眠初始化,否则节点仍处于预睡眠状态。当Ttyp超时后,节点发送睡眠命令报文,当报文成功发送后,节点停止通信,并进入睡眠等待状态。其流程如图2-46所示。

图2-46 预睡眠流程

b.睡眠等待。接收或发送“Sleep.ack=1”的网络管理报文后,节点停止网络通信,进入睡眠等待状态。在Twbs超时前,如果接收到“Sleep.ind=0”的报文或不满足睡眠条件时,节点退出睡眠等待状态,进入复位状态。当Twbs超时后,节点进行总线关闭初始化后进入睡眠状态。其流程如图2-47所示,T[wbs]定义如表2-18所示。

表2-18 T[wbs]定义

注:在T[wbs]时间内,ECU只有收到带清除睡眠指示的网络管理报文或者本地唤醒才会退出NM等待睡眠状态,总线上的应用报文不会影响T[wbs]时间。

图2-47 睡眠等待流程

⑤跛行模式。

网络管理定义了两个错误计数器:网络管理接收错误计数器(NMrxcount)和网络管理发送错误计数器(NMtxcount)。T[error]定义见表2-19。

接收错误计数器用于表示NM报文连续接收错误的数目,NMrxcount的阈值用rx_limit表示,当成功接收到NM报文后,NMrxcount计数器清零。

发送错误计数器用于表示NM报文连续发送错误的数目,NMtxcount的阈值用tx_limit表示,当成功发送NM报文后,NMtxcount计数器清零。

表2-19 T[error]定义

进入跛行模式的网络管理参数:rx_limit=4(接收网络管理报文失败);tx_limit=8(发送网络管理报文失败)。

当任何一个错误计数器超过其阈值时,节点进入跛行状态。节点进入跛行状态后,以T[error]周期发送跛行报文。

a.NM报文接收。当节点处在跛行状态时,如果接收到了网络管理报文,节点需要通过NMMerker.limp Home成功发送标志判断在接收到网络管理报文前是否成功发送过网络管理报文。

如果“NMMerker.limp Home=1”,判断节点是否允许网络睡眠。如果不允许睡眠,节点复位;如果允许睡眠且接收到“Sleep.ack=1”的睡眠命令报文,节点进入睡眠初始化7,即停止网络通信,设置定时器Twbs,进入睡眠等待状态。如果“NMMerker.limpHome=0”,判断节点是否允许网络睡眠。如果不允许睡眠,节点进入跛行状态;如果允许睡眠且接收到“Sleep.ind=0”的NM报文,节点也进入跛行状态;如果接收到“Sleep.ind=1”的NM报文,则再次判断“Sleep.ack”状态。如果收到“Sleep.ack=1”的睡眠命令报文,则节点进入睡眠初始化状态7;如果收到“Sleep.ack=0”的睡眠命令报文,则节点进入预睡眠状态。其流程如图2-48所示。

图2-48 NM报文接收流程

b.NM报文发送。当Terror定时器超时后,节点尝试允许应用报文发送。并判断节点是否满足睡眠条件,如果满足睡眠条件,发送“Sleep.ind=1”的跛行报文,同时设置Tmax,并进入预睡眠状态。如果网络不满足睡眠,则节点重新设置Terror,并发送跛行报文。其流程如图2-49所示。

图2-49 NM报文发送流程

c.NM报文成功发送。在跛行状态下,当节点成功发送跛行报文后,节点标记“NMMerker.limpHome=1”,标记节点成功发送跛行报文。其流程如图2-50所示。

图2-50 NM报文成功发送流程

d.跛行睡眠流程。在跛行状态预睡眠状态下:

a)如果节点不满足睡眠条件,则启动Terror,超时后进入跛行状态。

b)如果接收到NM报文并能够成功发送NM报文,则先判断是否允许睡眠,如果允许睡眠并且接收到“Sleep.ack=1”的睡眠命令报文,则进入睡眠初始化7,否则进行软件复位;如果接收到NM报文但不能成功发送NM报文,则先判断是否允许睡眠,如果不允许睡眠,则进入跛行状态;否则,如果“Sleep.ind=0”,节点也将进入跛行状态;如果“Sleep.ind=1”并且“Sleep.ack=1”,节点将进行睡眠初始化;如果“Sleep.ind=1”并且“Sleep.ack=0”,则节点将进入预睡眠状态。

c)Tmax超时后,节点进入睡眠初始化状态。

其流程如图2-51所示。

图2-51 跛行预睡眠状态流程

在跛行睡眠等待状态下,在Twbs超时前,如果节点不满足睡眠条件或接收到“Sleep.ind=0”的NM报文时,节点取消Twbs定时器,定时Terror定时器,然后退回到跛行状态,否则节点仍处于睡眠等待状态。直到Twbs超时,超时后,节点睡眠。其流程如图2-52所示。