
本文約6,268字,建議收藏閱讀
作者 | 糊涂振
出品 | 汽車電子與軟件
01
引 言
在前幾篇文章中,我們已經(jīng)深入剖析了CanDrv(硬件驅(qū)動(dòng)層)、CanIf(接口抽象層)和PduR(PDU路由層),它們分別解決了“怎么操作硬件”、“怎么調(diào)度硬件”和“數(shù)據(jù)該往哪送”的問題。但還缺一個(gè)關(guān)鍵環(huán)節(jié):應(yīng)用層的軟件組件(SWC)不認(rèn)識(shí)CAN ID、不認(rèn)識(shí)DLC,它們只認(rèn)識(shí)有業(yè)務(wù)含義的信號(hào)——車速、轉(zhuǎn)速、油門踏板位置、方向盤角度……,誰來把這些“業(yè)務(wù)信號(hào)”打包成底層能理解的PDU?誰來把底層收到的PDU拆解成應(yīng)用能認(rèn)出的信號(hào)?
解決這個(gè)問題的,正是本文的主角——Com(Communication模塊)。
Com模塊是AUTOSAR通信棧中離應(yīng)用最近的一層。應(yīng)用層完全不用考慮底層是CAN、LIN還是FlexRay,只需要通過Com提供的信號(hào)接口讀寫數(shù)據(jù)即可。Com模塊負(fù)責(zé)將信號(hào)打包成I-PDU發(fā)送給PduR,也將從PduR收到的I-PDU拆包成信號(hào)提供給應(yīng)用。如果說PduR是通信棧的“總交換機(jī)”,那Com就是通信棧的 “信號(hào)翻譯官” ——它把“業(yè)務(wù)語(yǔ)言”(Signal)翻譯成“傳輸語(yǔ)言”(I-PDU),也把“傳輸語(yǔ)言”翻譯回“業(yè)務(wù)語(yǔ)言”。

Source: AUTOSAR COM
本文將從架構(gòu)定位、信號(hào)與IPDU的關(guān)系、收發(fā)流程、傳輸模式、通知機(jī)制、信號(hào)網(wǎng)關(guān)到配置實(shí)踐,系統(tǒng)地剖析AUTOSAR Com模塊的底層邏輯,幫助你真正理解這個(gè)離應(yīng)用最近的通信模塊。
02
Com在AUTOSAR
架構(gòu)中的位置
2.1 通信棧全景
在AUTOSAR Classic Platform中,Com位于服務(wù)層(Services Layer),是通信服務(wù)模塊的核心組成部分。

Source: https://blog.csdn.net/xxdw1992/article/details/133749959
它的上下位置關(guān)系如下:
Application Layer(SWC/Runnables)
↓ ↑
RTE(運(yùn)行時(shí)環(huán)境)
↓ ↑
Com(通信模塊)← 本文主角
↓ ↑
PduR(PDU路由器)
↓ ↑
CanIf/LinIf/FrIf(通信接口模塊)
↓ ↑
CanDrv/LinDrv/FrDrv(驅(qū)動(dòng)層)
Com模塊為軟件組件(SWC)提供了標(biāo)準(zhǔn)化的通信接口,隱藏了底層通信的復(fù)雜性。應(yīng)用層只需要根據(jù)信號(hào)的實(shí)際意義進(jìn)行應(yīng)用開發(fā)即可,其余工作都可以交給底層軟件處理。
2.2 為什么需要Com?
這個(gè)問題可以反過來想:如果沒有Com會(huì)怎樣?
場(chǎng)景一:應(yīng)用發(fā)送車速信號(hào)。SWC想發(fā)一個(gè)“車速=80km/h”的信號(hào),如果沒有Com,SWC需要自己構(gòu)造CAN幀——填寫CAN ID、DLC、按照DBC定義的位偏移把80塞進(jìn)去——這等于讓應(yīng)用層工程師變成了協(xié)議工程師。
場(chǎng)景二:應(yīng)用接收發(fā)動(dòng)機(jī)轉(zhuǎn)速。SWC從CAN幀里收到了原始數(shù)據(jù),需要自己解析——從哪個(gè)bit開始、占幾個(gè)bit、是大端還是小端、要不要符號(hào)擴(kuò)展——每個(gè)SWC都要重復(fù)實(shí)現(xiàn)這些邏輯。
場(chǎng)景三:多總線通信。同一個(gè)信號(hào)可能來自CAN,也可能來自LIN。如果沒有Com,SWC需要區(qū)分“這個(gè)信號(hào)走哪個(gè)總線”,代碼與硬件強(qiáng)耦合。
Com的價(jià)值正在于此:它把“面向信號(hào)的世界”和“面向PDU的世界”徹底隔離。SWC只認(rèn)信號(hào)名和信號(hào)值,Com負(fù)責(zé)信號(hào)與PDU之間的雙向轉(zhuǎn)換。這正是AUTOSAR分層架構(gòu)的精髓所在。
03
Com的核心概念
在深入理解Com的工作機(jī)制之前,需要先掌握幾個(gè)核心概念。

Source: vector training
3.1 Signal(信號(hào))
Signal是Com模塊處理的基本數(shù)據(jù)單元。一個(gè)信號(hào)對(duì)應(yīng)DBC(CAN數(shù)據(jù)庫(kù))或LDF文件(LIN數(shù)據(jù)庫(kù))中定義的一個(gè)通信信號(hào)。
每個(gè)信號(hào)都有明確的物理含義——車速、轉(zhuǎn)速、溫度、開關(guān)狀態(tài)等。信號(hào)在DBC中定義了:
起始位 (Start Bit):在IPDU中的起始位置;
長(zhǎng)度 (Length):占用的bit數(shù);
字節(jié)序 (Byte Order):大端還是小端;
數(shù)據(jù)類型:uint8、uint16、sint32、float32等;
初始值、無效值等。
Com模塊為上層應(yīng)用提供了面向信號(hào)的接口——應(yīng)用通過`Com_SendSignal()`發(fā)送信號(hào),通過`Com_ReceiveSignal()`接收信號(hào)。應(yīng)用完全不需要知道這個(gè)信號(hào)在哪個(gè)IPDU里、在哪個(gè)bit位置、走哪條總線。
3.2 I-PDU (交互層協(xié)議數(shù)據(jù)單元)
I-PDU是Com與PduR之間傳遞的數(shù)據(jù)單元。一個(gè)I-PDU就是一幀完整的CAN報(bào)文——包含多個(gè)Signal打包在一起。
I-PDU由三部分組成:
數(shù)據(jù)緩沖區(qū) (Buffer):實(shí)際的數(shù)據(jù)內(nèi)容(一個(gè)或多個(gè)Signal按位排列);
長(zhǎng)度 (Length):數(shù)據(jù)的字節(jié)數(shù);
ID:唯一標(biāo)識(shí)這個(gè)PDU的編號(hào)。
Signal與I-PDU的關(guān)系:Signal是“業(yè)務(wù)數(shù)據(jù)”,I-PDU是“傳輸容器”。Com負(fù)責(zé)把多個(gè)Signal按照DBC定義的位排列方式打包進(jìn)I-PDU,也負(fù)責(zé)把收到的I-PDU拆包成一個(gè)個(gè)Signal。
3.3 Signal Group(信號(hào)組)
Signal Group是為了支持復(fù)雜數(shù)據(jù)類型而引入的概念。AUTOSAR COM模塊一致地發(fā)送和接收信號(hào)組,為復(fù)雜數(shù)據(jù)類型提供必要的一致性。
通俗地說,Signal Group就是一個(gè)I-PDU里面幾個(gè)Signal的集合,這幾個(gè)Signal的操作需要保持一致性。比如一個(gè)“時(shí)間”信號(hào)組包含“時(shí)、分、秒”三個(gè)Signal——這三個(gè)Signal必須同時(shí)更新才有意義,獨(dú)立獲取任何一個(gè)都會(huì)失去意義。
為了實(shí)現(xiàn)信號(hào)組內(nèi)容的一致性,Com為每個(gè)Signal Group額外設(shè)置了一片Shadow Buffer(影子緩沖區(qū)) 。在發(fā)送或接收Signal Group時(shí),數(shù)據(jù)先整體拷貝到Shadow Buffer,再整體拷貝到IPDU Buffer。拷貝過程中會(huì)關(guān)閉全局中斷,保證操作不被中斷干擾。
3.4 Update Bit(更新位)
Update Bit是一種信號(hào)級(jí)別的通知機(jī)制。
當(dāng)發(fā)送端調(diào)用`Com_SendSignal()`或`Com_SendSignalGroup()`時(shí),Com模塊會(huì)自動(dòng)設(shè)置該信號(hào)(或信號(hào)組)對(duì)應(yīng)的Update Bit。接收端檢測(cè)到Update Bit后,才會(huì)繼續(xù)后續(xù)的信號(hào)處理(字節(jié)序轉(zhuǎn)換、無效值檢查、過濾等);否則丟棄該信號(hào),停止后續(xù)處理。
關(guān)鍵點(diǎn):Update Bit每調(diào)用一次發(fā)送只會(huì)設(shè)置一次——即總線上只會(huì)呈現(xiàn)一次帶有Update Bit更新的I-PDU,后續(xù)都是Update Bit沒更新的I-PDU。
04
Com的三大核心任務(wù)
Com模塊承擔(dān)著三項(xiàng)核心任務(wù):信號(hào)打包與拆包、通信控制、數(shù)據(jù)后處理。

Source: https://blog.csdn.net/geek_liyang/article/details/142671389
4.1 任務(wù)一:信號(hào)打包與拆包
這是Com最基礎(chǔ)、最核心的職責(zé)。
打包(發(fā)送方向):
>應(yīng)用調(diào)用`Com_SendSignal()` → Com進(jìn)行字節(jié)序轉(zhuǎn)換 → 將信號(hào)值寫入I-PDU的指定位位置 → 根據(jù)傳輸模式?jīng)Q定是否發(fā)送 → 調(diào)用`PduR_ComTransmit()`
拆包(接收方向):
>下層調(diào)用`Com_RxIndication()` → Com對(duì)每個(gè)信號(hào)進(jìn)行字節(jié)序轉(zhuǎn)換 → 符號(hào)擴(kuò)展 → 過濾檢測(cè) → 通知應(yīng)用
4.2 任務(wù)二:通信傳輸控制
Com通過I-PDU Group來管理一組I-PDU的啟動(dòng)和停止。
I-PDU Group的核心規(guī)則:
一個(gè)I-PDU可以屬于0個(gè)或多個(gè)I-PDU Group;
一個(gè)I-PDU Group內(nèi)的所有I-PDU方向必須一致(全是發(fā)送或全是接收);
如果I-PDU屬于任何一個(gè)已啟動(dòng)的Group,則該I-PDU可通信;
如果I-PDU不屬于任何Group,則初始化后一直可通信(無法停止);
所有I-PDU Group在Com初始化后默認(rèn)處于停止?fàn)顟B(tài)。
通過`Com_IpduGroupStart()`和`Com_IpduGroupStop()`可以啟動(dòng)或停止一個(gè)I-PDU Group。當(dāng)一個(gè)Group被啟動(dòng)時(shí),Com會(huì)初始化最小延遲時(shí)間、重啟接收死限監(jiān)控、清除所有Update Bit等。當(dāng)一個(gè)Group被停止時(shí),對(duì)該Group內(nèi)信號(hào)的發(fā)送/接收調(diào)用將返回`COM_SERVICE_NOT_AVAILABLE`。
I-PDU Group的實(shí)際應(yīng)用場(chǎng)景:ECU上電后,某些報(bào)文組(如診斷報(bào)文)可能暫時(shí)不需要通信,可以通過停止對(duì)應(yīng)的I-PDU Group來節(jié)省總線帶寬和CPU資源。當(dāng)診斷會(huì)話激活時(shí),再啟動(dòng)對(duì)應(yīng)的Group。
4.3 任務(wù)三:數(shù)據(jù)后處理
Com在打包和拆包之外,還提供了一系列數(shù)據(jù)后處理功能:
字節(jié)序轉(zhuǎn)換 (Endianness Conversion):在不同系統(tǒng)之間傳輸時(shí)確保數(shù)據(jù)一致性
符號(hào)擴(kuò)展 (Sign Extension):將有符號(hào)信號(hào)從N位擴(kuò)展到目標(biāo)類型大小
信號(hào)過濾 (Signal Filtering):在接收側(cè)評(píng)估過濾條件
信號(hào)超時(shí)監(jiān)測(cè) (Signal Timeout):監(jiān)測(cè)接收信號(hào)是否超時(shí)
初始化值和無效值:提供默認(rèn)值和數(shù)據(jù)無效時(shí)的替代值
這些功能讓應(yīng)用層開發(fā)者完全不用關(guān)心底層的字節(jié)序、位偏移、符號(hào)位等細(xì)節(jié)——Com全部處理好了。
05
信號(hào)值與信號(hào)狀態(tài)
5.1 三種信號(hào)值
AUTOSAR Com定義了三種信號(hào)值:
初始值 (Init Value):Com啟動(dòng)后,將所有I-PDU和信號(hào)設(shè)置為初始值。Com使用配置參數(shù)`ComSignalInitValue`的低N位初始化每個(gè)N位信號(hào)。該值一直使用到被覆蓋為止。
數(shù)據(jù)無效值 (Invalid Value):當(dāng)應(yīng)用無法提供有效值時(shí),通過`Com_InvalidateSignal()`讓Com內(nèi)部執(zhí)行帶有配置的`ComSignalDataInvalidValue`的`Com_SendSignal()`。`ComTransferProperty`和傳輸模式?jīng)Q定了無效值在總線上的傳輸方式。
正常值 (Normal Value):初始化階段之后的有效值。
5.2 發(fā)送信號(hào)屬性
每個(gè)發(fā)送信號(hào)可以配置兩種屬性:
Triggered (觸發(fā)):調(diào)用`Com_SendSignal()`會(huì)觸發(fā)相關(guān)I-PDU的發(fā)送。但如果該I-PDU的發(fā)送模式被配置為Periodic (周期),則只更新信號(hào)值,不觸發(fā)立即發(fā)送,而是等到下一周期發(fā)送。
Pending (延遲):調(diào)用`Com_SendSignal()`不會(huì)觸發(fā)相關(guān)I-PDU的發(fā)送。信號(hào)值被更新到I-PDU中,但發(fā)送時(shí)機(jī)由I-PDU的傳輸模式?jīng)Q定。
06
I-PDU傳輸模式
這是Com模塊最復(fù)雜也最關(guān)鍵的部分。每個(gè)I-PDU可以支持兩種不同的傳輸模式。
6.1 三種基礎(chǔ)傳輸模式
DIRECT(直接模式):
I-PDU在每次信號(hào)更新時(shí)立即發(fā)送
只要有任意一個(gè)Signal被更新,就觸發(fā)發(fā)送
適合對(duì)實(shí)時(shí)性要求高的信號(hào)(如安全相關(guān)信號(hào))
PERIODIC(周期模式):
I-PDU以固定的時(shí)間周期發(fā)送
不管信號(hào)是否更新,周期到了就發(fā)
發(fā)送周期由`ComTxModeTimePeriod`配置
適合需要持續(xù)監(jiān)控的狀態(tài)信號(hào)(如心跳信號(hào))
MIXED(混合模式):
結(jié)合了DIRECT和PERIODIC的特點(diǎn)
信號(hào)更新時(shí)觸發(fā)發(fā)送(DIRECT行為)
同時(shí)也有一個(gè)最小發(fā)送間隔(Minimum Delay Timer)——兩次發(fā)送之間必須間隔至少`ComMinimumDelayTime`
如果信號(hào)更新頻率過高,實(shí)際發(fā)送頻率會(huì)被限制在最小間隔以上
適合既要實(shí)時(shí)響應(yīng)又要控制總線負(fù)載的場(chǎng)景
6.2 傳輸模式條件(TMC)
AUTOSAR COM規(guī)范中,同一I-PDU可以設(shè)置兩種發(fā)送模式。對(duì)其中各信號(hào)的傳輸模式條件(TMC)進(jìn)行計(jì)算后,I-PDU選擇其中一種模式進(jìn)行發(fā)送。
簡(jiǎn)單來說,TMC允許I-PDU在不同條件下切換不同的傳輸模式。例如:
正常運(yùn)行時(shí)使用PERIODIC模式(每100ms發(fā)一次);
當(dāng)某個(gè)關(guān)鍵信號(hào)發(fā)生變化時(shí)切換到DIRECT模式(立即發(fā)送)。
這種設(shè)計(jì)在保證實(shí)時(shí)性的同時(shí),有效控制了總線負(fù)載。
6.3 最小延遲時(shí)間(Minimum Delay Time)
為了避免總線過載,Com支持配置I-PDU之間的最小發(fā)送間隔。
`ComMinimumDelayTime`定義了同一個(gè)I-PDU兩次連續(xù)發(fā)送之間的最小時(shí)間間隔。當(dāng)I-PDU被觸發(fā)發(fā)送時(shí),如果距離上一次發(fā)送的時(shí)間小于`ComMinimumDelayTime`,本次發(fā)送會(huì)被延遲到最小間隔到期之后。
這對(duì)于高頻信號(hào)尤其重要——防止一個(gè)信號(hào)每秒變化1000次時(shí),總線被同一幀報(bào)文刷爆。
07
收發(fā)流程詳解
7.1 發(fā)送流程(下行)

Source: specification of AUTOSAR COM
完整的發(fā)送流程如下:
Step 1: 應(yīng)用調(diào)用Com_SendSignal(SignalId, SignalValue)
↓
Step 2: Com進(jìn)行字節(jié)序轉(zhuǎn)換(大端/小端轉(zhuǎn)換)
↓
Step 3: 將轉(zhuǎn)換后的信號(hào)值寫入I-PDU的指定位位置
↓
Step 4: 設(shè)置對(duì)應(yīng)的Update Bit(如有配置)
↓
Step 5: 根據(jù)信號(hào)屬性(Triggered/Pending)和I-PDU傳輸模式?jīng)Q定是否立即發(fā)送
↓
Step 6: 如果是Triggered且非Periodic模式 → 立即調(diào)用PduR_ComTransmit()
↓
Step 7: 如果是Pending或Periodic模式 → 等待周期到達(dá)或下次觸發(fā)
↓
Step 8: 啟動(dòng)發(fā)送死限監(jiān)控定時(shí)器
↓
Step 9: PduR → CanIf → CanDrv → CAN總線
關(guān)鍵點(diǎn):
對(duì)于內(nèi)部信號(hào) (同一ECU內(nèi)通信),直接將信號(hào)數(shù)據(jù)復(fù)制到接收信號(hào)數(shù)據(jù)區(qū),并執(zhí)行通知操作
對(duì)于外部信號(hào) (需要通過總線發(fā)送),按照上述流程走完整路徑
`Com_SendSignal()`返回后,并不代表信號(hào)已經(jīng)發(fā)送到總線上——它只表示信號(hào)已成功寫入I-PDU緩沖區(qū)
7.2 接收流程(上行)

Source: specification of AUTOSAR COM
完整的接收流程如下:
Step 1: CAN總線 → CanDrv → CanIf → PduR
↓
Step 2: PduR調(diào)用Com_RxIndication(I-PDU ID, PduInfoPtr)
↓
Step 3: Com取消并重啟接收死限監(jiān)控定時(shí)器
↓
Step 4: 對(duì)I-PDU內(nèi)的每個(gè)信號(hào)依次處理:
a. 檢測(cè)Update Bit——如未置位則丟棄該信號(hào)
b. 字節(jié)序轉(zhuǎn)換(大小端)
c. 符號(hào)擴(kuò)展(有符號(hào)信號(hào))
d. 無效值檢查
e. 過濾檢測(cè)
↓
Step 5: 調(diào)用對(duì)應(yīng)的Notification回調(diào)通知應(yīng)用
↓
Step 6: 應(yīng)用通過Com_ReceiveSignal()讀取信號(hào)值
關(guān)鍵點(diǎn):
協(xié)議棧先處理I-PDU內(nèi)所有信號(hào),再處理所有信號(hào)組
如果信號(hào)配置了Update Bit但未置位,該信號(hào)會(huì)被丟棄,不通知應(yīng)用
接收死限監(jiān)控用于檢測(cè)報(bào)文是否超時(shí)未收到
08
通知機(jī)制 (Notification)
Com提供了多種通知機(jī)制,讓應(yīng)用層能夠感知通信事件。
8.1 信號(hào)級(jí)通知 vs I-PDU級(jí)通知
Com的Notification分為兩個(gè)層級(jí):
信號(hào)級(jí)通知(通過Update Bit):
無需額外配置
發(fā)送端設(shè)置Update Bit,接收端檢測(cè)到后觸發(fā)信號(hào)處理
適合信號(hào)級(jí)別的變化通知
I-PDU級(jí)通知(通過Notification配置):
需要配置超時(shí)參數(shù)
如果信號(hào)沒有配置Update Bit,可以通過配置Notification實(shí)現(xiàn)報(bào)文級(jí)別的超時(shí)通知
適合報(bào)文級(jí)別的狀態(tài)監(jiān)控
8.2 回調(diào)函數(shù)類型
Com支持多種回調(diào)函數(shù):
接收通知 (Rx Indication):收到I-PDU后通知應(yīng)用
發(fā)送確認(rèn) (Tx Confirmation):I-PDU發(fā)送完成后通知應(yīng)用
超時(shí)通知 (Timeout Notification):信號(hào)超時(shí)未收到時(shí)觸發(fā)
信號(hào)無效通知 (Invalidation Notification):信號(hào)被標(biāo)記為無效時(shí)觸發(fā)
這些回調(diào)讓應(yīng)用層能夠及時(shí)感知通信狀態(tài)變化,實(shí)現(xiàn)通信質(zhì)量監(jiān)控和故障診斷。
09
基于信號(hào)的網(wǎng)關(guān)
(Signal Gateway)
除了PduR層面的PDU網(wǎng)關(guān)外,Com還支持基于信號(hào)的網(wǎng)關(guān)(Signal Gateway)。

Source: specification of AUTOSAR COM
9.1 什么是信號(hào)網(wǎng)關(guān)?
信號(hào)網(wǎng)關(guān)是Com模塊內(nèi)部的功能,通過`ComGwMapping`配置實(shí)現(xiàn)。
它的核心能力是:將一個(gè)信號(hào)從一個(gè)I-PDU路由到另一個(gè)I-PDU。可以理解為“信號(hào)級(jí)別的復(fù)制轉(zhuǎn)發(fā)”:
1:1路由:一個(gè)源信號(hào)路由到一個(gè)目標(biāo)信號(hào)
1:N路由:一個(gè)源信號(hào)路由到多個(gè)目標(biāo)信號(hào)
9.2 信號(hào)網(wǎng)關(guān) vs PDU網(wǎng)關(guān)

信號(hào)網(wǎng)關(guān)的典型場(chǎng)景:CAN總線的車速信號(hào)轉(zhuǎn)發(fā)到LIN總線。CAN報(bào)文中的車速信號(hào)可能在第3字節(jié)的bit2-7,而LIN報(bào)文期望車速信號(hào)在第1字節(jié)的bit0-7。Com的信號(hào)網(wǎng)關(guān)可以完成這個(gè)“信號(hào)提取+格式轉(zhuǎn)換+重新打包”的完整過程。
信號(hào)網(wǎng)關(guān)配置完成后,通過周期調(diào)用`Com_MainFunctionRouteSignals()`即可執(zhí)行路由,無需其他API調(diào)用。
關(guān)鍵限制:信號(hào)網(wǎng)關(guān)只支持靜態(tài)路由—路由路徑在配置階段確定,不支持運(yùn)行時(shí)動(dòng)態(tài)更改。
10
Com的配置要點(diǎn)
10.1 從DBC到Com配置
Com模塊的配置通常基于DBC文件:
1. 導(dǎo)入DBC:將整車廠提供的DBC文件導(dǎo)入配置工具(如DaVinci、ISOLAR-AB);
2. 自動(dòng)生成:工具根據(jù)DBC自動(dòng)生成Signal和I-PDU的配置;
3. 手動(dòng)調(diào)整:在自動(dòng)生成的基礎(chǔ)上調(diào)整傳輸模式、Notification、Filter等參數(shù)。

Source: https://blog.csdn.net/geek_liyang/article/details/142671389
10.2 核心配置項(xiàng)
Signal配置:
- `ComSignalId`:信號(hào)唯一標(biāo)識(shí)
- `ComSignalType`:數(shù)據(jù)類型(uint8、sint16、float32等)
- `ComSignalInitValue`:初始值
- `ComSignalDataInvalidValue`:無效值
- `ComSignalEndianness`:字節(jié)序(大端/小端)
- `ComSignalUpdateBit`:是否啟用Update Bit
I-PDU配置:
- `ComIPduId`:I-PDU唯一標(biāo)識(shí)
- `ComIPduDirection`:發(fā)送/接收
- `ComIPduSignalRefs`:包含的信號(hào)列表
- `ComIPduGroupRefs`:所屬的I-PDU Group
傳輸模式配置:
- `ComTxModeMode`:DIRECT/PERIODIC/MIXED
- `ComTxModeTimePeriod`:周期模式的發(fā)送周期
- `ComTxModeTimeOffset`:周期模式的初始偏移
- `ComMinimumDelayTime`:最小發(fā)送間隔
10.3 常見配置陷阱
陷阱一:Update Bit配置不一致。發(fā)送端配置了Update Bit但接收端未配置檢測(cè)邏輯,導(dǎo)致接收端永遠(yuǎn)收不到信號(hào)更新通知。
陷阱二:信號(hào)組Shadow Buffer未配置。Signal Group必須配置Shadow Buffer才能保證數(shù)據(jù)一致性。如果忘記配置,信號(hào)組內(nèi)的信號(hào)可能被獨(dú)立更新,導(dǎo)致數(shù)據(jù)不一致。
陷阱三:傳輸模式選擇不當(dāng)。將所有I-PDU都配置為DIRECT模式會(huì)導(dǎo)致總線負(fù)載過高;全部配置為PERIODIC模式又會(huì)影響實(shí)時(shí)性。需要根據(jù)信號(hào)的實(shí)際需求合理選擇。
陷阱四:最小延遲時(shí)間配置過大。`ComMinimumDelayTime`配置過大可能導(dǎo)致高頻信號(hào)丟失或延遲過大。
11
Com與上下層模塊的協(xié)作

Source: https://www.eeworld.com.cn/qcdz/eic696342.html
11.1 Com與RTE的協(xié)作
RTE是Com與SWC之間的橋梁:
發(fā)送方向:
- SWC通過RTE提供的接口寫入信號(hào)值
- RTE調(diào)用`Com_SendSignal()`將信號(hào)傳遞給Com
接收方向:
- Com處理完接收信號(hào)后調(diào)用Notification回調(diào)
- RTE將信號(hào)值傳遞給對(duì)應(yīng)的SWC
11.2 Com與PduR的協(xié)作
發(fā)送方向:
- Com完成信號(hào)打包后調(diào)用`PduR_ComTransmit(PduId, PduInfoPtr)`
- PduR根據(jù)路由表轉(zhuǎn)發(fā)到對(duì)應(yīng)的總線接口
接收方向:
- PduR收到I-PDU后調(diào)用`Com_RxIndication(PduId, PduInfoPtr)`
- Com進(jìn)行拆包和信號(hào)處理
發(fā)送確認(rèn):
- PduR通過`Com_TxConfirmation(PduId)`通知Com發(fā)送完成
- Com更新發(fā)送狀態(tài)并觸發(fā)Tx Notification
11.3 Com與ComM的協(xié)作
ComM(通信管理器)通過控制I-PDU Group來管理通信。當(dāng)ComM需要開啟或關(guān)閉某個(gè)通信通道時(shí),會(huì)調(diào)用`Com_IpduGroupStart()`或`Com_IpduGroupStop()`來控制對(duì)應(yīng)的I-PDU Group。
12
總 結(jié)
Com作為AUTOSAR通信棧中離應(yīng)用最近的一層,承擔(dān)著連接應(yīng)用層“信號(hào)世界”與底層“PDU世界”的橋梁作用。理解Com的關(guān)鍵在于把握以下幾點(diǎn):
1. 架構(gòu)定位:Com位于RTE與PduR之間,是面向信號(hào)的最后一層通信抽象;
2. 核心概念:
- Signal:業(yè)務(wù)數(shù)據(jù)的最小單元;
- I-PDU:信號(hào)的傳輸容器;
- Signal Group + Shadow Buffer:保證復(fù)雜數(shù)據(jù)類型的一致性;
- Update Bit:信號(hào)級(jí)別的通知機(jī)制。
3. 三大核心任務(wù):
- 信號(hào)打包與拆包:Signal ? I-PDU的雙向轉(zhuǎn)換;
- 通信傳輸控制:通過I-PDU Group管理通信的啟動(dòng)/停止;
- 數(shù)據(jù)后處理:字節(jié)序轉(zhuǎn)換、符號(hào)擴(kuò)展、過濾、超時(shí)監(jiān)測(cè)等。
4. 傳輸模式:每個(gè)I-PDU支持DIRECT/PERIODIC/MIXED兩種模式,通過TMC在不同條件下切換;
5. 通知機(jī)制:通過Update Bit(信號(hào)級(jí))和Notification配置(I-PDU級(jí))實(shí)現(xiàn)通信事件通知;
6. 信號(hào)網(wǎng)關(guān):Com內(nèi)部支持信號(hào)級(jí)別的路由轉(zhuǎn)發(fā),實(shí)現(xiàn)跨總線的信號(hào)重映射。
Com與PduR的本質(zhì)區(qū)別:PduR解決的是“數(shù)據(jù)該往哪送”的問題(路由),Com解決的是“數(shù)據(jù)長(zhǎng)什么樣”的問題(信號(hào)與PDU的轉(zhuǎn)換)。前者是縱向路由,后者是橫向翻譯。兩者分工明確,共同構(gòu)成了AUTOSAR通信棧的完整骨架。
Com模塊不生產(chǎn)數(shù)據(jù),不路由數(shù)據(jù),但它讓應(yīng)用層能夠用最自然的方式讀寫數(shù)據(jù)——應(yīng)用工程師只需要知道“車速信號(hào)叫什么名字、值是多少”,剩下的字節(jié)序、位偏移、打包拆包,全部由Com搞定。這正是AUTOSAR分層架構(gòu)的終極價(jià)值:讓每一層只關(guān)心自己該關(guān)心的事。
