面向服务通信与面向信号通信
汽車電子行業(yè)中因為汽車以太網(wǎng)技術(shù)的引進(jìn),也引進(jìn)了一些傳統(tǒng)IT行業(yè)的概念。比如面向服務(wù)的通信概念,以前在汽車診斷領(lǐng)域雖有所應(yīng)用,但并未如現(xiàn)在這般被系統(tǒng)地提出來,在汽車電控的各領(lǐng)域中得以應(yīng)用,并推出了各種相關(guān)的規(guī)范和標(biāo)準(zhǔn)。面向服務(wù)通信的概念是與傳統(tǒng)汽車電子行業(yè)的面向信號通信的概念相對應(yīng)的一個概念,今天就二者做一個簡單的對比。
?
CAN為總線式通信,采用廣播式的通信方式。針對這種通信方式,CAN總線在信息傳輸時通常采用的是面向信號的通信方式(Signal-Oriented Communication)。面向信號的通信,顧名思義,這種通信是為了將信號進(jìn)行傳輸,比如節(jié)點B需要節(jié)點A的某一個信息(即一個信號值),節(jié)點A就直接把這個信號同其他信號一起,打包成報文丟到總線上,節(jié)點B收到之后就能夠獲得該信號了。用某些傳統(tǒng)IT人士的說法,這是一種簡單粗暴式的通信方法。
?
在這種傳輸情況下最核心的就是通信矩陣,在通信矩陣中以信號作為主要對象,體現(xiàn)出信號被封裝到哪條報文中,信號被哪個節(jié)點發(fā)送,被哪個節(jié)點接收。
?
目前用的最多的是將通信矩陣做成數(shù)據(jù)庫的方式,在仿真、代碼實現(xiàn)、測試等階段都能夠使用,也就是諸如*.dbc文件的CAN總線數(shù)據(jù)庫。下圖是從Vector的CANdb++工具中打開的某CAN總線數(shù)據(jù)庫文件中截取的通信矩陣:第一列為通信矩陣的關(guān)鍵列-信號名稱,表頭為總線上所有節(jié)點名稱,藍(lán)色字體帶有<Tx>標(biāo)志的為發(fā)送節(jié)點所發(fā)送的報文名稱,括號中0x開頭的為信號所在的報文,黑色的為接收節(jié)點所接收的報文名稱。當(dāng)然工具不同體現(xiàn)形式不同,但是通信矩陣包含的核心內(nèi)容基本上是一致的。
?
?
汽車以太網(wǎng)目前采用交換機式網(wǎng)絡(luò),采用點對點的通信方式。在這種通信方式下,最經(jīng)典的就是面向服務(wù)的通信方式(Service-Oriented Communication),當(dāng)然也會有面向信號方式的存在。
?
面向服務(wù)的通信,顧名思義,這種通信是為了對服務(wù)的相關(guān)信息進(jìn)行傳輸。服務(wù)是什么呢?簡單理解就是某一段代碼所能夠提供的某些功能。比如你在餐廳點餐,服務(wù)員(Server)就提供了一種“點餐”的服務(wù)(Service),你作為一個客戶(Client),就能夠使用這些服務(wù)。服務(wù)的相關(guān)信息有哪些呢?就是各種屬性信息、控制信息等內(nèi)容。如果服務(wù)與服務(wù)使用者同在一臺電腦上,那么可以直接通過程序接口實現(xiàn)過程調(diào)用,如圖中A區(qū)域所示。但是如果服務(wù)與服務(wù)使用者位于不同的電腦,則需要進(jìn)行遠(yuǎn)程調(diào)用,如圖中B區(qū)域所示。在遠(yuǎn)程調(diào)用時,就需要借助中間件及網(wǎng)絡(luò)傳輸實現(xiàn)信息傳輸,如圖中C區(qū)域所示,這種通信就是面向服務(wù)的通信,就是要通過一定的方式對服務(wù)的相關(guān)信息進(jìn)行打包,打包后再把這些信息在網(wǎng)絡(luò)上進(jìn)行傳遞。
?
?
在汽車以太網(wǎng)中目前采用的較多的是AUTOSAR組織提出的SOME/IP通信方式。這種通用方式是一種遠(yuǎn)程過程調(diào)用RPC(Remote Procedure Call遠(yuǎn)程過程調(diào)用)。在這種面向服務(wù)通信的方式中有三個比較關(guān)鍵的內(nèi)容:服務(wù)接口、服務(wù)發(fā)現(xiàn)、信息打包方式(SOME/IP的一些其他內(nèi)容以后再慢慢展開)。
?
服務(wù)接口(Service Interface):直白理解就是服務(wù)與外界通信的接口,也就是說服務(wù)模塊與外界溝通的基本出入口。可以簡單理解為你問服務(wù)員,我要魚丸粗面。服務(wù)員說,木有粗面。這種對話方式及內(nèi)容就是服務(wù)接口。而至于為什么木有粗面,那就是服務(wù)員在接收到你的信息之后,根據(jù)他的大腦分析得到的結(jié)果,也就是服務(wù)的內(nèi)部代碼處理的結(jié)果。在通信方面,我們更多關(guān)注的是服務(wù)接口,而不是服務(wù)的內(nèi)部代碼分析過程。SOME/IP中規(guī)定的服務(wù)接口包含:雙向方法(Request & Response Method)、單向方法(Fire & Forget Method)、事件(Event)、屬性(Field)等幾項內(nèi)容。
?
?
服務(wù)發(fā)現(xiàn)(Service Discovery,簡稱SD):用于協(xié)助客戶端去尋找可用服務(wù)的一種機制。服務(wù)(Service)部署在服務(wù)器端(Server),在具體實現(xiàn)時(實例化)會有些參數(shù)比如網(wǎng)絡(luò)地址可能會發(fā)生變化。為了能夠讓客戶端隨時找到服務(wù)器上的服務(wù),因此需要這種服務(wù)發(fā)現(xiàn)機制。可以簡單理解為服務(wù)發(fā)現(xiàn)(SD)是Service的秘書。SD清楚的知道Service的地址、狀態(tài)等內(nèi)容。就像你要找大領(lǐng)導(dǎo)簽字,你先問一下秘書,領(lǐng)導(dǎo)在嗎、什么時間有空。秘書會告訴你,領(lǐng)導(dǎo)今天在哪個會議室開會,什么時間段有空。在SOME/IP SD包含了發(fā)現(xiàn)服務(wù)、提供服務(wù)、停止提供服務(wù)、訂閱事件組、停止訂閱事件組等7種類型的服務(wù)發(fā)現(xiàn)相關(guān)報文。
?
信息打包方式:用于將服務(wù)信息和服務(wù)發(fā)現(xiàn)的信息進(jìn)行打包,并通過網(wǎng)絡(luò)進(jìn)行傳輸。針對不同的應(yīng)用場合服務(wù)接口的內(nèi)容會有所不同,因此也就會有不同的打包協(xié)議,不同協(xié)議對這些信息的打包方式均有所不同。比如在SOME/IP中,打包的內(nèi)容就包括:報文ID、請求ID、協(xié)議版本、接口版本以及處理之后(序列化)的服務(wù)接口信息等內(nèi)容。SOME/IP協(xié)議中對請求、無返回的請求、通知、響應(yīng)、錯誤等五種類型的信息進(jìn)行打包,即SOME/IP有上述五種報文類型。而前邊提到的SOME/IP SD信息的打包,就是使用的通知(Notification)的報文類型。
?
?
下圖是Vector的AUTOSAR協(xié)議棧中截取的一部分,圖中紅色框出來三個模塊就涉及到了上文提到的三個部分。SW-C的全稱為Software Component,包含的服務(wù)代碼實現(xiàn)了服務(wù),其對外接口就是服務(wù)接口;SD模塊實現(xiàn)了服務(wù)發(fā)現(xiàn)的內(nèi)容,管理服務(wù)的地址信息、狀態(tài)信息等內(nèi)容;SOME/IP模塊實現(xiàn)了數(shù)據(jù)的傳輸控制,用于服務(wù)接口數(shù)據(jù)的上下傳遞。
?
?
總結(jié)
以上是生活随笔為你收集整理的面向服务通信与面向信号通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BEC 中级心得
- 下一篇: HEW3工程链接错误(L2330 (E)