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