01.网络管理
网络管理(Network Management,NM)的定义:
- NM 是自适应平台服务中的一个功能集群,主要管理每个网络节点(包括物理网络和部分网络)在正常运行模式和总线关闭睡眠模式之间的转换。
- NM 的操作独立于所使用的通信网络绑定。
直接网络管理策略:
- AUTOSAR 网络管理采用直接网络管理策略,每个网络节点根据其发送或接收到的网络管理报文,独立实现自身的休眠和唤醒状态转换。
主要功能:
- 协调各节点的休眠和唤醒。
- 当网络中没有通信需求时,节点会进入休眠状态,从而降低对蓄电池的功耗,提升能源效率。
图 1.1 Architecture overview with example applications
每个电子控制单元(ECU)可以独立地在正常模式 normal 和总线关闭模式 bus-off sleep 之间切换。
NM 作为自适应平台服务的一部分,网络管理 FC 提供了一个用于状态管理的 ara::com field API。这个 API 允许状态管理获取和设置每个句柄的当前网络状态和请求的网络状态,同时在任何句柄的网络状态发生变化时接收通知。
图 1.2 Network Management Overview
图 1.2 中灰色的表示休眠状态的 ECU 节点,黄色表示激活状态的 ECU 节点。
网络管理(NM)FC 提供一系列功能,用于:
- 根据内部请求控制通道总线状态。
- 通知状态管理当前和请求的网络状态。
- 发送 UdpNm 消息以激活连接到以太网总线的 ECU 的网络状态。
- 接收 UdpNm 消息作为外部请求以激活自身的网络状态。
1.1 网络管理算法
AUTOSAR 自适应网络管理基于去中心化的直接网络管理策略,每个网络节点独立执行活动,仅依赖于在通信系统内接收和/或发送的 NM 数据包。
网络管理算法使用在网络节点之间周期性交换的 NM 数据包(NM packets)。传输的数据包由网络集群中的所有节点接收,自适应平台实例接收到 NM 数据包表明至少有一个发送节点仍希望保持网络集群处于唤醒状态。
图 1.3 Network Management Cluster Awake
准备休眠状态
如果 NM 集群中的任何节点准备进入休眠模式(bus-off),它将在网络上保持静默并停止发送任何 NM 数据包(只要仍在接收其他节点的 NM 数据包,实际的睡眠模式转换将被推迟)。最后,如果由于不再接收到 NM 数据包而专用计时器到期,NM 集群中的每个节点将启动进入休眠模式的过渡。
图 1.4 Network Management Cluster Sleep
如果 NM 集群中的任何节点需要总线通信,它可以通过发送 NM 数据包来保持 NM 集群处于唤醒状态。
网络管理算法由 AUTOSAR 标准化,可用于经典平台和自适应平台。NM 算法基于 NM 集群中所有节点接收到的周期性 NM 消息。
AUTOSAR 自适应 NM 协调算法的主要概念可以总结为以下关键行为:每个网络节点只要需要总线通信,就会发送周期性 NM 消息;否则,它不会发送 NM 消息。
根据 AUTOSAR 的定义,NM 消息由以下元素组成:
- 控制位向量 (CBV) 1 字节(可选)
- 源节点 ID (SNI) 1 字节(可选)
- 用户数据 n 字节(可选,可能包括 n 字节的部分网络 (PN) 请求向量)
1.2 NM 消息格式
NM(网络管理)算法基于所有节点在 NM 集群中接收到的周期性 NM 消息。根据 AUTOSAR 的定义,NM 消息由以下元素组成:
NM message
注:
- 用户数据 User Data 和/或 PN 请求向量应位于 CBV/SNI 之后。
用户数据和 PN 请求向量可能会重叠。
图 1.5 表格展示了一个 NM 消息的示例布局:
图 1.5 NM message layout example
源节点标识符(SNI)和控制位向量(CBV)的位置是可配置的,分别由 nmNidPosition 和 nmCbvPosition 决定。如果未设置这些位置,则 SNI 和 CBV 不会包含在 NM 消息中。
用户数据是指所有不属于 CBV 和 SNI 的数据,如果配置了 NM 用户数据,则应始终包含在 NM 消息中。
1.2.1 控制位向量 Control Bit Vector(CBV)
控制位向量(CBV)的位置:
- 控制位向量的位置应是可配置的,可以使用 nmCbvPosition 设置为字节 0、字节 1 或关闭(默认:字节 0)。
- 如果未设置 nmCbvPosition,则 CBV 不会包含在 NM 消息中。
CBV 的格式和定义:
- CBV 的格式(位布局)和定义在相关文档[3]中描述。
特定位的要求:
- 重复消息请求位:在传输的 NM 消息中应始终设置为 0。
- 主动唤醒位:在传输的 NM 消息中应始终设置为 0。
- NM 协调器准备休眠位:在传输的 NM 消息中应始终设置为 0。
- 部分网络学习位(PNL):在传输的 NM 消息中应始终设置为 0。
1.2.2 源节点标识符 Source Node Identifier(SNI)
源节点标识符(SNI)的位置:
- 源节点标识符的位置是可配置的,可以设置为字节 0、字节 1 或关闭(默认:字节 1),由 nmNidPosition 的值决定。
- 如果未设置 nmNidPosition,则 NM 消息中不应包含 NID(节点标识符)。
源节点标识符的配置:
- 源节点标识符应设置为可配置的节点 ID 值 nmNodeId,除非源节点标识符的位置被设置为关闭。
1.2.3 用户数据(User Data)
1)用户数据的配置和包含:
- 如果配置了 NM 用户数据(即 nmUserDataLength 存在且大于 0),则应始终包含在 NM 消息中。
- 接收到的 NM 消息中包含用户数据的范围由 nmUserDataLength 定义。
- 用户数据不包括部分网络激活时的 PNI(部分网络信息)。
- 接收和传输的用户数据不与 PNI 重叠。
- 如果 nmUserDataLength 存在且大于 0,但应用程序未提供数据,则 NM 在发送 NM 消息之前将用户数据设置为 0。
2)用户数据的定义:
- 用户数据是指所有不属于 CBV(控制字节)和 NID(节点标识符)的数据。如果配置了 NM 用户数据(即存在 nmUserDataLength 且值大于 0),则应始终包含在 NM 消息中。
3)网络管理的功能:
- 网络管理将逻辑网络句柄映射到部分或物理网络。
- 自适应应用程序可以通过 NetworkCurrentState 字段查询网络状态,或使用 NetworkRequestedState 字段请求进入睡眠模式。
- 网络管理从状态管理接收控制请求,状态管理根据配置请求或释放不同的逻辑网络,NM 则根据请求状态激活或停用相应的物理网络。
1.3 网络控制
网络管理将逻辑网络句柄(由服务接口 NetworkState 分类的提供 PortPrototype 表示)映射到部分或物理网络。
自适应应用程序可以通过 NetworkCurrentState 字段查询网络的当前状态,或使用 NetworkRequestedState 字段请求进入睡眠模式。
网络管理不直接与一般自适应应用程序交互,而是从(项目特定的)状态管理接收控制请求。
状态管理可以将一个或多个应用程序划分为多个可能需要网络通信的功能。然后,应用程序(或其部分)将请求状态管理激活或停用各种功能。状态管理根据配置,随后请求/释放不同的逻辑网络。
NM 然后检查所有逻辑网络句柄的请求状态,并激活或停用相应的物理网络。
图 1.5 Network Management Interaction
1.4 操作模式
本节描述了 AUTOSAR 自适应网络管理(NM)的操作模式。
网络管理包含三种操作模式:
1.网络模式(Network Mode),见 1.4.1
- 重复消息状态(Repeat Message State)
- 正常操作状态(Normal Operation State)
- 准备休眠状态(Ready Sleep State)
2.准备总线休眠模式(Prepare Bus-Sleep Mode),见 1.4.2
3.总线休眠模式(Bus-Sleep Mode),见 1.4.3
这些模式对自适应应用程序是不可见的。
- 当 NM 处于网络模式时,意味着网络被请求或处于活动状态,逻辑网络信息位将被设置为 1。
- 当 NM 处于准备总线休眠模式或总线休眠模式时,意味着网络被释放或处于非活动状态,逻辑网络信息位将被设置为 0。
每个物理通道都有独立的状态机,部分网络通信时 NM 模块还需处理相关的部分网络。下图展示了状态图。模式变化相关的转换用绿色表示,错误处理相关的传输用红色突出显示。
图 1.6 State Chart Diagram
这些模式对自适应应用程序是不可见的。自适应应用程序在更高的抽象层次上操作,不管理或观察底层的网络管理模式。它们与网络服务交互时无需了解 NM 状态机的转换。这种设计确保了关注点的分离,使应用程序开发人员能够专注于应用程序逻辑,而无需处理 NM 的复杂性。
相反,网络状态通过逻辑网络信息位传达给自适应应用程序。
当网络被请求/激活时(网络模式),该位设置为 1;
当网络被释放/未激活时(准备总线休眠模式或总线休眠模式),该位设置为 0。
1.4.1 网络模式 Network Mode
网络模式包含三个工作状态:
1.重复消息状态(Repeat Message State)
2.正常操作状态(Normal Operation State)
3.准备休眠状态(Ready Sleep State)
网络模式从总线休眠模式或准备总线休眠模式进入,默认初始状态为重复消息状态。当进入网络模式时,NM 超时计时器将以 UdpNmCluster.nmNetworkTimeout 为初始值启动。在网络模式中成功接收 NM 消息后,将重启 NM-超时定时器。
重复消息状态 Repeat Message State
1)重复消息状态的作用:
- 确保所有节点能够观察到从总线休眠或准备总线休眠到网络模式的转换,维护网络的完整性和意识。
- 在进入重复消息状态时,NM 消息的传输将(重新)启动,以防止意外进入休眠状态或无响应。
2)计时器管理:
- 如果 NM 超时计时器在重复消息状态下到期,将重新启动该计时器,确保节点在最小时间内保持活跃,该时间由 UdpNmCluster.nmRepeatMessageTime 配置参数确定。
3)状态转换:
- 在 nmRepeatMessageTime 定义的时间过去后,节点将离开重复消息状态。
- 如果网络被请求,节点将进入正常操作状态;如果网络被释放,节点将进入准备休眠状态。
4)规范要点:
- 从总线休眠模式、准备总线休眠模式或网络模式进入重复消息状态时,将(重新)开始传输 NM 消息。
- NM 将在由 nmRepeatMessageTime 确定的时间内保持在重复消息状态,之后将离开该状态。
- 如果请求了网络,离开重复消息状态时将进入正常操作状态;如果释放了网络,将进入准备睡眠状态。
- 默认情况下,从总线休眠模式或准备总线休眠模式进入网络模式时,通过调用 ara::nm::NetworkHandle::SetNetworkRequestedState 并设置值为 kFullCom 来请求网络,NM 模块将立即传输 NM 消息。
- 如果在准备睡眠状态、正常操作状态或重复消息状态下,nmPnHandleMultipleNetworkRequests 设置为 true,并且通道/VLAN 的请求状态或关联的 PNC 发生更改,则应重新进入重复消息状态。
正常操作状态 Normal Operation State
1)正常操作状态的作用:
- 确保只要系统中任何节点需要网络功能,NM 集群就保持唤醒和运行。
2)状态转换:
- 从准备休眠状态进入正常操作状态时,将立即开始传输 NM 消息,以确保所有节点知道网络处于活动状态。
- 如果正常操作状态下的 NM 超时计时器到期,将重新启动该计时器,以防止在进行中的通信期间过早进入休眠状态。
3)退出正常操作状态的条件:
- 当网络被释放时,节点将从正常操作状态转换到准备休眠状态。
- 如果在接收到的 NM 消息的控制位向量(CBV)中设置了重复消息请求位,节点将从正常操作状态转换到重复消息状态,以重新传输 NM 消息。
准备休眠状态 Ready Sleep State
1)准备睡眠状态的作用:
- 确保 NM 集群中的任何节点在进入准备总线休眠模式之前等待其他节点保持 NM 集群处于活跃状态。
2)状态转换:
- 从重复消息状态或正常操作状态进入准备睡眠状态时,将停止传输 NM 消息。
- 如果准备睡眠状态下的 NM 超时定时器到期,节点将离开准备睡眠状态并进入准备总线休眠模式。
- 如果在准备睡眠状态下请求了网络(通过调用 ara::nm::NetworkHandle::SetNetworkRequestedState 并设置值为 kFullCom),节点将离开准备睡眠状态并进入正常操作状态。
- 如果在准备睡眠状态中接收到 NM 消息中的重复消息请求位,节点将离开准备睡眠状态并进入重复消息状态。
3)注意事项:
- 处理可能同时出现的多个过渡条件(例如,NM 超时定时器到期与网络请求)被视为实现特定。
4)功能描述:
- 准备睡眠状态允许网络响应可能仍需要通信的节点的需求,充当网络准备进入低功耗休眠模式之前的缓冲。
- 当节点从重复消息状态或正常操作状态进入准备睡眠状态时,将停止传输 NM 消息。
- 如果在准备睡眠状态下 NM 超时计时器到期,节点将进入准备总线休眠模式,表明没有其他节点需要网络。
- 如果在准备睡眠状态下网络被请求,节点将重新进入正常操作状态。
- 如果接收到重复消息请求位,节点将进入重复消息状态。
UdpNmCluster
网络管理中,UdpNmCluster 是一个用于网络管理的模块,特别是针对使用UDP(用户数据报协议)进行通信的网络。它的主要作用包括:
- 网络管理:UdpNmCluster 负责管理网络节点的状态,包括节点的启动、运行和关闭。这有助于确保网络的稳定性和可靠性。
- 消息传输:它定义了如何在网络节点之间传输网络管理消息(NmPdus),包括消息的周期时间、立即传输次数等。这有助于协调网络节点之间的通信。
- 超时管理:UdpNmCluster 设置了各种超时参数,如网络超时、重复消息时间等,以确保在通信中断或节点故障时能够及时响应。
- 节点标识:它定义了源节点标识符的位置和使用方式,确保每个节点在网络中的唯一性和可识别性。
- 总线休眠管理:UdpNmCluster 还管理总线的休眠和唤醒过程,确保在不需要通信时节省能源,并在需要时快速恢复通信。
在创建的 UdpNmCluster 上进行配置,通常需要配置这些参数:
- Communication Cluster: 配置 UDP 端口和 UDP 多播 Nm 通信在 VLAN 上的 IP 地址。
- Nm Cbv Position: 定义控制位向量在 Nm Pdu 中的位置(字节位置)。如果未配置此属性,则不使用控制位向量。
- Nm Immediately Nm Cycle Time: 定义立即 NmPdu 周期时间(以秒为单位),用于 nmImmediateNmTransmissions Nm-Pdu 传输。此属性仅在 nmImmediate NmTransmissions 大于 1 时有效。
- Nm Immediately Nm Transmissions: 定义应传输的立即 NmPdus 数量。如果值为零,则不传输立即 NmPdus。立即 NmPdus 的周期时间由 nmImmediateNmCycleTime 定义。
- Nm Network Timeout: NmPdus 的网络超时时间(以秒为单位)。此参数确定 UdpNm 在转换到准备总线休眠模式之前的持续时间。
- Nm Msg Cycle Time: NmPdu 的周期时间(以秒为单位)。它决定了在总线负载减少的周期传输模式下的周期速率,并且是无总线负载减少的周期传输模式下传输调度的基础。
- Nm Nid Position: 定义源节点标识符在 NmPdu 中的字节位置。如果未配置此属性,则不使用节点标识。
- Nm Repeat Message Time: 表示 NM(网络管理)状态保持在重复消息状态的持续时间(以秒为单位)。
- Nm Use Data Length: 定义 Nm 消息中包含的用户数据的长度(以字节为单位)。用户数据不包括部分网络信息。
- Nm Use Data Offset: 指定 NM 消息中用户数据信息的偏移量(以字节为单位)。用户数据不包括部分网络信息。
- Nm Wait Bus Sleep Time: 设置总线冷静阶段的超时时间(以秒为单位)。它定义了 CanNm 在转换到总线休眠模式之前保持在准备总线休眠模式的持续时间。
- Vlan: 参考此 UdpNmCluster 应适用的 vlan(由以太网物理通道表示)。
Udp Nm Node
Nm Node是一个连接到一个或多个 NM 集群的 ECU。Udp Nm Node 也是一个特定于 UDP 的 Nm Node 属性。通常需要配置如下参数:
- All Nm Messages Keep Awake:指定 NM 是否执行从网络模式到重复消息状态的额外转换(true)或不执行(false)。
- Communication Connector:参考表示拓扑描述中 UdpNmNode 的以太网通信连接器。
- false: 只有具有部分网络信息位(PNI)= true 并包含此 ECU 的部分网络请求的 NM PDU 触发标准的 RX 指示处理,从而保持 ECU 唤醒。
- true: 每个 NM PDU 都会触发标准的 RX 指示处理,并保持 ECU 唤醒。
- Machine: 选择要引用的 Machine。
- Nm Msg Cycle Offset:周期传输节点中的节点特定时间偏移。它决定了传输的开始延迟。以秒为单位指定。
- Nm Node Id: 本地 NmNode 的节点标识符。在 NmCluster 中应是唯一的。
1.4.2 准备总线休眠模式 Prepare Bus Sleep Mode
准备总线休眠模式的目的是确保网络中的所有节点有足够的时间完成其网络通信,并通过发送任何排队消息来清空其传输缓冲区。此模式对于在整个网络进入总线休眠模式之前平息总线活动至关重要。节点在准备总线休眠模式下保持预定义的时间,该时间由配置参数 UdpNmCluster.nmWaitBusSleepTime 确定。在此时间到期后,网络将转换到总线休眠模式,假设没有接收到新的 NM 消息。
如果在准备总线休眠模式下接收到 NM 消息,这表明需要恢复总线上的通信。作为响应,退出准备总线休眠模式,节点返回网络模式,通常进入重复消息状态。这确保了快速恢复通信以处理新的网络活动。
1.4.3 总线休眠模式 Bus Sleep Mode
总线休眠模式旨在当网络上没有消息交换时,减少节点的功耗。在此模式下,如果硬件支持,可以关闭传输和接收功能。假设集群中的所有节点同时进入此状态,通常由一个共同事件(如唤醒线)触发。
进入总线休眠模式的转换发生在一个可配置的时间之后,该时间由 UdpNmCluster.nmNetworkTimeout 和 UdpNmCluster.nmWaitBusSleepTime 之和决定,在此期间总线上没有 NM 消息。
在总线休眠模式下,相应的 NetworkCurrentState 字段将设置为 kNoCom。
1.5 功能集群生命周期
启动 Startup
网络管理不需要特殊的启动处理。环境应确保网络管理在需要网络通信时运行并能够处理通信请求。至于网络管理是否提前启动以及如何启动,取决于平台的限制,例如快速(重新)启动等。
关闭 Shutdown
通信关闭 当 NM 收到 SIGTERM 信号时,任何通过 ara::nm::NetworkHandle::SetNetworkRequestedState 发起的活动网络请求都应被撤回,并且 ara::nm::NetworkHandle::GetNetworkState 应返回 kNoCom,直到进程终止。
注意:网络硬件可能会在此后关闭。假设状态管理确保在需要网络通信时不会启动关闭,并且在关闭期间的活动网络请求是异常情况。
1.6 状态管理如何与网络管理交互?
状态管理与网络管理的交互主要通过控制请求和状态反馈来实现。以下是它们之间的交互方式:
1. 控制请求:
- 状态管理模块根据系统的配置和当前需求,向网络管理模块发送控制请求。这些请求可以包括激活或释放逻辑网络的指令。
- 例如,当某个应用程序需要网络通信时,状态管理会请求网络管理激活相应的物理网络。
2. 状态反馈:
- 网络管理模块根据接收到的控制请求,激活或停用相应的物理网络,并将当前网络状态反馈给状态管理模块。
- 自适应应用程序可以通过查询
NetworkCurrentState
字段来获取当前的网络状态,或者通过设置NetworkRequestedState
字段来请求进入特定的网络模式(如睡眠模式)。
3. 状态转换:
- 网络管理模块根据状态管理的请求和网络的实际状态,进行相应的状态转换。例如,从网络模式转换到准备总线休眠模式,或从准备总线休眠模式转换到总线休眠模式。
- 这些状态转换确保网络资源的有效利用和系统的稳定运行。
4. 定时器管理:
- 在状态转换过程中,网络管理模块使用定时器来管理状态的持续时间。
例如,在准备睡眠状态下,如果 NM 超时定时器到期,网络管理模块将进入准备总线休眠模式。
通过这些交互,状态管理和网络管理模块能够协调工作,确保系统在需要时能够进行网络通信,并在不需要时节省资源。
1.7 Adaptive Platform AUTOSAR 需要网络管理的原因
1. 协调网络通信:
- 网络管理确保所有节点在需要时能够进行通信,并在不需要时进入低功耗模式。这对于优化资源使用和延长系统寿命至关重要。
2. 节能和效率:
- 通过管理网络的活跃和休眠状态,网络管理可以显著减少能源消耗,特别是在车辆长时间不需要通信时。
3. 系统稳定性:
- 网络管理通过协调节点的状态转换,确保系统在不同操作模式之间平稳过渡,避免因不一致的状态导致的通信中断或系统故障。
4. 部分网络支持:
- 网络管理支持部分网络(PN)的激活和管理,使得只有需要的部分网络处于活跃状态,从而进一步优化资源使用。
5. 故障处理:
- 网络管理能够检测和处理网络中的故障,确保系统在出现问题时能够迅速恢复正常运行。
6. 灵活性和扩展性:
- 通过网络管理,AP AUTOSAR 能够更灵活地适应不同的应用需求和网络配置,支持未来的技术扩展和升级。
(由于个人能力有限,以上原因仅代表作者个人观点,欢迎留言讨论。)
网络管理在 AP AUTOSAR 中扮演着关键角色,确保系统高效、稳定和灵活地运行,满足现代汽车电子系统的复杂需求。
END
作者:刘向
来源:汽车电子与软件
推荐阅读:
更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。)