免费看叼嘿_日韩美女一区_密臀av网站_日本乱码卡一卡二新区不卡_日本伦理一区二区三区_日本高清色倩视频在线观看

400-821-6015
行業資訊
您當前的位置:首頁 ? 行業資訊 ? 行業資訊
內部資訊行業資訊

AUTOSAR中的服務發現模塊(SOME/IP SD)的規范與實例分析

發布日期:2024-12-06

作者 | 不可說

出品 | 汽車電子與軟件


#01 引  入          

      服務發現模塊(Service Discovery Module)的主要任務是在車內通信中管理服務(functional entities)的可用性,這些服務被稱為功能實體,并控制事件消息的發送行為。這一機制確保僅將事件消息發送給需要它們的接收方(即采用發布/訂閱模式)。此處描述的解決方案就被稱為SOME/IP-SD(基于IP的可擴展面向服務中間件 - 服務發現,Scalable service-Oriented MiddlewarE over IP - Service Discovery)。                

      通過服務發現功能,不同的電子控制單元(ECU)可以提供服務實例,并在車輛網絡中查找可用的服務實例。一個ECU可以停止提供之前提供的服務實例,之后對該服務實例的查找將得不到響應。服務實例是由其服務接口定義的服務的單個實現。                

      除了管理服務實例的狀態外,服務發現還能控制發送一種特殊消息,即事件消息。這些事件消息被分組到事件組中,服務發現可以以發布/訂閱的方式開啟或關閉這些事件組,從而開啟或關閉該事件組中事件的發送和接收。           



#02 SOME/IP SD對不同ECU角色的職責  

      ECU的服務發現模塊在處理服務器服務和客戶端服務時扮演著不同的角色,并需要執行相應的操作來確保服務的正確提供和查找。   

      一個ECU需要處理兩種不同類型的服務:
      服務端服務(Server Services):本地ECU向車輛的其他部分提供服務器服務實例(即位于本地的服務實例),并可以被視為該服務實例的服務端。
      客戶端服務(Client Services):本地ECU可能會使用車輛內另一個ECU提供的服務器服務實例,并可以被視為該服務實例的客戶端。

      對于服務端服務,本地ECU的SOME/IP SD模塊(擔任服務器角色)需要執行以下操作:

      - 當服務可用時(即提供服務的軟件組件(SWC)準備就緒,且服務在當前ECU狀態下可用)提供本地服務。

      - 當服務不再可用時,撤回本地服務的提供(停止提供)。

      - 響應其他ECU的查找請求。

      對于客戶端服務,本地ECU的服務發現模塊(擔任客戶端角色)需要執行以下操作:

      - 根據配置監聽提供的服務和查找請求,并將這些信息存儲在易失性存儲器中。

      - 監聽停止提供的服務信息,并根據配置將這些信息存儲在易失性存儲器中。

      - 根據當前ECU及其軟件組件(SWC)的狀態發送查找請求。

      服務發現同樣可用于管理發布/訂閱(Publish/Subscribe)關系。在基于服務發現的發布/訂閱應用場景中,一個ECU(作為具有已消費事件組的發布/訂閱客戶端)對從另一個ECU(作為具有事件處理器的發布/訂閱服務器)接收某些數據(即訂閱)感興趣。          

      雖然訂閱關系在服務發現(SD)消息中明確定義,但發布關系則基于服務實例本身的可用性(即提供服務條目)。基于所提供的服務實例,發布/訂閱客戶端可通過訂閱事件組條目進行訂閱。此時,發布/訂閱服務器將利用此訂閱關系,將發布/訂閱客戶端注冊為對訂閱中指定的某些信息感興趣的方,并在發生某些事件或超時后,開始將這些信息發送給發布/訂閱客戶端。             

      為進行優化,服務發現支持使用多播消息而非每個客戶端的單播消息,將事件消息發送給多個客戶端。但請注意,服務器端和客戶端預先配置的多播之間存在差異:          

      - 如果SdServerService(服務端服務)為每個事件處理器預先配置了多播地址和端口(即所謂“事件處理器多播端點”),則當訂閱了具有不同端點信息的SdClientServices(客戶端服務)達到閾值(SdEventHandler MulticastThreshold,事件處理器多播閾值)時,SdServerService將切換至此多播地址和端口。

      - 如果SdClientService(客戶端服務)使用多播地址和端口(即所謂“已消費事件組多播端點”)進行了訂閱,則SdServerService在訂閱已消費事件組多播端點(多播地址和端口)時,會向其發送事件。


圖片   



#03 SD流程

      服務發布流程  


圖片


      Down Phase

      服務處于不可用狀態

      

      Initial Wait Phase

      服務準備完成后, 進入該階段, 延遲一定時間后發送服務發布報文

 

      Repetition Phase

      重復發送服務發布報文, 重復次數由配置參數決定, 此階段收到服務發現請求后,通過服務發布報文進行應答

 

      Main Phase

      周期性發送服務發布報文, 周期時間由配置參數決定, 此階段收到服務發現請求后,通過服務發布報文進行應答    


      服務發現流程  


圖片


      Down Phase

      服務未被應用請求

 

      Initial Wait Phase

      應用發起服務請求后進入該階段


      Repetition Phase

      重復發送服務發現報文, 重復次數由配置文件參數REPETITION_MAX決定, 收到服務發布報文后, 停止發送服務發現報文


      Main Phase

      不再重復發送服務發現報文, 每次收到服務發布報文后, 觸發服務訂閱請求報文。              

      服務訂閱流程  


圖片          

  • 服務發現
  • 連接建立
  • 注冊服務
  • 事件通知
              

#04 SOME/IP SD協議規范


圖片
服務發現消息格式
      SOME/IP SD中的Message ID是固定的字段:0xFFFF8100;
      Length占用32bits位,其數值表示從Request ID到報文最尾端的字節數;

      Request ID 由Client ID 和Session ID 組成。雖然Client ID 不用于服務發現,但Session ID 用于檢測車輛中其他服務發現實例的重啟或重啟,以修復服務發現模塊的本地狀態。在初始化 Service Discovery Module 后, ECU 發送的消息的 Session ID應為0x0001。          

      Protocol Version 字段是用來描述當前SOME/IP協議版本,目前是0x01;

      Interface Version 字段是用來描述當前SOME/IP服務的版本;
      Message Type 字段用來區分 SOME/IP 消息的類型, SOME/IP-SD 僅僅使用事件消息,因此固定為0x2;

      Return Code用于表示請求是否已成功處理。這不適用于SOME/IP-SD;因此返回碼被靜態設置為0x00。             

      SOME/IP SD從Message ID到Return Code字段的格式與SOME/IP 協議格式是一致的;后面的字段才是SOME/IP SD獨有的。          

      Flag  

      使用Flags字段啟動SOME/IP-SD標頭。它用于發送全局服務發現信息,其中包括當前上次重新啟動的狀態以及接收單播消息的能力。

      如果服務4端或客戶端通過評估通信方發送的SOME/IP-SD消息的會話ID(Session ID)和重啟標志(Reboot Flag)檢測到重啟,則受影響的通信本地狀態將失效,并應執行以下操作:          

      客戶端檢測到服務端重啟時的處理:

      1)如果客戶端檢測到服務端重啟,并且該客戶端正在使用該服務端的服務,則客戶端應將此次重啟視為接收到“停止提供服務”(StopOffer)消息。

      2)如果為該服務配置了SdClientServiceTcpRef,則活動客戶端應通過調用SoAd_CloseSoCon()函數并設置參數“abort”為TRUE來關閉相應的TCP連接。


      服務器檢測到客戶端重啟時的處理:


      如果服務器檢測到客戶端重啟,并且該客戶端正在使用該服務端的服務,則服務端應將此次重啟視為接收到“停止訂閱事件組”(StopSubscribeEventgroup)消息。          

      Reserved  

      保留的字段,當前沒有實際含義。

      Length of Entries Array  

      該字段值表示下面Entries Array字段的大小,單位為byte。   

      Entries Array  

      該字段大小是浮動的,并且有兩種類型,一種是服務Entries,一種是事件組Entries

      

      服務Services Entries

圖片
  • Type為0x00時,表示FindService;為0x01時,表示OfferService和StopOfferService
  • Index 1st options 標明屬于這個Entry的第一個option的起始索引序號,從0開始計算;Index 2st options 標明屬于這個Entry的第二個option的起始索引序號,從0開始計算;#of opt 1表明該entry有幾個第一組option;#of opt 2表明有幾個第二組option。
  • 該類型Service ID字段應攜帶服務的Service ID,根據是服務端還是客戶端,使用參數SdServerServiceID或SdClientServiceID進行靜態配置。
  • Instance ID字段應攜帶服務的Instance ID,根據是服務端還是客戶端,使用參數SdServerSer-viceInstanceID和SdClientServiceInstanceID靜態配置。
  • Major Version字段應包含SdServerServiceMajorVersion或者SdClientServiceMajorVersion,這取決于該條消息是服務端發送的還是客戶端發送的。
  • TTL字段定義了使用參數SdServerTimer TTL和SdClientTimer TTL配置的服務器條目的生存期(秒),但TTL為0的Stop Entries除外。
  • Minor字段應攜帶SdServerServiceMinorVersion或者SdClientServiceMinorVersion,這些都是在服務設計階段就已經規范好的。
          Eventgroups Entries   
圖片
      Service ID、Instance ID、Major Version、TTL與Services Entries中定義是一致的;
      Type為0x06時,表示SubscribeEventgroup和StopSubscribeEventgroup;為0x07時,SubscribeEventgroupAck和SubscribeEventgroupNack;
      Counter用于區分同一訂閱者的相同訂閱事件組。如果不使用,設置為0x0;
      Eventgroup ID字段應包含使用參數SdConsumerEvent GroupID配置的事件組的ID,也是在通信設計階段定義好的事件組ID。          

      Length of Options Array  

      該字段值表示下面Options Array字段的大小,單位為byte。          

      Options Array  

      Options Array也是有多種類型的:
      Configuration Option

圖片

      Type為0x1;

      Configuration Options Array可以配置服務發現消息中條目的其他屬性。可以使用配置選項傳輸0到n個配置項。這些配置項可以包括例如主機或服務的名稱;如:   

圖片          

      IPv4 Endpoint Option

圖片
      Type為0x4;

      該Option傳輸單播IP地址、第四層協議(如UDP或TCP)和端口號;從而獲取與服務通信所需的信息。當接收到提供服務并傳輸IPv4選項的服務發現消息時,接收此消息的ECU可以通過更新Socket連接,動態配置套接字適配器以使用此服務。          

      IPv4 Multicast Option

圖片
      Type為0x14;

      IPv4多播選項由SdServerService或者SdClientService用于通告其配置的事件多播端點;

      - 如果用作服務端的多播端點,則SdServerService會聲明IPv4多播地址、傳輸層協議(ISO/OSI第4層)和端口號,多播事件和多播通知事件將發送到這些端口。

      - 如果它用作客戶端事件組多播端點,則SdClientSer指示IPv4多播地址、傳輸層協議(ISO/OSI第4層)和端口號,SdClient期望在其中接收事件。作為傳輸層協議,只支持UDP。  

      IPv4 SD Endpoint Option
圖片
      Type為0x24;

      IPv4 SD端點選項傳輸發送方SD實現的端點(即IP地址和端口)。這用于在無法使用IP地址和/或端口號的情況下標識SOME/IP-SD實例。          

      Option也支持 IPv6 Endpoint Option、IPv6 Multicast Option、IPv6 SD Endpoint Option,但是在車載通信中,IPv4就足夠了,并且通常會禁用IPv6,因此此處不介紹IPv6相關的Option。          



#05 通信實例分析 

      第一個(offer)  


圖片
      Length of Entries Array為0x10,表示Entry有16 bytes大小。只有一個Entry,type為0x01,也就是歸屬于Services Entries,TTL不為0,表示offer service,即表示服務發布,#opt1值為1,表示有一個option;該服務的服務id為0x12、實例id為0x1,設置的ttl為3,服務主版本為1、次要版本為0。   
      Length of Options Array為0xc,表示Option共計12 bytes大小。該option信息是上面的Entry的信息補充。Length為0x9,Type為0x4,表示這個是IPv4 Endpoint Option;IP地址解析為192.168.60.4,對應原始數據為c0 08 3c 04,也表明了L4層使用的是TCP(0x0006)。
      最后的ox7725則是表示端口號,即30501。          

      第二個(Subscribe)  


圖片
      Length of Entries Array為0x10,表示Entry有16 bytes大小。只有一個Entry,type為0x06,也就是歸屬于Eventgroups Entries,TTL不為0,表示Subscribe Eventgroup,即表示服務事件組的訂閱,#opt1值為1,表示有一個option;該服務的服務id為0xd、實例id為0x1,設置的ttl為16777215,即0xffffff,表示訂閱一直有效,不過一般應該避免這樣設置。服務主版本為1、訂閱的服務實例ID為1。
      Length of Options Array為0xc,表示Option共計12 bytes大小。該option信息是上面的Entry的信息補充。Length為0x9,Type為0x4,表示這個是IPv4 Endpoint Option;IP地址解析為192.168.60.1,對應原始數據為c0 08 3c 01,也表明了L4層使用的是TCP(0x0006)。   
      最后的0x771b則是表示端口號,即30491。
上海創程車聯網絡科技有限公司版權所有 滬ICP備11045498號-1   技術支持:網站建設
主站蜘蛛池模板: 一级色视频 | 久久久亚洲精品一区二区三区 | 天天色天天搞 | 国产国语在线播放视频 | 色翁荡熄又大又硬又粗又视频图片 | 亚洲欧美第一成人网站7777 | 日韩欧美多p乱免费视频 | 丰满少妇xbxb毛片日本视频 | 蜜桃传媒一区二区 | 9x9x9x人成免费观看y | 久久久久久久久无码精品亚洲日韩 | 超碰人人干| 免费在线视频一区 | 成人亚洲在线 | 深夜免费观看视频 | 国产一级精品片 | 欧美成年网站色a | 亚洲影音av| 精品国产AV色一区二区深夜久久 | 国产在线乱码一区二三区 | 天堂资源在线观看免费高清视频 | ASSFREE疯狂老妇熟女 | 国内精品国产三级国产a久久 | 丰满五十六十老熟女hd | 同性男一级毛片 | 亚洲AV成人午夜一区二区 | 青青草欧美 | 日韩中文字幕在线观看视频 | 夜夜躁很很躁日日躁2020 | 一级毛片免费网站 | 麻豆国产人妻精品无码AV | 国产呦系列呦交 | 久久久精品影视 | 欧美jizzhd精品欧美 | 蜜桃久久精品一区二区 | 精品久久久久久 | 真人二十三式性视频(动) | 国产二区自拍 | 五月天最新网址 | 欧美性猛交久久久乱大交小说 | 美日韩一级大片 |