汽車嵌入式開發中,開發ECU網關節點(GW:Gateway)時,難度會提升不少,這些難度中就包含對時間參數的解讀問題。本文著重給大家聊一下P2Client、▲P2 = ▲P2Request + ▲P2Response、N_As時間參數。
1 背景介紹
假設:Tester發送功能尋址指令Request01給GW::VCU,因為VCU的GW屬性,VCU需要將Request01轉發,即由Flexray總線路由到Can總線,進而將Request01發送給Ecu::Xx,Request01路由示意如如下所示:
注意:診斷路由,需要通過Xx_Tp層。
VCU既然是GW,相對于ECU::Xx,就是一個Tester。
如果對各層的PDU類型不清楚,可以參考前文Autosar通信棧:I-PDU、N-PDU、L-PDU,要掰扯清楚。
2 P2Client、▲P2、N_As時間參數分析
1、P2Client
P2Client的時間定義如下所示:
怎么理解呢?上位機(Tester)發送一個診斷指令以后,會等待Server(可以理解為某個ECU的節點)響應該診斷請求,如果在指定的時間內(P2Client_max/P2Client*_max)沒有響應,Tester認為超時,并停止刷寫流程,即:刷寫失敗。
P2Client的時間范圍是多少呢?如下所示:
P2Client時間范圍的表達式:P2Client_max>P2Client>P2Server_max + ▲P2max 。P2Client_max是一個性能參數,由OEM設定。
這里假設:P2Server_max = 50ms,單向路由時間10ms,P2Client_max = 150ms,則70ms < P2Client < 150ms。為什么最小時間是70ms,不是60ms?稍后解釋。
2、▲P2
▲P2的時間定義如下所示:
怎么理解這個時間參數呢?診斷指令的發送依賴于ECU各個模塊的處理,在診斷指令被ECU接收到發送到總線需要一定的時間,同時由于總線仲裁等原因,也會導致診斷指令發送的延阻,這些因素所造成的時間消耗就是▲P2。
我們討論路由時間,要分兩種情況分析:
發送路由:
對應第一小節圖中的Fr->Can路由,即▲P2request = t1 - t0
響應路由:
對應第一小節圖中的Can->Fr路由,即▲P2response = t3 - t2
所以,需要約束一般會規定
單向路由時間
GWTIme_max,比如:GWTIme_max= 10ms。所以:▲P2 = P2Server_max + ▲P2request + ▲P2response = P2Server_max + 2*GWTIme_max = 50 + 2*10 = 70ms。這里的GWTIme_max = ▲P2request = ▲P2response。雖然▲P2request和▲P2response會有所不同,但實際工程項目中,一般設置▲P2request = ▲P2response,即:給一個單向路由的最大時間參數GWTime_max,GWTime_max需求如下所示:
3、N_As
以Can總線為例,N_As的時間定義如下所示:
意思就是:發送端(Tester)的Xx_Tp層,從發送到驅動層應答的最大時間。該時間只是約束Xx_Tp層的計時行為,和▲P2 時間無關。因此,開發必須要先符合▲P2 時間。
3 多路診斷路由
我們將問題進一步拓展,如果GW節點將診斷指令路由到多個節點,如下圖中的ECU::Xx01和ECU::Xx02。這里提一個問題:如果Can02不可用(比如:VCU Can02對應的Transceiver損壞或者未有連接),Can01上的刷寫是否應該繼續?
我們先看一下Autosar的答案,如下所示:
答案很明確:如果TPs間的路由,有一路Fail(調用發送接口返回值為E_NOT_OK),不應影響其他TPs間的路由。如果OEM約束了你的開發:要符合Autosar規范。那么PduR的路由功能應滿足上述規范。
更多信息可以來這里獲取==>>電子技術應用-AET<<