1. 程式人生 > 其它 >vector autosar someip與vsomeip對接經驗總結

vector autosar someip與vsomeip對接經驗總結

someip是現代車輛通訊的主流通訊協議知一;

someip的主要涉及模型以及協議結構,我就不做多的做介紹了,如有需要請讀者自行進行百度學些;

雖然someip協議已經基本成熟,但有多個實現版本,現在使用較多的主要有,vector autosar配置的someip版本,以及網路開源的vsomeip版本;

這兩個版本在理論上是可以相互相容正常通訊的,但在實際使用過程中,仍然發現了一些問題;

我將自己實際遇到的問題以及解決方案記錄到這裡希望可以幫助有需要的人;

1、在同一個區域網內,兩方無法相互發現;

原理:執行的someip應用需要藉助於各自的someipd服務來彼此發現對方;

而someipd實現的someip sd協議是藉助於udp的廣播來發布或收集網路中的其他someip應用的相關資訊的;

所以要想兩方能夠彼此發現,首先要將someip sd的服務設定為同一廣播地址以及服務埠號;

這個資訊可以在vsomeip程式載入的vsomeip-tcp-server.jason等配置檔案中進行修改;

理想情況下,將兩方的配置修改成一樣就可以正常發現彼此;

2、將someip sd的廣播地址以及服務埠號配置成一樣,雙方仍然是無法發現彼此;

這個首先要藉助網路工具來抓包進行確認,是否可以在網路上抓取到相應的udp資料包,來檢查是不是由於網路設定的原因造成的;

如果抓包工具可以確認在網路上有影響的udp廣播包;

那麼就要對someip的版本號配置進行確認;

在我使用vsomeip 2.10版本時發現,vsomeip 程式碼中的預設主版本號資訊為0x00;而vector autasar的someip版本號資訊不特意更改的話是0x01;

由於雙方版本號不一致,雖然彼此可以收到對方發出的sd udp廣播包,但在軟體中彼此仍然無法相互識別。並且在vsomeip中會頻繁輸出warning資訊;

將雙方的版本號資訊設定為一致時,就相互就可以識別了;

3、sd 廣播地址服務埠號以及版本號都配置成一致;但彼此仍然無法發現;

這個就需要排查網路設定問題;

(1)雙方是否可以彼此ping通;

(2)路由表以及gateway是否配置正確;

我就遇到雙方可以ping通,但由於路由表以及gateway資訊缺失使得雙方無法彼此發現的問題;

4、雙方可以彼此發現,但客戶端一訂閱或者傳送request底層tcp連結就斷開的情況;

這個問題,也是由於服務版本號的問題(interface version);

由於某些特殊的原因,將autosar someip的主版本號設定為255可以與vsomeip 的0版本號相互發現;

但是當進行互動時,在程式碼中會對interface version配置進行驗證。如果雙方的interface version不一致,那麼就會出現一通訊底層tcp的連結就會斷開情況;

這個需要注意檢查;

5、當vsomeip作為伺服器,autosar someip作為客戶端。vsomeip傳送的event,autosar someip的客戶端無法接收到的情況;

首先要對someip傳輸型別進行確認(使用的是tcp或者udp);

假如使用tcp進行傳輸;則需要將vsomeip 配置檔案中event配置新增is_reliable為true的欄位;

否則autasar someip tcp的客戶端無法正常接收;