AUTOSAR 網絡管理NM

關於AUTOSAR的底層驅動、平臺OS、平臺應用、RTE、應用軟件這些和VxWorks653很相似,就不多贅述了。

此處說一下AUTOSAR獨有的網絡通訊規範和網絡管理模塊NM

一、AUTOSAR COM

AUTOSAR COM是AUTOSAR標準的一部分,它是從OSEK COM標準的基礎上發展而來的。AUTOSAR COM提供了一種標準化的訪問汽車通訊系統和ECU(Electronic Control Unit)通訊的方式,提出了一個在不同速率的總線網絡之間進行數據交換的方法。它爲汽車控制單元應用軟件提供了一個統一的通信環境,爲內部和外部通信定義了公共的軟件通信接口和行爲,增強了應用軟件模塊的可移植性。

依據AUTOSAR的描述,這個跟IMA的RDIU很類似。實現不同數據協議和速率的數據的相互裝換,然後發向目的ECU。

AUTOSAR COM提供了基本的通信服務,它有明確的上層模塊RTE(Runtime Environment)和下層模塊PDU Router。

在發送過程中,應用層調用COM層提供的信號或信號組發送函數,根據配置,信號或信號組的數據經過字節順序轉換後被更新到I-PDU(Interaction Layer Protocol Data Unit)中相應的位置中。AUTOSAR COM規範中同一I-PDU可以設置兩種發送模式,對其中各信號的傳輸模式條件進行計算,I-PDU選擇其中一種發送模式進行發送。然後啓動發送死限監控,調用PduR_ComTransmit()函數將I-PDU發送到底層。

在接收過程中,當底層接收到I-PDU時,底層將調用COM層提供的指示函數Com_RxIndication(),取消並重啓接收死限監控,將I-PDU的數據從底層拷貝到COM中。調用信號或信號組的接收函數後,該I-PDU中的信號或信號組將經過字節順序轉換、符號擴展和接收過濾後,數據被拷貝到應用層。

通信系統核心模塊的實現
通信系統主要實現信號或信號組的收發功能,以下主要介紹信號發送的實現。首先簡要介紹一下AUTOSAR COM中特有的傳輸模式切換。

傳輸模式切換
AUTOSAR COM規範定義了4種信號傳輸模式:

直接/N次傳輸模式
週期傳輸模式
混合傳輸模式
None傳輸模式。
在AUTOSAR COM規範中允許爲每個I-PDU靜態配置兩種不同的傳輸模式。

在AUTOSAR COM規範中通過傳輸模式切換,來選擇I-PDU中的其中一種傳輸模式進行傳輸。

首先使用過濾機制判斷I-PDU中各信號的發送模式條件,同時更新I-PDU中的信號;
再通過各信號的判斷結果來計算該I-PDU的TMS(transmission mode selector)。若至少有一個C( Si,IPDUk)爲True,則TMS爲True;若所有C(Si,IPDUk)都爲False,則TMS爲False。其中C(Si,IPDUk)爲傳輸模式條件該條件與IPDUk中的信號Si相關。
 

 

下面通過一個用例簡要說明傳輸模式的切換。

用例中進行週期傳輸和直接/N次傳輸之間的切換(N=3)。
根據I-PDU的傳輸配置,當TMS(transmission mode selector)判斷爲真時,設置傳輸模式爲週期傳輸,反之爲直接/N次傳輸。上層給定值V=a(此時TMS判斷爲真),進行週期傳輸;當值V更新爲b時(此時TMS判斷爲假),進行直接/N次傳輸模式,傳輸三次。由圖3可知,隨着V值的更新該I-PDU的傳輸模式在這兩種傳輸模式之間切換。

信號發送的實現

首先根據該信號的相關配置,判定其是內部消息還是外部消息。
對於內部發送,直接將信號數據複製到接收信號數據區,並執行通知操作;
對於外部發送,若該信號發送屬性爲觸發,則該信號所屬的I-PDU將立即發送(除非該I-PDU發送模式爲週期傳輸模式),若該信號發送屬性爲延遲,則不進行傳輸,發送時,信號經過字節順序轉換後數據被複制到I-PDU中,同時設置相關更新位信息,然後根據該I-PDU的TMS切換傳輸模式,進行傳輸並設置啓動相關定時器。各傳輸模式的傳輸過程與OSEK COM中大致相同。
信號接收的實現

首先判定是內部信號還是外部信號。
對於內部接收,直接將信號數據複製到接收信號數據區;
對於外部接收,首先判斷對於的I-PDU組是否啓動,若啓動,返回E_OK,否則返回COM_STOP,取消並重啓該I-PDU的相關死限監控定時器,將數據複製到I-PDU數據區,I-PDU中的信號經過字節書序轉換、符號擴展和過濾機制後,複製到接收信號數據區,再執行通知操作,通知上層軟件調用相關API函數接收信號。
 

二. 網絡管理NM

這裏的NM主要是針對Can協議的網路管理。

AUTOSAR CanNM的核心思想主要歸納爲以下兩條:

1.  如果節點需要保持通信,則節點需要週期的發送NMPDUs,否則停止發送NMPDUs

2.     如果總線上的所有節點不需要使用總線,那麼總線上過了一段時間沒有NMPDUs時,則會進入Bus-Sleep Mode。

 

工作模式和狀態

 

CanNm一共有三個工作模式

1.  Network Mode

2.  PrepareBus-Sleep Mode

3.  Bus-Sleep Mode

模式的改變應該通過回調函數通知上層。

下面單獨說每種模式

 

(1)Network Mode

Network Mode又包括三個內部狀態

1. Repeat Message State
2. Normal Operation State
3. Ready Sleep State

①Repeat Message State

這個模式被用來確保從Bus-Sleep or Prepare Bus-Sleep到Network Mode的節點被總線上面其他節點發現。這個狀態可以用來檢測總線上的節點。
當進入Repeat Message State時,節點應該開始傳送NMPDUs。
在Repeat Message State時,當NM-Timeout Timer溢出,CanNm模塊應該重載Timer。
CanNm模塊應該在Repeat Message State 下保持一段時間,這段時間可以通過CANNM_REPEAT_MESSAGE_TIME來進行配置。
當離開Repeat Message State的時候,如果節點需要通信,則進入Normal Operation State;如果節點不需要通信,則進入Ready Sleep State。並且清空Repeat Message Bit。

 

②Normal Operation State

這個狀態可以保持總線處於喚醒狀態。從Ready sleep state進入這個狀態的時候應該發送NMPDUs。
在Normal Operation State當NM-Timeout Timer溢出,CanNm模塊應該重載Timer。
如果節點不需要使用通信,則網絡應該被釋放,節點應該進入Ready Sleep State。
如果節點接收到Repeat Message Request Bit,則節點進入Repeat Message State。如果節點自身需要進入Repeat Message State,則該節點進入Repeat Message State並且設置Repeat Message Request Bit。

 

③ReadySleep State

這個狀態是爲了如果本節點已經準備釋放總線,而其他節點還需要使用總線的時候,在這個狀態下等待其他總線上的節點進入Perpere Bus-Sleep Mode。進入這個狀態之後,CanNm模塊應該停止NMPDUs的傳送。
如果NM-Timeout Timer溢出,節點將會進入Prepare Bus-Sleep Mode。
如果該節點需要使用總線,則節點進入Nomal Operation State。
如果節點接收到Repeat Message Request Bit,則節點進入Repeat Message State。如果節點自身需要進入Repeat Message State,則該節點進入Repeat Message State並且設置Repeat Message Request Bit。

(2)PrepareBus-Sleep Mode

 

這個狀態是爲了等待總線上的所有節點能夠在進入Bus-Sleep Mode之前,有時間停止節點的active狀態如清空隊列中爲發送的報文。在Prepare Bus –Sleep Mode下,所有節點都靜默下來。

當節點進入PrepareBus Mode時,應該通知上層應用。通過配置CANNM_WAIT_BUS_SLEEP_TIME參數,可以改變節點在PrepareBus-Sleep Mode停留的時間,在這段時間之後節點將會進入其他狀態。

在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上層應用請求通信時,節點將進入Network Mode中的Normal operation State。

 

(3)Bus-SleepMode

 

Bus-Sleep Mode的目的是當沒有消息被傳送的時候可以減少能量的消耗。在Bus-Sleep Mode下面,節點可以被喚醒(如本地喚醒源和CAN線喚醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME兩個參數在整個總線上面的節點都應該時一樣的配置,保證了總線上的節點能夠統一的進行休眠。

當進入Bus-Sleep Mode時候,應該通知上層應用。

在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模塊應該調用Nm_NetworkStartIndication。

如果CanNm_PassiveStartUp被調用,則CAN NM模塊進入Network Mode 中的Repeat Message State。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章