王昊天
(上海北匯信息科技有限公司, 北京 102208)
“中間件”是一個比較抽象和寬泛的概念,它并不特指一種具體的技術,其概念起源于復雜分布式軟件系統的開發(fā),其目的是實現軟件組件之間進行數據交換,使軟件組件之間實現解耦。這種數據交換通常是通過網絡進行,而中間件的任務就是確保網絡本身對軟件組件是透明的。比如我們所熟知的SOME/IP就是一種典型的中間件技術實現。使用中間件能夠簡化系統的開發(fā),提高管理和測試效率。
車載網絡通信的中間件有其特殊之處。車載軟件系統可能十分復雜,這些系統可能分布在一個ECU的不同模塊里,或在同一個ECU模塊的不同進程中,也可能分布在不同ECU中。這些不同的模塊或不同的ECU可能使用不同的軟件架構和操作系統,比如符合POSIX要求的類Unix操作系統(如Linux 和QNX)、Classic AUTOSAR 系 統、Adaptive AUTOSAR系統等,中間件在這些不同的系統之間起到了重要的橋梁作用。
SOME/IP是最早應用在汽車上的通信中間件,在2014年實現了量產,但是近年來汽車行業(yè)對中間件技術的探索并未停止,目前主要有兩個方向。
1) 對SOME/IP進行功能上的擴展,其主要的思路是給SOME/IP添加TLV(Type Length Value) 支持,以實現更好的靈活性。我們知道SOME/IP的序列化采用了比較靜態(tài)的定義方式,比如SOME/IP的Payload中的參數的類型、順序、字節(jié)序等,都是在配置文件中靜態(tài)定義的,那么應用程序在使用這些類型時,必須要嚴格遵循配置文件中的定義去解析數據。所謂TLV,簡單來說就是給每個參數添加一些附加的自描述信息,比如類型信息、長度信息,這樣應用程序可以依賴這些自描述信息動態(tài)解析參數。對TLV的支持將使軟件系統進一步解耦,讓應用程序以更靈活的方式使用SOME/IP。但是靈活性和高效率往往是魚與熊掌不可兼得,引入TLV的缺點也是顯著的,額外的“標簽”信息將占用更多的Payload空間,這會降低帶寬的利用率,對實時性有一定影響(尤其是對于資源有限的小型ECU)。
2) DDS(Data Distribution Service)。DDS是目前國防、航空等領域廣泛應用的通信中間件技術。DDS的核心規(guī)范有兩個,分別是DDS specification以及DDSI-RTPS specification。DDS specification定義了DDS的應用程序接口和基本行為,DDSI-RTPS specification定義了DDS的傳輸實現,目的是保證不同DDS產品的互操作性。除此之外,DDS在2017年發(fā)布了DDS-RPC規(guī)范,使得DDS能夠基于發(fā)布-訂閱模型實現遠程過程調用(RPC),滿足SOA架構的需求。
DDS和SOME/IP是在不同的應用場景和不同的需求下誕生的技術,所以它們之間注定有很大的區(qū)別。DDS有著更豐富的特性,尤其是對QoS的支持。但是相對于SOME/IP,DDS也有顯著的不足。首先,RTPS消息頭部十分冗長,這會降低傳輸效率和實時性。另一方面,汽車作為一個相對封閉的系統,為了降低功耗,經常需要頻繁地喚醒和休眠,這就要求系統有非??斓膯铀俣?,而DDS并不是為這種場景設計的,DDS可能必須經過深入地優(yōu)化才能滿足嚴苛的時間要求。最后,DDS目前只能在Adaptive AUTOSAR框架下運行,Classic AUTOSAR目前并不支持,盡管目前有廠商使用復雜驅動(CDD) 在Classic AUTOSAR平臺集成了DDS,但這并不是一種完美的解決方案。首先Classic AUTOSAR平臺往往資源有限,同時又有嚴苛的實時性要求,在其之上運行DDS顯得代價高昂;其次,通過復雜驅動意味著和硬件強相關,這會使軟件喪失可移植性,對于DDS這種基礎軟件組件,廠商要付出更多的開發(fā)、測試和維護的成本,這實際上也不符合AUTOSAR的初衷。
盡管目前有一些技術問題需要解決,但不可否認的是,DDS依然前途光明,國內很多OEM已經將DDS作為下一代電子電器架構的基礎通信技術,甚至已經實現了量產。
DDS本質上是一種傳統的工業(yè)基礎軟件,用戶購買了軟件,然后在系統里每個節(jié)點上進行“安裝”。所以我們可以看到很多商用的DDS軟件產品,在其內部的測試流程中,有一個很重要的環(huán)節(jié)是“安裝測試(Installtests)”,目的是驗證DDS產品在常見平臺的兼容性。而用戶在集成了DDS之后并不會過多地對DDS產品本身進行驗證,更側重應用層測試,所以這就造成了目前DDS生態(tài)里缺少像TC8這種行業(yè)內標準化的測試規(guī)范,以及相應的測試工具。
而車載電子電器系統的計算平臺五花八門,不同OEM、車型平臺、項目,其搭載的系統平臺(包括芯片架構、操作系統等) 可能都有不同,這些不同的平臺相互的組合情況更難以計數,這種背景下,只依賴DDS產品供應商內部的“安裝測試”似乎顯得不足。
此外,正如上文所討論,為了讓DDS的功能和性能更符合車內通信的要求,用戶需要對DDS產品進行定制裁剪和優(yōu)化,尤其是針對非標準計算平臺實現的DDS(如Classic AUTOSAR平臺),在這個過程中用戶需要對產品進行充分的測試,才能保證裁剪或優(yōu)化后的軟件仍然是可靠的。
不同DDS產品之間的互操作也是不可忽視的問題。OMG組織并不提供DDS軟件實現,各廠商可以根據該標準實現自己的DDS。盡管DDS發(fā)布了DDSI-RTPS規(guī)范來保證不同DDS實現之間的互操作性,但是這里提到的“互操作性”,可能并沒有經過充分地測試和驗證。盡管軟件開發(fā)者可能會在內部的產品測試階段與其他產品進行互操作測試,但是這很難覆蓋DDS的所有功能特性,也很難覆蓋目前市面上所有DDS產品可能出現的組合。此外,DDS的軟件實現經常與OMG規(guī)范產生偏離,比如DDS實現不支持某些OMG規(guī)范中的特性,或者DDS實現中增加了OMG規(guī)范中沒有要求的額外功能特性,這種情況可能也會引發(fā)互操作問題?;谶@種考慮,用戶根據實際情況對系統進行針對性的互操作測試也許是更好的選擇。
DDS一個很大的特點是支持“開箱即用”,即用戶不需要對系統做任何特殊配置即可使用DDS,比如IP地址、端口號、DDS系統中每個Participant、DataReader和DataWriter的ID等,所有的這一切都是由DDS/RTPS進行自動配置,動態(tài)地發(fā)現系統里的節(jié)點。用戶只需要在IDL文件中定義自己的類型,就可以進行應用程序的開發(fā),這對網絡架構設計者和應用開發(fā)者都非常友好。
為了滿足不同系統對中間件功能和性能不同的需求,DDS也提供了多種方式允許用戶對DDS的行為特性進行進一步調節(jié),比如QoS、RTPS通信層面的配置等。如果說用戶進行了這些配置工作,我們需要設計測試方案來驗證這些配置的一致性。這一部分可基于VectorCANoe option Ethernet,通過編程和定制開發(fā)來實現。使用Vector提供的多種以太網接口卡,編寫腳本進行RTPS消息的解析,并從中提取這些配置信息,驗證其與用戶配置規(guī)范的一致性。圖1為DDS配置測試部分條目參考,圖2為基于CANoe實現的DDS配置測試工程示例。
圖1 DDS配置測試部分條目參考
圖2 基于CANoe實現的DDS配置測試工程示例
服務接口測試的核心工作是服務請求的仿真,這意味著測試工具要集成DDS中間件,使其能夠仿真客戶端的行為。遺憾的是,截至此文撰寫時,行業(yè)內沒有針對DDS服務測試的成熟工具可以使用。
我們可以使用多種方案來完成DDS服務接口測試,比如利用CANoe的Socket或FDX接口,或其他測試框架(如Robot Framework和ECU TEST),開發(fā)“DDS適配器”,來完成服務的仿真和測試。如圖3所示。
圖3 基于CANoe FDX實現的 “DDS適配器” 示意圖
隨著軟件定義汽車和車載以太網的快速發(fā)展,傳統IT行業(yè)很多分布式系統技術也逐步運用到汽車中,比如本文提到的中間件技術。然而引入這些不同的技術時,我們必須意識到,汽車除了是一個智能終端設備,它的本質屬性是交通工具,在把汽車交付到消費者手中之前,廠商應進行充分的驗證和測試,保證產品的品質。本文介紹了中間件的概念以及SOME/IP、DDS等技術,對DDS以及基于DDS的SOA系統的測試策略進行探討,歡迎各位讀者提出寶貴意見,與我們進一步交流。