PNC
PNC – Partial Network Cluster (局域网络簇)。
• Partial Networking shall allow for turning off idling ECU’s and their network communication in case their provided functions are not required under certain conditions
Partial Networking会允许部分没有参与这个功能的ECU让它保持静默状态,可以允许部分信号停止收发,降低总线负载,让不参与的ECU保持休眠状态。
- ECUA和ECUB属于Partial Network Cluster (PNC) 1, ECUB, ECUC, ECUD属于PNC2
- 所有需要实现的功能分属于PNC1或者PNC2
- PNC1和PNC2都属于激活状态
- 当前只有ECUB保持着PNC1激活, ECUC保持着PNC2激活
- 当PNC2的相关功能停止时, ECUC去激活PNC2
- ECUC和ECUD进入休眠状态
- ECUB停止发送和接收所有PNC2相关的报文
- 由于PNC1还处于激活状态,所以ECUB和ECUA还保持唤醒状态
- 当PNC1的所有相关功能停止时, ECUA去激活PNC1,则ECUA, ECUB进入休眠状态
• AUTOSAR 4.0.3及以上版本支持局域网络管理
系统层级的局域网络管理,用于打包不同的message,信号来支持分布在多个ECU的一个或多个实车功能。
VFC(Virtual Function Cluster)
• SWC层级的局域网络管理,用于对应功能层面管理不同功能的局域网络,使得对于应用层设计更友好,如Locking, ExteriorLight等
Autosar关联模块
CanTrcv模块:对于具有selective wakeup功能的tranciver, CanTrcv模块用于设置可以唤醒的Frame
CanIf模块:
- 收发NM报文,
- 通过配置决定唤醒后第一帧报文是NM报文还是APP报文
CanNM模块:
- 对NM报文中的PNC进行过滤,若没有相关的PNC置上,则可以不被该NM报文唤醒。
- 收集所有内部外部的PNC请求。
- 发送PNC状态,在NM报文中, AUTOSAR定义了user data,在user data中一个bit可以用来置上一个PNC的状态
- 当有PNC激活时,发送NM报文,当本地ECU有相关的PNC置上时,或者收到了相关的PNC置上时,需要主动发出NM报文,直到所有相关PNC(内部和外部)都清零了,停止发送NM报文
- ERA EIRA的计算,并通知ComM模块
- 过滤接收到的NM报文的PNC
COM模块
- 在NM模块和ComM模块间交换PNC信息, COM模块中会有所有网段的PNC信息, ComM模块会根据所有网段中PNC的信息统一成各PNC一个状态。
- 使能或者禁止相应IPDU(报文)的发送和接收,如当IPDU1为ECUA发送的IPDU, IPDU2为ECUA接收的IPDU,IPDU1关联了PNC1, IPDU2关联了PNC2,当PNC1激活时, IPDU1开始发送,当PNC1去激活时, IPDU1会停止发送 (当PNC1去激活后, IPDU1还会继续发送CanNmPnResetTime时间);同样当PNC2激活时, COM模块会接收IPDU2,如果PNC2去激活, COM模块会停止接收IPDU2。
ComM模块:
- VFC和PNC的关联
- ComM模块负责PNC的状态机切换,并提供各个PNC的当前状态
- 协调多个PNC状态切换请求(来自于不同网段,或者来自于内部请求)
BSWM模块:
- 监控各个局域网络的使能状态
• ComM模块通过函数BswM_ComM_CurrentPncMode通知BswM模块各个PNC的状态
• 根据PNC状态使能或禁用 PDU Group - 建立各种规则协调ComM模块和其他模块(如: SWC, COM等)用于使能或禁止各个PNC, I-PNCGroup
• BswM通过ComM_RequestComMode函数使能或禁用相关ComM user
EIRA & ERA
每一个PNC有其独立的状态机,大的状态有两个:PNC_NO_COMMUNICATION和PNC_FULL_COMMUNICATION。PNC_FULL_COMMUNICATION又包含PNC_REQUESTED,PNC_READY_SLEEP和PNC_PREPARE_SLEEP三个子状态。
EIRA – External and Internal Request Array
• 内部和外部PNC请求的合成状态
• ComM需要该信息来处理PNC状态管理
External:主要是指通过ERA Rx信号接收外部请求信息,eg:收到包含PNC信息的NM Msg。
Internal:主要是指调用ComM_UserRequest()接口的“User”,这里的User包括:Runnable entities、SW-Cs、BswM 以及DCM 。
ERA – External Request Array
• 主要用于PNC gateway
PNC Gateway原则主要适用于网关节点ECU,对于网关节点ECU,包含多个物理通道,当PNC跨网段时,则需要将PNC信息路由到目标网段,进而实现不同网段PNC的管理。
时序图
CANNM RX流程
CANNM TX流程
Autosar配置
Terminology | Description |
---|---|
CanIfPublicPnSupport | CanIF是否支持局域网络管理功能 |
CanIfTxPduPnFilterPdu | 使能后ECU唤醒后发的第一帧报文会是NM报文 |
Pn Enable | 使能局域网络功能 |
CanNmComUserDataSupport | NM报文中是否支持user data (PNC信息位于user data中) |
CanNmEiraCalcEnabled | 是否使能EIRA计算 |
CanNmPnEraCalcEnabled | 是否使能ERA计算 |
CanNmPnInfoLength | PNC所占字节长度 |
CanNmPnInfoOffset | PNC在NM报文中的偏移位置(注意:不是user data的偏移位置) |
Pn Reset Time | 用于局域网络管理, PNC停留在ready sleep状态下的时间,一般需要比CanNmTimeoutTime小一些 |
CanNmPnFilterMaskBytes | 设置PNC过滤,为0时,该位的PNC会在CanNM层过滤掉 |
ComMPncSupport | 是否支持局域网络管理功能 |
ComMPncEnabled | 是否使能局域网络管理功能 |
ComMPncGatewayEnable | 是否使能Pnc gateway 功能 |
ComMPncPrepareSleepTimer | PNC状态机中,停留在prepare sleep状态时间 |
ComMSynchronousWakeup | 当设为TRUE时,某个ComM通道被唤醒时,其他的所有ComM通道都会被唤醒 |
ComMPncGatewayType | 设置ComM Channel是Active或passive (Active节点需要mirror back其他节点的PNC状态) |
ComMPncNmRequest | 设成TRUE是,每一次因为PNC状态机切换到PNC_Request状态,从而导致ComM Channel切换成FULL Com,则需要调用函数Nm_NetworkRequest |
ComMPncID | PNC的ID (AUTOSAR 4.2.2开始, ID号从8开始) |
ComMChannelPerPnc | PNC关联的ComM Channel |
ComMUserPerPnc | PNC关联的ComM USer |
Container ComMPncComSignal | PNC相关联的ERA EIRA信号 |