跳转至

UdpNm

1. 简介和功能概述

本文档描述了AUTOSAR UDP网络管理(UdpNm)的概念、核心功能、可选特性、接口和配置问题。 UdpNm主要设计成一个可选功能, 旨在与TCP/IP堆栈一起工作,独立于所使用的通信系统的物理层。AUTOSAR UDP网络管理是一个独立于硬件的协议,可用于基于TCP/IP的系统。其主要目的是协调网络正常运行和总线睡眠模式之间的转换。

除了核心功能之外,它还提供了一些可选功能,例如:实现一个服务来检测所有当前节点或检测所有其他节点是否准备好休眠。

UDP 网络管理(UdpNm)功能提供网络管理接口(Nm)和TCP/IP堆栈之间的适配。 有关AUTOSAR网络管理功能的一般理解,请参阅[1]。

Extended AUTOSAR Communication Stack.

2. 缩略语

下面的词汇表包括与UdpNm模块相关、且未包含在AUTOSAR术语表[2]中的首字母缩略词和缩写词。

API

应用编程接口(Application Programming Interface)

BSW

基础软件(Basic Software)

CWU

整车唤醒(Car Wakeup)

EthIf

以太网接口(Ethernet Interface)

DET

默认错误跟踪器(Default Error Tracer)

IP

互联网协议(Internet Protocol)

NM

网络管理(Network Management)

PDU

协议数据单元(Protocol Data Unit)

PNL

部分网络学习(Partial Network Learning)

SDU

服务数据单元(Service Data Unit)

TCP

传输控制协议(Transmission Control Protocol)

TCP/IP

计算机网络中使用的一族通信协议(A family of communication protocols used in computer networks)

UDP

用户数据报协议(User Datagram Protocol)

PNI

部分网络信息(Partial Network Information)

UdpNm

UDP网络管理(UDP Network Management)

PDU传输能力被禁用(PDU transmission ability is disabled)

这意味着NM消息传输已被可选服务UdpNm_DisableCommunication禁用。

重复消息请求位指示(Repeat Message Request Bit Indication)

UdpNm_SoAdIfRxIndication在接收到的NM消息的控制位向量中找到重复消息位。

NM PDU

指在数据包中传输的有效载荷。它包含NM用户数据以及控制位向量和源节点标识符。

NM Packet

指一个以太网帧,除了由NM在有效载荷部分传输的数据(PDU)之外,还包含一个IP和一个UDP报头。

NM Message

最抽象的术语,指在NM算法的方法论中传输的任何单个信息项。

Bus-Off state

指没有电缆连接到以太网硬件的情况。

顶级PNC协调员(Top-level PNC coordinator)

顶级PNC协调器是一个ECU,它充当网络中的PNC网关,并在所有分配的通道上主动协调处理至少一个PNC。如果启用了同步PNC关闭,如果网络中没有其他ECU请求它们,顶级PNC协调器将为这些PNC触发关闭。注意:对于不同的PNC,可以有不同的顶级PNC协调器。但对于同一个PNC,仅支持一个顶级协调器。

中间PNC协调员(Intermediate PNC coordinator)

中间PNC协调器是一个ECU,它充当网络中的PNC网关,并在至少一个分配的通道上将至少一个PNC处理为被动协调。如果启用了同步PNC关闭,它会将收到的这些PNC的关闭请求转发到相应的主动协调通道,并相应地启动它们的关闭。

PNC叶节点(PNC leaf node)

PNC叶节点是一个ECU,在网络中根本不充当PNC协调器。它像通常的NM消息一样处理PN关闭消息。

PN关闭消息(PN shutdown message)

顶级PNC协调器发送PN关闭消息以指示跨PN拓扑的同步PNC关闭。PN关闭消息是作为NM消息,它在控制位向量中具有PNSR位,并且所有被指示用于同步关闭的PNC都设置为1。

3. 相关文档

3.1. 输入文件和相关标准与规范

[1] Specification of Network Management Interface

AUTOSAR_CP_SWS_NetworkManagementInterface

[2] Glossary

AUTOSAR_FO_TR_Glossary

[3] General Specification of Basic Software Modules

AUTOSAR_CP_SWS_BSWGeneral

[4] Specification of the AUTOSAR Network Management Protocol

AUTOSAR_FO_PRS_NetworkManagementProtocol

[5] General Requirements on Basic Software Modules

AUTOSAR_CP_SRS_BSWGeneral

[6] Requirements on AUTOSAR Network Management

AUTOSAR_FO_RS_NetworkManagement

[7] Specification of Communication Manager

AUTOSAR_CP_SWS_COMManager

[8] Guide to Mode Management

AUTOSAR_CP_EXP_ModeManagementGuide

[9] System Template

AUTOSAR_CP_TPS_SystemTemplate

[10] Specification of ECU State Manager

AUTOSAR_CP_SWS_ECUStateManager

3.2. 相关规范

AUTOSAR提供了基础软件模块的通用规范[3](SWS BSW General),它也适用于UDP网络管理。

因此,规范SWS BSW General应被视为UDP网络管理的附加和必需规范。

4. 约束和假设

4.1. 限制

  1. 一个UdpNm实例只与一个网络中的一个NM集群(NM-Cluster)相关联。 一个NM集群在一个节点中只能有一个UdpNm实例。
  2. UdpNm的一个实例仅与同一ECU内的一个网络相关联。
  3. UdpNm仅适用于基于TCP/IP的系统。

下图展示了属于两个UDP NM集群的示例ECU内的AUTOSAR NM堆栈。

默认情况下AUTOSAR UdpNm算法应支持每个NM集群包含最多250个节点。

注意:AUTOSAR UdpNm算法可以支持每个NM集群任意数量的节点(如果需要:甚至超过每个集群默认250个节点的限制)。这只是配置问题,上限不是固定的,取决于为AUTOSAR UdpNm协调算法配置的响应时间、容错性和结果总线负载之间的权衡。 这可能取决于所使用的物理层。

4.2. 汽车域的适用性

不适用(N/A)。

5. 对其他模块的依赖

UDP网络管理(UdpNm)使用TCP/IP堆栈的服务,并向通用网络管理接口(Nm)提供服务。

5.1. 文件结构

5.1.1. 代码文件结构

代码文件结构不应在本规范中完整定义。但是,代码文件结构应包含以下文件:

  • UdpNm_Lcfg.c(用于链接时可配置参数)
  • UdpNm_PBcfg.c(用于编译后(post-build)时可配置参数)

这些文件应包含所有链接时/编译后时可配置的参数。

5.2. 协议层依赖

UDP网络管理基于PRS NetworkManagementProtocol [4, Specification of the AUTOSAR Network Management Protocol]中提到的协议。

6. 功能规格

6.1. 协调算法

AUTOSAR UdpNm基于去中心化(decentralized)的直接网络管理策略,这意味着每个网络节点仅根据通信系统内接收和/或传输的UD 数据包,执行自给自足的活动。

AUTOSAR UdpNm协调算法基于周期性的NM数据包(Nm Packet),通过广播传输被集群中的所有节点所接收。接收到NM数据包表明发送节点希望保持NM集群处于唤醒状态。如果任何节点准备好进入总线睡眠模式(Bus-Sleep Mode),它就会停止发送NM数据包。但只要收到来自其他节点的NM数据包,它就会推迟转换到总线睡眠模式。最后如果由于不再接收到NM数据包,而导致专用计时器超时,则每个节点都会启动到总线睡眠模式的转换。

如果NM集群(NM-cluster)中的任何节点需要总线通信,它可以通过发送NM数据包来保持 NM集群唤醒状态。有关唤醒过程本身的更多详细信息,可参阅[7]。

AUTOSAR UdpNm协调算法的主要概念,可以通过以下两个关键需求定义: 1. 只要需要总线通信,每个网络节点都应发送周期性的NM PDU。否则节点就不应发送NM PDU。 2. 如果UdpNmStayInPbsEnabled被禁用,UdpNm集群中的总线通信被释放,同时通过配置参数UdpNmTimeoutTime + UdpNmWaitBusSleepTime确定的可配置时间量内,总线上没有网络管理PDU,则节点应执行转换到总线睡眠模式。

从NM集群中单个节点的角度来看,AUTOSAR UdpNm状态机应包含AUTOSAR UdpNm协调算法所需的状态(state)、转换(transition)和触发(trigger)。

6.2. 操作模式

AUTOSAR UdpNm应包含以下的三种操作模式:

  1. 网络模式(Network Mode)
  2. 准备总线睡眠模式(Prepare Bus-Sleep Mode)
  3. 总线睡眠模式(Bus-Sleep Mode)

AUTOSAR UdpNm操作模式的变化需要通过回调函数通知上层模块。

6.2.1. 网络模式(Network Mode)

网络模式应包括三个内部状态:

  1. 重复消息状态(Repeat Message State)
  2. 正常运行状态(Normal Operation State)
  3. 就绪睡眠状态(Ready Sleep State)

当从Bus-Sleep Mode或Prepare Bus-Sleep Mode进入Network Mode时,默认进入Repeat Message State,NM-Timeout Timer将被启动,同时UdpNm需要通过调用 Nm_NetworkMode通知上层模块。

在网络模式下,成功接收到NM PDU后(调用UdpNm_SoAdIfRxIndication),需要重新启动 NM-Timeout Timer。

在网络模式下,成功传输NM PDU后(使用E_OK调用UdpNm_SoAdIfTxConfirmation),也需要重新启动NM-Timeout Timer。

注意: 由于无法从SoAd或TCP/IP堆栈获得传输确认,因此假设每个网络管理PDU传输请求都是我网络管理PDU传输成功。

NM-Timeout Timer在每次启动或重新启动时,都需要被重置。

如果某通道的参数UdpNmDynamicPncToChannelMappingEnabled被设置为TRUE,且UdpNm也处于网络模式,同时在此通道上UdpNm_PnLearningRequest函数被调用,则 UdpNm模块需要将此通道上的CBV中的部分网络学习位(Partial Network Learning Bit)设置为1,同时一并设置重复消息位(Repeat Message Bit)。接着切换到Repeat Message State或者重新启动Repeat Message State。

如果某通道的参数UdpNmDynamicPncToChannelMappingEnabled被设置为TRUE,且 UdpNm也处于网络模式,同时在此通道上接收到的部分网络学习(Partial Network Learning)和重复消息(Repeat Message)的请求均为1时,则UdpNm模块需要将在此通道上的CBV中的部分网络学习位(Partial Network Learning Bit)设置为1,接着切换到Repeat Message State或者重新启动Repeat Message State。

注意: 在前面所述的,重新启动Repeat Message State意味着UdpNm已经处于Repeat Message State,然后必须执行一次重复消息状态的完全重新进入。

6.2.1.1. 重复消息状态(Repeat Message State)

对于非被动模式(Not in passive Mode)的节点,重复消息状态确保从Bus-Sleep或Prepare Bus-Sleep到Network Mode的任何状态的转换,对于网络上的其他节点都是可见的。 此外,它还确保任何节点在最短的时间内保持活动状态 (UdpNmRepeatMessageTime)。 可选地,它可以用于检测当前的节点。

当从Bus-Sleep Mode、Prepare-Bus-Sleep Mode、正常操作状态(Normal Operation State)或Ready Sleep State进入Repeat Message State状态时,除非启用了被动模式,否则必须重新启动NM报文的传输。

当NM-Timeout Timer在Repeat Message State超时时,NM-Timeout Timer需要重新启动。

NM应在由配置参数UdpNmRepeatMessageTime确定的可配置时间量内,保持在重复消息状态。但在那之后需要离开Repeat Message State。

当离开Repeat Message State时:

  • 如果网络又被请求,则应进入正常操作状态(Normal Operation State)。
  • 如果网络已被释放,则应进入Ready Sleep State。

如果UdpNmNodeDetectionEnabled设置为TRUE,UdpNm需在离开Repeat Message State时,清除重复消息位(Repeat Message Bit)。

如果UdpNmDynamicPncToChannelMappingSupport设置为TRUE, UdpNm需在离开Repeat Message State时,清除部分网络学习位(Partial Network Learning Bit)。

6.2.1.2. 正常运行状态(Normal Operation State)

正常操作状态(Normal Operation State)需确保任何节点在需要网络功能时,都能保持NM集群(NM-cluster)处于被唤醒状态。

当Ready Sleep State转换到正常操作状态(Normal Operation State),除非已启用被动模式或禁用NM报文的传输能力,否则NM PDU需立即开始传输。

在正常操作状态(Normal Operation State)下:

  • 当NM-Timeout Timer超时后,需要重新启动NM-Timeout Timer。
  • 如果网络被释放,则需要离开在正常操作状态(Normal Operation State),而进入Ready Sleep state状态。
  • 如果UdpNmNodeDetectionEnabled设置为TRUE,并且接收到重复消息请求位(Repeat Message Request bit),则UdpNm需进入重复消息状态(Repeat Message State)。
  • 如果UdpNmNodeDetectionEnabled设置为TRUE,并且函数UdpNm_RepeatMessageRequest被调用,则UdpNm需进入重复消息状态(Repeat Message State),并设置重复消息位(Repeat Message Bit)。
6.2.1.3. 就绪睡眠状态(Ready Sleep State)

Ready Sleep State确保任意一个节点在等待转换到Prepare Bus-Sleep Mode时,其他节点需保持NM集群(NM-cluster)处于被唤醒状态。

当从Repeat Message State或Normal Operation State进入Ready Sleep State时,应停止NM PDU的传输。

注意: 如果启用了被动模式,由于NM PDU已经不被传输,所以无需执行任何操作。如果禁用了被动模式,在某些情况下,NM PDU必须在就绪睡眠状态(Ready Sleep State)下传输,以允许网络的同步关闭(synchronized shutdown),例如:重新传输PN关闭消息(PN shutdown messages)。

在就绪睡眠状态(Ready Sleep State)下:

  • 如果NM-Timeout Timer超时后,应离开就绪睡眠状态(Ready Sleep State),并进入准备总线睡眠模式(Prepare Bus-Sleep Mode)。
  • 如果收到网络请求时,应离开就绪睡眠状态(Ready Sleep State),并进入正常操作状态(Normal Operation State)。
  • 如果UdpNmNodeDetectionEnabled设置为TRUE,并且接收到重复消息请求位(Repeat Message Request bit),则UdpNm应进入重复消息状态(Repeat Message State)。
  • 如果UdpNmNodeDetectionEnabled设置为TRUE,并且函数UdpNm_RepeatMessageRequest被调用,则UdpNm需进入重复消息状态(Repeat Message State),并设置重复消息位(Repeat Message Bit)。

6.2.2. 准备总线睡眠模式(Prepare Bus-Sleep Mode)

准备总线睡眠(Prepare Bus Sleep)状态的目的是确保所有节点在进入总线睡眠(Bus Sleep)状态之前,都有时间停止其网络活动。 总线活动平静下来(即:队列中的消息已被传输以便清空所有Tx缓冲区),最后在准备总线睡眠模式(Prepare Bus-Sleep Mode)下总线上没有活动。

当进入准备总线睡眠模式(Prepare Bus-Sleep Mode)时,UdpNm应通过调用Nm_PrepareBusSleepMode通知上层模块。

如果UdpNmStayInPbsEnabled被禁用,UdpNm需在配置参数UdpNmWaitBusSleepTime确定的可配置时间内,保持在准备总线睡眠模式(Prepare Bus-Sleep Mode)。直到时间超时后,需离开准备总线睡眠模式(Prepare Bus-Sleep Mode),并进入总线睡眠模式(Bus-Sleep Mode)。

注意: 此需求隐含地包含了:如果启用了UdpNmStayInPbsEnabled,UdpNm将永远不会因为超时而离开,即UdpNm将停留在准备总线睡眠模式(Prepare Bus-Sleep Mode),直到 ECU进入电源关闭或任何原因的重新启动。

在准备总线睡眠模式(Prepare Bus-Sleep Mode)下: * 如果成功接收到NM PDU后,应离开准备总线睡眠模式(Prepare Bus-Sleep Mode),进入网络模式(Network Mode)。 并进入重复消息状态(Repeat Message State)。 * 如果需要请求网络时,应离开准备总线睡眠模式(Prepare Bus-Sleep Mode),进入网络模式(Network Mode)。 并进入重复消息状态(Repeat Message State)。

在准备总线睡眠模式(Prepare Bus-Sleep Mode)下,网络被请求后,UdpNm模块已进入网络模式,如果配置参数UdpNmImmediateRestartEnabled为TRUE,则UdpNm模块应发送NM PDU。

理由: 因为集群中的其他节点仍处于准备总线睡眠模式(Prepare Bus-Sleep Mode),在上述异常情况下,应避免过渡到总线睡眠模式(Bus-Sleep Mode),并应尽快恢复总线通信。

由于UdpNm中NM PDU的传输存在偏移,第一个处于重复消息状态的网络管理PDU的传输可能会有明显的延迟。为了避免网络延迟重新启动,可以立即请求网络管理PDU的传输。

注意: 如果UdpNmImmediateRestartEnabled为TRUE,并且使用了唤醒线路,则如果所有网络节点都在准备总线睡眠模式下收到网络请求,则会发生网络管理PDU突发(burst of Network Management PDUs)。

6.2.3. 总线睡眠模式(Bus-Sleep Mode)

总线睡眠(Bus-Sleep)状态的目的是为了在没有消息交换时,降低节点中的功耗。

通信控制器切换到睡眠模式,激活相应的唤醒机制,最后在总线睡眠模式下将功耗降低到足够的水平。

如果禁用UdpNmStayInPbsEnabled,同时为网络管理集群中的所有节点配置相同的时间(由配置参数UdpNmTimeoutTime + UdpNmWaitBusSleepTime确定),则网络管理集群中使用AUTOSAR NM算法协调的所有节点会在差不多相同的时间转换到总线睡眠模式(Bus-Sleep Mode)。

注意: 参数UdpNmTimeoutTime和UdpNmWaitBusSleepTime在NM集群的所有网络节点中应该具有相同的值。根据具体实施,转换到总线睡眠模式大约同时发生。

此转换所经历的时间抖动取决于以下因素: * 内部时钟精度(振荡器漂移)。 * NM-Task周期时间(如果任务未通过全局时间同步)。 * NM PDU在Tx队列中的等待时间(如果在发送请求后立即进行发送确认)。

对于最佳情况估计,在可配置的时间量内主要需要考虑振荡器漂移。

当进入总线睡眠模式(Bus-Sleep Mode)时,UdpNm应通过调用Nm_BusSleepMode通知上层模块。如果在初始化时默认进入总线睡眠模式,则不需考虑这场景。

在总线睡眠模式(Bus-Sleep Mode)下,当UdpNm模块成功接收到网络管理PDU(调用UdpNm_SoAdIfRxIndication)时,UdpNm模块将通过调用回调函数Nm_NetworkStartIndication通知上层模块。

基本原理: 为避免网络和模式管理(Mode Management)之间的竞争条件和状态不一致,UdpNm不会自动执行从总线睡眠模式(Bus-Sleep Mode)到网络模式(Network Mode)的转换。UdpNm只会通知必须做出唤醒决定的上层模块。总线睡眠模式(Bus-Sleep Mode)下的NM数据包接收,必须依据ECU关闭(shutdown)或启动(startup)过程的当前状态进行处理。

在总线睡眠模式(Bus-Sleep Mode)或准备总线睡眠模式(Prepare Bus-Sleep Mode)下,如果UdpNm_PassiveStartUp被调用,则UdpNm模块应进入网络模式(Network Mode),并进入重复消息状态(Repeat Message State)。

注意: 在准备总线睡眠模式(Prepare Bus-Sleep Mode)和总线睡眠模式(Bus-Sleep Mode)下,假定网络被释放,除非有明确的总线通信请求。

在总线睡眠模式(Bus-Sleep Mode)下,当网络被请求,UdpNm模块应进入网络模式; 并进入重复消息状态(Repeat Message State)。

6.3. 网络状态(Network states)

网络状态(Network states)包含“被请求”(requested)和“被释放”(released),它是AUTOSAR UdpNm状态机的两个附加状态,并与状态机并行存在。网络状态表示了,软件模块是否需要在总线上进行通信(即:网络状态为被请求),或者软件模块是否无需在总线上通信(即:总线网络状态为被释放)。请注意,即使网络被释放,一个ECU仍然可以通信,因为其他一些ECU仍然请求网络。

可调用函数UdpNm_NetworkRequest请求网络。 即:UdpNm模块应将网络状态更改为“被请求”。可调用函数UdpNm_NetworkRelease释放网络。 即:UdpNm模块应将网络状态更改为“被释放”。

6.4. 初始化

UdpNm模块应该在SoAd初始化之后,并且在任何其他网络管理服务被调用之前初始化。在成功初始化后,网络管理状态为BusSleep模式。

初始化后默认情况下,UdpNm模块应将网络状态设置为“已释放”(released),并且进入总线睡眠模式(Bus-Sleep Mode)。

如果AUTOSAR UdpNm模块未初始化,则不应禁止总线通信流(bus traffic)。

函数UdpNm_Init可通过传递的配置指针参数选择活动配置集。

初始化后,NM消息的传输将停止,用户数据字节(user data byte)的每个字节都应设置为0xFF,控制位向量(Control Bit Vector)应设置为0x00。

在初始化期间,如果UdpNmPnEnabled为TRUE,UdpNm模块应将PNC位向量(PNC bit vector)的每个字节设置为0x00。

一个NM集群中不同ECU上的所有UDP NM实例应使用相同的UDP接收端口。

6.5. 执行(Execution)

6.5.1. 处理器架构(Processor architecture)

AUTOSAR UdpNm协调算法应独立于处理器,这意味着它不应依赖于任何处理器的特定硬件支持,因此应可在AUTOSAR范围内的任何处理器架构上实现。

6.5.2. 时序参数(Timing parameters)

  • 配置参数UdpNmTimeoutTime:定义了UdpNm的定时参数NM超时时间。
  • 配置参数UdpNmRepeatMessageTime:定义了UdpNm定时参数重复消息时间。
  • 配置参数UdpNmWaitBusSleepTime:定义了UdpNm定时参数等待总线睡眠的时间
  • 可选配置参数UdpNmRemoteSleepIndTime:定义了UdpNm定时参数定时远程睡眠指示时间。

6.6. 通信调度

6.6.1. NM 消息传输

以下描述的传输机制仅在启用NM消息传输能力时才相关。

NM消息的传输应可通过UdpNmPassiveModeEnabled进行配置。被动节点不发送NM消息,即:它们不能主动影响关闭决策,但它们确实接收NM消息以便能够同步关闭。

UdpNm模块应提供周期性传输模式。在这种传输模式下,UdpNm模块将定期发送网络管理PDU。周期性传输模式可在“重复消息状态”(Repeat Message State)和“ 正常运行状态”(Normal Operation State)中使用。

如果未通过UdpNm_NetworkRequest进入重复消息状态或UdpNmImmediateNmTransmissions为0,则进入重复消息状态后,NM PDU的传输应延迟UdpNmMsgCycleOffset。

以上的情况也覆盖了,如果由于重复消息请求或重复消息位,状态从网络操作状态或就绪睡眠状态进入重复消息状态。这意味着在这种情况下不使用立即传输(即: UdpNmImmediateNmTransmissions > 0 并且独立于UdpNmPnHandleMultipleNetworkRequests的配置),UdpNmMsgCycleOffset将始终被应用 。这种机制可以防止NM消息的突发。

由于UdpNm_NetworkRequest()被调用(即:主动唤醒),状态从总线睡眠模式或准备总线睡眠模式进入重复消息状态时,如果UdpNmImmediateNmTransmissions > 0,则应使用 UdpNmImmediateNmCycleTime作为循环时间来发送NM PDU。 同时需要尽快地触发第一个NM PDU的传输。传输后,消息周期计时器(Message Cycle Timer)应重新加载UdpNmImmediateNmCycleTime。 在这种情况下不应使用参数UdpNmMsgCycleOffset。

注意: 在这种情况下,UdpNmImmediateNmTransmissions必须大于零,因为如果该值为零,则不发送立即的NM PDU。

如果NM PDU使用UdpNmImmediateNmCycleTime方式传输,则UdpNm应确保UdpNmImmediateNmTransmissions(包括第一次立即传输)在配置的时间内请求成功。如果对SoAd的传输请求失败(即:返回E_NOT_OK),UdpNm将在下一个主函数中重试传输请求。但之后UdpNm将继续使用UdpNmMsgCycleTime发送NM PDU。

注意: 当使用UdpNmImmediateNmCycleTime传输NM PDU时,不得传输其他Nm PDU(如:停止UdpNmMsgCycleTime传输周期)。

如果NM PDU的传输已经开始并且UdpNm消息周期计时器(Message Cycle Timer)超时,则应通过调用SoAd_IfTransmit,通过SoAd传输NM PDU。

如果UdpNm消息周期计时器超时,它应使用UdpNmMsgCycleTime重新启动。如果NM PDU的传输已停止,则应取消UdpNm消息周期计时器。

如果参数UdpNmRetryFirstMessageRequest为TRUE,并且如果从总线休眠到重复消息状态转换后的第一个传输请求未被SoAd接受,则应在下一个主函数中重复该消息请求,直到SoAd接受一个传输请求。

注意: 此功能可用于部分网络唤醒过滤器的情况,以避免在被动启动(passive start-up)的情况下阻塞所有消息,并且由于EthSM无法足够快地启用传输路径(例如:在异步收发器处理的情况)。

如果UdpNm_SoAdIfTxConfirmation调用结果为E_NOT_OK,UdpNm将调用函数Nm_TxTimeoutException。

6.6.2. 接收

如果成功接收到NM消息,SoAd模块将调用UdpNm_SoAdIfRxIndication。在调用UdpNm_SoAdIfRxIndication时,UdpNm模块应将函数参数中引用的网络管理PDU的数据复制到内部缓冲区。

当接收到NM PDU时,如果UdpNmPduRXIndicationEnabled(配置参数)为TRUE,则应调用Nm函数Nm_PduRxIndication。

6.7. 附加的功能

6.7.1. 远程睡眠指示检测(可选)

“远程睡眠指示”(Remote Sleep Indication)表示以下的场景。其中处于正常操作状态的节点发现集群中的所有其他节点都准备好进入睡眠状态。仍然处于“正常操作状态”的节点将仍然使总线保持清醒。

远程睡眠指示的检测需使用UdpNmRemoteSleepIndEnabled开关(配置参数),进行静态配置。如果在由UdpNmRemoteSleepIndTime(配置参数)确定的可配置时间量内,在正常操作状态下没有收到NM PDU,则NM应通过调用Nm_RemoteSleepIndication通知通用网络管理接口(Generic Network Management Interface),集群中的所有其他节点都准备好进入睡眠状态(即:所谓的“远程睡眠指示”)。

如果先前已检测到远程睡眠指示,此时在正常操作状态(Normal Operation State)或就绪睡眠状态(Ready Sleep State)下再次接收到NM PDU,则NM需要通过调用 Nm_RemoteSleepCancelation通知通用网络管理接口(Generic Network Management Interface),集群中的某些节点已不再准备睡眠(ready to sleep)(即:所谓的“远程睡眠取消”)。

如果先前已检测到远程睡眠指示,此时从正常操作状态(Normal Operation State)进入重复消息状态(Repeat Message State),则NM也需要通过调用 Nm_RemoteSleepCancelation通知通用网络管理接口(Generic Network Management Interface),集群中的某些节点已不再睡眠就绪(ready to sleep)(即:所谓的“远程睡眠取消”)。

NM应拒绝在总线睡眠模式、准备总线睡眠模式和重复消息状态下对远程睡眠指示的检查,服务不被执行,并返回E_NOT_OK。

6.7.2. 用户数据(可选)

NM用户数据的支持需使用UdpNmUserDataEnabled开关(配置参数)进行静态配置。

通过调用UdpNm_SetUserData,可以实现对总线下一个发送的NM包里NM用户数据的设置。此函数会确保设置的Nm用户数据的一致性。

通过调用UdpNm_GetUserData,可以获取最近接收到的NM PDU的有效载荷中包含的NM用户数据。此函数会确保接收的Nm用户数据的一致性。

注意: 如果配置了Nm用户数据,它会在重复消息状态(Repeat Message State)下发送。但在就绪睡眠状态(Ready Sleep State),用户数据不会被发送。

如果启用了UdpNmComUserDataSupport,则函数UdpNm_SetUserData将不可用。

如果启用了UdpNmComUserDataSupport并且NM-PDU未配置为在 SoAd中触发传输(SoAdBswModules/SoAdIfTriggerTransmit = FALSE),则UdpNm会通过调用 PduR_UdpNmTriggerTransmit从引用的NM I-PDU中收集NM用户数据,并在每次请求传输相应的NM消息之前,把用户数据与NM的数据合并。

注意: 在触发传输的情况下,传输请求不需要数据,只需要长度。数据将在UdpNm_TriggerTransmit中收集。

如果启用了UdpNmComUserDataSupport,UdpNm处于重复消息状态(Repeat Message State)或 正常操作状态(Normal Operation State),并且调用了 UdpNm_Transmit,则UdpNm将请求使用当前用户数据的NM PDU的附加传输。

6.7.3. 被动模式(可选)

在被动模式下,节点只接收NM消息,但不发送任何NM消息。被动模式应可使用 UdpNmPassiveModeEnabled开关(配置参数)进行静态配置。被动模式应针对一个ECU 内的所有实例进行一致的静态配置。

如果使用被动模式(配置参数UdpNmPassiveModeEnabled),则不得使用以下选项:

  • 总线同步(Bus Synchronization)。【配置参数:UdpNmBusSynchronizationEnabled】。
  • 远程睡眠指示(Remote Sleep Indication)。【配置参数:UdpNmRemoteSleepIndEnabled】。
  • 节点检测(Node Detection)。【配置参数:UdpNmNodeDetectionEnabled】。

6.7.4. 状态变化通知(可选)

如果回调Nm_StateChangeNotification被启用(配置参数:UdpNmStateChangeIndEnabled为TRUE),则AUTOSAR UdpNm状态的所有变化都需要通过调用Nm_StateChangeNotification通知上层模块。

6.7.5. 通讯控制(可选)

通信控制(Communication Control)需使用UdpNmComControlEnabled开关(配置参数)进行静态配置。

可选服务UdpNm_DisableCommunication可禁用NM PDU传输能力。

注意: 如果禁用NM PDU传输能力,NM协调算法将无法正常工作。 因此,必须确保即使NM PDU传输能力被禁用,ECU也不会关闭(shutdown)。

如果UdpNm_NetworkRelease被调用,并且NM PDU传输能力也已被禁用,则ECU将关闭。 这确保了ECU也可以在以下的情况下关闭:

  • 竞争条件(例如:在启用通信之前不久离开诊断会话)
  • 错误使用通信控制的。

如果当前模式不是网络模式,可选服务UdpNm_DisableCommunication应返回E_NOT_OK。

当NM PDU传输能力被禁用时:

  • UdpNm模块需停止UdpNm消息周期定时器以停止NM PDU的传输。
  • 需要停止NM超时定时器(NM-Timeout Timer)。
  • 远程睡眠指示定时器(Remote Sleep Indication Timer)的检测将被暂停。
  • 可选服务UdpNm_RequestBusSynchronization应返回E_NOT_OK。

当NM PDU传输能力被启用时:

  • NM PDU的传输需最晚在下一个NM主函数中开始。
  • 需重新启动NM超时定时器(NM-Timeout Timer)。
  • 需恢复远程睡眠指示定时器(Remote Sleep Indication Timer)的检测。

6.7.6. NM 协调器同步支持(可选)

当有多个协调器连接到同一总线时,CBV中有一个特殊位,NmCoordinatorSleepReady位用于指示主协调器请求启动关闭序列。该算法的主要功能可参考Nm模块中的描述。

如果UdpNm调用NM_CoordReadyToSleepIndication,并且仍处于网络模式,它应在第一次接收到带有NmCoordinatorSleepReady位的NM消息时调用 Nm_CoordReadyToSleepCancellation通知Nm,将其设置为0。

如果UdpNm已进入网络模式或调用Nm_CoordReadyToSleepCancellation,则它应在第一次收到NM消息时,调用Nm_CoordReadyToSleepIndication通知NM,并且NmCoordinatorSleepReady位设置为1。

如果UdpNmCoodinatorSyncSupport设置为TRUE,并且API UdpNm_SetSleepReadyBit被调用,UdpNm应设置NmCoordinatorSleepReady位,并触发单个NM PDU。

仅当UdpNmCoordinatorSyncSupport设置为TRUE时,程序接口UdpNm_SetSleepReadyBit 和Coordinated Bus Shutdown功能才可用。

6.8. 部分联网(Partial Networking)

6.8.1. NM PDU的Rx处理

当UdpNmPnEnabled为FALSE,则UdpNm应执行正常的Rx指示处理,并且应禁用部分网络(partial networking)扩展。

当UdpNmPnEnabled为TRUE: * 如果接收到的NM-PDU中的PNI位为0,并且UdpNmAllNmMessagesKeepAwake为TRUE,则UdpNm模块需执行正常的Rx指示处理,省略部分网络的扩展。 * 如果接收到的NM-PDU中的PNI位为0,并且UdpNmAllNmMessagesKeepAwake为FALSE,则UdpNm模块需忽略接收到的NM-PDU。 * 如果接收到的NM-PDU中的PNI位为1,则UdpNm模块需按照第6.8.3至6.8.5所述处理NM-PDU的部分网络信息。

6.8.2. NM PDU的Tx处理

如果UdpNmPnEnabled为TRUE,则UdpNm模块需将CBV中发送的PNI位的值设置为1。

如果UdpNmPnEnabled为FALSE,则UdpNm模块需将CBV中发送的PNI位的值始终设置为0。

注意: 如果使用部分网络,则必须使用CBV。

6.8.3. NM PDU过滤算法

接收到的NM-PDU中包含PN请求信息(PN request information)的范围,已字节位单位。它由UdpNmPnInfoOffset(字节)和UdpNmPnInfoLength(字节)定义。 此范围称为PN信息范围(PN Info Range)。

例如:

  • UdpNmPnInfoOffset = 3
  • UdpNmPnInfoLength = 2

表示NM消息中只有第3个字节和第4字节,包含PN请求信息。

PN信息范围的每一位代表一个部分网络(Partial Network)。如果该位设置为1,则请求部分网络。如果该位设置为0,则没有对该PN的请求。

通过配置参数UdpNmPnFilterMaskByte,UdpNm能够检测哪些PN与ECU相关,哪些不相关。UdpNmPnFilterMaskByte的每一位具有以下含义:

  • 0:PN请求与ECU无关。即使在接收到的NM-PDU中设置了该位,ECU的通信堆栈也不会保持唤醒。
  • 1:PN请求与ECU相关。如果在接收到的NM-PDU中设置了该位,则ECU的通信堆栈保持唤醒

每个PN过滤器掩码字节需按位与(bitwise AND)的方式映射到NM消息的PN信息范围内的相应字节。如果接收到的NM-PDU的PN信息范围内至少一位与NM过滤掩码中的一位匹配,则PN请求信息与ECU相关。

如果在接收到的NM-PDU中没有请求相关的PN,并且UdpNmAllNmMessagesKeepAwake 为FALSE,则UpdNm模块需丢弃该PDU。

如果在接收到的NM-PDU中没有请求相关的PN,并且UdpNmAllNmMessagesKeepAwake为TRUE,则UpdNm模块不应丢弃该PDU,并在进一步的Rx指示处理。

6.8.4. 内部和外部请求的部分网络的聚合

由于部分网络的活动,每个使用此功能ECU都必须切换I-PDU Group。 例如:为了防止错误超时)。如果内部或外部请求相应的PN,则需打开I-PDU Group。直到所有内部和外部对相应PN的请求都被释放后,I-PDU Group才会被关闭。

切换I-PDU Group的逻辑由ComM实现。UdpNm模块仅提供是否请求PN的信息,COM模块用于将数据传输到上层。

为了在所有直接连接的ECU上同步切换I-PDU Group,UdpNm需要实现每个ECU几乎在同一时刻,向上层提供请求更改的信息。这就是为什么每次收到和发送的NM消息都会重新启动重置计时器。

内部和外部请求PN的聚合状态,称为(EIRA)。即:外部内部请求聚合(External Internal Requests Aggregated)。

如果UdpNmPnEiraCalcEnabled为TRUE,则UdpNm应提供在所有相关通道(即:所有UdpNmPnEnabled为TRUE的UdpNm通道)上组合存储外部和内部请求PN的可能性。在初始化时,所有PN的值应设置为0(未请求)。

如果外部请求满足以下条件,UdpNm需存储这些PN的请求信息,并把PN的值设置为1

  • UdpNmPnEiraCalcEnabled为TRUE
  • 接收到NM-PDU
  • PN在此消息中被请求(即:相关位都已经设置为1)
  • 请求的PN在配置的PN过滤器掩码中设置也都为1

如果内部请求满足以下条件,UdpNm也需存储这些PN的请求信息,并把PN的值设置为1

  • UdpNmPnEiraCalcEnabled为TRUE
  • UdpNM正在请求发送NM-PDU
  • 在此消息中请求PN(即:相关位都已经设置为1)
  • 请求的PN在配置的PN过滤器掩码中设置也都为1

如果UdpNmPnEiraCalcEnabled为TRUE,并且此PN仍然在至少一个相关通道上被外部或内部请求,则UdpNm模块需提供监视每个PN的可能性。

注意: 这意味着只需要一个计时器来处理多个连接的物理通道上的一个PN。例如:只需要8个EIRA重置定时器(reset timer)来处理具有6个物理通道和8个部分网络的网关的请求。这主要因为PN的PDU Group的切换是为ECU全局完成的,而不依赖于任何物理通道。

如果UdpNmPnEiraCalcEnabled为TRUE,并且在消息接收或发送时请求PN,则应根据UdpNmPnResetTime重新开始对该PN的监视。

注意: UdpNmPnResetTime需配置为大于UdpNmMsgCycleTime的值。如果将 UdpNmPnResetTime配置为小于UdpNmMsgCycleTime的值,并且只有一个ECU请求PN,则请求状态在EIRA中切换。因为请求状态在请求的ECU能够发送下一个NM消息之前已停止。

同时UdpNmPnResetTime应配置为小于UdpNmTimeoutTime的值,以避免在NM已更改为准备总线睡眠(Prepare Bus Sleep)后,定时器可能会超时。

如果UdpNmPnEiraCalcEnabled为TRUE,并且在UdpNmPnResetTime时间内未再次请求PN,则该PN的相应存储值应设置为0(未请求)。

如果UdpNmPnEiraCalcEnabled为TRUE,并且存储的PN值设置为已请求或返回为未请求,UdpNm需通过调用PduR_UdpNmRxIndication通知上层关于配置的EIRA PDU(更改的EIRA信息需要传递给COM)。

如果UdpNmPnEiraCalcEnabled为TRUE,并且UdpNmPnEraCalcEnabled为TRUE,则PN状态信息必须分别存储为两份:EIRA和ERA信息。

6.8.5. 外部请求的部分网络的聚合

此功能主要供网关(gateway)收集外部PN请求(external PN request)使用。外部PN请求被镜像回请求总线,并提供给中央网关的其他物理通道。

在子网关的情况下,请求位(requests bit)不得镜像回请求的物理通道,以避免中央网关和子网关之间的静态唤醒。 该逻辑应由ComM模块实现。

UdpNm模块提供是否从外部请求PN的信息。COM模块用于向上层传输数据。外部请求的PN的聚合状态称为ERA,即:外部请求聚合(External Requests Aggregated)。

如果UdpNmPnEraCalcEnabled为TRUE,则UdpNM应提供在每个相关通道上存储外部请求的PN的可能性。 在初始化时,所有PN的值应设置为0(未请求)。

如果以下条件满足,UdpNm 将存储这些PN的请求信息,并把PN的值设置为1。 * UdpNmPnEraCalcEnabled为TRUE。 * 接收到NM-PDU。 * 在此接收消息中请求PN(即:相关位都已经设置为1)。 * 请求的PN在配置的PN过滤器掩码中设置为1。

如果UdpNmPnEraCalcEnabled为TRUE,并且此PN仍然被外部请求,则UdpNm模块需提供监视每个相关通道和每个PN的可能性。

这意味着需要一个单独的计时器(separate timer)来处理多个物理通道上的一个PN。例如:需要48个ERA复位定时器来处理具有6个物理通道和8个部分网络的网关的请求。不能像 EIRA定时器那样组合复位定时器,因为外部请求不能通过子网关(sub gateway)镜像回请求总线。因此需要检测作为请求位源的物理通道。

如果UdpNmPnEraCalcEnabled为TRUE,并且消息接收请求PN,则应根据 UdpNmPnResetTime重新开始对该PN的监视。

注意: UdpNmPnResetTime需配置为大于UdpNmMsgCycleTime的值。如果将 UdpNmPnResetTime配置为小于UdpNmMsgCycleTime的值,并且只有一个ECU请求PN,则请求状态在ERA中切换,因为请求状态在请求的ECU能够发送下一个NM-PDU之前已停止。

同时UdpNmPnResetTime应配置为小于UdpNmTimeoutTime的值,以避免在NM已更改为准备总线睡眠(Prepare Bus Sleep)后,定时器可能会超时。

如果UdpNmPnEraCalcEnabled为TRUE,并且在UdpNmPnResetTime时间内未再次请求PN,则该PN的相应存储值应设置为0(未请求)。

如果UdpNmPnEraCalcEnabled为TRUE,并且存储的PN值设置为已请求或返回为未请求,UdpNm需通过调用PduR_UdpNmRxIndication通知上层关于配置的ERA PDU(更改的ERA信息需要传递给COM)。

如果UdpNmPnEiraCalcEnabled为TRUE,并且UdpNmPnEraCalcEnabled为TRUE,则PN状态信息必须分别存储为两份:EIRA和ERA信息。

6.8.6. 内部请求的部分网络集群的处理

所有内部PNC请求都由ComM维护。ComM将每个通道上聚合的内部PNC请求作为PNC位向量转发给NmIf。该PNC位向量承载所谓的「内部请求数组」(Internal Request Array,IRA)。UdpNm必须在每次传输NM_PDU时从NmIf获取最新的IRA。NmIf向UdpNm提供IRA信息并更新PNC重置计时器(每次传输相关PNC时,PNC重置计时器都会重新启动)。

注意:

对于UdpNmPnEnabled设置为TRUE的所有已配置NM通道,UdpNm将调用Nm_PncBitVectorTxIndication(<NM通道>,<用于存储聚合内部PNC请求的未过滤PNC位向量的缓冲区>)以指示传输,并根据配置的NmPncBitVectorLength获取作为PNC位向量的当前内部PNC请求。UdpNm会将接收到的内部PNC请求复制到NM-PDU的PNC位向量字节中。

6.8.7. 通过UdpNm_NetworkRequest自发传输NM-PDU

如果UdpNmPnHandleMultipleNetworkRequests设置为TRUE,UdpNm_NetworkRequest接口被调用,并且UdpNm处于就绪睡眠状态(Ready Sleep State)、正常操作状态(Normal Operation State)或重复消息状态(Repeat Message State),则UdpNm将更改为或重新启动重复消息状态(Repeat Message State)。

注意: 如果UdpNmPnHandleMultipleNetworkRequests设置为TRUE,则UdpNm的立即传输(Immediate Transmission)功能是强制性的。

如果PN请求位发生变化,PN控制模块(例如:ComM)负责调用UdpNm_NetworkRequest。

6.9. 有效载荷(PDU)的结构

下图显示了n字节长度PDU的示例。

网络管理PDU的长度是由全局ECUC模块(global ECUC module)中的PduLength参数定义。(请参阅EcuC的规范)。启用系统的字节数和长度之间的差异是用户数据字节(user data bytes)的数量。

  • 源节点标识符(Source Node Identifier)的位置应可通过UDPNM_PDU_NID_POSITION配置为字节0、字节1或关闭。默认为字节0。
  • 控制位向量(Control Bit Vector)的位置应可通过UDPNM_PDU_CBV_POSITION 配置为字节0、字节1或关闭。默认为字节1。

NM包的长度不能超过底层物理传输层的MTU(Maximum Transmission Unit)。

6.9.1. 控制位向量(Control Bit Vector)

下图描述了控制位向量的格式:

控制位向量应包括: * 位0:重复消息请求。 * 0:未请求重复消息状态; * 1:请求重复消息状态。 * 位1:保留用于将来的扩展。默认为0。 * 位2:保留用于将来的扩展。默认为0。 * 位3:NM协调器休眠位。 * 0:主协调器未请求启动同步关机。 * 1:主协调器请求启动同步关机。 * 位4: 主动唤醒位。 * 0:节点未唤醒网络(被动唤醒)。 * 1:节点已唤醒网络(主动唤醒)。 * 位5:保留用于将来的扩展。默认为0。 * 位6:部分网络信息位 (PNI)。 * 0:NM消息不包含部分网络(Partial Network)请求信息。 * 1:NM消息包含部分网络(Partial Network)请求信息。 * 位7:保留用于将来的扩展。默认为0。

控制位向量在初始化为0x00。

除非UDPNM_PDU_NID_POSITION设置为关闭,否则源节点标识符应使用配置参数UDPNM_NODE_ID设置。

如果UdpNmActiveWakeupBitEnabled参数为TRUE:

  1. UdpNm由于调用 UdpNm_NetworkRequest(即由于主动唤醒)而执行从Bus Sleep状态或 Prepare Bus Sleep状态到Network Mode状态更改,则UdpNm需在CBV中设置Active Wakeup Bit。
  2. UdpNm模块离开Network Mode,则UdpNm模块应清除CBV中的Active Wakeup Bit。

6.10. UdpNm API的功能需求

如果UdpNmRepeatMsgIndEnabled设置为TRUE且接收到设置为1的重复消息请求位,则UdpNm模块应调用回调函数Nm_RepeatMessageIndication。如果同时接收到部分网络学习位(Partial Network Learning Bit)且UdpNmDynamicPncToChannelMappingEnabled设置为TRUE,则该函数调用中的参数 pnLearningBitSet 应设置为TRUE,否则设置为FALSE。

6.11. 车辆唤醒

NM-PDU中车辆唤醒位(Car Wakeup bit)的位置由配置参数UdpNmCarWakeUpBytePosition和UdpNmCarWakeUpBitPosition定义。

针对无车辆唤醒过滤器的情况,如果满足下列的条件,UdpNm应调用Nm_CarWakeUpIndication,并执行标准接收指示处理。

  • 接收到的任意NM-PDU中的车辆唤醒位为1,
  • UdpNmCarWakeUpRxEnabled为TRUE,
  • UdpNmCarWakeUpFilterEnabled为FALSE。

如果在Nm_CarWakeUpIndication的上下文中调用UdpNm_GetPduData,并且UdpNmNodeDetectionEnabled或者UdpNmUserDataEnabled或者 UdpNmNodeIdEnabled设置为TRUE,UdpNm应返回引起 Nm_CarWakeUpIndication调用的PDU的数据。

注意: 这是使ECU识别有关车辆唤醒请求发送者的详细信息所必需的。

针对包含车辆唤醒过滤器的情况,如果满足下列的条件,UdpNm应调用Nm_CarWakeUpIndication,并执行标准接收指示处理。

  • UdpNmCarWakeUpFilterEnabled为TRUE,
  • 接收到的任意NM-PDU中的车辆唤醒位为1,
  • UdpNmCarWakeUpRxEnabled为TRUE,
  • 接收到的NM-PDU中的节点ID等于UdpNmCarWakeUpFilterNodeId

注意:车辆唤醒过滤器是实现子网关(sub gateway)所必需的,它只考虑中央网关的车辆唤醒,以避免错误唤醒。

6.12. 错误分类

本节描述UdpNm模块在该基础软件的生命周期中必须如何管理可能发生的错误类别。

AUTOSAR的通用需求文档[5, General Requirements on Basic Software Modules]规定,所有基础软件模块必须(根据产品生命周期)区分两种错误类型:

  • 开发错误(Development errors):这些错误应在开发阶段被检测和修复。在大多数情况下,这些错误是软件错误。对于只应在开发期间发生的检测错误,可以针对生产代码将其关闭(通过静态配置,即预处理器开关)。
  • 生产错误(Production errors):这些错误是无法避免的硬件错误和软件异常,预计会出现在生产(即系列)代码中。这种错误通常被称为运行时错误(run-time error)。

6.12.1. 开发错误

错误类型 相关错误码 错误值
未进行模块初始化就使用API服务 UDPNM_E_UNINIT 0x01
使用错误的通道句柄调用API服务 UDPNM_E_INVALID_CHANNEL 0x02
使用错误的PDU ID调用API服务。 UDPNM_E_INVALID_PDUID 0x03
UdpNm初始化失败,例如所选的配置集不存在 UDPNM_E_INIT_FAILED 0x04
空指针作为参数传入 UDPNM_E_PARAM_POINTER 0x12

开发错误不应由API函数返回;如果发生开发错误,相应的API函数将在适用的情况下返回E_NOT_OK。

6.12.2. 运行时错误

错误类型 相关错误码 错误值
NM超时计时器在就绪睡眠状态(Ready Sleep State)之外超时(在重复消息状态或正常操作状态中) UDPNM_E_NETWORK_TIMEOUT 0x11
在由ComM PNC网关主动协调的通道上接收到设置了PN关闭请求位的NM消息。 UDPNM_E_INVALID_PN_SYNC_SHUTDOWN_REQUEST 0x20

当NM超时计时器在重复消息状态中超时,UdpNm模块应向默认错误跟踪器(Default Error Tracer)报告运行时错误UDPNM_E_NETWORK_TIMEOUT。

当NM超时计时器在正常操作状态中超时,UdpNm模块应向默认错误跟踪器报告运行时错误UDPNM_E_NETWORK_TIMEOUT。

6.12.3. 瞬态故障

没有瞬态故障。

6.12.4. 生产错误

没有生产错误。

6.12.5. 扩展生产错误

没有扩展生产错误。

6.13. 主函数的调度

详情请参阅SWS_BSWGeneral中的章节8.5「调度函数」(Scheduled functions)。

6.14. 应用注释

6.14.1. 唤醒通知

唤醒通知在ECU状态管理器规范[10, Specification of ECU State Manager]中有详细定义。

6.14.2. 耦合网络的协调

需通过使用配置参数UdpNmBusSynchronizationEnabled开关(配置参数)进行静态配置,来支持按需的总线同步。

注意:

由于UdpNm的关闭可以随时进行,所以不支持调用API Nm_SynchronizationPoint。

6.15. 版本检查

详情请参阅SWS_BSWGeneral中的章节5.1.8「版本检查」(Version Check)。

6.16. 参数检查

如果通过UDPNM_DEV_ERROR_DETECT(配置参数)启用了开发错误检测,则每次UDP NM API服务调用都应对所有输入参数执行有效性检查。

参数类型检查应在编译时执行;如果类型不匹配,应停止编译过程,并在编译器支持的范围内返回相应的编译警告或错误。

参数值检查(针对常量值的参数)应在配置时执行;如果该值无效,应停止配置过程并报告相应的配置错误。

参数值检查(针对变量值的参数)应在执行时执行;如果该值无效,应拒绝执行服务并报告相应的开发错误。

6.17. 安全事件

该模块不报告安全事件。

7. API规范

UdpNm模块应拒绝执行使用无效参数调用的服务,并通知DET。

AUTOSAR UdpNm API由若干服务组成,这些服务是UDP特定的,可以在需要时随时调用;除UdpNm_Init外,每个服务仅针对一个NM通道。

生产错误不应由API函数返回;如果发生生产错误,相应的API函数将在适用的情况下返回E_NOT_OK。

当使用无效的网络句柄调用NM API服务时,被调用的函数不应执行,而是向默认错误跟踪器(Default Error Tracer)报告UDPNM_E_INVALID_CHANNEL(如果启用了开发错误检测),否则向调用函数返回E_NOT_OK。

注意:

网络句柄无效是指它与允许的配置值不同。

当向UDP Nm服务传递了空指针时,被调用的函数不应执行,并在适用的情况下向调用函数返回E_NOT_OK。如果启用了开发错误检测(UdpNmDevErrorDetect设置为TRUE),则应向DET报告相应的错误UDPNM_E_PARAM_POINTER。

当使用无效的Pdu ID调用UdpNm回调通知时,被调用的函数不应执行,并在可能的情况下返回E_NOT_OK。如果启用了开发错误检测,则UdpNm还应向默认错误跟踪器报告UDPNM_E_INVALID_PDUID。

如果启用了UdpNmComUserDataSupport且UdpNm用户数据长度与被引用I-PDU的长度不匹配,则应在生成时报告错误。

注意:空指针检查在BSW General [3, General Specification of Basic Software Modules]中规定。

7.1. 导入的类型

导入以下 Std_Types.h 的类型:

boolean、uint8、uint16、uint32

模块 头文件 导入的类型
ComStack_Types ComStack_Types.h NetworkHandleType
ComStack_Types ComStack_Types.h PduIdType
ComStack_Types ComStack_Types.h PduInfoType
ComStack_Types ComStack_Types.h PduLengthType
Nm NmStack_types.h Nm_ModeType
Nm NmStack_types.h Nm_StateType
Std Std_Types.h Std_ReturnType
Std Std_Types.h Std_VersionInfoType

7.2. 类型定义

7.2.1. UdpNm_ConfigType

该类型应包含容器 UdpNm_GlobalConfig 及其子容器的参数。结构类型(Structure),元素为实现特定(implementation specific)。可通过UdpNm.h获得。

7.2.2. UdpNm_PduPositionType

枚举类型(Enumeration),用于定义控制位向量在NM数据包(NM PACKET)中的位置。取值范围:UDPNM_PDU_BYTE_0(0x00,使用字节0);UDPNM_PDU_BYTE_1(0x01,使用字节1);UDPNM_PDU_OFF(0xFF,不使用节点标识)。可通过UdpNm.h获得。

7.3. 函数定义

7.3.1. UdpNm_Init

说明: 初始化完整的 UdpNm 模块,即:配置时激活的所有通道都被初始化。并通过TCP/IP堆栈设置UDP套接字。注意事项(Caveats):该函数必须在TCP/IP堆栈初始化之后调用。配置(Configuration):必需(Mandatory)。可通过UdpNm.h获得。本服务为同步调用,不可重入。参数 UdpNmConfigPtr(in):指向所选配置结构的指针。该服务无返回值。

void UdpNm_Init( const UdpNm_ConfigType* UdpNmConfigPtr )

如果必须向DET指示错误,则应使用值0x00作为实例ID(instance id)。

论据:值0x00不是错误值,而是实例ID。

7.3.2. UdpNm_PassiveStartUp

说明: AUTOSAR UdpNm的被动启动。它触发从总线睡眠模式(Bus-Sleep Mode)或准备总线睡眠模式(Prepare Bus Sleep Mode)到重复消息状态(Repeat Message State)的网络模式(Network Mode)的转换。注意事项(Caveats):UdpNm已被正确初始化。可通过UdpNm.h获得。本服务为异步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:网络管理的被动启动已失败。

Std_ReturnType UdpNm_PassiveStartUp( NetworkHandleType nmChannelHandle )

如果在网络模式(Network Mode)中调用UdpNm_PassiveStartUp,则UdpNm模块不应执行该服务,并应返回E_NOT_OK。

7.3.3. UdpNm_NetworkRequest

说明: 请求网络,因为ECU需要在总线上通信。网络状态应更改为「已请求」(requested)。注意事项(Caveats):UdpNm已被正确初始化。配置(Configuration):可选(仅在 UdpNmPassiveModeEnabled == false 时可用)。可通过UdpNm.h获得。本服务为异步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:网络的请求已失败。

Std_ReturnType UdpNm_NetworkRequest( NetworkHandleType nmChannelHandle )

7.3.4. UdpNm_NetworkRelease

说明: 释放网络,因为ECU不必在总线上通信。网络状态应更改为「已释放」(released)。注意事项(Caveats):UdpNm已被正确初始化。可通过UdpNm.h获得。本服务为异步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:网络的释放已失败。

Std_ReturnType UdpNm_NetworkRelease( NetworkHandleType nmChannelHandle )

7.3.5. UdpNm_DisableCommunication

说明: 由于 ISO14229 通信控制(0x28)服务而禁用 NM PDU 传输能力。注意事项(Caveats):UdpNm已被正确初始化。可通过UdpNm.h获得。本服务为异步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:NM PDU传输能力的禁用已失败。

Std_ReturnType UdpNm_DisableCommunication( NetworkHandleType nmChannelHandle )

如果模块在被动模式(UdpNmPassiveModeEnabled)下运行,则服务 UdpNm_DisableCommunication 应没有任何效果,并直接返回 E_NOT_OK。

7.3.6. UdpNm_EnableCommunication

说明: 由于 ISO14229 通信控制(0x28)服务而启用 NM PDU 传输能力。注意事项(Caveats):UdpNm已被正确初始化。可通过UdpNm.h获得。本服务为异步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:NM PDU传输能力的启用已失败。

Std_ReturnType UdpNm_EnableCommunication( NetworkHandleType nmChannelHandle )

可选服务 UdpNm_EnableCommunication 应在 NM PDU 传输能力被禁用时启用 NM PDU 传输能力。

可选服务 UdpNm_EnableCommunication 应在调用该服务时 NM PDU 传输能力已启用的情况下返回 E_NOT_OK。

如果当前模式不是网络模式(Network Mode),则服务 UdpNm_EnableCommunication 应返回 E_NOT_OK。

如果模块在被动模式(UdpNmPassiveModeEnabled 为 TRUE)下运行,则服务 UdpNm_EnableCommunication 应没有任何效果,并直接返回 E_NOT_OK。

7.3.7. UdpNm_SetUserData

说明: 在此函数无错误返回后,为总线上传输的所有 NM 消息(NM messages)设置用户数据。注意事项(Caveats):UdpNm已被正确初始化。配置(Configuration):可选(仅在 UdpNmUserDataEnabled==true 且 UdpNmPassiveModeEnabled==false 时可用)。可通过UdpNm.h获得。本服务为同步调用,不可重入。参数 nmChannelHandle(in):NM通道的标识;参数 nmUserDataPtr(in):指向的地址,下一条传输的NM消息的用户数据将从该处复制。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:用户数据的设置已失败。

Std_ReturnType UdpNm_SetUserData(
  NetworkHandleType nmChannelHandle, const uint8* nmUserDataPtr )

7.3.8. UdpNm_GetUserData

说明: 从最近收到的 NM 消息(NM messages)中获取用户数据。注意事项(Caveats):UdpNm已被正确初始化。配置(Configuration):可选(仅在 UdpNmUserDataEnabled == true 时可用)。可通过UdpNm.h获得。本服务为同步调用,不可重入。参数 nmChannelHandle(in):NM通道的标识;参数 nmUserDataPtr(out):指向的地址,最近接收的NM消息中的用户数据将复制到该处。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:用户数据的获取已失败。

Std_ReturnType UdpNm_GetUserData(
  NetworkHandleType nmChannelHandle, uint8* nmUserDataPtr )

7.3.9. UdpNm_GetNodeIdentifier

说明: 从最近收到的 NM PDU 中获取节点标识符。可通过UdpNm.h获得。本服务为同步调用,可重入。参数 nmChannelHandle(in):NM通道的标识;参数 nmNodeIdPtr(out):指向的地址,最近接收的NM PDU中的源节点标识符将复制到该处。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:从最近接收的NM PDU中获取节点标识符已失败,或未针对此网络句柄配置。

Std_ReturnType UdpNm_GetNodeIdentifier(
  NetworkHandleType nmChannelHandle, uint8* nmNodeIdPtr )

如果 UdpNmNodeIdEnabled 设置为 TRUE,则服务调用 UdpNm_GetNodeIdentifier 应提供最近接收的网络管理 PDU 中的节点标识符。

7.3.10. UdpNm_GetLocalNodeIdentifier

说明: 获取为本地节点(local node)配置的节点标识符。可通过UdpNm.h获得。本服务为同步调用,可重入。参数 nmChannelHandle(in):NM通道的标识;参数 nmNodeIdPtr(out):指向的地址,本地节点的节点标识符将复制到该处。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:获取本地节点的节点标识符已失败,或未针对此网络句柄配置。

Std_ReturnType UdpNm_GetLocalNodeIdentifier(
  NetworkHandleType nmChannelHandle, uint8* nmNodeIdPtr )

如果 UdpNmNodeIdEnabled 设置为 TRUE,则服务调用 UdpNm_GetLocalNodeIdentifier 应提供为本地主机节点配置的节点标识符。

7.3.11. UdpNm_RepeatMessageRequest

说明: 在此函数无错误返回后,为总线上传输的所有NM消息设置重复消息请求位(Repeat Message Request Bit)。可通过UdpNm.h获得。本服务为异步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:重复消息请求位的设置已失败,或未针对此网络句柄配置。

Std_ReturnType UdpNm_RepeatMessageRequest(
  NetworkHandleType nmChannelHandle )

如果在重复消息状态(Repeat Message State)、准备总线睡眠模式(Prepare Bus-Sleep Mode)或总线睡眠模式(Bus-Sleep Mode)中调用服务 UdpNm_RepeatMessageRequest,则 UdpNm 模块不应执行该服务并返回 E_NOT_OK。

7.3.12. UdpNm_GetPduData

说明: 从最近收到的 NM 消息中获取整个 PDU 数据。注意事项(Caveats):UdpNm已被正确初始化。可通过UdpNm.h获得。本服务为同步调用,可重入。参数 nmChannelHandle(in):NM通道的标识;参数 nmPduDataPtr(out):指向的地址,NM PDU 将复制到该处。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:NM PDU 数据的获取已失败,或未针对此网络句柄配置。

Std_ReturnType UdpNm_GetPduData(
  NetworkHandleType nmChannelHandle, uint8* nmPduDataPtr )

如果 UdpNmNodeDetectionEnabled 或 UdpNmUserDataEnabled 或 UdpNmNodeIdEnabled 设置为 TRUE,则服务调用 UdpNm_GetPduData 应提供最近接收的网络管理 PDU 的完整有效载荷(源节点ID、控制位向量和用户数据)。

7.3.13. UdpNm_GetState

说明: 返回网络管理的状态和模式。注意事项(Caveats):UdpNm已被正确初始化。可通过UdpNm.h获得。本服务为同步调用,可重入。参数 nmChannelHandle(in):NM通道的标识;参数 nmStatePtr(out):指向的地址,网络管理的状态将复制到该处;参数 nmModePtr(out):指向的地址,网络管理的模式将复制到该处。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:NM 状态的获取已失败。

Std_ReturnType UdpNm_GetState(
  NetworkHandleType nmChannelHandle,
  Nm_StateType* nmStatePtr,
  Nm_ModeType* nmModePtr )

7.3.14. UdpNm_GetVersionInfo

说明: 该服务返回该模块的版本信息。可通过UdpNm.h获得。本服务为同步调用,可重入。参数 versioninfo(out):指向存储该模块版本信息的位置的指针。该服务无返回值。

void UdpNm_GetVersionInfo( Std_VersionInfoType* versioninfo )

如果 UdpNm 模块启用了 DET,则当参数 versioninfo 为 NULL 指针时,函数 UdpNm_GetVersionInfo 应引发 UDPNM_E_PARAM_POINTER 并不做任何操作直接返回。

7.3.15. UdpNm_RequestBusSynchronization

说明: 请求总线同步。注意事项(Caveats):UdpNm已被正确初始化。配置(Configuration):可选(仅在 UdpNmBusSynchronizationEnabled==true 且 UdpNmPassiveModeEnabled==false 时可用)。可通过UdpNm.h获得。本服务为异步调用,不可重入。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:总线同步的请求已失败。

Std_ReturnType UdpNm_RequestBusSynchronization( NetworkHandleType nmChannelHandle )

如果 UdpNmPassiveModeEnabled(配置参数)为 FALSE,则服务调用 UdpNm_RequestBusSynchronization 应触发单个网络管理 PDU 的传输。

论据:该服务通常用于支持 NM 网关扩展。

如果在总线睡眠模式(BusSleep Mode)和准备总线睡眠模式(Prepare Bus-Sleep Mode)中调用 UdpNm_RequestBusSynchronization,则 UdpNm 模块不应执行该服务,并应返回 E_NOT_OK。

7.3.16. UdpNm_CheckRemoteSleepIndication

说明: 检查远程睡眠指示是否发生。注意事项(Caveats):UdpNm已被正确初始化。可通过UdpNm.h获得。本服务为同步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识;参数 NmRemoteSleepIndPtr(out):指向的地址,远程睡眠指示的检查结果将复制到该处。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:远程睡眠指示位的检查已失败。

Std_ReturnType UdpNm_CheckRemoteSleepIndication( NetworkHandleType nmChannelHandle, boolean* NmRemoteSleepIndPtr )

服务调用 UdpNm_CheckRemoteSleepIndication 应提供关于远程睡眠指示(Remote Sleep Indication)当前状态的信息(即是否已检测到)。

7.3.17. UdpNm_SetSleepReadyBit

说明: 设置控制位向量(CBV)中的 NM 协调器睡眠就绪位。可通过UdpNm.h获得。本服务为同步调用,不可重入。参数 nmChannelHandle(in):NM通道的标识;参数 nmSleepReadyBit(in):写入 CBV 中 ReadySleep 位的值。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:远程睡眠指示位的写入已失败。

Std_ReturnType UdpNm_SetSleepReadyBit(
  NetworkHandleType nmChannelHandle, boolean nmSleepReadyBit )

7.3.18. UdpNm_Transmit

说明: 请求传输 PDU。可通过UdpNm.h获得。本服务为同步调用,对于不同的 PduId 可重入,对于相同的 PduId 不可重入。参数 TxPduId(in):要传输的 PDU 的标识符;参数 PduInfoPtr(in):PDU 数据的长度和指针以及指向 MetaData 的指针。返回值为Std_ReturnType:E_OK:传输请求已被接受;E_NOT_OK:传输请求未被接受。

Std_ReturnType UdpNm_Transmit(
  PduIdType TxPduId, const PduInfoType* PduInfoPtr )

如果 UdpNmComUserDataSupport 或 UdpNmPnEnabled 被启用,则 UdpNm 实现应提供API UdpNm_Transmit。

7.3.19. UdpNm_PnLearningRequest

说明: 为总线上接下来传输的NM消息设置重复消息请求位和部分网络学习位。这将强制总线上的所有节点进入 PNC 学习阶段(PNC Learning Phase)。这是可选的动态 PNC 到通道映射(Dynamic PNC-to-channel-mapping)功能所需要的。可通过UdpNm.h获得。本服务为异步调用,可重入(但对于同一NM通道不可重入)。参数 nmChannelHandle(in):NM通道的标识。返回值为Std_ReturnType:E_OK:无错误;E_NOT_OK:PN学习请求已失败,或未针对此网络句柄配置。

Std_ReturnType UdpNm_PnLearningRequest( NetworkHandleType nmChannelHandle )

如果在「准备总线睡眠模式」(Prepare Bus-Sleep Mode)或「总线睡眠模式」(Bus Sleep Mode)中调用函数 UdpNm_PnLearningRequest,则不应执行任何功能,并应返回 E_NOT_OK。

只有当 UdpNmDynamicPncToChannelMappingSupport 设置为 TRUE 时,函数 UdpNm_PnLearningRequest 才可用。

7.3.20. UdpNm_ActivateTxPnShutdownMsg

说明: NM指示激活给定NM通道上PN关闭消息的传输。这将导致传输 PNSR 位设置为1的 NM-PDU(PN关闭消息)。可通过UdpNm.h获得。本服务为同步调用,对于不同的nmChannelHandle可重入,对于相同的nmChannelHandle不可重入。参数 nmChannelHandle(in):启动 PNC 关闭过程的 NM 通道的标识符。返回值为Std_ReturnType:E_OK:请求已被接受;E_NOT_OK:请求未被接受。

Std_ReturnType UdpNm_ActivateTxPnShutdownMsg( NetworkHandleType nmChannelHandle )

如果 UdpNmSynchronizedPncShutdownEnabled 设置为 TRUE,则 UdpNm 实现应提供API UdpNm_ActivateTxPnShutdownMsg。

如果 UdpNmSynchronizedPncShutdownEnabled 设置为 TRUE,且使用有效的 NM 通道(nmChannelHandle)调用 UdpNm_ActivateTxPnShutdownMsg,则 UdpNm 模块应将 PN 关闭消息传输视为在给定 NM 通道上处于活动状态,将 CBV 中的 PNSR 位设置为1,并以 E_OK 返回。

7.3.21. UdpNm_DeactivateTxPnShutdownMsg

说明: NM指示停用给定NM通道上PN关闭消息的传输。这将导致传输 PNSR 位设置为0的普通 NM-PDU。可通过UdpNm.h获得。本服务为同步调用,对于不同的nmChannelHandle可重入,对于相同的nmChannelHandle不可重入。参数 nmChannelHandle(in):停止 PNC 关闭过程的 NM 通道的标识符。返回值为Std_ReturnType:E_OK:请求已被接受;E_NOT_OK:请求未被接受。

Std_ReturnType UdpNm_DeactivateTxPnShutdownMsg( NetworkHandleType nmChannelHandle )

如果 UdpNmSynchronizedPncShutdownEnabled 设置为 TRUE,则 UdpNm 实现应提供API UdpNm_DeactivateTxPnShutdownMsg。

如果 UdpNmSynchronizedPncShutdownEnabled 设置为 TRUE,且使用有效的 NM 通道(nmChannelHandle)调用 UdpNm_DeactivateTxPnShutdownMsg,则 UdpNm 模块应将 PN 关闭消息传输视为在给定 NM 通道上处于非活动状态,将 CBV 中的 PNSR 位设置为0,并以 E_OK 返回。

7.3.22. UdpNm_RepeatMessageIndication

说明: 指示已接收到设置了重复消息请求位的NM消息的服务。这是节点检测和 PNC 动态学习所需要的。本服务为异步调用,可重入。参数 nmNetworkHandle(in):NM通道的标识。该服务无返回值、无输出参数。

void UdpNm_RepeatMessageIndication( NetworkHandleType nmNetworkHandle )

7.4. 回调通知

7.4.1. UdpNm_SoAdIfTxConfirmation

说明: 下层通信接口模块确认PDU的传输,或者PDU的传输失败。可通过UdpNm.h获得。本服务为同步调用,对于不同的 PduId 可重入,对于相同的 PduId 不可重入。参数 TxPduId(in):已传输的 PDU 的ID;参数 result(in):E_OK:PDU已传输;E_NOT_OK:PDU传输失败。该服务无返回值。

void UdpNm_SoAdIfTxConfirmation( PduIdType TxPduId, Std_ReturnType result )

注意:回调函数 UdpNm_SoAdIfTxConfirmation 由 SoAd 调用,由 UdpNm 模块实现。

注意:回调函数 UdpNm_SoAdIfTxConfirmation 根据上下文要么在中断级(中断模式)被调用,要么在任务级(轮询模式)被调用。

通过API参数 TxPduId 传递给 UdpNm 的值应引用 NM 通道句柄,即不需要从 PduId 到 NM 通道句柄的映射。

如果启用了 UdpNmComUserDataSupport,则 UdpNm 应在由 SoAd 调用的消息传输确认函数 UdpNm_SoAdIfTxConfirmation 内,以 SoAd 传递的结果调用 PduR_UdpNmTxConfirmation。

7.4.2. UdpNm_SoAdIfRxIndication

说明: 指示从较低层通信接口模块接收到的 PDU。可通过UdpNm.h获得。本服务为同步调用,对于不同的 PduId 可重入,对于相同的 PduId 不可重入。参数 RxPduId(in):接收到的 PDU 的ID;参数 PduInfoPtr(in):包含接收到的 PDU 的长度(SduLength)、指向包含该 PDU 的缓冲区的指针(SduDataPtr)以及与该 PDU 相关的 MetaData。该服务无返回值。

void UdpNm_SoAdIfRxIndication(
  PduIdType RxPduId, const PduInfoType* PduInfoPtr )

回调函数 UdpNm_SoAdIfRxIndication 由 SoAd 调用,由 UdpNm 模块实现。它在 SoAd 的接收指示事件发生时被调用。

通过API参数 udpNmRxPduId 传递给 UdpNm 的值应引用 UdpNm 通道句柄,即不需要从 PduId 到 UdpNm 通道句柄的映射。

7.4.3. UdpNm_SoAdIfTriggerTransmit

说明: 在此API中,上层模块将检查可用数据是否适合PduInfoPtr->SduLength报告的缓冲区大小。 如果合适,它将其数据复制到PduInfoPtr->SduDataPtr提供的缓冲区中,并更新实际复制数据的长度到PduInfoPtr->SduLength中。 如果不是,则返回E_NOT_OK而不更改PduInfoPtr。可通过UdpNm.h获得。本服务为同步调用,对于不同的 PduId 可重入,对于相同的 PduId 不可重入。参数 TxPduId(in):请求传输的 SDU 的ID;参数 PduInfoPtr(inout):包含指向缓冲区的指针(SduDataPtr,SDU 数据应复制到该缓冲区)以及 SduLength 中的可用缓冲区大小。返回时,该服务将在 SduLength 中指示复制的 SDU 数据的长度。返回值为Std_ReturnType:E_OK:SDU已被复制,SduLength指示已复制的字节数;E_NOT_OK:未复制任何 SDU 数据,不得使用 PduInfoPtr,因为它可能包含 NULL 指针或指向无效数据。

Std_ReturnType UdpNm_SoAdIfTriggerTransmit(
  PduIdType TxPduId, PduInfoType* PduInfoPtr )

注意:在调用 UdpNm_TriggerTransmit 时不会更新 PNC 位向量,而是在每个 NM 消息传输请求之前更新。这确保了独立于 SoAdTxPduTriggerTransmit 设置(TRUE 或 FALSE)的统一处理。

如果调用了 UdpNm_SoAdIfTriggerTransmit 且 UdpNmComUserDataSupport 被启用,则 UdpNm 应通过调用 PduR_UdpNmTriggerTransmit 从被引用的 NM I-PDU 中收集 NM 用户数据,并将数据复制到 NM-PDU 的用户数据范围。

函数 UdpNm_SoAdIfTriggerTransmit 应复制由 TxPduId 请求的相应 NM PDU 的 NM PDU 数据。

注意:函数 UdpNm_SoAdIfTriggerTransmit 可能会由 SoAd 在中断上下文中调用。

7.5. 调度函数

7.5.1. UdpNm_MainFunction_<Instance Id>

说明: 处理本文档中所描述算法的 UdpNm 主函数。例如:UdpNm_MainFunction_0() 表示 UDP 通道0的 UdpNm 实例;UdpNm_MainFunction_1() 表示 UDP 通道1的 UdpNm 实例。可通过SchM_UdpNm.h获得。该服务无返回值。

void UdpNm_MainFunction<Instance_Id>( void )

7.6. 期望接口

在本章中列出了从其他模块所需的所有接口。

7.6.1. 必需接口

本节定义了实现该模块核心功能所需的所有接口。

API函数 头文件 说明
Det_ReportRuntimeError Det.h 报告运行时错误的服务。如果已配置回调(callout),则应调用该回调。
Nm_BusSleepMode Nm.h 通知网络管理已进入总线睡眠模式(Bus-Sleep Mode)。
Nm_NetworkMode Nm.h 通知网络管理已进入网络模式(Network Mode)。
Nm_NetworkStartIndication Nm.h 通知在总线睡眠模式(Bus-Sleep Mode)中收到了NM消息,这表明网络中的某些节点已经进入了网络模式(Network Mode)。
Nm_PrepareBusSleepMode Nm.h 通知网络管理已进入准备总线睡眠模式(Prepare Bus-Sleep Mode)。
SoAd_IfTransmit SoAd.h 请求传输PDU。

7.6.2. 可选接口

本节定义了实现该模块可选功能所需的所有接口。

API函数 头文件 说明
Det_ReportError Det.h 报告开发错误的服务。
Nm_CarWakeUpIndication Nm.h 该函数由<Bus>Nm调用,以指示接收到 CWU 请求。
Nm_CoordReadyToSleepCancellation Nm.h 当控制位向量中的 NM Coordinator Sleep Ready 位被重新设置为0时,取消指示。
Nm_CoordReadyToSleepIndication Nm.h 当控制位向量中的 NM Coordinator Sleep Ready 位被设置时,设置指示。
Nm_ForwardSynchronizedPncShutdown Nm.h 通知网络管理已在特定NM通道上接收到PN关闭消息。这用于实现跨整个PN拓扑的近乎同步的PNC关闭。
Nm_PduRxIndication Nm.h 通知已接收到NM消息。
Nm_PncBitVectorRxIndication Nm.h 指示总线特定的网络管理已在特定NM通道上接收到包含PNC位向量的NM消息。这用于聚合外部PNC请求。该函数评估给定的PNC位向量中是否存在相关的PNC请求(PNC位设置为「1」)。如果存在相关的PNC请求(PNC位通过PNC位向量过滤器),则 RelevantPncRequestDetectedPtr 引用一个设置为 TRUE 的布尔值;否则引用一个设置为 FALSE 的布尔值。被调用的<Bus>Nm模块会评估 RelevantPncRequestDetectedPtr,以限定对接收到的 NM-PDU 的进一步处理。
Nm_PncBitVectorTxConfirmation Nm.h 由<Bus>Nm调用的函数,用于确认给定NM通道上给定PNC位向量的传输状态。
Nm_PncBitVectorTxIndication Nm.h 由<Bus>Nm调用的函数,用于请求聚合的内部PNC请求以便在Nm消息中传输。
Nm_RemoteSleepCancellation Nm.h 通知网络管理已检测到并非网络上所有其他节点都仍然准备好进入总线睡眠模式(Bus-Sleep Mode)。
Nm_RemoteSleepIndication Nm.h 通知网络管理已检测到网络上的所有其他节点都准备好进入总线睡眠模式(Bus-Sleep Mode)。
Nm_RepeatMessageIndication Nm.h 指示已接收到设置了重复消息请求位的NM消息的服务。这是节点检测和动态PNC到通道映射功能所需要的。
Nm_StateChangeNotification Nm.h 通知下层<Bus>Nm的状态已发生变化。
Nm_TxTimeoutException Nm.h 指示发送NM消息的尝试失败的服务。
PduR_UdpNmRxIndication PduR_UdpNm.h 指示从较低层通信接口模块接收到的PDU。
PduR_UdpNmTriggerTransmit PduR_UdpNm.h 在此API中,上层模块将检查可用数据是否适合PduInfoPtr->SduLength报告的缓冲区大小。如果合适,它将其数据复制到PduInfoPtr->SduDataPtr提供的缓冲区中,并在PduInfoPtr->SduLength中更新实际复制数据的长度。如果不是,则返回E_NOT_OK而不更改PduInfoPtr。
PduR_UdpNmTxConfirmation PduR_UdpNm.h 下层通信接口模块确认PDU的传输,或者PDU的传输失败。

7.6.3. 可配置接口

不适用(Not applicable)。

7.7. 服务接口

不适用(Not applicable)。

7.8. UML状态图

下图显示了有关API规范的UML状态图。模式变更相关的转换以绿色表示,错误处理相关的转换以红色表示,可选的节点检测相关的转换以蓝色表示。

Figure8_1.png

8. 时序图和转换表

8.1. UdpNm传输

Figure9-1.png

8.2. UdpNm接收

调用方向 动作/判定 说明
SoAd->UdpNm UdpNm_SoAdIfRxIndication()

Figure9-2.png

9. 配置规范

总体而言,本章定义配置参数及其到容器的聚类组织。为了支持本规范,第9.1节描述基础知识,并规定了应用于参数规范的模板(表)。我们有意将第9.1节保留在规范文档中以确保全面性。

第9.2节规定模块UdpNm的结构(容器)和参数。

第9.3节规定模块UdpNm的发布信息。

9.1. 阅读本章的方法

详情请参阅[3]中的章节10.1「配置规范简介」(Introduction to configuration specification)。

9.2. 容器与配置参数

本章定义的配置参数用于为AUTOSAR工具链创建数据模型。在代码中的实现是实现特定的。

配置参数分为:用于启用功能的参数、影响UdpNm所有实例的参数以及影响UdpNm各自实例的参数。

所有配置项都应位于模块内核之外。

容器UdpNm_ChannelConfig规定的配置参数应位于UdpNm_ConfigType类型的数据结构中。

容器UdpNm_ChannelConfig中列出的运行时可配置参数应针对每个NM集群单独进行配置。

9.2.1. UdpNm

SWS 条目 [ECUC_UdpNm_00088]
模块名称 UdpNm
描述 UdpNm模块的配置。
Post-Build 变体支持 true
支持的配置变体 VARIANT-LINK-TIME, VARIANT-PRE-COMPILE
包含的容器 容器名称 多重性 作用域/依赖
包含的容器 UdpNmGlobalConfig 1 该容器包含 UDP NM 的所有全局配置参数。这些参数以及子容器的参数应(在可能的情况下)映射到传递给 UdpNm_Init 函数的C数据类型 UdpNm_ConfigType。

9.2.2. UdpNmGlobalConfig

SWS 条目 [ECUC_UdpNm_00001]
容器名称 UdpNmGlobalConfig
父容器 UdpNm
描述 该容器包含 UDP NM 的所有全局配置参数。这些参数以及子容器的参数应(在可能的情况下)映射到传递给 UdpNm_Init 函数的C数据类型 UdpNm_ConfigType。
配置参数 见下方参数表
SWS 条目 [ECUC_UdpNm_00006]
参数名称 UdpNmBusSynchronizationEnabled
父容器 UdpNmGlobalConfig
描述 用于启用总线同步支持的预处理器开关。该功能仅网关节点需要。如果 UdpNmPassiveModeEnabled==true,则不得定义该参数。该参数应从 NmBusSynchronizationEnabled 派生。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00013]
参数名称 UdpNmComControlEnabled
父容器 UdpNmGlobalConfig
描述 用于启用通信控制(Communication Control)支持的预处理器开关。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local;dependency: calculationFormula = If (UdpNmPassiveModeEnabled == False) then Equal(NmComControlEnabled) else Equal(False)
SWS 条目 [ECUC_UdpNm_00055]
参数名称 UdpNmComUserDataSupport
父容器 UdpNmGlobalConfig
描述 启用/禁用用户数据支持。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local;dependency: 如果 UdpNmPassiveModeEnabled == True,或者NM PDU的所有字节都被NM系统字节和PNC位向量使用而没有为用户数据留下空间,则 UdpNmComUserDataSupport 应设置为 False。
SWS 条目 [ECUC_UdpNm_00059]
参数名称 UdpNmCoordinatorSyncSupport
父容器 UdpNmGlobalConfig
描述 启用/禁用协调器同步支持。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local;dependency: 如果 UdpNmPassiveModeEnabled 设置为 TRUE,则 UdpNmCoordinatorSyncSupport 必须设置为 FALSE。
SWS 条目 [ECUC_UdpNm_00002]
参数名称 UdpNmDevErrorDetect
父容器 UdpNmGlobalConfig
描述 开启或关闭开发错误检测与通知。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00094]
参数名称 UdpNmDynamicPncToChannelMappingSupport
父容器 UdpNmGlobalConfig
描述 用于启用动态PNC到通道映射处理的预编译开关。False:禁用动态PNC到通道映射;True:启用动态PNC到通道映射。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: ECU;dependency: 仅当至少一个 UdpNm 通道的 UdpNmPnEnabled == true 且 UdpNmPassiveModeEnabled == false 时,才允许 UdpNmDynamicPncToChannelMappingSupport == TRUE
SWS 条目 [ECUC_UdpNm_00009]
参数名称 UdpNmImmediateRestartEnabled
父容器 UdpNmGlobalConfig
描述 用于在准备总线睡眠模式中收到总线通信请求时立即传输NM数据包(NM PACKET)的预处理器开关。如果 UdpNmPassiveModeEnabled==true,则不得定义。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00014]
参数名称 UdpNmNumberOfChannels
父容器 UdpNmGlobalConfig
描述 一个ECU内允许的NM通道数量。
多重性 1
类型 EcucIntegerParamDef
取值范围 1 .. 255
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00010]
参数名称 UdpNmPassiveModeEnabled
父容器 UdpNmGlobalConfig
描述 用于启用被动模式(Passive Mode)支持的预处理器开关。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00011]
参数名称 UdpNmPduRxIndicationEnabled
父容器 UdpNmGlobalConfig
描述 用于启用PDU Rx指示的预处理器开关。该参数应从 NmPduRxIndicationEnabled 派生。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00005]
参数名称 UdpNmRemoteSleepIndEnabled
父容器 UdpNmGlobalConfig
描述 用于启用远程睡眠指示支持的预处理器开关。该功能仅网关节点需要。如果 UdpNmPassiveModeEnabled==true,则不得定义该参数。该参数应从 NmRemoteSleepIndEnabled 派生。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00012]
参数名称 UdpNmStateChangeIndEnabled
父容器 UdpNmGlobalConfig
描述 用于启用 UDP NM 状态变化通知的预处理器开关。该参数应从 NmStateChangeIndEnabled 派生。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00004]
参数名称 UdpNmUserDataEnabled
父容器 UdpNmGlobalConfig
描述 用于启用用户数据支持的预处理器开关。该参数应从 NmUserDataEnabled 派生。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local;dependency: 如果NM PDU的所有字节都被NM系统字节和PNC位向量使用而没有为用户数据留下空间,则 UdpNmUserDataEnabled 应设置为 FALSE。否则,该参数应按照以下公式设置:calculationFormula = Equal(NmUserDataEnabled)。
SWS 条目 [ECUC_UdpNm_00003]
参数名称 UdpNmVersionInfoApi
父容器 UdpNmGlobalConfig
描述 用于启用版本信息API支持的预处理器开关。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local

Figure10-1.png

包含的容器 容器名称 多重性 作用域/依赖
包含的容器 UdpNmChannelConfig 1..* 该容器包含 UdpNm 的通道特定配置参数。

9.2.3. UdpNmChannelConfig

SWS 条目 [ECUC_UdpNm_00017]
容器名称 UdpNmChannelConfig
父容器 UdpNmGlobalConfig
描述 该容器包含 UdpNm 的通道特定配置参数。
配置参数 见下方参数表
SWS 条目 [ECUC_UdpNm_00074]
参数名称 UdpNmActiveWakeupBitEnabled
父容器 UdpNmChannelConfig
描述 启用/禁用 UdpNm 模块中对主动唤醒位(Active Wakeup Bit)的处理。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmPassiveModeEnabled 为 False 时该参数有效。
SWS 条目 [ECUC_UdpNm_00089]
参数名称 UdpNmAllNmMessagesKeepAwake
父容器 UdpNmChannelConfig
描述 规定 UdpNm 是否丢弃无关的 NM PDU。false:只有 PNI 位 = true 且包含针对本ECU的PN请求的 NM PDU 才触发标准的Rx指示处理;true:每个 NM PDU 都触发标准的Rx指示处理。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 NmPnEiraCalcEnabled == true 或 NmPnEraCalcEnabled == true 时有效
SWS 条目 [ECUC_UdpNm_00087]
参数名称 UdpNmCarWakeUpBitPosition
父容器 UdpNmChannelConfig
描述 规定 CWU 在 NM PDU 中的位位置。
多重性 0..1
类型 EcucIntegerParamDef
取值范围 0 .. 7
默认值 -
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmCarWakeUpRxEnabled == TRUE 时可用
SWS 条目 [ECUC_UdpNm_00086]
参数名称 UdpNmCarWakeUpBytePosition
父容器 UdpNmChannelConfig
描述 规定 CWU 在 NM PDU 中的字节位置。
多重性 0..1
类型 EcucIntegerParamDef
取值范围 0 .. 7
默认值 -
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmCarWakeUpRxEnabled == TRUE 时可用;UdpNmCarWakeupBytePosition >= 启用的系统字节(CBV、NID)的数量
SWS 条目 [ECUC_UdpNm_00077]
参数名称 UdpNmCarWakeUpFilterEnabled
父容器 UdpNmChannelConfig
描述 如果支持 CWU 过滤,则只有源节点标识符为 UdpNmCarWakeUpFilterNodeId 的 NM PDU 内的 CWU 位才被视为 CWU 请求。FALSE:不支持 CWU 过滤;TRUE:支持 CWU 过滤。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmCarWakeUpRxEnabled == TRUE 时可用
SWS 条目 [ECUC_UdpNm_00078]
参数名称 UdpNmCarWakeUpFilterNodeId
父容器 UdpNmChannelConfig
描述 用于 CWU 过滤的源节点标识符。如果支持 CWU 过滤,则只有源节点标识符为 UdpNmCarWakeUpFilterNodeId 的 NM PDU 内的 CWU 位才被视为 CWU 请求。
多重性 0..1
类型 EcucIntegerParamDef
取值范围 0 .. 255
默认值 -
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmCarWakeUpFilterEnabled == TRUE 时可用
SWS 条目 [ECUC_UdpNm_00076]
参数名称 UdpNmCarWakeUpRxEnabled
父容器 UdpNmChannelConfig
描述 启用或禁用对接收到的 NM PDU 中整车唤醒(CarWakeUp)位求值的支持。FALSE:不支持 CarWakeUp;TRUE:支持 CarWakeUp。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: ECU
SWS 条目 [ECUC_UdpNm_00095]
参数名称 UdpNmDynamicPncToChannelMappingEnabled
父容器 UdpNmChannelConfig
描述 用于启用动态PNC到通道映射功能的通道特定参数。False:禁用动态PNC到通道映射;True:启用动态PNC到通道映射。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmDynamicPncToChannelMappingSupport 为 TRUE 时才应为 TRUE
SWS 条目 [ECUC_UdpNm_00079]
参数名称 UdpNmImmediateNmCycleTime
父容器 UdpNmChannelConfig
描述 定义立即 NM PDU 周期时间(以秒为单位),用于 UdpNmImmediateNmTransmissions 次 NM PDU 传输。
多重性 0..1
类型 EcucFloatParamDef
取值范围 [0.001 .. 65.535]
默认值 -
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmImmediateNmTransmissions 大于1时该参数有效。
SWS 条目 [ECUC_UdpNm_00075]
参数名称 UdpNmImmediateNmTransmissions
父容器 UdpNmChannelConfig
描述 定义应传输的立即 NM PDU 的数量。如果该值为零,则不传输立即 NM PDU。立即 NM PDU 的周期时间由 UdpNmImmediateNmCycleTime 定义。
多重性 1
类型 EcucIntegerParamDef
取值范围 0 .. 255
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 如果 UdpNmImmediateRestartEnabled = true,则 UdpNmImmediateNmTransmissions = 0;如果 UdpNmPnHandleMultipleNetworkRequests == True,则 UdpNmImmediateNmTransmissions 必须大于0。
SWS 条目 [ECUC_UdpNm_00032]
参数名称 UdpNmMainFunctionPeriod
父容器 UdpNmChannelConfig
描述 相应实例的 UdpNm_MainFunction_x 的调用周期,单位为[s]。
多重性 1
类型 EcucFloatParamDef
取值范围 ]0 .. INF[
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00029]
参数名称 UdpNmMsgCycleOffset
父容器 UdpNmChannelConfig
描述 周期传输模式中的时间偏移。它决定传输的启动延迟。参数值 < UdpNmMsgCycleTime。仅当 UdpNmPassiveModeEnabled 被禁用时该参数有效。
多重性 1
类型 EcucFloatParamDef
取值范围 [0 .. 65.535]
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00028]
参数名称 UdpNmMsgCycleTime
父容器 UdpNmChannelConfig
描述 NM消息的周期。它确定周期速率,并且是传输调度的基础。NmTimeoutTime = n * UdpNmMsgCycleTime。仅当 UdpNmPassiveModeEnabled 被禁用时该参数有效。
多重性 1
类型 EcucFloatParamDef
取值范围 [0.001 .. 65.535]
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: ECU
SWS 条目 [ECUC_UdpNm_00090]
参数名称 UdpNmNodeDetectionEnabled
父容器 UdpNmChannelConfig
描述 用于启用节点检测支持的预处理器开关。该参数应从 NmNodeDetectionEnabled 派生。仅当 UdpNmNodeIdEnabled == true 时才应启用该参数。calculationFormula: If(UdpNmPduCbvPosition != UDPNM_PDU_OFF) then Equal(NmNodeDetectionEnabled) else Equal(False)。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 如果 UdpNmPassiveModeEnabled 被启用则不可用
SWS 条目 [ECUC_UdpNm_00031]
参数名称 UdpNmNodeId
父容器 UdpNmChannelConfig
描述 本地节点的节点标识符。
多重性 0..1
类型 EcucIntegerParamDef
取值范围 0 .. 255
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmNodeIdEnabled == True 时该参数才相关。
SWS 条目 [ECUC_UdpNm_00091]
参数名称 UdpNmNodeIdEnabled
父容器 UdpNmChannelConfig
描述 用于启用源节点标识符的预处理器开关。该参数应从 NmNodeIdEnabled 派生。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00026]
参数名称 UdpNmPduCbvPosition
父容器 UdpNmChannelConfig
描述 定义控制位向量在NM数据包(NM PACKET)中的位置。该参数的值表示控制位向量在NM PACKET中的位置(UDPNM_PDU_BYTE_0 表示字节0,UDPNM_PDU_BYTE_1 表示字节1,UDPNM_PDU_OFF 表示控制位向量不是NM PACKET的一部分)。另请参见 UdpNmPduNidPosition。如果 (UdpNmPduCbvPosition != UDPNM_PDU_OFF 且 UdpNmPduNidPosition != UDPNM_PDU_OFF),则 UdpNmPduCbvPosition != UdpNmPduNidPosition;如果 (UdpNmPduCbvPosition != UDPNM_PDU_OFF 且 UdpNmPduNidPosition == UDPNM_PDU_OFF),则 UdpNmPduCbvPosition = UDPNM_PDU_BYTE0。
多重性 1
类型 EcucEnumerationParamDef
取值范围 UDPNM_PDU_BYTE_0;UDPNM_PDU_BYTE_1;UDPNM_PDU_OFF
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00025]
参数名称 UdpNmPduNidPosition
父容器 UdpNmChannelConfig
描述 定义源节点标识符在NM数据包(NM PACKET)中的位置。实现类型:UdpNm_PduPositionType。该参数的值表示源节点标识符在NM PACKET中的位置(UDPNM_PDU_BYTE_0 表示字节0,UDPNM_PDU_BYTE_1 表示字节1,UDPNM_PDU_OFF 表示源节点标识符不是NM PACKET的一部分)。另请参见 UdpNmPduCbvPosition。如果 (UdpNmPduNidPosition != UDPNM_PDU_OFF 且 UdpNmPduCbvPosition != UDPNM_PDU_OFF),则 UdpNmPduNidPosition != UdpNmPduCbvPosition;如果 (UdpNmPduNidPosition != UDPNM_PDU_OFF 且 UdpNmPduCbvPosition == UDPNM_PDU_OFF),则 UdpNmPduNidPosition = UDPNM_PDU_BYTE0。
多重性 1
类型 EcucEnumerationParamDef
取值范围 UDPNM_PDU_BYTE_0(使用字节0);UDPNM_PDU_BYTE_1(使用字节1);UDPNM_PDU_OFF(不使用节点标识)
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00061]
参数名称 UdpNmPnEnabled
父容器 UdpNmChannelConfig
描述 启用或禁用部分网络支持。false:不支持部分网络;true:支持部分网络。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00063]
参数名称 UdpNmPnHandleMultipleNetworkRequests
父容器 UdpNmChannelConfig
描述 false:UdpNm_NetworkRequest 在正常操作状态(NO)中被忽略;true:UdpNm_NetworkRequest 触发从正常操作状态(NO)到重复消息状态(RM)的转换。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmPnEnabled == true 时可用
SWS 条目 [ECUC_UdpNm_00023]
参数名称 UdpNmRemoteSleepIndTime
父容器 UdpNmChannelConfig
描述 远程睡眠指示的超时时间。它定义了识别所有其他节点已准备好睡眠所需的时间(以[s]为单位)。通常它应等于:n * UdpNmMsgCycleTime,其中 n 表示在检测到远程睡眠指示之前正常发送的NM数据包的数量。n 减1后的值决定了远程睡眠指示过程能够容忍的丢失NM数据包的数量。
多重性 1
类型 EcucFloatParamDef
取值范围 [0.001 .. 65.535]
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00022]
参数名称 UdpNmRepeatMessageTime
父容器 UdpNmChannelConfig
描述 重复消息状态的超时时间。它定义了NM应在重复消息状态中停留的时间(以秒为单位)。
多重性 1
类型 EcucFloatParamDef
取值范围 [0 .. 65.535]
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: UdpNmRepeatMessageTime = n * UdpNmMsgCycleTime;UdpNmRepeatMessageTime > UdpNmImmediateNmTransmissions * UdpNmImmediateNmCycleTime。通常它应等于 n * UdpNmMsgCycleTime,其中 n 表示在重复消息状态中正常发送的NM PDU的数量。n 减1后的值决定了节点检测过程能够容忍的丢失NM PDU的数量。值0表示未配置重复消息状态。这意味着重复消息状态是瞬态的,即进入后立即离开。
SWS 条目 [ECUC_UdpNm_00092]
参数名称 UdpNmRepeatMsgIndEnabled
父容器 UdpNmChannelConfig
描述 启用/禁用「已接收到重复消息请求位」的通知。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 如果 UdpNmPassiveModeEnabled == TRUE,或者 (UdpNmNodeDetectionEnabled == FALSE 且 UdpNmDynamicPncToChannelMappingEnabled == FALSE),则 UdpNmRepeatMsgIndEnabled = FALSE。如果 UdpNmDynamicPncToChannelMappingEnabled == TRUE,则 UdpNmRepeatMsgIndEnabled = TRUE。
SWS 条目 [ECUC_UdpNm_00085]
参数名称 UdpNmRetryFirstMessageRequest
父容器 UdpNmChannelConfig
描述 规定 UdpNm 中的首次消息请求是否重复发送,直到被 SoAd 接受。
多重性 0..1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 如果 UdpNmPassiveModeEnabled 为 TRUE,则 UdpNmRetryFirstMessageRequest = false
SWS 条目 [ECUC_UdpNm_00093]
参数名称 UdpNmStayInPbsEnabled
父容器 UdpNmChannelConfig
描述 如果禁用该参数,则准备总线睡眠模式(Prepare Bus-Sleep Mode)会在 UdpNmWaitBusSleepTime 之后离开。如果启用该参数,则只有在ECU断电或出现任何重启原因时才能离开准备总线睡眠模式。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00097]
参数名称 UdpNmSynchronizedPncShutdownEnabled
父容器 UdpNmChannelConfig
描述 规定 UdpNm 是否处理PN关闭消息以支持跨PN拓扑的同步PNC关闭。这仅用于充当顶级PNC协调器或中间PNC协调器角色的ECU。因此,PNC网关功能被启用,因此使用ERA计算。FALSE:禁用同步PNC关闭;TRUE:启用同步PNC关闭。
多重性 0..1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 仅当 UdpNmPnEnabled == TRUE 且 NmPnEraCalcEnabled == TRUE 时可用。
SWS 条目 [ECUC_UdpNm_00020]
参数名称 UdpNmTimeoutTime
父容器 UdpNmChannelConfig
描述 NM数据包的网络超时时间。它表示NM应在网络模式(Network Mode)中停留多长时间(以[s]为单位),之后才转换到准备总线睡眠模式(Prepare Bus-Sleep Mode)。对于集群中的所有节点它应相等;它应大于 UdpNmMsgCycleTime。通常,它应等于 x * UdpNmMsgCycleTime,其中 n 表示在启动到总线睡眠模式的转换之前,就绪睡眠状态中NM PACKET周期时间的数量。n 减1后的值决定了协调算法能够容忍的丢失NM数据包的数量。
多重性 1
类型 EcucFloatParamDef
取值范围 [0.002 .. 65.535]
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: ECU
SWS 条目 [ECUC_UdpNm_00021]
参数名称 UdpNmWaitBusSleepTime
父容器 UdpNmChannelConfig
描述 总线冷却阶段(bus calm down phase)的超时时间。它表示NM应在准备总线睡眠模式中停留多长时间(以[s]为单位),之后才转换到总线睡眠模式(Bus-Sleep Mode)。对于集群中的所有节点它应相等;它应足够长以使所有Tx缓冲区清空。
多重性 0..1
类型 EcucFloatParamDef
取值范围 [0.001 .. 65.535]
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local;dependency: 如果禁用了 UdpNmStayInPbsEnabled,则该参数
SWS 条目 [ECUC_UdpNm_00018]
参数名称 UdpNmComMNetworkHandleRef
父容器 UdpNmChannelConfig
描述 该引用指向由 ComMChannel 定义的唯一通道,并提供对 ComMChannelId 中唯一通道索引值的访问。
多重性 1
类型 对 ComMChannel 的符号名称引用(Symbolic name reference)
Post-Build 变体值 true
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: ECU
包含的容器 容器名称 多重性 作用域/依赖
包含的容器 UdpNmRxPdu 1..* 该容器描述 UdpNm 的Rx PDU。
包含的容器 UdpNmTxPdu 0..1 该容器描述 UdpNm 的Tx PDU。
包含的容器 UdpNmUserDataTxPdu 0..1 该容器描述 UdpNm 的用户数据Tx PDU。

9.2.4. UdpNmRxPdu

SWS 条目 [ECUC_UdpNm_00038]
容器名称 UdpNmRxPdu
父容器 UdpNmChannelConfig
描述 该容器描述 UdpNm 的Rx PDU。
配置参数 见下方参数表
SWS 条目 [ECUC_UdpNm_00043]
参数名称 UdpNmRxPduId
父容器 UdpNmChannelConfig
描述 下层 RxIndication 将使用的 RxPdu 的ID。
多重性 1
类型 EcucIntegerParamDef(为该参数生成符号名称)
取值范围 0 .. 4294967296
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local,withAuto = true
SWS 条目 [ECUC_UdpNm_00039]
参数名称 UdpNmRxPduRef
父容器 UdpNmChannelConfig
描述 对 AUTOSAR ECU 配置规范中描述的全局 PDU 结构中的 PDU 的引用。UdpNm 模块将使用该引用来导出 PDU Id。
多重性 1
类型 对 Pdu 的引用(Reference to Pdu)
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local

无包含的容器。

9.2.5. UdpNmTxPdu

SWS 条目 [ECUC_UdpNm_00036]
容器名称 UdpNmTxPdu
父容器 UdpNmChannelConfig
描述 该容器描述 UdpNm 的Tx PDU。
配置参数 见下方参数表
SWS 条目 [ECUC_UdpNm_00042]
参数名称 UdpNmTxConfirmationPduId
父容器 UdpNmChannelConfig
描述 下层 TxConfirmation 将使用的 TxPdu 的ID。
多重性 1
类型 EcucIntegerParamDef(为该参数生成符号名称)
取值范围 0 .. 4294967296
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local,withAuto = true
SWS 条目 [ECUC_UdpNm_00037]
参数名称 UdpNmTxPduRef
父容器 UdpNmChannelConfig
描述 对 AUTOSAR ECU 配置规范中描述的全局 PDU 结构中的 PDU 的引用。UdpNm 模块将使用该引用来导出 PDU Id。
多重性 1
类型 对 Pdu 的引用(Reference to Pdu)
Post-Build 变体值 true
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local

无包含的容器。

9.2.6. UdpNmUserDataTxPdu

SWS 条目 [ECUC_UdpNm_00056]
容器名称 UdpNmUserDataTxPdu
父容器 UdpNmChannelConfig
描述 用于启用 COM 用户数据 Tx 路径的预处理器开关。用例:通过 SWC 设置 NMUserData。
配置参数 见下方参数表
SWS 条目 [ECUC_UdpNm_00058]
参数名称 UdpNmTxUserDataPduId
父容器 UdpNmChannelConfig
描述 该参数定义NM用户数据 I-PDU 的句柄ID。
多重性 1
类型 EcucIntegerParamDef(为该参数生成符号名称)
取值范围 0 .. 65535
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:X(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_UdpNm_00057]
参数名称 UdpNmTxUserDataPduRef
父容器 UdpNmChannelConfig
描述 对全局PDU集合中NM用户数据 I-PDU 的引用。
多重性 1
类型 对 Pdu 的引用(Reference to Pdu)
Post-Build 变体值 false
值配置类 Pre-compile time:X(VARIANT-PRE-COMPILE);Link time:X(VARIANT-LINK-TIME);Post-build time:-
作用域/依赖 scope: local

无包含的容器。

9.3. 发布信息

详情请参阅[3]中的章节10.3「发布信息」(Published Information)。

B. AUTOSAR 可追溯项变更历史

请注意,本章中的列表还包括在后续版本中已从规范中移除的可追溯项。这些项不会在文档中显示为超链接。

B.1. 本文档根据 AUTOSAR R23-11 版本的可追溯项历史

B.1.1. R23-11 中新增的规范条目

[SWS_UdpNm_00509] [SWS_UdpNm_91008] [SWS_UdpNm_91011]

B.1.2. R23-11 中变更的规范条目

[SWS_UdpNm_00013] [SWS_UdpNm_00074] [SWS_UdpNm_00075] [SWS_UdpNm_00088] [SWS_UdpNm_00470] [SWS_UdpNm_91006]

B.1.3. R23-11 中删除的规范条目

无。

微信扫一扫,获取更多及时资讯

![](wechat.png)