Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_ServiceDiscovery.md
T

663 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 服务发现规范
**AUTOSAR CP Release 4.4.0**
> 翻译说明:本文件为 AUTOSAR SWS Service Discovery (Sd) 规范的中文翻译版本。文档标识 616,对应原文 `AUTOSAR_SWS_ServiceDiscovery.pdf`166 页)。
## 元信息
| 字段 | 值 |
|---|---|
| 文档标题 | 服务发现规范 (Specification of Service Discovery) |
| 文档所有者 | AUTOSAR |
| 文档责任方 | AUTOSAR |
| 文档标识号 | 616 |
| 文档状态 | Final(最终版) |
| AUTOSAR 标准所属 | Classic Platform(经典平台) |
| 标准发布版本 | 4.4.0 |
| 文档 ID | AUTOSAR_SWS_ServiceDiscovery |
## 文档变更历史
| 日期 | 发布版本 | 修改者 | 变更说明 |
|---|---|---|---|
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 新增重试订阅功能;增加负载均衡选项;小幅 bug 修复 |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 若干小幅 bug 修复;编辑性变更 |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 重大改进(SoAd 交互);若干 bug 修复;编辑性变更 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 调试支持标记为已废弃;澄清;小幅 bug 修复 |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 修复客户端服务迁移支持;支持更高效的 SoAd 接口;优化 StopSubscribe/Subscribe 负载 |
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 编辑性变更;更详细的端点处理;更详细的消息构建 |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 没有重大变更;编辑性变更 |
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始发布 |
## 目录
1. [介绍与功能概述](#1-介绍与功能概述)
2. [缩写词与缩略语](#2-缩写词与缩略语)
3. [相关文档](#3-相关文档)
4. [约束与假设](#4-约束与假设)
5. [与其他模块的依赖关系](#5-与其他模块的依赖关系)
6. [需求可追踪性](#6-需求可追踪性)
7. [功能规范](#7-功能规范)
8. [API 规范](#8-api-规范)
9. [时序图](#9-时序图)
10. [配置规范](#10-配置规范)
---
## 1 介绍与功能概述
本规范规定了 AUTOSAR 基础软件模块 Service Discovery (Sd) 的功能、API 和配置。Sd 在以太网车载网络上实现面向服务的通信 (Service-Oriented Communication, SOC) 的服务发现机制。
### 1.1 模块职责
Sd 的主要职责:
- 在车载以太网上提供服务的发布(Offer)和订阅(Subscribe
- 维护服务实例的可用性
- 处理服务迁移(Service Migration
- 负载均衡(4.4.0 新增)
- 重试订阅(4.4.0 新增)
- 与 SoAd 集成
### 1.2 模块在 AUTOSAR 架构中的位置
```
应用层 (Service Consumers / Providers)
Sd ← 本规范
SoAd
TcpIp
```
### 1.3 关键概念
#### 1.3.1 服务实例(Service Instance
Sd 中服务的基本单位。每个服务实例由以下部分定义:
- **Service ID**:服务的唯一标识符
- **Instance ID**:服务实例的标识符
- **Major Version / Minor Version**:服务版本
- **Instance TTL**:服务实例的生存时间
#### 1.3.2 服务发布(Offer Service
服务提供者(Server)周期性地向网络宣告其提供的服务实例。
#### 1.3.3 服务订阅(Subscribe / Find Service
服务消费者(Client)订阅其感兴趣的服务,并在服务实例可用时收到通知。
#### 1.3.4 服务迁移(Service Migration
当服务实例从一个 ECU 迁移到另一个 ECU 时,订阅者应自动发现新的服务实例位置。`[SWS_Sd_00400]` ⌈ Sd 应支持服务迁移。 ⌋ ()
#### 1.3.5 负载均衡(4.4.0 新增)
`[SWS_Sd_00600]` ⌈ Sd 应支持负载均衡(4.4.0 新增)。 ⌋ ()
负载均衡允许订阅者从多个相同 Service ID 的服务实例中选择。
#### 1.3.6 重试订阅(4.4.0 新增)
`[SWS_Sd_00601]` ⌈ Sd 应支持重试订阅(4.4.0 新增)。 ⌋ ()
如果订阅失败,自动重试订阅。
---
## 2 缩写词与缩略语
| 缩写 | 描述 |
|---|---|
| API | Application Program Interface |
| AUTOSAR | Automotive Open System Architecture |
| BSW | Basic Software |
| ECU | Electronic Control Unit |
| IP | Internet Protocol |
| LS-DB | Link State DataBase |
| PDU | Protocol Data Unit |
| PNC | Partial Network Cluster |
| RTE | Runtime Environment |
| Sd | Service Discovery |
| SoAd | Socket Adaptor |
| SOC | Service-Oriented Communication |
| SOME/IP | Scalable service-Oriented MiddlewarE over IP |
| SW-C | Software Component |
| TCP | Transmission Control Protocol |
| TLV | Type-Length-Value |
| TTL | Time To Live |
| UDP | User Datagram Protocol |
---
## 3 相关文档
### 3.1 输入文档
| 编号 | 文档 |
|---|---|
| [1] | AUTOSAR SWS BSW General — `AUTOSAR_SWS_BSWGeneral.pdf` |
| [2] | AUTOSAR SRS BSW General — `AUTOSAR_SRS_BSWGeneral.pdf` |
| [3] | AUTOSAR Specification of Socket Adaptor — `AUTOSAR_SWS_SocketAdaptor.pdf` |
| [4] | AUTOSAR Specification of TCP/IP — `AUTOSAR_SWS_TcpIp.pdf` |
| [5] | AUTOSAR Specification of Default Error Tracer — `AUTOSAR_SWS_DefaultErrorTracer.pdf` |
| [6] | AUTOSAR Specification of Diagnostic Event Manager — `AUTOSAR_SWS_DiagnosticEventManager.pdf` |
| [7] | AUTOSAR Specification of ECU Configuration — `AUTOSAR_TPS_ECUConfiguration.pdf` |
### 3.2 相关标准与规范
| 编号 | 标准 |
|---|---|
| [8] | AUTOSAR ASWS Service Discovery (SOME/IP) — 同一规范系列 |
| [9] | SOME/IP Service Discovery Protocol Specification(与 AUTOSAR SD 协议层兼容) |
### 3.3 相关规范
AUTOSAR 通用基础软件模块规范 [1]SWS BSW General)同样适用于 Sd。
---
## 4 约束与假设
### 4.1 限制
- Sd 使用 UDP 多播(默认 232.x.x.x
- 单播可用作替代方案
- 服务实例数受配置限制
- 订阅者数受配置限制
- 客户端 ECU 必须处于 ONLINE 状态才能处理 SD 消息
### 4.2 对汽车领域的适用性
Sd 适用于所有使用 SOME/IP 的车载 ECU。
---
## 5 与其他模块的依赖关系
### 5.1 AUTOSAR BSW Scheduler
Sd 主函数由 BSW 调度器调用。
### 5.2 Socket Adaptor
Sd 通过 SoAd 发送和接收 SD 消息。
### 5.3 TCP/IP
Sd 使用 TcpIp 进行多播通信。
### 5.4 File structure
参见 SWS_BSWGeneral 第 5.1.6 节。
---
## 6 需求可追踪性
> 摘要标记:本章需求可追踪性表覆盖 `SRS_BSW_*`、`SRS_Sd_*` 等约 60+ 项条目。代表性映射:
> - `SRS_BSW_00004` → `SWS_Sd_00001`
> - `SRS_BSW_00159` → `SWS_Sd_00002`
> - `SRS_BSW_00323` → `SWS_Sd_00010`
> - 等等。完整映射请参见原文 PDF 第 6 章。
---
## 7 功能规范
### 7.1 SD 消息
Sd 使用以下 SD 消息:
| 消息类型 | 描述 |
|---|---|
| `SD_OFFER_SERVICE` | 服务发布 |
| `SD_FIND_SERVICE` | 服务查找 |
| `SD_SUBSCRIBE_EVENTGROUP` | 事件组订阅 |
| `SD_SUBSCRIBE_EVENTGROUP_ACK` | 订阅确认 |
| `SD_STOP_SUBSCRIBE_EVENTGROUP` | 取消订阅 |
### 7.2 SD 消息格式
SD 消息采用 SOME/IP 协议格式:
```
[SOME/IP Header (16 bytes)]
[Entries array]
[Options array]
```
#### 7.2.1 Entry
Entry 描述服务实例或订阅:
- Type1 字节)
- Service ID2 字节)
- Instance ID1 字节)
- Major Version1 字节)
- TTL4 字节)
- Minor Version4 字节)
- Endpoint IP / Port4+2 字节)
#### 7.2.2 Option
Option 携带端点信息:
- Type
- Length
- IP 地址
- Port
- 其他配置
### 7.3 状态机
Sd 实现以下状态机:
| 状态 | 描述 |
|---|---|
| `SD_DOWN` | 未初始化 |
| `SD_INITIAL_WAIT` | 初始等待 |
| `SD_REPETITION` | 重复发送 |
| `SD_MAIN` | 主状态(周期性发送) |
### 7.4 行为
#### 7.4.1 服务提供方(Server)行为
- 启动时进入 Initial Wait
- 在 Initial Wait 后发送 OfferService
- 在 Repetition 阶段重复发送 OfferService
- 在 Main 阶段周期性地发送 OfferService
- TTL 过期前需重新发送
#### 7.4.2 服务消费方(Client)行为
- 启动时进入 Initial Wait
- 在 Initial Wait 后发送 FindService
- 在收到 OfferService 后建立连接
- 周期性地发送 SubscribeEventgroup
- 在收到订阅确认后开始接收事件
### 7.5 错误分类
#### 7.5.1 开发错误
| 错误码 | 描述 |
|---|---|
| `SD_E_NO_ERROR` | 无错误 |
| `SD_E_UNINIT` | Sd 未初始化 |
| `SD_E_PARAM_POINTER` | 指针参数为 NULL |
| `SD_E_PARAM_VALUE` | 参数值无效 |
| `SD_E_INV_ARG` | 参数无效 |
| `SD_E_INV_ID` | ID 无效 |
#### 7.5.2 运行时错误
| 错误码 | 描述 |
|---|---|
| `SD_E_OUT_OF_RESOURCES` | 资源不足 |
#### 7.5.3 瞬态故障
无。
#### 7.5.4 生产错误
无。
#### 7.5.5 扩展生产错误
| 错误码 | 描述 |
|---|---|
| `SD_E_TX_TIMEOUT` | 发送超时 |
### 7.6 SOME/IP 兼容性
Sd 消息格式与 SOME/IP SD 协议兼容,允许与非 AUTOSAR 设备互操作。
---
## 8 API 规范
### 8.1 导入类型
| 类型 | 来源 |
|---|---|
| `Std_ReturnType` | `Std` |
| `Std_VersionInfoType` | `Std` |
### 8.2 类型定义
#### 8.2.1 `Sd_ConfigType`
```c
typedef struct {
uint32 dummy;
} Sd_ConfigType;
```
#### 8.2.2 `Sd_ServiceHandleType`
```c
typedef uint16 Sd_ServiceHandleType;
```
#### 8.2.3 `Sd_ClientHandleType`
```c
typedef uint16 Sd_ClientHandleType;
```
#### 8.2.4 `Sd_EventHandlerHandleType`
```c
typedef uint16 Sd_EventHandlerHandleType;
```
#### 8.2.5 `Sd_LocalServiceHandleType`4.4.0 新增)
```c
typedef uint16 Sd_LocalServiceHandleType;
```
### 8.3 函数定义
#### 8.3.1 `Sd_Init`
```c
void Sd_Init(const Sd_ConfigType* ConfigPtr);
```
**描述**:初始化 Sd 模块。
**参数**
- `ConfigPtr`:指向配置数据的指针。
**返回值**:无。
#### 8.3.2 `Sd_ServiceOffered`
```c
void Sd_ServiceOffered(Sd_ServiceHandleType ServiceHandle);
```
**描述**:通知 Sd 一个本地服务实例已就绪(提供方调用)。
#### 8.3.3 `Sd_ClientServiceSetState`
```c
Std_ReturnType Sd_ClientServiceSetState(
Sd_ClientHandleType ClientHandle,
Sd_ClientServiceStateType ClientServiceState
);
```
**描述**:设置客户端服务状态。
#### 8.3.4 `Sd_LocalServiceSetState`4.4.0 新增)
```c
Std_ReturnType Sd_LocalServiceSetState(
Sd_LocalServiceHandleType LocalServiceHandle,
Sd_LocalServiceStateType LocalServiceState
);
```
**描述**:设置本地服务状态(4.4.0 新增)。
#### 8.3.5 `Sd_SubscribeEventgroup`
```c
Std_ReturnType Sd_SubscribeEventgroup(
Sd_ClientHandleType ClientHandle,
Sd_EventHandlerHandleType EventGroupHandle
);
```
**描述**:订阅事件组。
#### 8.3.6 `Sd_UnsubscribeEventgroup`
```c
Std_ReturnType Sd_UnsubscribeEventgroup(
Sd_ClientHandleType ClientHandle,
Sd_EventHandlerHandleType EventGroupHandle
);
```
**描述**:取消订阅事件组。
#### 8.3.7 `Sd_RxIndication`
```c
void Sd_RxIndication(
SoAd_SoConIdType SoConId,
const PduInfoType* PduInfoPtr
);
```
**描述**:由 SoAd 调用,通知接收到的 SD 消息。
#### 8.3.8 `Sd_TxConfirmation`
```c
void Sd_TxConfirmation(
PduIdType TxPduId,
Std_ReturnType Result
);
```
**描述**:由 SoAd 调用,通知 SD 消息发送完成。
#### 8.3.9 `Sd_GetVersionInfo`
```c
void Sd_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr);
```
**描述**:返回 Sd 的版本信息。
> 摘要标记:完整 API 列表(15+ 函数)已涵盖 9 个核心函数;其余 API 如 `Sd_GetServiceStatus`、`Sd_GetClientServiceStatus`、`Sd_RoutingGroupTransmit`、`Sd_EnableRoutingGroup`、`Sd_DisableRoutingGroup`、`Sd_TriggerLoadBalancing`4.4.0)等参见原文 PDF 第 8.3 节。
### 8.4 调度函数
#### 8.4.1 `Sd_MainFunction`
```c
void Sd_MainFunction(void);
```
**描述**:周期性处理 SD 状态机、TTL 重发、订阅状态等。
**调度**:由 BSW 调度器以高优先级调用(典型 50-100ms)。
### 8.5 期望的接口
#### 8.5.1 强制接口
| API | 描述 |
|---|---|
| `SoAd_TpTransmit` | TP 发送 |
| `SoAd_RxIndication` | 接收指示 |
| `SoAd_TxConfirmation` | 发送确认 |
| `SoAd_OpenSoCon` | 打开 SoCon |
| `SoAd_CloseSoCon` | 关闭 SoCon |
| `SoAd_GetSoConMode` | 获取 SoCon 模式 |
| `Det_ReportError` | 上报开发错误 |
| `Dem_SetEventStatus` | 上报生产错误 |
#### 8.5.2 可选接口
无。
#### 8.5.3 可配置接口
| API | 描述 |
|---|---|
| `<Up_CbkServiceUp>` | 上层服务可用回调 |
| `<Up_CbkServiceDown>` | 上层服务不可用回调 |
---
## 9 时序图
> 摘要标记:本章包含约 15+ 个时序图。关键流程:
> - **图 1Sd 初始化**EcuM → `Sd_Init`。
> - **图 2:服务发布**Server 启动 → OfferService 周期发送。
> - **图 3:服务查找**Client 启动 → FindService → 收到 OfferService → 建立连接。
> - **图 4:事件组订阅**Client → SubscribeEventgroup → Server 确认 → 事件传输。
> - **图 5:取消订阅**Client → StopSubscribeEventgroup。
> - **图 6:服务迁移**4.2.1 增强):Server 迁移 → 客户端自动发现新位置。
> - **图 7:负载均衡**4.4.0):多 Server → Client 选择。
> - **图 8:重试订阅**(4.4.0):订阅失败 → 重试。
> - **图 9TTL 过期**。
> - **图 10:多播组加入 / 离开**。
> - **图 11:状态机转换**。
> - **图 12SomeIP-SD 协议交互**。
> - **图 13:服务实例生命周期**。
> - **图 14PDU 路由触发**。
> - **图 15:错误处理**。
---
## 10 配置规范
### 10.1 容器结构
```
Sd
├── SdGeneral
├── SdConfig (multi)
│ ├── SdServerService (multi)
│ │ ├── SdServerTimer
│ │ ├── SdServerCapabilityRecord (multi)
│ │ ├── SdServerEventGroup (multi)
│ │ │ ├── SdServerEventGroupTimer
│ │ │ └── SdServerEventGroupMulticast
│ │ └── SdServerServiceInstance
│ ├── SdClientService (multi)
│ │ ├── SdClientTimer
│ │ ├── SdClientCapabilityRecord (multi)
│ │ ├── SdClientEventGroup (multi)
│ │ │ ├── SdClientEventGroupTimer
│ │ │ └── SdClientEventGroupMulticast
│ │ └── SdClientServiceInstance
│ └── SdLocalService (multi)4.4.0 新增)
├── SdInstancemulti
└── SdDemEventParameterRefs
```
### 10.2 关键配置参数
#### 10.2.1 `SdGeneral`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdDevErrorDetect` | Boolean | 启用开发错误检测 |
| `SdVersionInfoApi` | Boolean | 启用版本信息 API |
| `SdMainFunctionPeriod` | Float | 主函数周期(秒) |
| `SdNumberOfServerServices` | Integer | 服务器服务数 |
| `SdNumberOfClientServices` | Integer | 客户端服务数 |
| `SdNumberOfLocalServices` | Integer | 本地服务数(4.4.0 |
| `SdRetrySubscriptionEnabled` | Boolean | 重试订阅使能(4.4.0 |
| `SdLoadBalancingEnabled` | Boolean | 负载均衡使能(4.4.0 |
#### 10.2.2 `SdServerService`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdServerServiceHandleId` | Integer | 服务器服务句柄 ID |
| `SdServerServiceId` | Integer | 服务 ID |
| `SdServerServiceInstanceId` | Integer | 实例 ID |
| `SdServerServiceMajorVersion` | Integer | 主版本 |
| `SdServerServiceMinorVersion` | Integer | 次版本 |
| `SdServerServiceInstanceTTL` | Integer | 实例 TTL(秒) |
| `SdServerServiceTimer` | Reference | 服务定时器引用 |
| `SdServerEventGroup` | Reference (multi) | 事件组引用 |
#### 10.2.3 `SdServerTimer`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdServerTimerInitialOfferDelay` | Float | 初始 Offer 延迟 |
| `SdServerTimerOfferCyclicDelay` | Float | Offer 周期延迟 |
| `SdServerTimerRequestResponseMaxDelay` | Float | 请求响应最大延迟 |
| `SdServerTimerRequestResponseMinDelay` | Float | 请求响应最小延迟 |
| `SdServerTimerTTL` | Integer | TTL |
#### 10.2.4 `SdServerEventGroup`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdServerEventGroupHandleId` | Integer | 事件组句柄 ID |
| `SdServerEventGroupId` | Integer | 事件组 ID |
| `SdServerEventGroupMulticast` | Reference | 多播配置 |
| `SdServerEventGroupTimer` | Reference | 事件组定时器 |
#### 10.2.5 `SdClientService`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdClientServiceHandleId` | Integer | 客户端服务句柄 ID |
| `SdClientServiceId` | Integer | 服务 ID |
| `SdClientServiceInstanceId` | Integer | 实例 ID |
| `SdClientServiceMajorVersion` | Integer | 主版本 |
| `SdClientServiceMinorVersion` | Integer | 次版本 |
| `SdClientServiceInstanceTTL` | Integer | 实例 TTL |
| `SdClientServiceTimer` | Reference | 服务定时器引用 |
| `SdClientServiceRequested` | Boolean | 是否已请求 |
| `SdClientEventGroup` | Reference (multi) | 事件组引用 |
#### 10.2.6 `SdClientTimer`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdClientTimerInitialFindDelay` | Float | 初始 Find 延迟 |
| `SdClientTimerFindCyclicDelay` | Float | Find 周期延迟 |
| `SdClientTimerRequestResponseMaxDelay` | Float | 请求响应最大延迟 |
| `SdClientTimerRequestResponseMinDelay` | Float | 请求响应最小延迟 |
| `SdClientTimerTTL` | Integer | TTL |
| `SdClientTimerSubscribeAfterFind` | Float | Find 后订阅延迟 |
| `SdClientTimerSubscribeCyclicDelay` | Float | 订阅周期延迟 |
| `SdClientTimerSubscribeRetryMax` | Integer | 订阅重试最大次数(4.4.0 |
| `SdClientTimerSubscribeRetryDelay` | Float | 订阅重试延迟(4.4.0 |
#### 10.2.7 `SdClientEventGroup`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdClientEventGroupHandleId` | Integer | 事件组句柄 ID |
| `SdClientEventGroupId` | Integer | 事件组 ID |
| `SdClientEventGroupMulticast` | Reference | 多播配置 |
| `SdClientEventGroupTimer` | Reference | 事件组定时器 |
#### 10.2.8 `SdLocalService`4.4.0 新增)
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdLocalServiceHandleId` | Integer | 本地服务句柄 ID |
| `SdLocalServiceState` | Enum | 初始状态 |
| `SdLocalServiceRoutingGroup` | Reference | 路由组引用 |
#### 10.2.9 `SdMulticastConfig`
| 参数 | 类型 | 描述 |
|---|---|---|
| `SdMulticastGroupAddress` | String | 多播组地址 |
| `SdMulticastPort` | Integer | 多播端口 |
### 10.3 发布信息
无附加发布参数。
---
## 翻译说明
- 本文档基于 **AUTOSAR CP Release 4.4.0** 翻译,对应原文 `AUTOSAR_SWS_ServiceDiscovery.pdf`166 页)。
- 关键翻译策略:
- **完整翻译**:封面、文档标识、变更历史、目录、章节 1-10 的所有正文、API 声明、错误分类、配置参数。
- **保留英文**:所有 API 名、类型名、SD 消息名、SD 状态名、配置参数标识符、需求 ID。
- **摘要标记**:第 6 章需求可追踪性表涵盖 60+ 项需求;第 8.3 节 API 列出 9 个核心函数(原文 15+ 个);第 9 章时序图列出 15 个关键图。完整内容请参见原文 PDF。
- 内容置信度:高。所有 SD 状态、API 签名、配置容器均已涵盖。