AUTOSAR进阶图解==>AUTOSAR_TR_FrancaIntegration
AUTOSAR TR Franca Integration 详解
目录
- 1. 概述
- 2. Franca集成架构
- 3. Franca连接器
- 4. 翻译机制
- 5. 数据类型映射
- 6. 总结
1. 概述
Franca集成是AUTOSAR与GENIVI系统集成的关键技术,旨在支持不同标准之间的互操作性。该集成方案通过Franca连接器实现AUTOSAR和GENIVI应用组件之间的通信,并提供双向翻译机制。
1.1 集成目标
根据源文档描述,Franca集成的目标是:
- 虚拟功能总线视图:提供完整的应用层集成系统描述
- 双向翻译:支持Franca模型到AUTOSAR软件组件描述的翻译,以及反向翻译
- 连接器规范:定义AUTOSAR和Franca组件实例之间的互连规范
1.2 集成方法
集成方法包括三个主要部分:
- Franca连接器:用于指定AUTOSAR和GENIVI组件之间的互操作
- Franca到AUTOSAR翻译:将Franca模型转换为AUTOSAR软件组件描述
- AUTOSAR到Franca翻译:将AUTOSAR软件组件描述转换为Franca模型
2. Franca集成架构
2.1 整体架构图
Franca集成架构图展示了AUTOSAR和GENIVI系统的分层集成结构
2.1.1 架构层次说明
应用层:
- AUTOSAR应用组件 (AutoComp):使用AUTOSAR RTE API,通过软件组件API通信,支持静态连接声明
- GENIVI应用组件 (InfoComp):使用Common API,通过INC MW通信,支持动态发现
中间件层:
- AUTOSAR RTE:为AUTOSAR应用组件提供运行时环境服务
- GENIVI INC MW:为GENIVI应用组件提供节点间通信中间件服务
- Common API:提供统一的API接口
基础软件层:
- AUTOSAR基础软件:实现AUTOSAR通信协议栈
- GENIVI传输协议:实现GENIVI通信协议栈
硬件层:
- AUTOSAR ECU:运行AUTOSAR系统的电子控制单元
- GENIVI ECU:运行GENIVI系统的电子控制单元
2.1.2 通信协议
SOME/IP协议:
- 基于Ethernet的通信协议
- 同时支持AUTOSAR和GENIVI系统
- 实现跨系统通信的基础
2.1.3 代码示例
/* AUTOSAR应用组件示例 */
typedef struct {uint8 componentId;boolean isInitialized;uint8 currentState;
} AutoComp_StateType;/* AUTOSAR应用组件初始化 */
Std_ReturnType AutoComp_Init(const AutoComp_ConfigType* config)
{if (config == NULL) {return E_NOT_OK;}/* 初始化组件状态 */autoCompState.componentId = config->componentId;autoCompState.isInitialized = TRUE;autoCompState.currentState = AUTOSAR_STATE_READY;/* 注册RTE服务 */Rte_RegisterService(AUTOCOMP_SERVICE_ID, AutoComp_ServiceHandler);return E_OK;
}/* GENIVI应用组件示例 */
typedef struct {uint8 componentId;boolean isConnected;uint8 serviceState;
} InfoComp_StateType;/* GENIVI应用组件初始化 */
Std_ReturnType InfoComp_Init(const InfoComp_ConfigType* config)
{if (config == NULL) {return E_NOT_OK;}/* 初始化组件状态 */infoCompState.componentId = config->componentId;infoCompState.isConnected = FALSE;infoCompState.serviceState = GENIVI_STATE_INIT;/* 注册Common API服务 */CommonAPI_RegisterService(INFOCOMP_SERVICE_ID, InfoComp_ServiceHandler);return E_OK;
}
3. Franca连接器
3.1 连接器链接类型
Franca连接器链接类型图展示了四种不同的连接类型及其通信方向
3.1.1 链接类型详解
AUTOSAR-to-Franca Client Server Link (AF_CS):
- 功能:AUTOSAR组件调用Franca方法
- 实现方式:通过RPort调用F1.m1()
- 应用场景:AUTOSAR应用组件需要调用GENIVI服务
AUTOSAR-to-Franca Sender Receiver Link (AF_SR):
- 功能:AUTOSAR组件发送数据,Franca组件接收广播
- 实现方式:AUTOSAR组件通过Sender端口发送数据,Franca组件通过广播接收
- 应用场景:AUTOSAR系统向GENIVI系统发送状态信息
Franca-to-AUTOSAR Client Server Link (FA_CS):
- 功能:Franca组件调用AUTOSAR操作
- 实现方式:通过F3.m3()调用端口r
- 应用场景:GENIVI应用组件需要调用AUTOSAR服务
Franca-to-AUTOSAR Sender Receiver Link (FA_SR):
- 功能:Franca组件发送数据,AUTOSAR组件接收广播
- 实现方式:Franca组件发送广播,AUTOSAR组件通过Receiver端口接收
- 应用场景:GENIVI系统向AUTOSAR系统发送事件通知
3.1.2 连接器配置示例
/* Franca连接器配置结构 */
typedef struct {uint8 linkId;FrancaLinkType linkType;uint8 autosarComponentId;uint8 autosarPortId;uint8 francaComponentId;uint8 francaInterfaceId;
} FrancaConnector_LinkConfigType;/* 连接器初始化 */
Std_ReturnType FrancaConnector_Init(const FrancaConnector_ConfigType* config)
{if (config == NULL) {return E_NOT_OK;}/* 初始化连接器状态 */connectorState.isInitialized = TRUE;connectorState.linkCount = config->linkCount;/* 配置各个链接 */for (uint8 i = 0; i < config->linkCount; i++) {FrancaConnector_ConfigureLink(&config->links[i]);}return E_OK;
}/* 配置单个链接 */
static void FrancaConnector_ConfigureLink(const FrancaConnector_LinkConfigType* linkConfig)
{switch (linkConfig->linkType) {case FRANCA_LINK_AF_CS:/* 配置AUTOSAR到Franca的客户端服务器链接 */ConfigureAFClientServerLink(linkConfig);break;case FRANCA_LINK_AF_SR:/* 配置AUTOSAR到Franca的发送接收链接 */ConfigureAFSenderReceiverLink(linkConfig);break;case FRANCA_LINK_FA_CS:/* 配置Franca到AUTOSAR的客户端服务器链接 */ConfigureFAClientServerLink(linkConfig);break;case FRANCA_LINK_FA_SR:/* 配置Franca到AUTOSAR的发送接收链接 */ConfigureFASenderReceiverLink(linkConfig);break;default:/* 错误处理 */break;}
}
4. 翻译机制
4.1 翻译过程
Franca翻译过程图展示了从输入源到输出结果的完整翻译流程
4.1.1 翻译引擎说明
Franca-to-AUTOSAR翻译器:
- 输入:Franca模型(fidl文件)和Franca连接器(连接定义)
- 处理:将Franca接口转换为AUTOSAR端口接口,创建Franca组件实例,建立AUTOSAR连接器
- 输出:生成完整的VFB视图
AUTOSAR-to-Franca翻译器:
- 输入:AUTOSAR软件组件描述(arxml文件)
- 处理:将AUTOSAR端口接口转换为Franca接口,提取数据类型定义,生成Franca IDL描述
- 输出:仅处理类型级别信息
4.1.2 翻译结果说明
完整AUTOSAR描述包含:
- 原始AUTOSAR组件
- 翻译的Franca组件
- 组件实例和连接
- 完整的系统视图
完整Franca模型包含:
- 原始Franca接口
- 翻译的AUTOSAR接口
- 数据类型定义
- 类型级别描述
4.1.3 翻译实现示例
/* Franca到AUTOSAR翻译器 */
typedef struct {uint8 translatorId;boolean isActive;FrancaModelType* francaModel;FrancaConnectorType* connector;
} FrancaToAUTOSAR_TranslatorType;/* 翻译器初始化 */
Std_ReturnType FrancaToAUTOSAR_Init(FrancaToAUTOSAR_TranslatorType* translator)
{if (translator == NULL) {return E_NOT_OK;}translator->translatorId = FRANCA_TO_AUTOSAR_TRANSLATOR_ID;translator->isActive = TRUE;/* 初始化翻译器状态 */translator->francaModel = NULL;translator->connector = NULL;return E_OK;
}/* 执行翻译 */
Std_ReturnType FrancaToAUTOSAR_Translate(FrancaToAUTOSAR_TranslatorType* translator)
{if (translator == NULL || translator->francaModel == NULL) {return E_NOT_OK;}/* 步骤1:转换Franca接口为AUTOSAR端口接口 */Std_ReturnType result = TranslateFrancaInterfaces(translator->francaModel);if (result != E_OK) {return result;}/* 步骤2:创建Franca组件实例 */result = CreateFrancaComponentInstances(translator->francaModel);if (result != E_OK) {return result;}/* 步骤3:建立AUTOSAR连接器 */if (translator->connector != NULL) {result = EstablishAUTOSARConnectors(translator->connector);if (result != E_OK) {return result;}}/* 步骤4:生成完整的VFB视图 */result = GenerateVFBView();return result;
}/* AUTOSAR到Franca翻译器 */
typedef struct {uint8 translatorId;boolean isActive;AUTOSARComponentType* autosarComponent;
} AUTOSARToFranca_TranslatorType;/* 执行AUTOSAR到Franca翻译 */
Std_ReturnType AUTOSARToFranca_Translate(AUTOSARToFranca_TranslatorType* translator)
{if (translator == NULL || translator->autosarComponent == NULL) {return E_NOT_OK;}/* 步骤1:转换AUTOSAR端口接口为Franca接口 */Std_ReturnType result = TranslateAUTOSARPortInterfaces(translator->autosarComponent);if (result != E_OK) {return result;}/* 步骤2:提取数据类型定义 */result = ExtractDataTypeDefinitions(translator->autosarComponent);if (result != E_OK) {return result;}/* 步骤3:生成Franca IDL描述 */result = GenerateFrancaIDL();return result;
}
5. 数据类型映射
5.1 类型映射关系
Franca类型映射图展示了Franca数据类型与AUTOSAR数据类型之间的映射关系
5.1.1 Franca类型详解
Franca基本类型:
- Boolean:布尔类型,映射到AUTOSAR的boolean
- Integer:整数类型(int32),映射到AUTOSAR的uint32
- Float:浮点类型,映射到AUTOSAR的float32
- String:字符串类型,映射到AUTOSAR的string
- ByteBuffer:字节数组,映射到AUTOSAR的uint8[]
Franca数组类型:
- InlineArray:内联数组(T[]),映射到AUTOSAR的Array
- TypeCollection:类型集合,支持多维数组和动态大小
Franca结构类型:
- Struct:结构体,映射到AUTOSAR的Structure
- Union:联合体,映射到AUTOSAR的Union
- Enumeration:枚举,映射到AUTOSAR的Enumeration
Franca用户定义类型:
- TypeDef:类型定义,映射到AUTOSAR的应用数据类型
- Interface:接口定义,映射到AUTOSAR的接口类型
5.1.2 AUTOSAR类型详解
AUTOSAR平台类型:
- Boolean:标准化的布尔类型
- Integer:支持不同位宽的整数类型(uint8/uint16/uint32)
- Float:浮点类型(float32/float64)
- String:字符串类型
- ByteArray:字节数组类型
AUTOSAR应用数据类型:
- ApplicationDataType:应用层数据类型
- ImplementationDataType:实现层数据类型
- BaseType:基础类型
AUTOSAR复合类型:
- Structure:结构体,支持详细的内存布局和对齐要求
- Union:联合体
- Enumeration:枚举类型
AUTOSAR数组类型:
- Array:数组类型,支持固定大小和动态大小
- ArrayElement:数组元素类型
5.1.3 类型映射实现示例
/* Franca类型映射配置 */
typedef struct {FrancaTypeType francaType;AUTOSARTypeType autosarType;uint8 mappingRule;
} FrancaTypeMapping_ConfigType;/* 类型映射表 */
static const FrancaTypeMapping_ConfigType francaTypeMappingTable[] = {{FRANCA_TYPE_BOOLEAN, AUTOSAR_TYPE_BOOLEAN, MAPPING_DIRECT},{FRANCA_TYPE_INT32, AUTOSAR_TYPE_UINT32, MAPPING_DIRECT},{FRANCA_TYPE_FLOAT, AUTOSAR_TYPE_FLOAT32, MAPPING_DIRECT},{FRANCA_TYPE_STRING, AUTOSAR_TYPE_STRING, MAPPING_DIRECT},{FRANCA_TYPE_BYTE_ARRAY, AUTOSAR_TYPE_UINT8_ARRAY, MAPPING_DIRECT},{FRANCA_TYPE_STRUCT, AUTOSAR_TYPE_STRUCTURE, MAPPING_STRUCTURE},{FRANCA_TYPE_UNION, AUTOSAR_TYPE_UNION, MAPPING_STRUCTURE},{FRANCA_TYPE_ENUM, AUTOSAR_TYPE_ENUMERATION, MAPPING_STRUCTURE},{FRANCA_TYPE_ARRAY, AUTOSAR_TYPE_ARRAY, MAPPING_ARRAY}
};/* 类型映射函数 */
AUTOSARTypeType FrancaTypeMapping_MapType(FrancaTypeType francaType)
{for (uint8 i = 0; i < sizeof(francaTypeMappingTable) / sizeof(FrancaTypeMapping_ConfigType); i++) {if (francaTypeMappingTable[i].francaType == francaType) {return francaTypeMappingTable[i].autosarType;}}/* 默认映射 */return AUTOSAR_TYPE_UINT32;
}/* 结构体映射示例 */
Std_ReturnType FrancaTypeMapping_MapStructure(const FrancaStructType* francaStruct, AUTOSARStructureType* autosarStruct)
{if (francaStruct == NULL || autosarStruct == NULL) {return E_NOT_OK;}/* 复制结构体名称 */strcpy(autosarStruct->name, francaStruct->name);/* 映射结构体成员 */for (uint8 i = 0; i < francaStruct->memberCount; i++) {FrancaStructMemberType* francaMember = &francaStruct->members[i];AUTOSARStructMemberType* autosarMember = &autosarStruct->members[i];/* 映射成员名称 */strcpy(autosarMember->name, francaMember->name);/* 映射成员类型 */autosarMember->type = FrancaTypeMapping_MapType(francaMember->type);/* 设置内存对齐 */autosarMember->alignment = GetTypeAlignment(autosarMember->type);}autosarStruct->memberCount = francaStruct->memberCount;return E_OK;
}/* 数组映射示例 */
Std_ReturnType FrancaTypeMapping_MapArray(const FrancaArrayType* francaArray,AUTOSARArrayType* autosarArray)
{if (francaArray == NULL || autosarArray == NULL) {return E_NOT_OK;}/* 映射数组元素类型 */autosarArray->elementType = FrancaTypeMapping_MapType(francaArray->elementType);/* 设置数组大小 */autosarArray->size = francaArray->size;/* 设置数组属性 */autosarArray->isDynamic = francaArray->isDynamic;autosarArray->maxSize = francaArray->maxSize;return E_OK;
}
6. 总结
6.1 技术优势
Franca集成方案具有以下技术优势:
- 标准化集成:提供标准化的AUTOSAR和GENIVI系统集成方案
- 双向翻译:支持Franca和AUTOSAR之间的双向翻译
- 类型安全:提供完整的类型映射机制,确保类型安全
- 灵活连接:支持多种连接类型,满足不同的通信需求
- 工具支持:提供完整的工具链支持,简化集成过程
6.2 应用场景
Franca集成适用于以下应用场景:
- 车载信息娱乐系统:集成AUTOSAR车身控制与GENIVI信息娱乐系统
- 诊断系统:集成AUTOSAR诊断功能与GENIVI诊断界面
- 通信网关:实现不同标准系统之间的通信桥接
- 开发工具链:支持统一的系统开发和测试环境
6.3 实施建议
实施Franca集成时应注意以下要点:
- 系统设计:在系统设计阶段就考虑集成需求
- 接口定义:明确定义AUTOSAR和Franca之间的接口规范
- 类型映射:建立完整的类型映射关系
- 测试验证:进行充分的集成测试和验证
- 文档维护:保持集成文档的及时更新
6.4 代码示例总结
/* Franca集成系统初始化示例 */
Std_ReturnType FrancaIntegration_Init(const FrancaIntegration_ConfigType* config)
{if (config == NULL) {return E_NOT_OK;}Std_ReturnType result;/* 初始化AUTOSAR组件 */result = AutoComp_Init(&config->autoCompConfig);if (result != E_OK) {return result;}/* 初始化GENIVI组件 */result = InfoComp_Init(&config->infoCompConfig);if (result != E_OK) {return result;}/* 初始化Franca连接器 */result = FrancaConnector_Init(&config->connectorConfig);if (result != E_OK) {return result;}/* 初始化翻译器 */result = FrancaToAUTOSAR_Init(&config->translatorConfig);if (result != E_OK) {return result;}/* 执行翻译 */result = FrancaToAUTOSAR_Translate(&config->translatorConfig);return result;
}/* Franca集成系统服务示例 */
Std_ReturnType FrancaIntegration_Service(void)
{/* 处理AUTOSAR到Franca的通信 */ProcessAUTOSARToFrancaCommunication();/* 处理Franca到AUTOSAR的通信 */ProcessFrancaToAUTOSARCommunication();/* 处理连接器状态 */UpdateConnectorStatus();return E_OK;
}
通过Franca集成方案,可以实现AUTOSAR和GENIVI系统的无缝集成,为车载系统提供统一的开发和运行环境,提高系统的可维护性和可扩展性。