前言
最近在研究AUTOSAR通信協(xié)議棧的時候發(fā)現(xiàn)對Com模塊的報文發(fā)送時機很是疑惑,產(chǎn)生了以下幾個問題:
(1)Com模塊如何實現(xiàn)事件幀發(fā)送?
(2)Com模塊如何實現(xiàn)報文周期的快慢切換發(fā)送?
本文先梳理一遍Com模塊的一些關(guān)鍵概念及重要機制,然后回答這些問題。
正文
1.幾個關(guān)鍵概念
1.1?ComTransferProperty
ComTransferProperty:信號(Signal)最重要的一個配置屬性,定義一個信號的寫訪問是否可以觸發(fā)相應(yīng)的I-PDU的傳輸。如果I-PDU被觸發(fā),這也取決于相應(yīng)的I-PDU的傳輸模式。有以下可選屬性:
PENDING:對該信號的寫訪問永遠不會觸發(fā)相應(yīng)的I-PDU的傳輸。
TRIGGERED:根據(jù)傳輸模式,對該信號的寫訪問可以觸發(fā)相應(yīng)的I-PDU的傳輸。
TRIGGERED_ON_CHANGE:根據(jù)傳輸模式的不同,對該信號的寫訪問可以觸發(fā)相應(yīng)的I-PDU的傳輸,但只有在寫入值與本地存儲的(最后發(fā)送或初始值)不同的情況下。
TRIGGERED_ON_CHANGE_WITHOUT_REPETITION:根據(jù)傳輸模式的不同,對該信號的寫訪問可以觸發(fā)相應(yīng)的I-PDU的傳輸一次而不重復(fù),但只有在寫入值與本地存儲的(最后發(fā)送或初始值)不同的情況下。
TRIGGERED_WITHOUT_REPETITION:根據(jù)傳輸模式,對該信號的寫訪問可以觸發(fā)相應(yīng)的I-PDU的傳輸一次,而無需重復(fù)。
1.2?ComFilter
ComFilter是信號Signal的一個配置容器,發(fā)送端和接收端信號都可以配置ComFilter。
對于接收信號(Signal)配置了ComFilter的話,如果過濾條件判斷為True,就將信號更新到RTE,如果過濾條件判斷為False,則就會丟棄這個信號值。
對于發(fā)送信號(Signal)配置了ComFilter的話,COM模塊應(yīng)使用發(fā)送端的過濾機制進行傳輸模式條件(TMC),但不得過濾發(fā)送端的信號。也就是通過一個發(fā)送IPDU上所有配置了ComFilter的Signal來進行ComTxMode的選擇,如果有一個配置了ComFilter的Signal的過濾機制判斷為True就選擇ComTxModeTrue的發(fā)送TMS配置參數(shù),如果所有配置了ComFilter的Signal的過濾機制判斷為False的話,則選擇ComTxModeFalse的發(fā)送TMS配置參數(shù)(后面詳解TMS機制)。
AUTOSAR COM提供了以下Signal濾波機制:
· ALWAYS
· NEVER
· MASKED_NEW_EQUALS_X
· MASKED_NEW_DIFFERS_X
· MASKED_NEW_DIFFERS_MASKED_OLD
· NEW_IS_WITHIN
· NEW_IS_OUTSIDE
· ONE_EVERY_N
AUTOSAR文檔沒有詳解每一個濾波機制,從字面意思猜測:
ALWAYS:過濾條件永遠判斷為TRUE
NEVER:過濾條件永遠判斷為FALSE
MASKED_NEW_EQUALS_X:Signal值為X時過濾條件判斷為TRUE
MASKED_NEW_DIFFERS_X:Signal值不為X時過濾條件判斷為TRUE
MASKED_NEW_DIFFERS_MASKED_OLD:Signal值和COM模塊保存的上一次(老的)值不同時過濾條件判斷為TRUE
NEW_IS_WITHIN :Signal值在范圍內(nèi)時過濾條件判斷為TRUE
NEW_IS_OUTSIDE:Signal值在范圍外時過濾條件判斷為TRUE
ONE_EVERY_N:周期性的過濾條件判斷為TRUE。
. set OCCURRENCE to zero when OCCURRENCE == PERIOD
. set FILTER to true, when OCCURRENCE == OFFSET
. increment OCCURRENCE after filter processing
1.3?ComTxMode
ComTxModeMode定了IPDU的傳輸模式。
NONE:不會發(fā)送
DIRECT:事件觸發(fā)發(fā)送
MIXED:周期觸發(fā)或者事件觸發(fā)發(fā)送
PERIODIC:周期發(fā)送
ComTxModeNumberOfRepetitions:定義傳輸模式DIRECT和傳輸模式MIXED的事件驅(qū)動部分的重復(fù)次數(shù)。
ComTxModeRepetitionPeriod:當(dāng)ComTxModeNumberOfRepetitions配置大于等于1且ComTxModeMode配置為DIRECT或MIXED時,定義多次傳輸?shù)闹貜?fù)周期(以秒為單位)。在混合傳輸模式下,只有事件驅(qū)動部分受到影響
ComTxModeTimeOffset:定義ComTxModeMode配置為PERIODIC或MIXED時,從Com_IpduGroupStart開始I-PDU到第一個傳輸請求之間的時間間隔(以秒為單位)。在混合傳輸模式下,只有周期部分受到影響。如果ComTxModeTimeOffset被省略或配置為0,第一次周期性傳輸將在下一次調(diào)用Com_MainFunctionTx時傳輸。
ComTxModeTimePeriod:在ComTxModeMode配置為periodic或MIXED的情況下,定義周期傳輸請求的重復(fù)周期(以秒為單位)。在混合傳輸模式下,只有周期部分受到影響。
2.傳輸模式選擇(TMC & TMCS)
TMC: Transmission Mode Condition。傳輸模式條件
TMS: Transmission Mode Selector。傳輸模式選擇器
每一個IPDU的配置容易ComIPdu下可以配置兩個不同發(fā)送模式的配置容器ComTxModeFalse和ComTxModeTrue,ComTxModeFalse和ComTxModeTrue下可以配置不同的IPDU發(fā)送時間參數(shù)。所謂的傳輸模式的選擇,也就是根據(jù)模式選擇結(jié)果選擇使用ComTxModeFalse和ComTxModeTrue下的哪一個時間參數(shù)。
一個發(fā)送(SEND)IPDU中包含有多個Signal,Signal如果配置了ComFilter,那么配置了ComFilter的Signal就會參與到IPDU的發(fā)送模式的選擇當(dāng)中,作為仲裁的輸入條件。
發(fā)送模式的選擇規(guī)則:假如有1...N個Signal配置了ComFilter,在仲裁的時候這N個Signal里面只要有一個Signal的濾波結(jié)果為TRUE,則Signal所在的IPDU的發(fā)送模式選擇為TRUE,就會選用ComTxModeTrue里面的時間參數(shù),如果N個Signal的的濾波結(jié)果為False,則Signal所在的IPDU的發(fā)送模式選擇為False,就會選用ComTxModeFalase里面的時間參數(shù)。默認選擇ComTxModeTrue里面的時間參數(shù),如果一個發(fā)送IPDU里面所有的Signal都沒有配置ComFilter則使用默認的發(fā)送時間參數(shù)。
問題:什么情況下會發(fā)生發(fā)送模塊的仲裁選擇?
答:在上層(RTE)調(diào)用Com_SendSignal的時候。
3.?不同傳輸模式的用例和必要的配置
3.1?Use case 1
用例1顯示了一個周期時間為tc的循環(huán)發(fā)送的I-PDU。這個I-PDU由所有具有ComTransferProperty PENDING的信號組成。它被配置為當(dāng)TMS計算為true時發(fā)生傳輸。
由于配置了ComFilter的參數(shù)ComFilterAlgorithm ALWAYS,當(dāng)TMS計算為false時,不需要配置傳輸模式。
對于I-PDU內(nèi)的所有信號,ComFilter的ComFilterAlgorithm參數(shù)是否設(shè)置為ALWAYS或是否未定義ComFilter(對TMS的評估沒有貢獻),對行為沒有任何影響。
3.2?Use case 2
用例2顯示了一個I-PDU,每當(dāng)上層(Com_SendSignal或Com_SendSignalGroup)給出一個值時,這個I-PDU就會被發(fā)送三次。兩次傳輸之間的時間是td。這個I-PDU由信號組成,這些信號都具有ComTransfer屬性觸發(fā)。它被配置為當(dāng)TMS計算為true時發(fā)生傳輸。
如果RTE在正在進行的重復(fù)周期完成之前有一個新的發(fā)送請求,則開始新的重復(fù)周期,并丟棄上一個重復(fù)周期的其余部分。
3.3?Use case 3
用例3顯示了一個I-PDU,如果值v = a (TMS計算為真),則循環(huán)時間tc1發(fā)送,如果值v = b (TMS計算為假),則循環(huán)時間tc2發(fā)送。I-PDU由信號組成,這些信號都具有ComTransferProperty PENDING。
由新值v = b引起的TMS切換,在下一個主函數(shù)中開始一個新的循環(huán),并將新值發(fā)送出去。然而,必須考慮最小延遲時間dt,因為ComEnableMDTForCyclicTransmission被設(shè)置為true.
3.4User case 4
用例4顯示了一個I-PDU,如果值v = a (TMS計算為true),如果值v = b (TMS計算為false),則該I-PDU以循環(huán)時間tc循環(huán)發(fā)送,當(dāng)RTE給出該值時,該I-PDU將發(fā)送三次。兩次傳輸之間的時間為td。I-PDU由所有具有ComTransferProperty triggers的信號組成。
從ComTxModeMode DIRECT切換到PERIODIC之后,在下一個主函數(shù)中開始循環(huán),并根據(jù)ComMin imumDelayTime dt發(fā)送新值a。
3.5Use case 5
用例5顯示了一個I-PDU,它以周期時間tc循環(huán)發(fā)送,如果RTE給出的值(相同或新的值)也會直接發(fā)送三次。這三次傳輸之間的時間總是td。I-PDU由所有具有ComTransferProperty triggers的信號組成。
如果由ComTxModeMode MIXED的周期部分引起的下一次傳輸應(yīng)該發(fā)生在DIRECT (N-Times)部分傳輸后的超時dt (ComMinimumDelayTime)內(nèi),則該發(fā)送將被延遲,直到最小延遲時間過去。然而,在此之后,周期部分的下一個周期被縮短,因此只有周期部分的中間相移,而沒有連續(xù)相移。
3.6Use case 6
用例6顯示了一個I-PDU,如果值v = b (TMS計算為false),則該I-PDU以周期時間tc2循環(huán)發(fā)送。如果值v = a (TMS計算為真),它將以周期時間tc1循環(huán)發(fā)送,當(dāng)值v = a由RTE給出時,它也將直接發(fā)送三次。這三次傳輸之間的時間總是td。I-PDU由所有具有ComTransferProperty triggers的信號組成。
這在實踐中的一個用法是,例如,控制窗戶升降電機的按鈕的信號。如果沒有按下按鈕,則會有一個很長的循環(huán)時間tc1。如果按下,此信息以短周期時間tc2分布。如果按鈕再次釋放,則從下一個主要功能開始,此信息將使用td分發(fā)三次,之后再次使用較長的循環(huán)時間。
3.7Use case 7
用例7類似于用例5,但是禁用了ComEnableMDTForCyclicTransmission,并將ComTxModeNumberOfRepetitions設(shè)置為1。
與用例5相反,這里的最小延遲計時器既沒有為循環(huán)部分的周期性傳輸啟動,也沒有為混合模式的直接部分的重復(fù)傳輸啟動。這可能導(dǎo)致在時間跨度dt內(nèi)連續(xù)兩次傳輸,如場景b和c所示。
4.問題回答
問題1:Com模塊如何實現(xiàn)事件幀發(fā)送?
答:我們需要把需要事件幀發(fā)送的IPDU的ComTxModeMode配置為DIRECT,同事IPDU中的Signal的ComTransferProperty配置為TRIGGERED(或者TRIGGERED_xxx)。這樣當(dāng)我們在SWC通過RTE寫這個信號的(調(diào)用Com_SendSignal)的時候就會觸發(fā)事件幀的發(fā)送。
問題2:Com模塊如何實現(xiàn)報文周期的快慢切換發(fā)送?
答:我們需要把需要切換報文周期時間的IPDU的ComTxModeTrue和ComTxModeFalse兩個配置容器里面的時間參數(shù)配置為快慢周期兩種不同配置,然后把IPDU中用來觸發(fā)發(fā)送模式切換的Signal的ComFilter配置為符合我們需求(例如配置為Value == X濾波值為True,否則為False),這樣在SWC中通過寫Signal(調(diào)用Com_SendSignal)的不同值就能觸發(fā)IPDU以不同的周期發(fā)送。
編輯:黃飛
?
評論
查看更多