1 介绍(Introduction)
1.1 内容(Contents)
本文档描述 AUTOSAR 的虚拟功能总线(Virtual Functional Bus,VFB)。VFB 是 AUTOSAR 架构的核心抽象,定义了 SW-C 之间通信的虚拟平台,与具体的 ECU 和硬件无关。
1.2 前置阅读(Prereads)
阅读本文档前应先了解:
- AUTOSAR 分层软件架构;
- AUTOSAR 软件组件模板;
- AUTOSAR 元模型。
1.3 与其他 AUTOSAR 规范的关系(Relationship to other AUTOSAR specifications)
VFB 文档与以下文档紧密相关:
- 软件组件模板(定义 SW-C 与接口的元模型);
- RTE 规范(VFB 的运行时实现);
- 系统模板(定义 ECU 拓扑与映射);
- BSW 规范(VFB 视角下的基础软件)。
1.4 文档结构与约定(Structure and conventions of this document)
1.4.1 文档结构
本文档先介绍 VFB 概念,再详述各种通信模式、模式管理、硬件交互等。
1.4.2 规范项(Specification Items)
规范项以 [<前缀>_VFB_NNNN] 标识。
2 虚拟功能总线(The Virtual Functional Bus)
虚拟功能总线(Virtual Functional Bus,VFB)是 AUTOSAR 抽象出的"虚拟总线",位于所有 SW-C 之间。VFB 抽象了 SW-C 间通信的底层细节:
- SW-C 不需要知道通信伙伴在哪个 ECU;
- SW-C 不需要知道通信是通过哪种物理介质(CAN、FlexRay、以太网);
- SW-C 不需要知道通信是进程内还是跨进程。
RTE(Runtime Environment)是 VFB 的具体实现。在单个 ECU 内,RTE 桥接 SW-C 与 BSW;在多 ECU 系统中,RTE 还通过通信协议桥接不同 ECU 上的 SW-C。
3 总体机制与概念(Overall mechanisms and concepts)
3.1 组件(Components)
AUTOSAR 中的组件(SwComponentType)是 VFB 的基本单元:
- 原子组件(Atomic Component):不可再分的最小组件单元;
- 组合(Composition):由多个原子组件或子组合组成;
- 应用组件(Application Component):实现应用逻辑的组件。
3.2 端口接口(Port-Interfaces)
端口接口(PortInterface)定义了组件间通信的契约:
- SenderReceiverInterface:数据通信;
- ClientServerInterface:操作调用;
- ModeSwitchInterface:模式切换;
- ParameterInterface:标定参数;
- NvDataInterface:非易失数据;
- TriggerInterface:触发。
3.3 端口(Ports)
3.3.1 端口类型(Port Types)
AUTOSAR 定义以下端口类型:
- P-PORT(Provided Port):提供端口,组件对外提供数据/服务;
- R-PORT(Required Port):需求端口,组件消费数据/服务;
- PR-PORT(Provided & Required Port):同时提供和需求的端口(自 R4.2 引入)。
3.3.2 端口兼容性(Port Compatibility)
两个端口要连接,必须满足:
- 端口接口兼容;
- 数据类型兼容;
- 接口方向兼容(PPort → RPort)。
3.3.3 数据类型策略(Data Type Policies)
数据类型兼容性策略包括:
- 严格匹配;
- 支持子类型;
- 支持缩放/转换。
3.4 连接器(Connectors)
连接器(SwConnector)连接两个端口:
- AssemblySwConnector:连接组合内部的端口;
- DelegationSwConnector:将内部端口委托到外部端口。
3.4.1 未连接的端口(Unconnected Ports)
未连接的端口是允许的,表示组件该功能未被使用。
3.5 组合 vs 原子组件(Compositions versus atomic components)
组合由多个子组件组成,可视为一个"逻辑单元"。组合可以嵌套。组合的内部通信对外部不可见。
3.6 VFB 与 ECU 软件架构的关系(Relationship between the VFB and the ECU Software Architecture)
VFB 是抽象的,ECU 软件架构是具体的:
- VFB 上的连接可映射到同一 ECU 内的 RTE 调用;
- VFB 上的连接可映射到跨 ECU的通信协议(CAN、FlexRay 等);
- VFB 上的连接可映射到同一分区或跨分区的通信。
3.7 软件组件的种类(Kinds of software components)
AUTOSAR 定义以下组件类型:
- ApplicationSwComponentType:应用软件组件;
- ComplexDeviceDriverSwComponentType:复杂驱动;
- SensorActuatorSwComponentType:传感器-执行器组件;
- EcuAbstractionSwComponentType:ECU 抽象组件;
- CompositionSwComponentType:组合;
- ServiceSwComponentType:服务组件;
- ApplicationSwComponentType(基础软件中的特定子类型)。
3.8 组件与"可运行实体"的资源(Resources for components and "runnables")
3.8.1 背景(Background)
每个组件包含一个内部行为(Internal Behavior),定义了组件的可运行实体(Runnable Entity)。
3.8.2 "可运行实体"概念(The "runnable" concept)
可运行实体(Runnable)是组件中可被 RTE 调用的可执行函数。每个可运行实体具有:
- 名称;
- 触发事件(周期、事件、数据接收等);
- 可选参数;
- 访问权限。
3.8.3 组件实现与 RTE 的角色(The implementation of a component and the role of the RTE)
组件的实现者只需实现其可运行实体。RTE 负责:
- 接收触发事件并调用可运行实体;
- 管理端口间的数据流;
- 调用其他组件的客户端/服务器接口;
- 处理错误和状态信息。
3.9 接口转换块(Interface Conversion Blocks)
3.9.1 支持的转换与映射(Supported Conversions and Mappings)
RTE 支持的转换类型:
- 数据转换:标度、偏移;
- 类型转换:不同数据类型之间的转换;
- 字节序转换:大端/小端;
- 符号转换:有符号/无符号;
- 复合转换:多种转换组合。
3.10 变体处理(Variant Handling)
3.10.1 绑定时间(Binding Times)
绑定时间定义了连接何时被建立:
- Pre-Compile:编译时;
- Link-Time:链接时;
- Post-Build:构建后;
- Run-Time:运行时(最少见)。
3.10.2 选择变体(Choosing a Variant)
变体选择可在不同阶段进行:
- 系统设计阶段(早期);
- ECU 配置阶段(中期);
- 运行时(晚期)。
3.10.3 可变性(Variability)
通过条件(Condition)机制处理变体:
variationPoint {
if (Condition_A) {
PortA connects to PortB;
} else {
PortA connects to PortC;
}
}
4 VFB 上的通信(Communication on the VFB)
4.1 介绍(Introduction)
VFB 支持两种主要的通信模式:
- Sender-Receiver(发送者-接收者):数据分发;
- Client-Server(客户端-服务器):操作调用。
4.2 错误类型(Error types)
VFB 通信可能产生的错误:
- 通信错误:超时、断连;
- 数据错误:范围错误、校验错误;
- 协议错误:消息格式错误;
- 应用错误:由 Server 通过 ClientServer 接口的 out 参数返回。
4.3 发送者-接收者通信(Sender-Receiver communication)
4.3.1 从发送者视角(From the point of view of the sender)
发送者通过 Rte_Write_<Port>_<Data>() 写入数据:
Std_ReturnType status = Rte_Write_EngineSpeed_I_EngineSpeed(3000);
if (status != RTE_E_OK) {
// 处理错误
}
发送操作通常是非阻塞的。
4.3.2 从接收者视角(From the point of view of the receiver)
接收者通过 Rte_Read_<Port>_<Data>() 读取数据:
uint8 buffer[4];
Std_ReturnType status = Rte_Read_EngineSpeed_I_EngineSpeed(buffer);
if (status == RTE_E_OK) {
uint16 speed = (buffer[0] << 8) | buffer[1];
}
4.3.3 发送者-接收者的多重性(Multiplicity of sender-receiver)
一个数据元素可被多个接收者消费(1:N),或多个发送者提供(N:1,或 N:M with arbitration)。
4.3.4 发送者与接收者之间的过滤(Filtering between the sender and the receiver)
RTE 支持多种过滤机制:
- 始终(Always):每个数据都发送;
- 从不(Never):仅显式调用时发送;
- 仅变化时(OnChange):仅当数据值变化时发送;
- 更新时(OnUpdate):每次更新时发送。
4.3.5 发送者-接收者连接器内的并发与排序(Concurrency and ordering within a sender-receiver connector)
多个发送者到同一数据元素时,RTE 决定:
- 排序:FIFO、按优先级等;
- 并发:仅最后一次写入有效;
- 冲突解决:使用仲裁(见 4.4 节)。
4.4 客户端-服务器通信(Client-Server communication)
4.4.1 从客户端视角(From the point of view of the client)
客户端通过 Rte_Call_<Port>_<Operation>() 调用操作:
Std_ReturnType status = Rte_Call_DiagnosticService_I_ReadDataById(0x1234, buffer);
// status 包含 E_OK 或 RTE_E_<错误>
4.4.2 从服务器视角(From the point of view of the server)
服务器通过可运行实体实现操作。RTE 负责将客户端调用映射到服务器的可运行实体。
4.4.3 客户端-服务器的多重性(Multiplicity of client-server)
一个操作可被多个客户端调用(多个客户端 → 1 个服务器)。
4.4.4 客户端-服务器连接器内的排序与并发(Ordering and concurrency within a client-server connector)
多个客户端的调用可以并发执行(服务器支持),或必须串行执行(取决于服务器实现)。
4.5 关于通信伙伴识别的说明(Remarks regarding the identification of communication partners)
客户端应当通过连接点(Connection Point)标识其通信伙伴。VFB 通过 RTE 实现这种标识的透明性。
5 时间扩展(Timing Extensions)
5.1 AUTOSAR 时间扩展的主要目的(Main Purpose of Timing Extensions for AUTOSAR)
时间扩展(Timing Extensions)允许为 SW-C 的运行时行为附加时间约束:
- 周期时间(Period);
- 延迟(Latency);
- 偏移(Offset);
- 抖动(Jitter)。
5.2 AUTOSAR 方法论各阶段的时间(Timing in different phases of the AUTOSAR methodology)
时间约束可在不同阶段指定:
- 系统设计阶段:粗粒度时间约束;
- ECU 配置阶段:细化时间约束;
- 代码生成阶段:转化为 OS 任务属性。
6 与硬件的交互(Interaction with hardware)
6.1 介绍(Introduction)
VFB 上的 SW-C 通过 RTE 与 BSW 交互,最终访问硬件。
6.2 微控制器抽象层(MCAL)
MCAL 提供对微控制器外设的直接访问。只有 MCAL 驱动可以直接访问硬件寄存器。
6.3 ECU 抽象
ECU 抽象层(ECU Abstraction)将 MCAL 进一步抽象为ECU 级的接口。
6.4 传感器-执行器软件组件
传感器-执行器 SW-C 通过 ECU 抽象层访问物理传感器和执行器。
6.5 复杂驱动组件
复杂驱动(CDD)可以绕过 ECU 抽象层直接访问硬件(例如处理特殊传感器)。
7 AUTOSAR 服务(AUTOSAR Services)
7.1 介绍(Introduction)
AUTOSAR 服务(Services)是 BSW 提供的、可被 SW-C 通过标准接口使用的功能,例如:
- 操作系统服务(任务调度、事件);
- 通信服务(COM、RTE);
- 诊断服务(DCM、DEM);
- 内存服务(NvM);
- ECU 状态管理(EcuM)。
7.2 VFB 表示(VFB Representation)
服务在 VFB 上表示为特殊的 SW-C 类型,SW-C 通过客户端-服务器接口访问它们。
7.3 服务列表(List of Services)
详细的服务清单见原文 7.3 节。常见服务包括 OS 任务管理、EcuM 状态控制、DCM 诊断通信、COM 信号传输等。
8 模式管理(Mode Management)
8.1 介绍(Introduction)
AUTOSAR 中的模式(Mode)表示组件、ECU 或系统的某个运行状态。
8.2 定义模式(Defining modes)
模式通过 ModeDeclarationGroup 定义:
ModeDeclarationGroup VehicleMode {
OFF, STARTUP, RUN, SHUTDOWN
}
8.3 通信模式(Communicating modes)
组件通过 ModeSwitchInterface 接收模式变化。
8.4 模式管理器:控制模式的组件(Mode-managers: components that control modes)
模式管理器(如 BswM、EcuM)负责:
- 接收模式变化请求;
- 决定模式转换;
- 通知其他组件模式变化。
8.5 依赖模式的组件(Components that depend on modes)
依赖模式的组件应当通过 ModeSwitchInterface 接收模式通知,并根据模式调整行为。
9 端口组(Port Groups)
端口组(Port Group)允许将多个端口组合在一起进行批量操作,例如:
- 同时启用/禁用多个端口;
- 同时切换多个模式的端口。
10 测量与标定(Measurement and Calibration)
10.1 标定(Calibration)
标定是修改 SW-C 参数以优化 ECU 行为的过程。AUTOSAR 支持两种标定方式:
10.1.1 基于端口的标定(Port-based calibration)
通过 ParameterInterface 提供参数。SW-C 通过参数端口接收标定值。
10.1.2 私有标定(Private calibration)
参数仅在组件内部可见,不通过端口暴露。