先回答標(biāo)題問題:“對我自己而言,沒有”。有時我自己會有這樣的感受,Autosar的某些規(guī)范即使看了很多遍,工程上也碰到了些問題,但是每次再去讀,發(fā)現(xiàn):依然有些東西是不清晰的。本文就CanNM的網(wǎng)絡(luò)狀態(tài)機(jī),再和大家摳幾個細(xì)節(jié),希望對你有用!
1、CanNmPnHandleMultipleNetworkRequests 作用
如果項目中,網(wǎng)絡(luò)管理不用PN(Partial Network)功能,可能不太會關(guān)注CanNmPnHandleMultipleNetworkRequests。先看一下Autosar規(guī)范給出的解釋:Specifies if CanNm performs an additional transition from Network Mode to Repeat Message State (true) or not (false).
也就是說,該參數(shù)使能與否決定著節(jié)點網(wǎng)絡(luò)狀態(tài)是否可以切換到RMS(Repeat Message State)。從哪種狀態(tài)切換到RMS狀態(tài)呢?
由上圖可以看出,使用CanNmPnHandleMultipleNetworkRequests參數(shù)時,均與CanNm_NetworkRequest()接口的調(diào)用相關(guān),主要有兩個地方會判斷該參數(shù)的使能情況。
位置 1
如果節(jié)點的網(wǎng)絡(luò)狀態(tài)在RSS(Ready Sleep State),調(diào)用CanNm_NetworkRequest()接口請求網(wǎng)絡(luò)時,能否進(jìn)入NOS(Normal Operation State)取決于CanNmPnHandleMultipleNetworkRequests的使能情況:
CanNmPnHandleMultipleNetworkRequests = FALSE,節(jié)點網(wǎng)絡(luò)狀態(tài)由RSS切換到NOS;
CanNmPnHandleMultipleNetworkRequests = TRUE,節(jié)點網(wǎng)絡(luò)狀態(tài)由RSS切換到RMS。
為什么CanNmPnHandleMultipleNetworkRequests = TRUE,網(wǎng)絡(luò)狀態(tài)需要切換到RMS狀態(tài)呢?先看Autosar規(guī)范給的解釋:
CanNmPnHandleMultipleNetworkRequests 的使能,我們需要先意識到一個前提:
PN的使能,即:CanNmPnEnabled == true。使用PN功能,意味著每個節(jié)點會關(guān)聯(lián)對應(yīng)的PNC,只有接收到的PNC和節(jié)點相關(guān),節(jié)點網(wǎng)絡(luò)才能喚醒。如下圖,假設(shè)某CAN BUS上有ECU1、ECU2、ECU3三個節(jié)點,ECU1關(guān)聯(lián)PNC 16和PNC17,ECU2關(guān)聯(lián)PNC 16,ECU3關(guān)聯(lián)PNC 17。
假設(shè):
t0時刻,只有ECU1和ECU2在通信,即:NM Msg只包含PNC16,且ECU1進(jìn)入RSS狀態(tài),ECU2在NOS狀態(tài),ECU3未有喚醒(處于BSM);
t1時刻,由于ECU1上層主動請求網(wǎng)絡(luò),ECU1需要喚醒ECU3參與通信,主動調(diào)用CanNm_NetworkRequest()接口請求網(wǎng)絡(luò)(比如:對應(yīng)的PNC17的VFC置位),同時發(fā)送的NM Msg中包含PNC 17。ECU3收到包含PNC17的NM Msg以后,網(wǎng)絡(luò)狀態(tài)由BSM進(jìn)入RMS狀態(tài),為了保證三個節(jié)點在同一網(wǎng)絡(luò)狀態(tài),因此,ECU1需要從RSS狀態(tài)切換到RMS狀態(tài),同時,ECU1發(fā)送的NM Msg中,Repeat Message Request Bit = 1,將ECU2由NOS狀態(tài)也拉回RMS狀態(tài),以此確保三個節(jié)點在相同的網(wǎng)絡(luò)狀態(tài)。不理解RMR Bit作用,可以參考前文勘誤篇(一):Autosar網(wǎng)絡(luò)管理:RepeatMessageRequestBit作用,你清楚嗎?;
t2時刻,Repeat Message Timer超時,三者脫離RMS狀態(tài),ECU1、ECU2、ECU3進(jìn)入NOS狀態(tài)。上述過程如下所示:
位置 2
此處說明,只要在NM(Network Mode)模式下調(diào)用
CanNm_NetworkRequest()接口,且CanNmPnHandleMultipleNetworkRequests ==TRUE,網(wǎng)絡(luò)狀態(tài)需要切換到RMS狀態(tài),且重啟Repeat Message Timer。分析同上,此處不再贅述。舉例說明PNC請求與Channel NM Status關(guān)系:
t0時刻,PNC #n保持請求(PNC #n = 1),假設(shè)PNC #n映射的Channel網(wǎng)絡(luò)狀態(tài)為NOS;
t1時刻,PnResetTime(2.95s)內(nèi)收到PNC #n = 0(或者沒有收到),PNC #n釋放;
t2時刻,PNC#n再次請求,PNC #n映射的Channel網(wǎng)絡(luò)狀態(tài)由NOS進(jìn)入RMS;
t3時刻,PNC#n保持請求,Channel由RMS進(jìn)入NOS狀態(tài);
t4時刻,2.95s時間內(nèi)沒有PNC#n請求,PNC#n釋放,Channel保持NOS狀態(tài);
t5時刻,PNC#n再次請求,同t2時刻。
2、網(wǎng)絡(luò)啟動,第一幀是否應(yīng)該是網(wǎng)絡(luò)管理報文?
從網(wǎng)絡(luò)狀態(tài)機(jī)可以看出,CanNm_PassiveStartup()、CanNm_RxIndication()、CanNm_NetworkRequest()接口的調(diào)用均可將節(jié)點網(wǎng)絡(luò)狀態(tài)切換到RMS。
CanNm_NetworkRequest():調(diào)用此接口,說明節(jié)點需要主動喚醒網(wǎng)絡(luò),如果此節(jié)點由BSM、PBSM模式進(jìn)入RMS狀態(tài),
第一幀報文需要是網(wǎng)絡(luò)管理報文,快速將網(wǎng)段內(nèi)其他節(jié)點喚醒;
CanNm_PassiveStartup()、CanNm_RxIndication():調(diào)用這兩個接口,個人理解:
第一幀報文沒有必要是網(wǎng)絡(luò)管理報文,因為總線上已經(jīng)有網(wǎng)絡(luò)管理報文在發(fā)送,說明有主動網(wǎng)絡(luò)節(jié)點發(fā)送了網(wǎng)絡(luò)管理報文,承擔(dān)著快速喚醒網(wǎng)絡(luò)的“重任”,所以接收節(jié)點無需保證第一幀報文是網(wǎng)絡(luò)管理報文,接收節(jié)點需要做的是把應(yīng)用報文快速發(fā)出,保證功能的快速使能。
3、CanNmMsgCycleOffset的使用場景
網(wǎng)絡(luò)喚醒時,各主動網(wǎng)絡(luò)節(jié)點均發(fā)送各自的NM Msg,會增加總線負(fù)載,為了降低網(wǎng)絡(luò)喚醒時的總線負(fù)載,會為每個主動網(wǎng)絡(luò)節(jié)點設(shè)置一個Offset值,比如:CanNmMsgCycleOffset。CanNmMsgCycleOffset的使能需要注意:使能快發(fā)模式時,CanNmMsgCycleOffset不適用,需要注意的其他條件,Autosar也給出了其他解釋,如下所示:
CASE 1:
CASE 2:
注意:
C
anNmMsgCycleOffset是發(fā)出第一幀網(wǎng)絡(luò)管理報文時的偏移值,即滿足NM Msg發(fā)送時,第一次發(fā)送NM Msg時的偏移。
審核編輯:劉清
-
RMS
+關(guān)注
關(guān)注
2文章
139瀏覽量
35853 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27607 -
Nos
+關(guān)注
關(guān)注
0文章
3瀏覽量
7331
發(fā)布評論請先 登錄
相關(guān)推薦
評論