博客
希望我們能(néng)與您分享和探讨成(chéng)長(cháng)中的點點滴滴
CANoe與DDS
分享到
“轉載自維克多汽車技術(上海)有限公司,作者Vector China”
DDS(Data Distribution Service)是OMG組織(Object Management Group)最早在2004年發(fā)布的分布式實時(shí)通信中間件标準,旨在使用發(fā)布-訂閱模式實現可靠、高性能(néng)、互操作、實時(shí)、可擴展的數據交換。
圖1:DDS軟件示例架構圖
在汽車領域,Adaptive AUTOSAR于2018年引用DDS作爲可選擇的通信方式之一。DDS的實時(shí)性恰好(hǎo)适合于自動駕駛系統。因爲在這(zhè)類系統中,通常會(huì)存在感知、預測、決策和定位等模塊,這(zhè)些模塊都(dōu)需要非常頻繁地高速交換數據。借助DDS,可以很好(hǎo)地滿足這(zhè)類系統的通信需求。憑借以數據爲中心及豐富的QoS機制,DDS在汽車行業中逐漸受到青睐,汽車制造商及供應商將(jiāng)DDS作爲系統中可選的通訊中間件之一,從而增強其産品的功能(néng)特性及可靠性。
DDS具有以數據爲中心、即插即用、豐富的QoS等特性,這(zhè)意味著(zhe)DDS在網絡傳輸中對(duì)各層級數據需要提供豐富且冗長(cháng)的Header信息,方便通訊雙方識别所需内容,因此對(duì)硬件及網絡中的傳輸和數據處理性能(néng)提出了較高要求。因此在未來,DDS、SOME/IP等SOA通信中間件與車載總線類似,在車内將(jiāng)會(huì)是多種(zhǒng)中間件長(cháng)期共存的狀态。
DDS有諸多協議規範,其中最核心的2個規範是:DDS規範(“DDS規範”:https://www.omg.org/spec/DDS/)和DDSI-RTPS規範(“DDSI-RTPS規範”:https://www.omg.org/spec/DDSI-RTPS/)。DDS規範描述了分布式應用通信和以數據爲中心的發(fā)布-訂閱模型,定義了應用接口(API)和通信語義,從而實現“在正确的時(shí)間向(xiàng)正确的地點有效可靠地傳遞正确的信息”。DDS規範提供了DDS核心概念在與平台無關模型(PIM)中的抽象定義,以及相對(duì)于平台專用模型(PSM)中的映射,從應用開(kāi)發(fā)者視角诠釋了DDS的核心定義。但是,單純依靠DDS規範使得各DDS中間件供應商對(duì)于具體通信傳輸介質、行爲和數據包結構有著(zhe)自己的理解,若通信系統中各設備來自不同的DDS中間件供應商,其互操作性可能(néng)會(huì)存在問題。
爲解決這(zhè)一問題,OMG随後(hòu)發(fā)布了DDSI-RTPS規範,對(duì)通信結構、數據消息結構、收發(fā)行爲、服務發(fā)現進(jìn)行了定義,從而保證來自不同廠商的DDS中間件的互操作性。目前納入DDSI-RTPS規範中的底層通訊協議爲UDP/IP。OMG組織目前暫未對(duì)DDS的測試規範進(jìn)行定義。
圖2:DDS數據交互簡化拓撲圖
DDS中重要概念:
>Domain
連接所有能(néng)夠互相通信的應用程序的分布式概念,隻有在同一個Domain下的Publisher和Subscriber能(néng)夠互相通信,不同Domain的應用程序不知道(dào)彼此的存在,Domain通過(guò)DomainID進(jìn)行區分。Domain中包含了DomainParticipant,後(hòu)者代表了同一個Domain下參與通訊的應用程序,同時(shí)也是Publisher、Subscriber、Topic的工廠。
>Topic
Publisher和Subscriber互相通訊的數據本身,其名稱(Topic Name)在一個Domain中是唯一的。
>DataWriter
基于綁定的Topic,由應用程序發(fā)送數據的實體。1個DataWriter隸屬于1個Publisher,同時(shí)1個DataWriter對(duì)應于1個Topic。
>DataReader
可使應用程序聲明期望的Topic數據,以及訪問Subscriber收到的數據。1個DataReader隸屬于1個Subscriber,1個DataReader對(duì)應1個Topic。
>Publisher
負責發(fā)布實際Topic數據的實體,可以創建及配置多個DataWriter并綁定相應若幹Topic。
>Subscriber
負責接收訂閱Topic數據的實體,可以創建及配置多個DataReader并綁定相應若幹Topic。
>QoS
服務質量(Quality of Service)是控制DDS服務的一系列特性。Topic、DataWriter、DataReader、Publisher、Subscriber以及DomainParticipant各實體均可配置其各自的QoS規則,這(zhè)些QoS互相存在兼容性檢查。若通信雙方QoS不兼容,則無法建立通信。目前DDS v1.4版本規範定義了Durability、LiveLiness、Reliability、LifeSpan、History等QoS機制。
CANoe中開(kāi)始支持DDS
随著(zhe)DDS開(kāi)始在汽車電子領域的應用,Vector應客戶需求在CANoe 16 SP3版本中開(kāi)始支持DDS的仿真、分析與測試。DDS的通訊模型基于CANoe中的Communication Concept(ComCo)實現。
基于CANoe建立DDS的仿真和解析工程環境,可以充分利用CANoe及其測試工具鏈現有的優勢特性:
>CANoe是汽車電子、IoT、航空航天等多領域仿真及測試的一站式整合平台,支持CAN、CAN FD、CAN XL、LIN、FlexRay、SOME/IP、AUTOSAR PDU(CP/AP)、DoIP、CCP/XCP、NM網絡管理、UDS、Cyber Security(SecOC、TLS/DTLS、IPsec、MACsec等)、E2E、全球充電協議、MQTT、HTTP、WLAN、BLE等多種(zhǒng)總線和協議;
>采用用戶熟悉的CAPL、C#、Python語言實現;
>支持SIL/HIL、通信路由、網絡仿真、數據分析/記錄、診斷/刷寫、電源管理、I/O控制等多種(zhǒng)場景;
>極具性價比的測試設計及測試腳本開(kāi)發(fā)環境——vTESTstudio;
>無縫耦合整車動力學(xué)模型及ADAS場景仿真模型工具DYNA4,或基于FMI/FMU、FDX、XIL API、COM、SIL KIT整合第三方測試工具鏈;
>匹配汽車電子敏捷開(kāi)發(fā)流程的CI/CT工具鏈體系。
如何在CANoe中創建DDS仿真及解析工程?通過(guò)下圖新建Distributed Objects工程:
圖3:新建CANoe DO工程
而後(hòu)可在主界面(miàn)中看到Communication Setup界面(miàn),該界面(miàn)也可通過(guò)CANoe上方标簽頁Simulation下打開(kāi)。随後(hòu)依據下圖指引新建DDS通信接口描述文件vCDL:
圖4:新建DDS通信接口描述文件
在選擇vCDL文件保存路徑及文件名後(hòu)(注意路徑及文件名不能(néng)包含中文及特殊字符),依據下圖指引打開(kāi)編輯:
圖5:編輯DDS通信接口描述文件
vCDL語言(Vector Communication Description Language)作爲在CANoe Communication Concept中用于描述通信對(duì)象的語言,通過(guò)Distributed Objects(DO)對(duì)DDS的數據對(duì)象進(jìn)行定義。DO的consumed value對(duì)應DDS DataReader;provided value對(duì)應DDS DataWriter。
以下圖示例說(shuō)明:
1. 定義結構體作爲Topic Type(即HealthData);
2. 在interface(即IMonitor)中將(jiāng)該結構體作爲consumed value(也可作爲provided value)并進(jìn)行實例化(即healthData),從而隐式聲明DDS DataReader,另顯式聲明名爲“/Monitor/healthData”的Topic;
3. 最終對(duì)該interface(即IMonitor)分别實例化爲Monitor和Sensor,作爲Subscriber和Publisher;
4. 其中Sensor的類型爲reverse,代表依據IMonitor中的consumed value(即healthData)反向(xiàng)作爲provided value。
圖6:vCDL中對(duì)DDS的通信接口定義示例
vCDL DDS的結構體中可以包含如下數據類型:uint或int(8、16、32、64bit),Bool,Double,Float,String,Struct,Array,List,Bytes等,并在逐漸完善中。CANoe Help文檔中提供了DDS IDL數據類型與vCDL數據類型的詳細對(duì)應關系。
當前版本的vCDL中,可對(duì)consumed value(DDS DataReader)和provided value(DDS DataWriter)進(jìn)行QoS規則設置,包括:Reliability、History、Durability、Lifespan、Liveliness,更多的QoS規則會(huì)在CANoe後(hòu)續版本中完善。
其他對(duì)于DDS Binding時(shí)的屬性配置可參考詳情:CANoe 16 SP3 Help文檔中的“Distributed Objects (DOs) for Data Distribution Service (DDS)”頁面(miàn)專題。
當完成(chéng)DDS的通信接口描述文件創建後(hòu),CANoe會(huì)自動生成(chéng)若幹觀測事(shì)件及數據對(duì)象,包括DataWriter和DataReader的匹配/不匹配事(shì)件信息、服務發(fā)現信息、數據Sample信息、Built-in Topic信息等,以DO體現。
用戶可在“.. \Sample Configurations 16.3.110\Connectivity\DDS\DDSBasic”中了解DDS Demo示例工程。該工程運行後(hòu),在Trace窗口可查看詳細的DDS仿真和解析數據内容。
圖7:CANoe中DDS工程運行狀态