AUTOSAR Transformer 详解
目录
- 1. Transformer概述
- 1.1 Transformer的作用
- 1.2 Transformer的基本特性
- 2. Transformer架构
- 2.1 整体架构
- 2.2 类层次结构
- 3. Transformer类型
- 3.1 SOME/IP Transformer
- 3.2 COM Based Transformer
- 4. Transformer处理流程
- 4.1 SOME/IP Transformer处理流程
- 5. 总结
1. Transformer概述
1.1 Transformer的作用
Transformer是AUTOSAR中基础软件服务层的重要组件,主要作用是对数据进行转换处理。根据SRS_Xfrm_00001的要求,Transformer负责接收来自RTE(运行时环境)的数据,对数据进行处理后,将结果返回给RTE。Transformer可以执行以下两类主要操作:
- 序列化/线性化数据:将结构化数据转换为线性形式
- 转换数据:修改或扩展线性数据,例如添加校验和
Transformer作为系统服务集群中的BSW(基础软件)模块,为RTE提供服务。它们由RTE调用执行,并可以保持内部状态,但也可以工作为无状态组件。
1.2 Transformer的基本特性
根据AUTOSAR SRS对Transformer的规范要求,所有Transformer应具备以下基本特性:
- 固定接口:提供标准化接口供RTE调用(SRS_Xfrm_00002)
- 缓冲机制:支持就地(in-place)和复制(copy)缓冲机制(SRS_Xfrm_00003)
- 错误处理:支持将错误返回给RTE(SRS_Xfrm_00004)
- 数据兼容性:能够处理比预期更多的数据(SRS_Xfrm_00005)
- 并发执行:支持并发执行(SRS_Xfrm_00006)
- 数据提取:反序列化转换器支持提取数据子集(SRS_Xfrm_00007)
- 输出格式规范:明确指定其输出数据格式(SRS_Xfrm_00008)
- 类别归属:每个Transformer属于特定的Transformer类(SRS_Xfrm_00011)
此外,Transformer可以组成转换器链,由RTE按照指定顺序调用链中的转换器。这种配置在系统模板中完成,转换器链的最大长度限制为255个转换器。
2. Transformer架构
2.1 整体架构
下图展示了AUTOSAR中Transformer的整体架构,包括其在AUTOSAR分层架构中的位置以及与其他组件的关系:
从图中可以看出,Transformer位于AUTOSAR架构的基础软件服务层,主要负责连接应用层的软件组件与通信服务层的各种通信模块。架构的关键组成部分包括:
- 应用层:包含软件组件(SWC),是数据的最终来源和目的地
- RTE层:包含运行时环境和Transformer管理器,负责协调Transformer的执行
- 基础软件服务层:
- Transformer类:包括COM Based Transformer、SOME/IP Transformer和其他类型的Transformer
- 通信服务:包括COM模块和SOME/IP堆栈等,负责底层通信实现
Transformer管理器是RTE的一部分,负责按配置顺序调用Transformer链、处理错误返回以及协调并发执行。所有Transformer都提供标准化接口,支持就地和复制缓冲、错误处理及并发执行。
2.2 类层次结构
下图展示了AUTOSAR中Transformer的类层次结构:
该图描述了Transformer的基类和派生类的层次关系:
-
Transformer基类:定义了所有Transformer必须实现的接口和功能要求(SRS_Xfrm_00001 - SRS_Xfrm_00011),包括:
- 提供固定接口
- 执行转换
- 支持错误处理
- 支持in-place/copy缓冲
- 处理超长数据
- 支持并发执行
- 指定输出格式
- 提供抽象错误集合
-
派生类:
- SOME/IP Transformer:提供SOME/IP协议相关功能(SRS_Xfrm_00101 - SRS_Xfrm_00106)
- COM Based Transformer:提供COM模块相关功能(SRS_Xfrm_00201 - SRS_Xfrm_00202)
- 其他Transformer类型:提供其他特定功能
根据SRS_Xfrm_00009和SRS_Xfrm_00011的要求,AUTOSAR中存在固定的Transformer类集合,每个Transformer必须属于特定的Transformer类,同时每个类提供一组固定的抽象错误集合。
3. Transformer类型
3.1 SOME/IP Transformer
SOME/IP Transformer(可扩展面向服务中间件/IP)是一种专门处理SOME/IP协议通信的转换器。根据SRS_Xfrm_00101到SRS_Xfrm_00106的要求,SOME/IP Transformer提供以下功能:
- 数据序列化:将原子和结构化数据元素序列化为线性数组(SRS_Xfrm_00101)
- 通信协议:定义ECU间客户端/服务器通信的协议(SRS_Xfrm_00102)
- 异常通知:支持应用程序的异常通知(SRS_Xfrm_00103)
- 错误处理:支持服务器端客户端/服务器通信的自主错误反应(SRS_Xfrm_00105)
- 扩展数据支持:支持具有标记成员/参数的可扩展数据结构和方法的序列化(SRS_Xfrm_00106)
SOME/IP Transformer的创建动机是为了满足嵌入式环境中的资源消耗需求,同时兼容各种用例和通信伙伴,可以在不同的操作系统(AUTOSAR、GENIVI、OSEK)上实现,甚至可以在没有操作系统的嵌入式设备上使用。
代码示例:SOME/IP Transformer接口定义
/* SOME/IP Transformer接口示例 */
typedef struct {uint16 ServiceId; /* 服务标识符 */uint16 MethodId; /* 方法标识符 */uint8 InterfaceVersion; /* 接口版本 */boolean ExtensibleFormat; /* 是否使用可扩展格式 */
} SomeIp_ServiceConfigType;/* SOME/IP Transformer序列化函数 */
Std_ReturnType SomeIp_Serialize(const void* dataPtr, /* 输入数据指针 */uint32 dataSize, /* 输入数据大小 */uint8* targetBufferPtr, /* 目标缓冲区指针 */uint32* targetBufferSizePtr, /* 目标缓冲区大小指针 */const SomeIp_ServiceConfigType* configPtr /* 服务配置 */
);/* SOME/IP Transformer反序列化函数 */
Std_ReturnType SomeIp_Deserialize(const uint8* dataPtr, /* 输入数据指针 */uint32 dataSize, /* 输入数据大小 */void* targetStructPtr, /* 目标结构体指针 */uint32* targetSizePtr, /* 目标大小指针 */const SomeIp_ServiceConfigType* configPtr /* 服务配置 */
);/* SOME/IP Transformer错误处理函数 */
Std_ReturnType SomeIp_HandleError(uint8 errorId, /* 错误标识符 */uint8* responseBufferPtr, /* 响应缓冲区指针 */uint32* responseSizePtr /* 响应大小指针 */
);
3.2 COM Based Transformer
COM Based Transformer是一种基于COM模块配置的转换器。根据SRS_Xfrm_00201和SRS_Xfrm_00202的要求,COM Based Transformer提供以下功能:
- 数据序列化:基于固定数据映射将原子和结构化数据元素序列化为线性数组(SRS_Xfrm_00201)
- 配置来源:从COM模块获取配置信息(SRS_Xfrm_00202)
COM Based Transformer使Transformer功能可用于使用固定通信矩阵和压缩数据表示的目标总线系统。它从系统描述中的固定数据映射获取序列化数据的信息,并从COM模块ECU配置中获取配置。
代码示例:COM Based Transformer接口定义
/* COM Based Transformer配置类型 */
typedef struct {uint16 ComHandleId; /* COM句柄标识符 */uint8 ComSignalType; /* COM信号类型 */uint8 ComBitSize; /* COM位大小 */uint8 ComBitPosition; /* COM位位置 */boolean ComSignalEndianness; /* COM信号字节序 */
} ComBased_SignalConfigType;/* COM Based Transformer序列化函数 */
Std_ReturnType ComBased_Serialize(const void* dataPtr, /* 输入数据指针 */uint32 dataSize, /* 输入数据大小 */uint8* targetBufferPtr, /* 目标缓冲区指针 */uint32* targetBufferSizePtr, /* 目标缓冲区大小指针 */const ComBased_SignalConfigType* configPtr /* 信号配置 */
);/* COM Based Transformer反序列化函数 */
Std_ReturnType ComBased_Deserialize(const uint8* dataPtr, /* 输入数据指针 */uint32 dataSize, /* 输入数据大小 */void* targetStructPtr, /* 目标结构体指针 */uint32* targetSizePtr, /* 目标大小指针 */const ComBased_SignalConfigType* configPtr /* 信号配置 */
);
4. Transformer处理流程
4.1 SOME/IP Transformer处理流程
下图展示了SOME/IP Transformer的详细处理流程:
从图中可以看出,SOME/IP Transformer的处理流程主要包括以下步骤:
- 数据输入:软件组件发起数据传输或服务请求
- RTE处理:RTE接收数据并确定Transformer链
- SOME/IP处理:
- 序列化处理:
- 检查数据结构
- 序列化原子和结构化数据
- 对客户端/服务器通信添加SOME/IP协议头
- 处理可选参数(使用Tag/Length/Value编码)
- 反序列化处理:
- 接收线性数组
- 解析SOME/IP协议头
- 处理异常情况
- 解析Tag/Length/Value编码
- 跳过未知/不支持的字段
- 反序列化数据结构
- 提取需要的数据子集
- 序列化处理:
- 结果返回:返回处理结果给RTE
- RTE后续处理:处理可能的错误或继续处理链中的下一个Transformer
- 完成处理:向软件组件返回最终结果
这一流程体现了SRS_Xfrm_00106中要求的可扩展数据结构支持,允许在发送方接口定义中任意位置扩展结构/方法,同时接收方如果不需要新成员/参数,则不需要进行适配。发送方也不需要发送可选但当前不可用的结构成员。
5. 总结
AUTOSAR Transformer作为AUTOSAR架构中重要的基础软件服务组件,通过提供标准化的数据转换机制,使应用层软件组件与底层通信细节解耦,为不同ECU之间的通信提供了强大的支持。
主要优势:
- 标准化接口:提供一致的接口,简化软件组件开发
- 可扩展性:支持新数据结构和协议的扩展
- 灵活性:支持多种转换器类型和转换器链
- 兼容性:支持不同操作系统和嵌入式环境
- 错误处理:提供完善的错误处理机制
应用场景:
- ECU间通信:实现不同ECU之间的数据交换
- 协议转换:将应用数据转换为特定协议格式
- 数据保护:添加校验和等保护机制
- 数据优化:优化数据格式,提高传输效率
通过理解和正确使用Transformer,开发人员可以更好地实现AUTOSAR架构下的软件系统,确保系统的可靠性、可维护性和可扩展性。