AUTOSAR通信篇—COM模塊

AUTOSAR COM是AUTOSAR通訊的重要組成部分,它是從OSEK COM標準的基礎上發展而來的。它提出了一個不同速率的總線網絡之間進行數據交換的方法,爲汽車控制單元應用軟件提供了統一的通信環境,爲內部和外部通信定義了公共的軟件通信接口和行爲,增強了應用軟件模塊的可移植性。
在這裏插入圖片描述
圖1 AUTOSAR COM在分層架構中的位置

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

上下層關係

上層RTE

RTE使用AUTOSAR COM模塊的功能來發送和接收信號,AUTOSAR COM模塊爲RTE提供面向信號的數據接口,主要包括:

  • 將AUTOSAR信號打包傳送給I-PDUs
  • 將接收到的I-PDUs打包並將接收到的信號提供給RTE
  • 將接收到的I-PDUs信號路由到I-PDU進行傳輸
  • 將接收到的I-PDUs中的信號簇路由到I-PDU中進行傳輸
  • 通信傳輸控制(I-PDU組的啓動/停止)
  • 發送請求的複製
  • 保證傳輸I-PDUs之間的最小距離
  • 接收信號監控(信號超時)
  • 傳入信號的過濾機制
  • 不同的通知機制
  • 提供初始值和更新指示
  • 字節順序的轉換
  • 符號擴展
  • 每個I-PDU支持兩種不同的傳輸模式
  • 基於信號的網關
  • 支持大型和動態長度數據類型
  • 支持I-PDU計數器和I-PDU複製
    在這裏插入圖片描述
    圖2 COM和RTE的通信

下層PDUR

AUTOSAR COM模塊使用兩組PDU Router上層模塊API的聯合,即用於使用TP的上層模塊API和用於不使用TP的上層模塊API。由於AUTOSAR COM模塊通過簡單未片分的L-PDUs或通過片分的TP來傳輸I-PDUs,所以從這點來看,還是非常有必要的。
在這裏插入圖片描述
圖3 COM和PDUR的通信

來自底層PDU Router對AUTOSAR COM模塊的功能需求包括:

  • 輸入I-PDUs的指示 用於發送I-PDUs的發送接口,
  • 包括通信控制器是否已發送I-PDU的確認
  • 觸發接口,使PDU router能夠引起來自AUTOSAR COM模塊的傳輸
  • 用於TP通信的緩衝區處理
    在這裏插入圖片描述
    圖4 COM和RTE、PDUR的通信

信號值

AUTOSAR COM的信號值包括三種:

初始值:AUTOSAR COM模塊使用配置參數ComSignalInitValue的低N位初始化發送方和接收方的每個N位的信號類型, 配置的ComSignalInitValues也用於I-PDU的初始化信號。一個信號的ComSignalInitValue可以與ComSignalDataInvalidValue值相同。初始化階段會清空所有update-bits值。默認情況下,所有I-PDU組應在停止狀態,不得由Com_Init()調用啓動。

數據無效值:通過調用Com_InvalidateSignal, AUTOSAR COM模塊將在內部執行帶有配置ComSignalDataInvalidValue的Com_SendSignal。ComTransferProperty和傳輸模式決定了ComSignalDataInvalidValue在總線上的傳輸。內部執行的帶有數據無效值的Com_SendSignal,會決定被用作過濾器的數據無效值和TMS當前值。VFB僅爲複雜數據類型定義一個屬性。因此,一個失效的複雜數據類型到一個失效的信號簇的最佳映射是使一個信號簇的所有信號失效。因此,RTE還可以通過調用Com_InvalidateSignalGroup來請求使整個信號簇無效。

正常值:初始化階段之後的有效值,包括COM部分收發的信號值。

信號發送屬性和初始化

發送信號有Triggered屬性和Pending屬性。

Triggered屬性:調用Com_SendSignal( )服務請求具備Triggered屬性的信號發送,可以觸發相關I-PDU的發送,但是如果該I-PDU的發送模式被配置爲Peiodic時,只更新信號的值,不會觸發相關I-PDU的立即發送,而是在下一週期到來時觸發發送。

Pending屬性:Com_SendSignal( )服務請求調用具備Pending屬性的信號發送,不會觸發相關I-PDU的發送。

AUTOSAR COM在Com_Init()執行時,將初始化所有I-PDU內容,首先用默認值(ComTxIPduUnusedAreasDefault)表示字節,然後根據所包含信號的初始值(ComSignalInitValue)和更新位來表示位。當然,初始化過程中,無法使能ECU內部的通信功能。

信號的收發

發送過程

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

另外,還要根據該信號的配置,判定是內部消息還是外部消息。

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

接收過程

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

類似地,接收過程要判斷是內部信號還是外部信號。

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

掃碼關注【汽車控制與人工智能】,後臺回覆【開發流程】,免費獲取Vector版《基於AUTOSAR架構的控制系統開發流程》培訓材料。

字節序轉換和符號擴展

AUTOSAR COM 支持以下數據類型:boolean,uint8,uint16,uint32,uint64,sint8,sint16, sint32,sint64,uint8[n],float32和float64,其中uint8[n] 對應於UINT8_N或UINT8_DYN。
AUTOSAR COM支持所有有符號和無符號整型數據類型的字節序轉換,同時會將非整型數據類型視爲對應匹配的整數數據類型,或者不解釋它們的內容,防止它們的ComSignalEndianness被配置爲OPAQUE。對於不透明數據的轉換,必須配置爲OPAQUE。AUTOSAR COM會擴展接收信號ComSignalType的大小。

AUTOSAR COM會在接收端濾出想要過濾的信號,並評估每次過濾的條件。同時,會在發送端對發送模式條件(TMC)採用過濾機制。如果在發送API編寫相應的信號之前對過濾器進行評估,則需要一種方法來確定該信號的過濾器狀態。有些過濾器需要新值來計算過濾器的值。但是,只有在使用一個發送API更新信號之後才能使用它。因此,有必要在第一次發送之前定義新值過濾器使用的值。

傳輸模式切換

COM模塊主要實現信號或信號簇的收發功能,下面以信號發送的實現展開。首先簡要介紹一下AUTOSAR COM中特有的傳輸模式切換。

AUTOSAR COM定義了4種信號傳輸模式:

1. 直接/N次傳輸模式(Direct/n-times模式)

包含於該I-PDU的任何具備Triggered屬性的信號及信號組的更新都會觸發I-PDU的立即發送,當上層面模塊調用Com_SendSignal( )/Com_SendSignalGroup( )更新信號或者信號組時,Com層根據配置需求發送n次該I-PDU

2. 週期傳輸模式(Periodic 模式)

用戶配置發送週期,只有該I-PDU的週期到來時纔會觸發該I-PDU的發送,上層模塊調用Com_SendSignal()/Com_SendSignalGroup( )只更新信號及信號組的內容

3. 混合傳輸模式(Mixed模式)

Direct/n-times和Periodic的混合模式,當上層模塊調用Com_SendSignal( )/Com_SendSignalGroup( )請求該I-PDU包含的信號/信號組的發送時,將會觸發該I-PDU的直接n次發送,同時,用戶配置的週期到來也會觸發該I-PDU的發送

4. None傳輸模式

無論何時COM層不能夠觸發擁有該發送模式的I-PDU的發送,只有PduR模塊調用Com_TriggerTransmit()服務才能夠觸發該I-PDU的發送

在AUTOSAR COM規範中允許爲每個I-PDU靜態配置兩種不同的傳輸模式,ComTxModeTrue和ComTxModeFalse。在AUTOSAR COM規範中通過傳輸模式切換,來選擇I-PDU中的其中一種傳輸模式進行傳輸。

首先使用過濾機制判斷I-PDU中各信號的發送模式條件,同時更新I-PDU中的信號。

再通過各信號的判斷結果來計算該I-PDU的TMS(transmission mode selector)。若至少有一個C( Si,IPDUk)爲True,則TMS爲True,對應I-PDU以用戶配置的ComTxModeTrue的發送模式發送;若所有C(Si,IPDUk)都爲False,則TMS爲False,對應I-PDU以用戶配置的ComTxModeFalse的發送模式發送。其中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的傳輸模式在這兩種傳輸模式之間切換。

TMC和TMS
發送模式條件: TMC

發送端信號的TMC(發送模式條件)的計算與接收端的信號過濾機制相同,但是,在發送端信號過濾並不會丟棄任何的信號,而只是用於計算信號TMC的值。

COM提供瞭如下八種信號過濾機制:

ALWAYS: 總是通過,若一個信號的過濾算法配置爲ALWAYS,那麼這個信號的TMC永遠爲True

NEVER: 總是不通過,若一個信號的過濾算法配置爲NEVER,那麼這個信號的TMC永遠爲False;

MASKED_NEW_EQUALS_X: 若一個信號的過濾算法配置爲MASKED_NEW_EQUALS_X時,只有當新值與掩碼按位與後等於設定的某一值時,這個信號的TMC纔等於True;

MASKED_NEW_DIFFERS_X: 若一個信號的過濾算法配置爲MASKED_NEW_DIFFERS_X時,只有當新值與掩碼按位與之後不等於設定的某一值時,這個信號的TMC才爲True;

MASKED_NEW_DIFFERS_MASKED_OLD: 若一個信號的過濾算法配置爲MASKED_NEW_DIFFERS_MASKED_OLD時,只有當新值與掩碼按位與之後的值不等於舊值與掩碼按位與之後的值時,這個信號的TMC才爲True;

NEW_IS_WITHIN: 若一個信號的過濾算法配置爲NEW_IS_WITHIN時,只有當新值在某一設定的範圍內時,這個信號的TMC才爲True;

NEW_IS_OUTSIDE: 若一個信號過濾算法配置爲NEW_IS_OUTSIDE時,只有當新值不在某一設定的範圍內時,這個信號的TMC才爲True;

ONE_EVERY_N:若一個信號的過濾算法配置爲ONE_EVERY_N時,該信號值每更新N次,這個信號的TMC值爲True;

發送模式選擇TMS

發送端的TMS,一個I-PDU的TMS的值是根據其所有下屬的信號的TMC結果決定的,若一個I-PDU下屬的信號中至少有一個信號的TMC計算爲True,那麼這個I-PDU的TMS爲True,只有該I-PD下屬的所有的信號的TMC都計算爲False時,該I-PDU的TMS才爲False。
在這裏插入圖片描述
圖5 通過TMS將兩個信號傳遞給I-PDU

總結來看,可以爲每個I-PDU配置兩種發送模式,在程序運行過程中,某I-PDU的發送模式是由TMS來決定,若一個I-PDU的TMS根據上述的算法計算爲True,那麼該I-PDU將以配置的True狀態下的發送模式進行發送。當一個I-PDU下屬的某個信號的過濾算法配置爲ALWAYS,那麼這個I-PDU將一直以用戶配置的TMS爲True狀態下發送模式進行發送。

信號網關

AUTOSAR COM提供了集成式信號網關,用於以1:n形式發送信號和信號簇。
在這裏插入圖片描述
圖6 COM模塊對信號發送的影響

如圖7和圖8所示,集成的信號網關充當接收器,用於所有被配置爲網關信號源的信號或信號簇。信號網關在接收到用於路由的信號或信號簇後,立即充當這些信號或信號簇的發送器。如圖6和圖8所示。如果集成的信號網關轉發信號/信號簇或SWC發送信號,則信號處理沒有區別。
在這裏插入圖片描述
圖7 COM模塊對信號接收的影響

由於網關關係是靜態配置的,一個優化的信號網關可能會跳過一些具體配置的處理階段。例如,字節序轉換在某些情況下是不必要的。當然,優化以提高信號網關性能爲目的,不會導致任何不同的邏輯行爲或目標總線上的不同表示。
在這裏插入圖片描述
圖8 COM模塊對集成信號網關的影響

如圖7所示,接收到的信號或信號簇可能在本地ECU上接收,同時也是網關動作的源。圖6和圖7只顯示了RTE接收到的信號簇的緩衝。集成的信號網關當然要確保一致地處理信號簇,但沒有預先確定的實現方法。

本文首發於公衆號“汽車控制與人工智能”,歡迎關注,一起討論,共同進步。

縮略詞:
CAN Communication Matrix:CAN通信矩陣,用來描述完整的CAN網絡,包括:涉及的CAN節點;CAN PDU的定義(ID和數據長度DLC);PDU的發送和接收信息。

Physical Channel:物理通道。代表CAN網絡的接口,不同CAN硬件單元的不同物理通道可以訪問不同的網絡。

DLC:Data Length Code,描述SDU長度的CAN信息。

L-PDU:Data Link Layer ProtocolData Unit,數據鏈接層的協議數據單元,包含標識符(ID), 數據長度(DLC)和數據(L-PDU)

L-SDU:Data Link Layer ServiceData Unit,數據鏈接層服務數據單元,它其中的數據傳輸到L-PDU中。

Hardware Object :硬件對象。硬件對象定義爲CAN硬件單元的CAN RAM中的消息緩衝區。也常稱爲消息對象。

HOH:Hardware ObjectHandle,硬件對象處理。硬件對象處理由CAN驅動程序定義和提供。通常每個HOH表示一個硬件對象。HOH被CAN接口層用作發送和讀取的參數,向CAN驅動程序請求。

L-PDU Handle:L-PDU處理被定義並放置在CAN接口層中。通常,每個L-PDU Handle包含Tx/Rx處理信息的常量結構。

CAN Controller:CAN控制器。一個CAN控制器直接服務一個物理通道。

N-PDU:CAN傳輸層的網絡協議數據單元。

N-SDU:CAN傳輸層的服務數據單元。其中的數據傳輸到N-PDU中。

PDU Router:協議數據單元路由。將I-PDU從一個模塊傳遞到另外一個模塊,PDURouter可以用於網關運行或內部路由。

Confirmation:通過確認,PDU路由器報告AUTOSAR COM模塊的請求已經成功完成。它是對COM請求的響應。例如,當PDU已成功傳送。

Data Invalid Value:數據無效值。由AUTOSAR COM模塊發送的值,指示發送方AUTOSAR軟件組件無法提供有效的值。

Dynamic Length Signal:動態長度信號是在運行時長度可以變化的信號。

Dynamic Length I-PDU:動態長度I-PDU是包含動態長度信號的I-PDU。它的長度取決於所包含的動態長度信號的長度。

Indication:一個指示是從PDU路由器到COM的異步信息,例如,確認某物已經被接收。

Init Value:啓動後,AUTOSAR COM模塊將I-PDUs和信號設置的初始 值。此值將一直使用到被覆蓋爲止。

I-PDU group:I-PDU組是COM模塊中相同方向(即發送或接收)的I-PDU的任意集合。

Large Signal:大信號是指信號太大,無法裝入基礎通信協議的單個L-PDU中。

Endianness Conversion:字節序轉換

Sign Extension:符號擴展

TMC:Transmission ModeConditions,傳輸模式的條件

TMS :Transmission Mode Selector,傳輸模式選擇器

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