前言
最近在研究AUTOSAR通信協議棧的時候發現對Com模塊的報文發送時機很是疑惑,產生了以下幾個問題:
(1)Com模塊如何實現事件幀發送?
(2)Com模塊如何實現報文周期的快慢切換發送?
本文先梳理一遍Com模塊的一些關鍵概念及重要機制,然后回答這些問題。
正文
1.幾個關鍵概念
1.1ComTransferProperty
ComTransferProperty:信號(Signal)最重要的一個配置屬性,定義一個信號的寫訪問是否可以觸發相應的I-PDU的傳輸。如果I-PDU被觸發,這也取決于相應的I-PDU的傳輸模式。有以下可選屬性:
PENDING:對該信號的寫訪問永遠不會觸發相應的I-PDU的傳輸。
TRIGGERED:根據傳輸模式,對該信號的寫訪問可以觸發相應的I-PDU的傳輸。
TRIGGERED_ON_CHANGE:根據傳輸模式的不同,對該信號的寫訪問可以觸發相應的I-PDU的傳輸,但只有在寫入值與本地存儲的(最后發送或初始值)不同的情況下。
TRIGGERED_ON_CHANGE_WITHOUT_REPETITION:根據傳輸模式的不同,對該信號的寫訪問可以觸發相應的I-PDU的傳輸一次而不重復,但只有在寫入值與本地存儲的(最后發送或初始值)不同的情況下。
TRIGGERED_WITHOUT_REPETITION:根據傳輸模式,對該信號的寫訪問可以觸發相應的I-PDU的傳輸一次,而無需重復。
1.2ComFilter
ComFilter是信號Signal的一個配置容器,發送端和接收端信號都可以配置ComFilter。
對于接收信號(Signal)配置了ComFilter的話,如果過濾條件判斷為True,就將信號更新到RTE,如果過濾條件判斷為False,則就會丟棄這個信號值。
對于發送信號(Signal)配置了ComFilter的話,COM模塊應使用發送端的過濾機制進行傳輸模式條件(TMC),但不得過濾發送端的信號。也就是通過一個發送IPDU上所有配置了ComFilter的Signal來進行ComTxMode的選擇,如果有一個配置了ComFilter的Signal的過濾機制判斷為True就選擇ComTxModeTrue的發送TMS配置參數,如果所有配置了ComFilter的Signal的過濾機制判斷為False的話,則選擇ComTxModeFalse的發送TMS配置參數(后面詳解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值在范圍內時過濾條件判斷為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.3ComTxMode
ComTxModeMode定了IPDU的傳輸模式。
NONE:不會發送
DIRECT:事件觸發發送
MIXED:周期觸發或者事件觸發發送
PERIODIC:周期發送
ComTxModeNumberOfRepetitions:定義傳輸模式DIRECT和傳輸模式MIXED的事件驅動部分的重復次數。
ComTxModeRepetitionPeriod:當ComTxModeNumberOfRepetitions配置大于等于1且ComTxModeMode配置為DIRECT或MIXED時,定義多次傳輸的重復周期(以秒為單位)。在混合傳輸模式下,只有事件驅動部分受到影響
ComTxModeTimeOffset:定義ComTxModeMode配置為PERIODIC或MIXED時,從Com_IpduGroupStart開始I-PDU到第一個傳輸請求之間的時間間隔(以秒為單位)。在混合傳輸模式下,只有周期部分受到影響。如果ComTxModeTimeOffset被省略或配置為0,第一次周期性傳輸將在下一次調用Com_MainFunctionTx時傳輸。
ComTxModeTimePeriod:在ComTxModeMode配置為periodic或MIXED的情況下,定義周期傳輸請求的重復周期(以秒為單位)。在混合傳輸模式下,只有周期部分受到影響。
2.傳輸模式選擇(TMC & TMCS)
TMC: Transmission Mode Condition。傳輸模式條件
TMS: Transmission Mode Selector。傳輸模式選擇器
每一個IPDU的配置容易ComIPdu下可以配置兩個不同發送模式的配置容器ComTxModeFalse和ComTxModeTrue,ComTxModeFalse和ComTxModeTrue下可以配置不同的IPDU發送時間參數。所謂的傳輸模式的選擇,也就是根據模式選擇結果選擇使用ComTxModeFalse和ComTxModeTrue下的哪一個時間參數。
一個發送(SEND)IPDU中包含有多個Signal,Signal如果配置了ComFilter,那么配置了ComFilter的Signal就會參與到IPDU的發送模式的選擇當中,作為仲裁的輸入條件。
發送模式的選擇規則:假如有1...N個Signal配置了ComFilter,在仲裁的時候這N個Signal里面只要有一個Signal的濾波結果為TRUE,則Signal所在的IPDU的發送模式選擇為TRUE,就會選用ComTxModeTrue里面的時間參數,如果N個Signal的的濾波結果為False,則Signal所在的IPDU的發送模式選擇為False,就會選用ComTxModeFalase里面的時間參數。默認選擇ComTxModeTrue里面的時間參數,如果一個發送IPDU里面所有的Signal都沒有配置ComFilter則使用默認的發送時間參數。
問題:什么情況下會發生發送模塊的仲裁選擇?
答:在上層(RTE)調用Com_SendSignal的時候。
3.不同傳輸模式的用例和必要的配置
3.1Use case 1
用例1顯示了一個周期時間為tc的循環發送的I-PDU。這個I-PDU由所有具有ComTransferProperty PENDING的信號組成。它被配置為當TMS計算為true時發生傳輸。
由于配置了ComFilter的參數ComFilterAlgorithm ALWAYS,當TMS計算為false時,不需要配置傳輸模式。
對于I-PDU內的所有信號,ComFilter的ComFilterAlgorithm參數是否設置為ALWAYS或是否未定義ComFilter(對TMS的評估沒有貢獻),對行為沒有任何影響。
3.2Use case 2
用例2顯示了一個I-PDU,每當上層(Com_SendSignal或Com_SendSignalGroup)給出一個值時,這個I-PDU就會被發送三次。兩次傳輸之間的時間是td。這個I-PDU由信號組成,這些信號都具有ComTransfer屬性觸發。它被配置為當TMS計算為true時發生傳輸。
如果RTE在正在進行的重復周期完成之前有一個新的發送請求,則開始新的重復周期,并丟棄上一個重復周期的其余部分。
3.3Use case 3
用例3顯示了一個I-PDU,如果值v = a (TMS計算為真),則循環時間tc1發送,如果值v = b (TMS計算為假),則循環時間tc2發送。I-PDU由信號組成,這些信號都具有ComTransferProperty PENDING。
由新值v = b引起的TMS切換,在下一個主函數中開始一個新的循環,并將新值發送出去。然而,必須考慮最小延遲時間dt,因為ComEnableMDTForCyclicTransmission被設置為true.
3.4User case 4
用例4顯示了一個I-PDU,如果值v = a (TMS計算為true),如果值v = b (TMS計算為false),則該I-PDU以循環時間tc循環發送,當RTE給出該值時,該I-PDU將發送三次。兩次傳輸之間的時間為td。I-PDU由所有具有ComTransferProperty triggers的信號組成。
從ComTxModeMode DIRECT切換到PERIODIC之后,在下一個主函數中開始循環,并根據ComMin imumDelayTime dt發送新值a。
3.5Use case 5
用例5顯示了一個I-PDU,它以周期時間tc循環發送,如果RTE給出的值(相同或新的值)也會直接發送三次。這三次傳輸之間的時間總是td。I-PDU由所有具有ComTransferProperty triggers的信號組成。
如果由ComTxModeMode MIXED的周期部分引起的下一次傳輸應該發生在DIRECT (N-Times)部分傳輸后的超時dt (ComMinimumDelayTime)內,則該發送將被延遲,直到最小延遲時間過去。然而,在此之后,周期部分的下一個周期被縮短,因此只有周期部分的中間相移,而沒有連續相移。
3.6Use case 6
用例6顯示了一個I-PDU,如果值v = b (TMS計算為false),則該I-PDU以周期時間tc2循環發送。如果值v = a (TMS計算為真),它將以周期時間tc1循環發送,當值v = a由RTE給出時,它也將直接發送三次。這三次傳輸之間的時間總是td。I-PDU由所有具有ComTransferProperty triggers的信號組成。
這在實踐中的一個用法是,例如,控制窗戶升降電機的按鈕的信號。如果沒有按下按鈕,則會有一個很長的循環時間tc1。如果按下,此信息以短周期時間tc2分布。如果按鈕再次釋放,則從下一個主要功能開始,此信息將使用td分發三次,之后再次使用較長的循環時間。
3.7Use case 7
用例7類似于用例5,但是禁用了ComEnableMDTForCyclicTransmission,并將ComTxModeNumberOfRepetitions設置為1。
與用例5相反,這里的最小延遲計時器既沒有為循環部分的周期性傳輸啟動,也沒有為混合模式的直接部分的重復傳輸啟動。這可能導致在時間跨度dt內連續兩次傳輸,如場景b和c所示。
4.問題回答
問題1:Com模塊如何實現事件幀發送?
答:我們需要把需要事件幀發送的IPDU的ComTxModeMode配置為DIRECT,同事IPDU中的Signal的ComTransferProperty配置為TRIGGERED(或者TRIGGERED_xxx)。這樣當我們在SWC通過RTE寫這個信號的(調用Com_SendSignal)的時候就會觸發事件幀的發送。
問題2:Com模塊如何實現報文周期的快慢切換發送?
答:我們需要把需要切換報文周期時間的IPDU的ComTxModeTrue和ComTxModeFalse兩個配置容器里面的時間參數配置為快慢周期兩種不同配置,然后把IPDU中用來觸發發送模式切換的Signal的ComFilter配置為符合我們需求(例如配置為Value == X濾波值為True,否則為False),這樣在SWC中通過寫Signal(調用Com_SendSignal)的不同值就能觸發IPDU以不同的周期發送。
審核編輯 :李倩
-
模塊
+關注
關注
7文章
2674瀏覽量
47350 -
通信協議
+關注
關注
28文章
861瀏覽量
40274 -
AUTOSAR
+關注
關注
10文章
350瀏覽量
21481
原文標題:AUTOSAR 通信服務-Com模塊報文的發送機制
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論