文章目录
- PNC和ComM
- PNC管理
- NM PDU结构及PNC信息位置
- 如何理解节点关联PNC
- PNC状态管理
- ComM 通道状态管理
PNC和ComM
PNC 和 ComM层的Channel不是一个概念,ComM的Channel对应具体的物理总线数。
在ComM模块中,一个Channel可以对应一个PNC,也可以对应多个PNC。
PNC管理
PNC(Partial Network Cluster) 即“局部网络集群”, 通过一些规则(通常按照功能类) 将车辆网络进一步划分为不同的“局域网”, 通过 PNC 管理其各种状态。
如下图:OBC和BMS组成一个PNC1,而MCU和BMS又组成了一个PNC2。
NM PDU结构及PNC信息位置
PNC,是一种将网络通信进行分组和控制的方法,属于AUTOSAR COM层,是从Autosar 4.0.3开始增加的,主要目的是为了省电;PNC是PDU中的一部分;
NID:Source Node Identifier,即对应节点CAN报文的CanID,比如节点 NM Msg CanID 为 0x509,则 NID = 0X09(配置工具配置),5表示网络管理报文类型。
CBV:Control Bit Vector,控制位向量。
User Data:使能PN功能时,存储PNC信息。假设某网段内有48个PNC,User Data中的每一个Bit代表一个PNC,可以用PNC 0 ~ PNC 47标识这48个PNC。注意:节点具体需要处理多少个PNC,根据需求配置。
如何理解节点关联PNC
一个网段内有多个节点,多个节点之间可以形成多个PNC,也就意味着:具体到某个节点,并不是所有的PNC 都对该节点有效。
比如:ECU1有两个节点Node1和Node2,Node1收到的网络管理报文中,只关注PNC20、PNC22、PNC30是否置位( = 1),因为Node1只参与PNC 20、PNC22、PNC30三个网络簇,并不关心PNC16或者其他的PNC #n状态,如下所示:
PNC状态管理
PNC有两种模式,其中COMM_PNC_FULL_COMMUNICATION包含三种子状态:
- COMM_PNC_FULL_COMMUNICATION
- COMM_PNC_REQUESTED
- COMM_PNC_READY_SLEEP
- COMM_PNC_PREPARE_SLEEP
- COMM_PNC_NO_COMMUNICATION
系统上电后整个PNC的状态在COMM_PNC_NO_COMMUNICATION。在PNC状态切换过程中如果是主动唤醒节点直接请求FULL通信,或者是网关节点控制的节点在收到网关下的ERA(External Request Array,表示的是外部的唤醒状态设置相关的数组)数组的相关状态位,直接从COMM_PNC_NO_COMMUNICATION进入到COMM_PNC_REQUESTED阶段。
如果是被动唤醒的节点,则根据接收到唤醒报文中的PNC位状态切换到COMM_PNC_READY_SLEEP或者COMM_PNC_PREPARE_SLEEP。其中PNC位设置一般在NM的报文中体现,而开发者只需根据相应的NM报文的UserData中对应的PNC位操作即可。
而COMM_PNC_FULL_COMMUNICATION内部的三个子状态的切换也是根据该节点的是否能被动唤醒功能进行内部的状态切换,主要体现是主动唤醒下需要Request Full相关的操作以及NM报文中对应的UserData中相关的PNC位进行转换的。
ComM 通道状态管理
ComM 通道有三种模式,其中除 COMM_SILENT_COMMUNICATION 之外每种模式有两种子状态:
- COMM_NO_COMMUNICATION(无通信模式,不接收也不发送。)
- COMM_NO_COM_NO_PENDING_REQUEST(无网络请求状态。)
- COMM_NO_COM_REQUEST_PENDING(有通信请求 ,但未使允许通信 标志ComMAllowed。)
- COMM_FULL_COMMUNICATION(全通信模式, 既可接收也可发送。)
- COMM_FULL_COM_NETWORK_REQUESTED(网络请求状态。)
- COMM_FULL_COM_READY_SLEEP(准备睡眠状态。)
- COMM_SILENT_COMMUNICATION(静默模式, 接收但不发送。)