上一篇我們從CanNM模塊分析PN功能,本篇接著從ComM模塊分析。因為網(wǎng)絡管理的PN功能主要由這兩個模塊控制。不清楚CanNM模塊與PN關系的可以參閱前文Autosar網(wǎng)絡管理:從CanNM模塊看Partial Networking。
對于每一個PNC(partial network cluster)的通信狀態(tài),ComM模塊都有獨立的一套狀態(tài)機進行管理。當CanNM從CanIf層拿到NM PDU以后,會將User Data部分數(shù)據(jù)獨立拆解出來,通過PDUR、COM,以信號的形式最終送給ComM模塊。為什么將User Data部分獨立拆解出來?因為User Data部分包含著PNC信息,該信息取決于項目需求:需要多少PNC,就開辟多少User Data空間。也就是說,ComM獲取的PNC信息與NM PDU中User Data 一一對應。
使能或是關閉PNC,最終的表現(xiàn)就是允許PNC關聯(lián)的Node(或者說Channel)通信與否。我們知道應用報文(Com層對應的Pdu)的發(fā)送/關閉由BswM管控,如果ECU收到的PNC關聯(lián)其對應的某個Channel,ComM模塊就會進行通信請求(進行狀態(tài)切換),BswM獲取請求信息后,使能或者禁止Com層對應的I-PDU groups通信。
1
ComM對PNC管理
前面我們說PN功能開啟需要在CanNM模塊打開CanNmPnEnabled參數(shù),而在ComM模塊還需要將配置參數(shù)
ComMPncSupport
打開。在Autosar中,規(guī)定CanNmPnEnabled和ComMPncSupport需要存儲在NVM中,以便診斷服務使用,但是在實際的項目開發(fā)中,是否這樣實現(xiàn)還是需要看具體項目需求。
ComM管理每一個PNC狀態(tài)的切換,當狀態(tài)切換時,均需要通過接口BswM_ComM_CurrentPncMode()通知到BswM,以便BswM對Com層的
I-PDU groups
進行通信的管控。ComM在管控每個PNC狀態(tài)機之前,首先要獲取對應Channel的PNC信息,PNC信息通過Com層標準信號接口獲取ERA signal或者EIRA signal。如果signal是多字節(jié)的,一般會在Com層配置成uint8_n類型。Autosar里規(guī)定PNC對應的信號,最大可以包含56個PNC狀態(tài)位信息,這最大56是如何來的呢?對于一個經(jīng)典CAN幀,一個PDU中最多攜帶8 byte有效數(shù)據(jù),在CanNM模塊中,CBV字節(jié)是必須的,而NodeID是可選則,這樣在CanNM層級最多可以有7 byte的User Data,因此ComM最多可以管控7*8 = 56個PNC。雖然NodeID在CanNM是可選的,但還是要識別和過濾NM PDU,當NodeID在CanNM可選時,可以依賴xxIf層或者驅(qū)動層對NM PDU過濾和識別,驅(qū)動層負責將有效ID范圍的NM PDU送給xxIf層,xxIf層通過識別ID,負責將該PDU發(fā)送給對應的上層,比如:xx_TP層,xx_NM層等。
一直在說ComM通過信號獲取對應的PNC信息,這里我們再具體說一下,對ComM來說,獲取的是 EIRA 或者 ERA信號,這兩個信號獨立。可以使用其中一個,也可以均使用,ComM通過Com_ReceiveSignal()接口獲取。
ComM既然會接收信號,當然也會將PNC狀態(tài)信息通過信號發(fā)送給對應的通信總線。
ComM模塊可以處理EIRA 或者ERA信號的接收,但是發(fā)送只能處理EIRA信號。
2
ComM PNC狀態(tài)機對于每個Partial Network,會對應一個PNC狀態(tài)機,因為PNC最多可以有56個,因此ComM最多可以管理56個PNC狀態(tài)機。注意:PNC和ComM層的Channel不是一個概念,ComM的Channel對應具體的物理總線數(shù)。
在ComM模塊中,
一個Channel可以對應一個PNC,也可以對應多個PNC。
ComM管理的PNC狀態(tài)機包括兩大Mode:PNC_FULL_COMMUNICATION、PNC_NO_COMMUNICATION。PNC_FULL_COMMUNICATION模式又包含三個子狀態(tài):PNC_PREPARE_SLEEP、PNC_READY_SLEEP、PNC_REQUESTED。

對上圖狀態(tài)行為進行解讀:
PNC_NO_COMMUNICATION主狀態(tài)行為
系統(tǒng)上電時,PNC默認狀態(tài)即PNC_NO_COMMUNICATION。如果某個PNC進入PNC_NO_COMMUNICATION狀態(tài)后,沒有收到內(nèi)部或者外部請求,則狀態(tài)不跳轉(zhuǎn)。(1)
EcuM或者NM模塊調(diào)用ComM_EcuM_WakeUpIndication()接口,且配置參數(shù)ComMSynchronousWakeUp = TRUE
,PNC的狀態(tài)由PNC_NO_COMMUNICATION切換到PNC_FULL_COMMUNICATION::PNC_PREPARE_SLEEP狀態(tài)。且該PNC對應的ComMPncPrepareSleepTimer(
ComMPncPrepareSleepTimer
> 0)啟動,同時通知到BswM,PNC狀態(tài)切換。
(2)EcuM模塊調(diào)用ComM_EcuM_WakeUpIndication()接口,且配置參數(shù)ComM_PncWakeUpEnabled = TRUE
,PNC的狀態(tài)由PNC_NO_COMMUNICATION切換到PNC_FULL_COMMUNICATION::PNC_PREPARE_SLEEP狀態(tài)。且該PNC對應的ComMPncPrepareSleepTimer啟動(ComMPncPrepareSleepTimer
> 0),同時通知到BswM,PNC狀態(tài)切換。
(3)如果PNC請求信號收到(至少一個bit在EIRA 中置位),PNC的狀態(tài)由PNC_NO_COMMUNICATION切換到PNC_FULL_COMMUNICATION::PNC_READY_SLEEP 狀態(tài)。
(4)如果ComMUser調(diào)用ComM_RequestComMode()接口請求 FULL_COMMUNICATION,PNC的狀態(tài)由PNC_NO_COMMUNICATION切換到PNC_FULL_COMMUNICATION::PNC_REQUESTED 狀態(tài)。
(5)
如果PNC請求信號收到(至少一個bit在ERA 中置位)
,AND
ComMPncGatewayEnabled= TRUE
,AND
ComMPncGatewayType != NONE
。PNC的狀態(tài)由PNC_NO_COMMUNICATION切換到PNC_FULL_COMMUNICATION::PNC_REQUESTED 狀態(tài)。
PNC_FULL_COMMUNICATION主狀態(tài)行為
該狀態(tài)下,所有與此PNC關聯(lián)的通道均進入Full Communication狀態(tài)。
進入PNC_REQUESTED子狀態(tài)工況:
ComMUser對此PNC請求COMM_FULL_COMMUNICATION;
ERA信號中的PNC置位,且此PN是同步的。
進入PNC_PREPARE_SLEEP子狀態(tài)工況:
接收的EIRA信號PNC未置位;
EcuM通知ComM,Passive喚醒事件發(fā)生,且是同步喚醒,且ComMPncPrepareSleepTimer > 0。
進入PNC_READY_SLEEP子狀態(tài)工況:
此PN的所有ComMUser請求COMM_NO_COMMUNICATION, AND 接收到的EIRA信號PNC置位 ,AND 所有的ERA信號PN未置位,且此PN是同步的。
3
PNC Gateway
使能PNC的網(wǎng)關功能,需要在ComM中配置參數(shù)
ComMPncGatewayEnabled = TRUE
。默認的網(wǎng)關類型是:COMM_GATEWAY_TYPE_ACTIVE。PNC的網(wǎng)關類型分為:Active PNC Gateway和Passive PNC Gateway 兩種。
ComM通過ERA或者EIRA與其他ECU交互PNC信息。對于ERA,
僅當PNC網(wǎng)關功能開啟
,
分配給多個ComM通道時可用
。每個PNC在位向量中使用相同的位位置,由 PNC ID 定義。比如:定義PNC1、PNC2,這兩個PNC均長度均為2 byte,其中bit0均表示關聯(lián)某個ECU的指定Channel與否。
ComM負責協(xié)調(diào)網(wǎng)絡的網(wǎng)關行為,即將PNC激活請求從一個通道路由到其他通道。通過發(fā)送 EIRA TX 信號完成路由。通道的路由取決于該通道的網(wǎng)關類型。
PNC請求在Passive通道
如果在網(wǎng)關類型為PASSIVE的通道上接收到ERA=1的請求,則該請求不會鏡像回該通道,即該請求不會在EIRA Tx 信號中設置,并且不會路由到網(wǎng)關類型為PASSIVE的通道。請求僅路由到網(wǎng)關類型為ACTIVE 的通道。
PNC請求在active通道
如果在網(wǎng)關類型為 ACTIVE 的通道上通過 ERA=1接收到PN請求,則該請求會鏡像回此通道,且路由到所有其他協(xié)調(diào)通道。
PNC請求在網(wǎng)關類型為NONE的通道
如果在網(wǎng)關類型為NONE的通道上通過ERA=1接收到請求,則該請求不會存儲在內(nèi)部ComM ERA信號中,即該PNC請求被忽略。因此,請求不會鏡像回此通道,也不會路由到任何其他通道,即請求不會設置在EIRA發(fā)射信號中。網(wǎng)關類型為NONE的通道忽略通過ERA信號接收的PNC請求,但它們處理通過 EIRA Rx 信號接收的PNC請求。在這種情況下,目標PNC狀態(tài)不受通過 ERA 接收的PNC請求影響,但通過EIRA=1 接收的 PNC 請求而進行狀態(tài)改變。
審核編輯:劉清
-
CAN總線
+關注
關注
145文章
2043瀏覽量
135241 -
AUTOSAR
+關注
關注
10文章
399瀏覽量
23668 -
狀態(tài)機
+關注
關注
2文章
499瀏覽量
29166
發(fā)布評論請先 登錄
WL-PBM-PN網(wǎng)關實現(xiàn)PROFINET轉(zhuǎn)PROFIBUS功能
PN/PN Coupler模塊進行控制器與控制器之間的相關通信
AUTOSAR架構中CanNm模塊的問題解答
AUTOSAR架構下CanNM User Data的概念及配置
PN/PN Coupler模塊概述
主設備WiFi模塊,從設備WiFi模塊功能介紹
pn8024r引腳功能和電壓功能
DCM模塊喚醒網(wǎng)絡主動與被動喚醒機制探討
EtherNet/IP從站轉(zhuǎn)Profinet從站協(xié)議轉(zhuǎn)換網(wǎng)關(JM-PN-EIP)
Profinet從站轉(zhuǎn)CAN協(xié)議轉(zhuǎn)換網(wǎng)關(JM-PN-CAN)
Modbus(TCP)轉(zhuǎn)Profinet從總線協(xié)議轉(zhuǎn)換網(wǎng)關(JM-TCP-PN)
Profinet從站轉(zhuǎn)EtherNet/IP從站網(wǎng)關
從CanNM模塊分析PN功能
評論