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