AUTOSAR-SD篇

1 概述

        服务发现模块的主要任务是管理在车内通信中被称为服务的功能实体的可用性,以及控制事件消息的发送行为。只允许向需要这些事件消息的接收器发送事件消息(发布/订阅)。

     这里描述的解决方案也被称为SOME/IP-SD(基于IP -服务发现的可扩展的面向服务的MiddlewarE)。通过使用服务发现,不同的ECUs可以提供服务实例,并在车辆网络中找到可用的服务实例。ECU可以停止提供它以前提供的服务实例。稍后找到这样的服务实例将保持未应答。服务实例是由其服务接口定义的服务的单一实现。

2 报文格式

SOME/IP-SD消息格式

 Message ID:固定为0xFFFF8100
 Client-ID:设置为0x0000,因为只存在一个SOME/IP-SD实例
 Session-ID:并根据某些/IP要求处理它,每发出一个SOME/IP-SD报文,Session-ID加1,只能从  1 开始,不能设置为0。SOME/IP-SD会话ID处理是根据“通信关系”完成的,即组播和单播是对等的
  Protocol Version :固定为0x01,

  Interface Version :固定为0x01,

  Message Type :固定为0x02,

  Return Code :固定为0x00

2.1 SOME/IP-SD 头部

    Flags: 使用Flags字段,将启动SOME/IP-SD标头。它用于信号显示全局服务发现信息,其中包括当前上次重新启动的状态以及接收单播消息的能力。

 

       该字段第0位表示"Reboot Flag"。SOME/IP-SD首部的重启标志应该设置为1,直到SOME/IP首部中的Session-ID绕回0(wraps around),重新从1开始。

2.2 Entries Array

       当SOME/IP-SD找到或提供服务实例或处理订阅时,这将通过所谓的条目来完成,这些条目将在SOME/IP-SD消息的条目数组中传输。

     协议中有两种条目:一种服务条目,另一种事件组条目。

2.2.1 服务条目

服务条目有16个字节大小,包含的字段如下所示:

类型字段[uint8]:FindService (0x00), OfferService (0x01) and StopOfferService (0x01)
第一个选项运行索引[uint8]:代表选项排列中第一个选项索引位置
第二个选项运行索引[uint8]:代表选项排列中第二个选项索引位置
选项1的数量[uint4]:描述第一个选项运行使用的选项数量
选项2的数量[uint4]: 描述第二个选项运行使用的选项数量
Service-ID[uint16]: 描述此条目所关注的服务或服务实例的服务ID。
Instance ID[uint16]: 描述此条目所涉及的服务实例的服务实例ID,如果表示一个服务的所有服务实例,则设置为0xFFFF
Major Version[uint8]: 服务(实例)的主版本
TTL[uint24]: 描述条目的生命周期,单位为秒
Minor Version[uint32]: 服务的次版本

2.2.2 事件条目

类型字段[uint8]:Subscribe (0x06), StopSubscribeEventgroup (0x06),
SubscribeAck (0x07) and SubscribeEventgroupNack (0x07).
第一个选项运行索引[uint8]:代表选项排列中第一个选项索引位置
第二个选项运行索引[uint8]:代表选项排列中第二个选项索引位置
选项1的数量[uint4]:描述第一个选项运行使用的选项数量。0表示没有选项
选项2的数量[uint4]: 描述第二个选项运行使用的选项数量。0表示没有选项
Service-ID[uint16]: 描述此条目所关注的服务或服务实例的服务ID。
Instance ID[uint16]: 描述此条目所涉及的服务实例的服务实例ID,如果表示一个服务的所有服务实例,则设置为0xFFFF
Major Version[uint8]: 编码这个eventgroup所属的服务实例的主版本。
TTL[uint24]: 描述条目的生命周期,以秒为单位
保留字段[uint12]: 设置成0x000
Counter[uint4]: 用于区分同一订阅服务器的相同订阅事件组。如果不使用,设置为0x0。
Evntgroup ID[uint16]: 传输事件组的ID

2.3 Options Array

选项数组是服务发现消息的最后一部分。选项数组中的选项包含附加信息。

2.3.1 IPv4 Endpoint Option

IPv4端口Option的格式如下:

Length字段,2个byte,应设置为0x0009
Type字段,1个byte,应设置为0x04
Discardable Flag,1个bit,应设置为0
Bit1到Bit7是保留位,全部为0
IPv4-Address字段,4个byte,服务实例所在的主机的IPv4地址
Reserved,1个byte,设置为0x00
Transport Protocol字段,1个byte,传输层协议,0x06是TCP,0x11是UDP
Transport Protocol Port Number,2个byte,传输层端口

2.3.2 IPv6 Endpoint Option

IPv6端口Option的格式如下:

Length字段,2个byte,应设置为0x0015
Type字段,1个byte,应设置为0x06
Discardable Flag,1个bit,应设置为0
Bit1到Bit7是保留位,全部为0
IPv6-Address,16个byte,服务实例所在的主机的IPv6地址
Reserved,1个byte,设置为0x00
Transport Protocol,1个byte,传输层协议,0x06是TCP,0x11是UDP
Transport Protocol Port Number,2个byte,传输层端口

3 SD服务发现行为

SD通信主要涉及到3类报文:Find Service、Offer Service和Subscribe报文。

服务端和客户端的通信行为包含以下几个阶段:

3.1 Server Services

Down Phase
在这个阶段,Service是不可用的,即服务端无法提供服务。

Initial Wait Phase
当服务准备完毕(Available)后,进入此阶段;

如果此阶段收到Find Service报文,服务端忽略此消息,不做任何处理;

如果服务不可用了,将返回进入Down Phase;

此阶段需要定义时间参数INITIAL_DELAY_Min和INITIAL_DELAY_Max,初始化时间取其之间的随机值,当定时器超时后,发送第一帧Offer Service,标志着进入下一个阶段。

Repetition Phase
为了让客户端快速找到有哪些Service,此阶段重复发送Offer Service,重复次数由REPETITIONS_MAX决定;

发送间隔以REPETITIONS_BASE_DELAY为基本时间,每发送一次,间隔是前一间隔的2倍;

如果收到某客户端的Find Service,不影响当前阶段的发送计数和计时,延迟一定时间(REQUEST_RESPONSE_DELAY)后,单独发送单播Offer Service给服务请求端;

如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;

如果收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;

如果服务不可用,离开此阶段进入Down Phase,并发送StopOfferService通知所有客户端。

Main Phase
此阶段将周期性发送Offer Service,周期时间为CYCLIC_OFFER_DELAY;

如果收到某客户端的Find Service,不影响发送计数,延迟一定时间(REQUEST_RESPONSE_DELAY)后,发送单播Offer Service给服务请求端;

如果收到SubscribeEventgroup后,发送单播Ack/Nack,启动此订阅Entry的TTL计时器;

收到StopSubscribeEventgroup后,停止此订阅Entry的TTL计时器;

如果服务不可用,离开此阶段进入Down Phase,并发送StopOfferService

3.2 Client Services

Down Phase
服务未被应用请求;

收到Offer Service,存储当前服务实例状态,启动TTL计时,此时服务若被应用请求,直接进入Main Phase。

Initial Wait Phase
服务被请求后,进入此阶段;

等待INITIAL_DELAY时间(最大和最小值之间的随机值);

如果此时收到Offer Service,则取消计时器,直接进入Main Phase;

如果服务请求被释放,进入Down Phase;

计时器超时后,发送第一个Find Service,进入下一阶段。

Repetition Phase
重复发送Find service,重复次数由REPETITIONS_MAX决定;

发送间隔以REPETITIONS_BASE_DELAY为基时间,每发送一次间隔加倍;

收到Offer Service,停止发送计数和计时,立即进入Main Phase;触发发送SubscribeEventgroup(延迟一定时间);

如果服务请求被释放,进入Down Phase;若有订阅,则发送StopSubscribeEventgroup。

Main Phase
不再周期发送Find Service;

收到Offer Service,触发发送SubscribeEventgroup(延迟一定时间);

如果收到StopOfferService,则停止所有计时器;

如果服务请求被释放,进入Down Phase;若有订阅,则发送StopSubscribeEventgro

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/314692.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端css中keyframes(关键帧)的简单使用

前端css中keyframes的使用 一、前言二、例子(一)、例子源码1(二)、源码1运行效果1.视频效果2.截图效果 三、结语四、定位日期 一、前言 关键帧keyframes是css动画的一种,主要用于定义动画过程中某一阶段的样式变化&am…

【STM32+HAL】读取电池电量

一、准备工作 有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32HAL】CUBEMX初始化配置 有关定时器触发ADC模式配置,详见【STM32HAL】ADC采集波形实现 有关软件触发ADC模式配置,详见【STM32HAL】三轴按键PS2摇杆 二、所用工具…

Bytebase 2.16.0 - 支持 Oracle 和 SQL Server DML 变更的事前备份

🚀 新功能 支持 Oracle 和 SQL Server DML 变更的事前备份。 支持在 SQL 编辑器中显示存储过程和函数。 支持兼容 TDSQL 的 MySQL 和 PostgreSQL 版本。 支持把数据库密码存储在 AWS Secrets Manager 和 GCP Secret Manager。 支持通过 IAM 连接到 Google Clou…

VirtualBox7.0.16的蓝屏大坑与ssh登陆ubuntu虚拟机的办法

背景: 安装了最新版的VirtualBox,装了ubuntu系统,在win10下通过ssh死活无法与ubuntu进行正常登陆控制。 然后开始了踩坑。 问题1:ssh登陆失败,但是主机能ping通ubuntu,反过来也能ping通,网络…

线性代数基础1向量

1、向量是什么 1.1、向量的定义 在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的…

增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM,Python代码)

1.效果视频:增加PyQt5界面的交通流量预测(模型为CNN_GRU,CNN_BiGRU_ATTENTION,LSTM)_哔哩哔哩_bilibili) 2.三个模型和数据集的介绍 交通流量预测(python代码,压缩包中带有数据,CN…

NAT的知识点和实现

1.NAT的作用: (1)、把内网私网IP转换公网IP; (2)、隐藏内网,起到保护内网作用; (3)、适当的缓解的IPv4地址空间枯竭; (4&#xff…

自己搭建的大疆无人机RTMP流媒体服务延迟太大

流程:无人机摄像头->图传->遥控器->流媒体服务器->取流播放,延迟有10秒来的,大家有没有什么好的方案。

【6】mysql查询性能优化-关联子查询

【README】 0. 先说结论:一般用inner join来改写in和exist,用left join来改写not in,not exist;(本文会比较内连接,包含in子句的子查询,exist的性能 ) 1. 本文总结自高性能mysql 6…

【前端开发基础知识快速入门】

前端开发基础知识&快速入门 一、VSCode 使用1.1 安装常用插件1.2 创建项目1.3 创建网页1.4 运行效果二、ES62.1 简介2.2 什么是 ECMAScript2.3 ES6 新特性2.3.1 let 声明变量2.3.2 const 声明常量(只读变量)2.3.3 解构表达式2.3.4 字符串扩展2.3.5 函数优化2.3.6 对象优化…

使用Android studio,安卓手机编译安装yolov8部署ncnn,频繁出现编译错误

从编译开始就开始出现错误,解决步骤: 1.降低graddle版本,7.2-bin --->>> 降低为 6.1.1-all #distributionUrlhttps\://services.gradle.org/distributions/gradle-7.2-bin.zip distributionUrlhttps\://services.gradle.org/di…

【04】JAVASE-循环语句【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture:波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。…

解决双击PDF文件出现打印的问题【Adobe DC】

问题描述 电脑安装Adobe Acrobat DC之后,双击PDF文件就会出现打印,而无法直接打开。 右键PDF文件就会发现,第一栏出现的不是用Adobe打开,而是打印。 重装软件多次仍然无法解决。 原因 右键菜单被改写了。双击其实是执行右键菜…

条件编译 #和##运算符

目录 1. #运算符2. ##运算符3. 条件编译4. 题目分享总结 正文开始 前言: 本章为C语言语法完结撒花, 下文将进行C语言中#和##操作符以及条件编译的讲解, 来进一步让我们了解C语言. 作者主页: 酷酷学!!! 1. #运算符 #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带…

解锁ApplicationContext vs BeanFactory: 谁更具选择性?

目录 一、聚焦源码回顾 (一)源码分析和理解 (二)简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 (一)主要特性总结 (二)直接建议 三、案例简单说明 &am…

[华为OD] 给航天器一侧加装长方形或正方形的太阳能板 100

给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要先安装两个支 柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度 不同,太阳能板的安装面…

神经网络中多层卷积的作用

在神经网络中采用多层卷积的目的是为了逐步提取和组合图像的抽象特征,从而更有效地学习数据的表示并执行复杂的任务。不同层的卷积具有不同的作用,从较低层次的特征(例如边缘、纹理)到较高层次的抽象特征(例如物体部件…

如何在Windows 11中安装或删除可选功能?这里提供详细步骤

序言 Windows 11提供了各种各样的功能,其中许多功能,如Linux的Windows子系统(WSL)和语言包,它默认情况下不会安装。你也可以删除默认情况下安装的功能,以下是如何以图形方式或从命令行执行此操作。 关于Windows 11中的可选功能,你需要了解的内容 还有其他添加和删除功…

ubuntu20 中设置桌面背景任务

1. 下载conky 使用 Conky 在 Ubuntu 中显示信息,例如你的阅读计划,可以分几个步骤来完成。Conky 是一款灵活的轻量级系统监视器,能够在桌面上显示各种信息。以下是基本的设置步骤: 安装 Conky 首先,你需要在 Ubuntu…

TR6 - Transformer实战 单词预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 理论知识关于数据集 Wikitext-2 模型结构代码实现0. 环境1. 加载数据集2. 模型搭建3. 创建模型4. 单轮训练和评估的流程5. 训练 模型效果总结与心得体会 …