jasonj333

V1

2022/03/16阅读:54主题:红绯

AUTOSAR UDP网络管理-1

什么是UdpNm

UdpNm,AUTOSAR UDP Network Management,基于TCP/IP协议栈,主要目的是协调网络在normal operation和bus-sleep mode之间的转换。除了核心功能以外,还提供了可选功能,例如,实现一个服务来检测所有当前节点或检测所有其他节点是否准备好休眠。UDP网络管理(UdpNm)功能提供网络管理接口(Nm)和TCP/IP协议栈(TCP/IP)之间的适配

扩展AUTOSAR的通信协议栈
扩展AUTOSAR的通信协议栈

从上图可以看出:

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

有几个注意点:

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

UdpNm实例表示udp网络管理在ECU中的实现,它是NM簇在ECU中的实例化。所以NM簇,又叫网络管理集群,是UdpNm实例的集合。NM集群和UdpNm实例,可以看成是面向对象编程中的类与实例化

UdpNm中需要注意两个代码文件:

  • UdpNm_Lcfg.c
    配置link时间参数

  • UdpNm_PBcfg.c
    配置后期构建时间参数

UDP网络管理策略

AUTOSAR UdpNm基于分散的网络管理策略,这意味着每个网络节点仅根据通信系统内接收和/或传输的UDP数据包执行自给自足的活动

AUTOSAR UdpNm的协调算法基于周期性的网络管理数据包,由集群中的所有节点通过广播传输的方式接收。接收到网络管理数据包表明发送节点希望保持NM集群处于唤醒状态。如果任何节点准备好进入Bus-Sleep模式,它就会停止发送NM数据包,但只要收到来自其他节点的NM数据包,它就会推迟转换到Bus-Sleep模式。如果在专用计时器内没有收到NM数据包,则每个节点都会启动Bus-Sleep模式的转换。如果NM集群中的任何节点需要总线通信,它可以通过发送NM数据包来让NM集群保持清醒

AUTOSAR UdpNm协调算法的主要概念可以通过以下两个关键要求来定义:

  • 只要需要总线通信,每个网络节点都应发送周期性的网络管理数据包;否则不应该发送网络管理数据包
  • 如果UdpNmStayInPbsEnabled被禁用,并且UdpNm集群中的总线通信被释放,并且总线上没有网络管理PDU(数据包),则应执行由UdpNmTimeoutTime + UdpNmWaitBusSleepTime(两个配置参数)确定的可配置时间值转换到Bus-Sleep模式

AUTOSAR UdpNm协调算法的整体状态机定义如下:

  • 从NM集群中单个节点的角度来看,AUTOSAR UdpNm状态机应包含AUTOSAR UdpNm协调算法所需的状态转换触发器

操作模式

AUTOSAR UdpNm包含三种操作模式:

  • Network mode
    网络模式

  • Prepare Bus-Sleep mode
    总线预休眠模式

  • Bus-Sleep mode
    总线休眠模式

AUTOSAR UdpNm操作模式的变化应通过回调函数通知上层

Network Mode

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

  • Repeat Message State
  • Normal Operation State
  • Ready Sleep State

当从Bus-Sleep Mode或Prepare Bus-Sleep Mode进入Network Mode时,默认进入Repeat Message State

当进入网络模式时,应启动NM-Timeout定时器

当进入网络模式时,UdpNm将通过调用Nm_NetworkMode通知上层

在网络模式下成功接收到NM PDU(调用UdpNm_SoAdIfRxIndication)后,应重新启动NM-Timeout定时器

在网络模式下传输NM PDU(使用E_OK调用UdpNm_SoAdIfTxConfirmation)时,应重新启动NM-Timeout定时器

NM-Timeout定时器每次启动或重新启动时都应重置

- Repeat Message State

对于不处于被动模式的节点,Repeat Message状态确保从Bus-Sleep或Prepare Bus-Sleep到网络模式的任何转换对于网络上的其他节点都是可见的

当从Bus-Sleep模式、Prepare-Bus-Sleep模式、Normal Operation State或Ready Sleep State进入Repeat Message State时,应(重新)开始NM数据包的传输,除非启用被动模式

当NM-Timeout定时器在Repeat Message状态超时时,NM-Timeout定时器应重新启动

网络管理应在由UdpNmRepeatMessageTime(配置参数)确定的可配置时间内保持在Repeat Message状态;在那之后,会离开Repeat Message状态

当离开Repeat Message状态时,如果网络已被请求,则应进入Normal Operation状态

当离开Repeat Message状态时,如果网络已被释放,则应进入Ready Sleep状态

如果UdpNmNodeDetectionEnabled设置为TRUE,UdpNm将在离开Repeat Message状态时清除Repeat Message Bit

- Normal Operation State

Normal Operation状态确保只要需要网络功能,任何节点都可以让NM集群处于唤醒状态

当从Ready Sleep状态进入Normal Operation状态时,应开始传输NM PDU,除非启用被动模式或禁用NM消息传输能力

当NM-Timeout定时器在Normal Operation状态到期时,NM-Timeout定时器应重新启动

当网络被释放且当前状态为Normal Operation状态时,应离开Normal Operation状态,进入Ready Sleep状态

如果UdpNmNodeDetectionEnabled设置为TRUE并且在Normal Operation状态下接收到Repeat Message Request bit,则UdpNm应进入Repeat Message状态

如果UdpNmNodeDetectionEnabled设置为TRUE,并且在Normal Operation状态下调用函数UdpNm_RepeatMessageRequest,则UdpNm应进入Repeat Message状态

如果UdpNmNodeDetectionEnabled设置为TRUE 并且在Normal Operation状态下调用函数UdpNm_RepeatMessageRequest,UdpNm应设置Repeat Message Bit

- Ready Sleep State

Ready Sleep状态确保NM集群中的任何节点等待转换到Prepare Bus-Sleep模式,而其他节点保持NM集群清醒

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

如果启用被动模式,则不传输任何NM PDU,则不需要任何操作。如果禁用被动模式,在某些情况下,必须在Ready Sleep状态下传输NM PDU才能在网络中同步关闭,例如重新传输PN关闭消息

当NM-Timeout定时器在Ready Sleep状态下到期时,应离开Ready Sleep状态并进入Prepare Bus Sleep模式

当请求网络且当前状态为Ready Sleep状态时,应离开Ready Sleep状态并进入Normal Operation状态

如果UdpNmNodeDetectionEnabled设置为TRUE,并且在Ready Sleep状态下接收到Repeat Message Request bit,则UdpNm应进入Repeat Message状态

如果UdpNmNodeDetectionEnabled设置为TRUE并且函数UdpNm_RepeatMessageRequest在Ready Sleep状态中被调用,UdpNm将进入Repeat Message状态

如果UdpNmNodeDetectionEnabled设置为TRUE并且函数UdpNm_RepeatMessageRequest在Ready Sleep状态中被调用,UdpNm应设置Repeat Message Bit

Prepare Bus-Sleep Mode

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

当进入Prepare Bus-Sleep Mode时,UdpNm应通过调用Nm_PrepareBusSleepMode通知上层

如果UdpNmStayInPbsEnabled被禁用,则UdpNm应在UdpNmWaitBusSleepTime(配置参数)确定的可配置时间内保持在Prepare Bus-Sleep模式;然后,应离开Prepare Bus-Sleep模式并进入Bus-Sleep模式

上面这段话隐含地要求,如果启用UdpNmStayInPbsEnabled,UdpNm将永远不会由于超时而离开,即UdpNm将保持在Prepare Bus-Sleep模式,直到ECU进入电源关闭或任何重新启动原因被满足

在Prepare Bus-Sleep模式下成功接收到NM PDU后,应离开Prepare Bus-Sleep模式,进入Network Mode;默认情况下,进入Repeat Message状态

当在Prepare Bus-Sleep模式下请求网络时,应离开Prepare Bus-Sleep Mode,进入Network Mode;默认情况下,进入Repeat Message状态

当在Prepare Bus-Sleep模式下请求网络并且UdpNm模块已进入网络模式并且如果UdpNmImmediateRestartEnabled(配置参数)为TRUE,则UdpNm模块应发送NM PDU

Bus-Sleep Mode

Bus-Sleep状态的目的是在没有消息交换时降低节点中的功耗

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

如果禁用UdpNmStayInPbsEnabled并且由UdpNmTimeoutTime + UdpNmWaitBusSleepTime(两个配置参数)确定的可配置时间量同样配置给网络管理集群中的所有节点,则网络管理集群中使用AUTOSAR NM算法协调的所有节点几乎同时转换到总线睡眠模式

参数UdpNmTimeoutTime和UdpNmWaitBusSleepTime在NM 集群的所有网络节点内应该具有相同的值。取决于具体的实现,转换到Bus-Sleep模式大约同时发生。此转换所经历的时间抖动取决于以下因素:

  • 内部时钟精度(振荡器漂移)
  • NM-task循环时间(如果任务与全局时间不同步)
  • NM PDU在Tx队列中的等待时间(如果在发送请求后立即进行发送确认)

按照最好情况估计,在可配置的时间量内应仅考虑振荡器漂移,该可配置时间量由值UdpNmTimeoutTime + UdpNmWaitBusSleepTime(两个配置参数)确定。另外两个因素可以忽略

当进入Bus-Sleep Mode时,UdpNm应通过调用Nm_BusSleepMode通知上层;如果在初始化时默认进入总线睡眠模式,则不会出现这种情况

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

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

如果在Bus-Sleep Mode或Prepare Bus Sleep Mode中调用 UdpNm_PassiveStartUp,则UdpNm模块应进入Network Mode;默认情况下,进入Repeat Message状态

当在Bus-Sleep模式下请求网络时,UdpNm模块应进入网络模式;默认情况下,UdpNm模块应进入Repeat Message状态

网络状态

网络状态(即“请求”和“释放”)是AUTOSAR UdpNm状态机的两个附加状态,与状态机并行存在。网络状态表示软件组件是否需要在总线上进行通信(然后网络状态被“请求”);或者软件组件是否不必在总线上通信(然后总线网络状态被“释放”);请注意,如果网络被释放,一个ECU仍然可以通信,因为其他一些ECU仍然请求网络

调用函数UdpNm_NetworkRequest将请求网络。UdpNm模块应将网络状态更改为“已请求”

调用函数UdpNm_NetworkRelease应释放网络。UdpNm模块应将网络状态更改为“已释放”

初始化

成功初始化后,网络管理状态应设置为Bus-Sleep模式

UdpNm模块应该在SoAd初始化之后并且在调用任何其他网络管理服务之前进行初始化

初始化时,默认情况下,UdpNm模块应将网络状态设置为“已释放”

初始化时,默认情况下,UdpNm模块应进入Bus-Sleep模式

如果AUTOSAR UdpNm未初始化,不应禁止总线通信

初始化后,应停止网络管理消息的传输

初始化后,用户数据字节的每个字节都应设置为0xFF

初始化后,Control Bit Vector应设置为0x00

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

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

执行

处理器架构

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

时间参数

配置参数UdpNmTimeoutTime是AUTOSAR UdpNm定时参数NM-Timeout的时间

配置参数UdpNmRepeatMessageTime是AUTOSAR UdpNm定时参数Repeat Message的时间

配置参数UdpNmWaitBusSleepTime是AUTOSAR UdpNm定时参数Wait Bus-Sleep的时间

可选配置参数UdpNmRemoteSleepIndTime是AUTOSAR UdpNm 定时参数Remote Sleep Indication的时间

通信调度

网络管理消息传输

NM消息的传输可以通过UdpNmPassiveModeEnabled进行配置

被动节点不发送NM消息,即它们不能主动影响关闭决策,但它们确实接收NM消息以便能够同步关闭

上面这段话的意思是:被动节点不发送NM消息,这样别的节点就不会因为收到它的网络管理消息而从休眠中唤醒,这就是为什么说被动节点不能主动影响其他节点的关闭决策;但它们可以接收其他节点的NM消息,这样就可以和其他节点同步休眠和唤醒

UdpNm模块应提供周期性传输模式。在这种传输模式下,UdpNm模块将定期发送网络管理PDU

在“Repeat Message State”和“Normal Operation State”中使用周期性传输模式

如果不是通过UdpNm_NetworkRequest或UdpNmImmediateNmTransmissions进入Repeat Message状态,则在进入Repeat Message状态后,NM PDU的传输应延迟UdpNmMsgCycleOffset。这种机制可以防止NM消息的突发

当由于UdpNm_NetworkRequest()(主动唤醒)从Bus-Sleep模式或Prepare Bus-Sleep模式进入Repeat Message状态时,如果UdpNmImmediateNmTransmissions大于零,则应使用UdpNmImmediateNmCycleTime作为周期时间来传输NM PDU。应尽快触发第一个NM PDU的传输。传输后,消息周期计时器应重新加载UdpNmImmediateNmCycleTime。在这种情况下不应使用UdpNmMsgCycleOffset

如果从Ready Sleep状态进入Normal Operation状态,则应立即开始NM PDU的传输

如果UdpNmPnHandleMultipleNetworkRequests设置为TRUE,UdpNm_NetworkRequest将触发从网络模式到Repeat Message状态的状态转换。如果启用了PDU传输能力,则应使用UdpNmImmediateNmCycleTime作为循环时间来传输NM PDU。应尽快触发第一个NM PDU的传输。传输后,消息周期计时器应重新加载UdpNmImmediateNmCycleTime。在这种情况下不应使用UdpNmMsgCycleOffset

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

在使用UdpNmImmediateNmCycleTime传输NM PDU时,不得传输其他Nm PDU(即停止UdpNmMsgCycleTime传输周期)

如果NM PDU的传输已经开始,UdpNm消息循环计时器到期,并且当UdpNmSynchronizedPncShutdownEnabled设置为FALSE 或设置为TRUE时,并且没有同步PNC关闭的请求,则UdpNm模块应通过调用SoAd_IfTransmit发送NM PDU

PNC,Partial Network Cluster,局部网络集

如果UdpNm消息循环计时器到期,则应使用UdpNmMsgCycleTime重新启动

如果NM PDU的传输已停止,则应取消UdpNm消息循环计时器

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

如果用结果E_NOT_OK调用UdpNm_SoAdIfTxConfirmation,则UdpNm应调用函数Nm_TxTimeoutException

网络管理消息接收

如果成功接收到NM消息,SoAd将调用UdpNm_SoAdIfRxIndication

在调用UdpNm_SoAdIfRxIndication时,UdpNm模块应将函数参数中引用的网络管理PDU的数据复制到内部缓冲区

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

附加功能

“远程睡眠指示”检测(可选)

“远程睡眠指示”表示这样一种情况:处于Normal Operation状态的节点发现集群中的所有其他节点都准备好进入睡眠状态。仍处于Normal Operation状态的节点仍将保持总线唤醒

“远程睡眠指示”的检测应使用UdpNmRemoteSleepIndEnabled开关(配置参数)进行静态配置

如果在由UdpNmRemoteSleepIndTime(配置参数)确定的可配置时间内,在Normal Operation状态下没有接收到NM PDU,NM应通过调用Nm_RemoteSleepIndication通知通用网络管理接口集群中的所有其他节点都准备好进入睡眠状态(“远程睡眠指示”)

如果先前已检测到“远程睡眠指示”并且如果再次在Normal Operation状态或Ready Sleep状态中接收到NM PDU,则NM应通过调用Nm_RemoteSleepCancellation通知通用网络管理接口集群中的某些节点不再准备好睡眠(“远程睡眠取消”)

如果先前已检测到“远程睡眠指示”,并且如果从Normal Operation状态或Ready Sleep状态进入Repeat Message状态,则UdpNm应通过调用Nm_RemoteSleepCancellation通知通用网络管理接口集群中的某些节点不再准备睡眠('远程睡眠取消')

NM应拒绝在Bus-Sleep模式、Prepare Bus-Sleep模式和Repeat Message状态下对"远程睡眠指示"的检查;服务不被执行,返回E_NOT_OK

用户数据(可选)

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

调用UdpNm_SetUserData时,在总线上设置下一个发送的NM包的NM用户数据;设置NM用户数据的操作要保证数据的一致性

调用UdpNm_GetUserData时,应提供最近接收到的NM PDU的ppayload中包含的NM用户数据;提供NM用户数据的操作应保证数据的一致性

如果配置了NM用户数据,它肯定会在Repeat Message状态下发送。在Ready Sleep状态下,不会发送用户数据

如果启用了UdpNmComUserDataSupport,则接口UdpNm_SetUserData将不可用

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

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

如果启用了UdpNmComUserDataSupport,并且如果UdpNm处于 Repeat Message状态或NormalOperation状态,并且如果调用了UdpNm_Transmit,则UdpNm将请求使用当前数据额外传NM PDU

调用UdpNm_Transmit请求在与当前数据的周期性传输之间(例如系统字节、用户数据和PNC位向量)传输NM PDU

被动模式(可选)

在被动模式下,节点只接收NM消息,但不发送任何NM消息

被动模式应可使用UdpNmPassiveModeEnabled开关(配置参数)进行静态配置

被动模式应针对一个ECU内的所有实例进行一致的静态配置

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

  • 总线同步
    配置参数UdpNmBusSynchronizationEnabled

  • 远程睡眠指示
    配置参数UdpNmRemoteSleepIndEnabled

  • 节点检测
    配置参数UdpNmNodeDetectionEnabled

状态变化通知(可选)

如果启用了回调Nm_StateChangeNotification,AUTOSAR UdpNm状态的所有变化都应通过调用Nm_StateChangeNotification通知上层

通讯控制(可选)

通信控制应可使用UdpNmComControlEnabled开关(配置参数)进行静态配置

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

如果禁用NM PDU传输能力,NM协调算法将无法正常工作。因此,必须确保只要NM PDU传输能力被禁用,ECU就不会关闭

如果调用了UdpNm_NetworkRelease并且NM PDU传输能力已被禁用,则ECU将关闭。 这确保了ECU也可以在竞争条件(例如,在启用通信之前不久留下诊断会话)或错误使用通信控制的情况下关闭

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

当网络管理PDU传输能力被禁用时,UdpNm模块应停止UdpNm消息周期定时器以停止网络管理PDU的传输

当禁用NM PDU传输能力时,应停止NM-Timeout定时器

当NM PDU传输能力被禁用时,“远程睡眠指示”定时器的检测将被暂停

当启用网络管理PDU传输能力时,NM PDU的传输最晚应在下一个NM主函数中开始

当启用NM PDU传输能力时,应重新启动NM-Timeout定时器

当启用NM PDU传输能力时,应恢复“远程睡眠指示”定时器的检测

如果NM PDU传输能力被禁用,可选服务UdpNm_RequestBusSynchronization应返回E_NOT_OK

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

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

如果UdpNm调用NM_CoordReadyToSleepIndication并且仍处于网络模式,它应在第一次接收到带有NmCoordinatorSleepReady bit的NM消息时通过调用Nm_CoordReadyToSleepCancellation通知Nm

如果UdpNm已进入网络模式或调用Nm_CoordReadyToSleepCancellation,则它应在第一次接收到带有NmCoordinatorSleepReady bit的NM消息时调用Nm_CoordReadyToSleepIndication通知NM

如果UdpNmCoodinatorSyncSupport设置为TRUE并且接口UdpNm_SetSleepReadyBit被调用,UdpNm应将“NM协调器Sleep Ready Bit”位设置为传递值并触发单个网络管理PDU

仅当UdpNmCoordinatorSyncSupport设置为TRUE时,接口UdpNm_SetSleepReadyBit()和“协调总线关闭”功能才可用

局部网络Partial Networking

NM PDUs的Rx处理

如果UdpNmPnEnabled为FALSE,则UdpNm应执行正常的Rx指示处理,并且应禁用局部网络扩展

如果UdpNmPnEnabled为TRUE,接收到的NM-PDU中的PNI bit为0,并且UdpNmAllNmMessagesKeepAwake为TRUE,则UdpNm模块应执行正常的Rx指示处理并省略局部网络的扩展

如果UdpNmPnEnabled为TRUE,接收到的NM-PDU中的PNI位为 0,并且UdpNmAllNmMessagesKeepAwake为FALSE,UdpNm模块应忽略接收到的NM-PDU

如果将UdpNmPnEnabled设置为TRUE,则接收的NM-PDU中的PNI bit被设置为1,并且PNSR bit设置为0,根据局部网络配置,UdpNm模块应从接收的NM-PDU中提取PNC位向量(对应NM-channel的NmPncBitVectorOffset和NmPncBitVectorLength)并通过调用Nm_PncBitVectorRxIndication来转发PNC位矢量

如果UdpNmPnEnabled设置为TRUE并且调用了Nm_PncBitVectorRxIndication,则接收到的NM PDU仅在以下条件下考虑进行进一步处理:

  • UdpNmAllNmMessagesKeepAwake设置为TRUE,或者
  • RelevantPncRequestDetectedPtr的输出值设置为TRUE

需要UdpNmAllNmMessagesKeepAwake才能使网关在任何类型的NM-PDU上保持唤醒

如果UdpNmSynchronizedPncShutdownEnabled为TRUE,则接收到的NM-PDU中的PNI bit为1,接收到的NM-PDU中的PNSR bit为1,并且通过UdpNmComMNetworkHandleRef配置的相应 ComMChannel在接收到此NM-PDU的位置被主动协调 (ComMPncGatewayType设置为COMM_GATEWAY_TYPE_ACTIVE),则UdpNm模块应忽略接收到的NM-PDU。此外,UdpNm模块应:

  • 向默认错误跟踪器报告运行时错误UDPNM_E_INVALID_PN_SYNC_SHUTDOWN_REQUEST

  • 如果UdpNmPnSyncShutdownErrorReactionEnabled设置为TRUE,请求传输在受影响的UdpNm-Channel的下一个主函数调用中持续的当前PN信息的NM-PDU

如果UdpNmSynchronizedPncShutdownEnabled为TRUE,则接收到的NM-PDU中的PNI bit设置为1,PNSR bit设置为1,UdpNm模块应根据局部网络配置(NmPncBitVectorOffset和NmPncBitVectorLength)并通过调用Nm_ForwardSynchronizedPncShutdown转发PNC位向量

仅当请求同步PNC关闭时,PNSR bit才可能设置为1。应在PN拓扑中处理同步的PNC关闭。 因此,假设所有协调器都启用了同步PNC关闭,或者所有协调器都禁用了同步PNC关闭。两者的混合会导致PNC不同步关闭,这是必须避免的

NM PDUs的Tx处理

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

如果使用局部网络,则必须使用CBV

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

如果UdpNmPnEnabled为TRUE,则NM-PDU未配置为在SoAd中触发传输(SoAdBswModules/SoAdIfTriggerTransmit设置为FALSE),没有等待同步PNC关闭的请求且必须传输NM-PDU,UdpNm模块应按给定顺序执行以下操作:

  • 调用Nm_PncBitVectorTxIndication指示传输请求并检索内部PNC请求
  • 通过考虑相应NM通道的NmPncBitVectorOffset和NmPncBitVectorLength将接收到的用于内部PNC请求的PNC位向量复制到NM-PDU
  • 如果启用了用户数据,则获取可用数据(如果启用了UdpNmComUserDataSupport,则从Com或从内部存储中获取)并复制 NM-PDU的用户数据范围中的数据
  • 通过调用SoAd_IfTransmit触发NM-PDU的传输

如果UdpNmSynchronizedPncShutdownEnabled设置为TRUE并且通过UdpNm_RequestSynchronizedPncShutdown指示 UdpNm模块,UdpNm模块应将每个给定UdpNm通道(nmChannelHandle)的给定PNC(pncId)存储为同步PNC关闭的挂起请求

请求同步PNC关闭的所有PNC的聚合和作为PN关闭消息的传输(将CBV中的PNSR位设置为1)在相应的UdpNm_Main函数的上下文中异步完成

如果UdpNmSynchronizedPncShutdownEnabled设置为TRUE,则同步PNC关闭请求处于挂起状态,并且前一个调用没有传输确认(通过UdpNm_TxConfirmation指示)被挂起,则UdpNm模块应在下一个主函数调用中请求传输NM-PDU,如通过调用SoAd_IfTransmit的PN关闭消息。如果NM-PDU未配置为在SoAd中触发传输(SoAdBswModules/SoAdIfTriggerTransmit = FALSE),UdpNm应为此消息在正常数据下额外设置以下数据:

  • 将CBV中的PNSR位设置为1
  • 如果启用了用户数据,则获取可用数据(如果启用了UdpNmComUserDataSupport,则从Com或从内部存储中获取)并复制NM-PDU的用户数据范围中的数据
  • 通过将与存储为同步PNC关闭的挂起请求的PNC ID对应的位设置为1并将所有其他位设置为0,写入相对于相应NM通道的NmPncBitVectorOffset和NmPncBitVectorLength的PNC位向量

UdpNm模块必须聚合所有指示用于同步PNC关闭的PNC,并将pncId传输到字节数组(PNC位向量)。PNC位向量的每个位(PNC 位)代表一个特定的PNC。PNC比特的PNC比特向量内的byteIndex和bitindex应确定如下:

  • byteIndex = (PncId div 8) - NmPncBitVectorOffset
  • bitIndex = (PncId mod 8)

如果配置了UdpNmPnShutdownMessageRetransmissionDuration并且第一次请求传输PN关闭消息,则应在所有受影响的NM通道上使用UdpNmPnShutdownMessageRetransmissionDuration启动PN关闭消息的相应重传计时器

如果UdpNmSynchronizedPncShutdownEnabled设置为TRUE,则UdpNm模块已请求传输NM-PDU作为PN关闭消息并且调用UdpNm_TxConfirmation,结果为E_OK,UdpNm应将存储的那些 PNC ID视为同步PNC的挂起请求,完成后关闭相应的NM通道并将其从存储中删除。此外,如果配置了UdpNmPnShutdownMessageRetransmissionDuration,则UdpNm将取消受影响NM通道的PN关闭消息的重传定时器

UdpNm必须确保同步PNC关闭的新请求(通过UdpNm_RequestSynchronizedPncShutdown指示)在PN关闭NM帧的持续传输期间不会丢失

如果UdpNmSynchronizedPncShutdownEnabled设置为TRUE,则UdpNmPnShutdownMessageRetransmissionDuration已配置,UdpNm模块由于同步PNC关闭请求传输,UdpNm_SoAdIfTxConfirmation调用结果为E_NOT_OK或此PN关闭消息的传输请求未被接受(SoAd_IfTransmit返回E_NOT_OK),则 UdpNm模块应保存这些PNC ID作为同步PNC关闭的挂起请求,并在下一个主要功能中执行重传

UdpNm必须在相应的主函数调用的上下文中对PN关闭消息执行重试传输处理,如果PN关闭消息的传输未得到下层确认(使用E_NOT_OK或UdpNm_SoAdIfTxConfirmation未调用)。重试传输 请求应涵盖错误情况,如果下层无法传输Nm消息。 在最坏的情况下,这与使用UdpNmMsgCycleTime传输的延迟NM消息发生冲突。 但无论如何,如果在PN重置时间(EIRA)内未恢复传输NM消息的能力,则PNC将不同步关闭,这可能会导致应用程序级别的超时错误

下层指示的挂起传输确认的依赖性应该支持可靠的通信,例如:确保在网络上传输PN关闭消息或避免传输过时的PN关闭消息,例如,如果配置了低层中的排队

如果UdpNmSynchronizedPncShutdownEnabled设置为TRUE,并且UdpNm模块已将PNC ID存储为同步PNC关闭的挂起请求,则UdpNm应从存储中删除那些外部或内部再次请求的PNC ID:

  • 如果收到外部请求的PNC,UdpNm将检查NM消息的接收
  • 通过从相应的ComPdu派生的内部PNC请求可用,UdpNm应在每次传输PN关闭消息之前进行检查

如果UdpNmSynchronizedPncShutdownEnabled设置为TRUE,未配置UdpNmPnShutdownMessageRetransmissionDuration,由于同步PNC关闭,UdpNm模块已请求传输,则调用UdpNm_TxConfirmation并返回E_NOT_OK或不接受此PN关闭消息的传输请求(SoAdIf_Transmit返回E_NOT_OK),然后UdpNm 应删除存储为相应NM通道的同步PNC关闭的挂起请求的PNC ID,并将运行时错误UDPNM_E_TRANSMISSION_OF_PN_SHUTDOWN_MESSAGE_FAILED报告给DET

如果UdpNmSynchronizedPncShutdownEnabled设置为TRUE并且PN关闭消息的重传计时器到期,则UdpNm应从存储中删除相应NM通道的同步PNC关闭的挂起请求,并且向DET报告运行时错误 UDPNM_E_TRANSMISSION_OF_PN_SHUTDOWN_MESSAGE_FAILED

内部请求的局部网络集的处理

所有内部PNC请求均由ComM维护。ComM将每个通道的聚合内部PNC请求作为PNC位向量转发到NmIf。这个PNC位向量携带所谓的“内部请求数组”。每次发送NM_PDU时,UdpNm都必须从NmIf检索最新的IRA。NmIf向UdpNm提供IRA信息并更新PNC重置计时器(每次相关的PNC被发送,PNC复位定时器重新启动)

对于UdpNmPnEnabled设置为TRUE的所有已配置NM通道,UdpNm将调用Nm_PncBitVectorTxIndication来指示传输并检索当前内部PNC请求作为相对于已配置NmPncBitVectorLength的PNC位向量。UdpNm将收到的内部PNC请求复制到NM-PDU的PNC位向量字节

通过UdpNm_NetworkRequest自发传输NM-PDU

如果调用UdpNm_NetworkRequest,UdpNmPnHandleMultipleNetworkRequests设置为TRUE,并且UdpNm处于Ready Sleep状态、Normal Operation状态或Repeat Message状态,则UdpNm将更改为或重新启动Repeat Message状态

如果UdpNmPnHandleMultipleNetworkRequests设置为TRUE,则UdpNm功能“立即传输”是强制性的

如果PNC位发生变化,PNC控制模块(例如ComM)负责调用UdpNm_NetworkRequest


分类:

后端

标签:

后端

作者介绍

jasonj333
V1