AUTOSAR-SD篇

news2024/11/20 3:33:01

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.coloradmin.cn/o/1629164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西湖大学赵世钰老师【强化学习的数学原理】学习笔记-1、0节

强化学习的数学原理是由西湖大学赵世钰老师带来的关于RL理论方面的详细课程,本课程深入浅出地介绍了RL的基础原理,前置技能只需要基础的编程能力、概率论以及一部分的高等数学,你听完之后会在大脑里面清晰的勾勒出RL公式推导链条中的每一个部…

索引失效的几种场景

索引失效的几种场景 初始化数据一、对索引使用左或左右模糊匹配二、对索引使用函数三、对索引使用表达式计算四、对索引进行隐式类型转换五、索引使用不满足最左前缀原则六、where子句使用or总结 初始化数据 本文使用的是InnoDB存储引擎,先来创建一个学生表。 dro…

2021年山东省职业院校技能大赛高职组“信息安全管理与评估”样题

培训、环境、资料、考证 公众号:Geek极安云科 网络安全群:624032112 网络系统管理群:223627079 网络建设与运维群:870959784 移动应用开发群:548238632 极安云科专注于技能提升,赋能 2024年广东省高校的技…

【第二十五课】动态规划:数字三角形(acwing-898 / 蓝桥官网503 / c++代码)

目录 acwing-898数字三角形(模板题) 思路 注意点 代码 视频讲解推荐 2020蓝桥杯省赛-数字三角形 错误思路 (可不看) 思路 代码 注意点 续上之前的啦。 【第二十五课】动态规划:01背包问题(acwing-2 / 思路 / 含一维数组优化 / c代码) 适合在学习过背包…

OS复习笔记ch3-1

引言 学到第三章,就正式步入我们OS的大门了 本章我们将围绕以下几个问题去解决 什么是进程?进程状态有哪些?进程如何描述?进程如何控制? 本节内容主要是回答前两个问题,第二节回答后两个问题。 进程 …

windows环境下安装Apache

首先apache官网下载地址:http://www.apachelounge.com/download/按照自己的电脑操作系统来安装 这里我安装的是win64 主版本是2.4的apache。 然后解压压缩包到一个全英文的路径下!!!一定一定不要有中文 中文符号也不要有&#xff…

详细分析PyInstaller打包python为exe执行文件(附Demo)

目录 前言1. 基本知识2. Demo 前言 需要将python文件打包成exe文件,变成rpa自动化形式 1. 基本知识 PyInstaller是一个用于将Python应用程序打包成独立可执行文件的工具 可以将Python脚本打包成Windows、Linux和Mac OS X上的可执行文件,这个作用可以将…

【Linux】软硬链接与动静态库(理解软硬链接的特点及使用场景、如何建立动静态库与使用第三方库)

一、软链接 1.1 如何建立软链接 //建立软链接 -s代表soft ln -s 目标文件名 链接文件名//删除软链接 rm 链接文件 或 unlink 链接文件 1.2 软链接的特点与功能 通过ls -i指令可以查看文件的inode编号 、 可以看出目标文件与软链接文件各自有自己的inode,所以软…

揭秘App全渠道统计服务:如何精准追踪你的用户来源?

在移动互联网时代,App的推广和运营至关重要,而渠道统计则是衡量推广效果的关键一环。近日,xinstall推出了一款全新的App全渠道统计服务,该服务旨在帮助开发者和运营者更全面地了解用户来源,优化推广策略,从…

前端JS加密库CryptoJS的常用方法

CryptoJS是前端常用的一个加密库&#xff0c;如MD5、SHA256、AES等加密算法。 官方文档&#xff1a;https://www.npmjs.com/package/crypto-js 安装方法 方法一&#xff1a;直接在html文件中引入 <script type"text/javascript" src"path-to/bower_componen…

C# 项目:导线计算 / 坐标转换 / 曲线放样 / 水准网 / 导线网平差

文章目录 Part.I IntroductionPart.II 软件简介Chap.I 导线计算Chap.II 坐标转换Chap.III 曲线放样Chap.IV 水准网 / 导线网平差 Part.III 软件使用过程中可能遇到的问题Reference Part.I Introduction 本文将对几个基于 C# 开发的软件进行简要的介绍&#xff0c;这些软件都是…

前端更优雅的使用 jsonp

前端更优雅的使用 jsonp 背景&#xff1a;最近项目中又使用到了 jsonp 这一项跨域的技术&#xff0c;&#xff08;主要还是受同源策略影响&#xff09;&#xff0c;下面有为大家提供封装好的函数及对应使用示例&#xff0c;欢迎大家阅读理解 文章目录 前端更优雅的使用 jsonp同…

SAP-ERP TM运输管理模块详解-1

简介 SAP中的运输功能(即TM模块,属于SD的子模块)是后勤执行的一部分,用于自动计算交货成本。也就是说,SAP可以让系统自动对销售发货的商品计算运费,对于运费占这个成本很大比重的销售模式,可以使用该功能。运输功能相对于SD其他模块,相对比较独立的,应用面不是很广。其…

【算法一则】【贪心】数组中的数可以拼装成的最大数

题目 给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&#xff1a;输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整数。 示例 1&#xff1a; 输入&#xff1a;nums [10,2] …

使用 frp 通过云厂商公网IP实现内网穿透

写在前面 有小伙伴推荐&#xff0c;简单了解博文内容涉及 内网穿透 工具 frp 的安装以及2个Demo内网的静态文件服务访问 Demo内网多端口映射 Demo理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的…

【数据分析面试】32.矩阵元素求和 (Python: for…in…语句)

题目&#xff1a;矩阵元素求和 &#xff08;Python) 假设给定一个整数矩阵。你的任务是编写一个函数&#xff0c;返回矩阵中所有元素的和。 示例 1&#xff1a; 输入&#xff1a; matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]]输出&#xff1a; matrix_sum(matrix) -> 45…

判断n以内的素数个数的五种方法+时间对比

目录 方法一&#xff1a;暴力法 复杂度 方法二&#xff1a;跨度为6的倍数的优化 复杂度 方法三&#xff1a;埃氏筛法 复杂度 方法四&#xff1a;埃氏筛法的改良 复杂度 方法五&#xff1a;线性筛 复杂度 性能对比测试 练习 方法一&#xff1a;暴力法 就是写一个函…

STL--string详解

STL基本内容 string是什么 string实质上是一个对象 string可看作一个串&#xff0c;类似字符数组 可以扩容&#xff0c;可以增删查改 可用下表访问操作符[]引用&#xff0c;修改某值 构造函数 默认构造 拷贝构造&#xff1a;参数为(string 或 char*) 求string对象的长度不…

锂电池SOH预测 | 基于SVM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

C语言学习/复习36

一、程序的环境与预处理 二、翻译环境与执行环境 三、运行环境 四、预编译(预处理)详解