3. AUTOSAR软件架构映射
任务定义
本案例针对SBW(线控转向)系统,完成从功能需求到AUTOSAR经典分层架构的映射。目标产物为:① 应用层SWC(软件组件)划分及其端口/接口定义;② RTE层需要承载的通信关系;③ 基础软件层(BSW)中与SBW强相关的模块清单及配置要点。映射结果需满足ISO 26262 ASIL-D功能安全等级对分区与监控的要求。
SBW功能到AUTOSAR分层架构的映射
SBW系统取消机械转向柱连接,驾驶员指令通过传感器采集,由ECU计算后驱动前轮转向执行器。依据AUTOSAR分层原则,将功能划分为三个层级:
- 应用层(SWC):承载与转向控制策略直接相关的算法,不依赖具体硬件。
- RTE层:负责SWC间及SWC与BSW间的通信路由,实现接口解耦。
- BSW层:提供ECU基础服务(通信、诊断、存储、I/O),对应用层屏蔽硬件细节。
1. 应用层SWC划分
将SBW功能分解为6个应用SWC,每个SWC对应一个AUTOSAR Composition中的独立原子组件。划分原则遵循“高内聚、低耦合”,并依据功能安全相关项(FTI)进行ASIL分解:
| SWC名称 | 核心功能 | ASIL等级 | 关键端口(Port) |
|---|---|---|---|
| SteeringWheelSensor_SWC | 采集方向盘转角、转角速度,处理冗余信号(主/辅)并输出仲裁后的驾驶员意图 | ASIL-D | P_SteeringAngle(C/S接口,输出);P_SensorStatus(模式接口) |
| VehicleState_SWC | 估算车速、横摆角速度、侧向加速度,提供车辆运动状态 | ASIL-B(D) | P_VehicleSpeed(C/S输出);P_YawRate(C/S输出) |
| ControlCore_SWC | 执行转向控制算法(变传动比、主动回正、阻尼补偿),输出目标前轮转角 | ASIL-D | P_TargetAngle(C/S输出);P_ControlMode(模式接口) |
| ActuatorCmd_SWC | 将目标转角转换为执行器(永磁同步电机)的扭矩/位置指令,含电流环前馈 | ASIL-D | P_MotorTorqueCmd(C/S输出);P_MotorPosCmd(C/S输出) |
| FaultMgmt_SWC | 功能安全监控:比较主/辅通道计算结果,触发降级模式(冗余/停机) | ASIL-D | P_FaultStatus(模式接口);P_SafeStateReq(模式接口) |
| DriverFeedback_SWC | 生成路感模拟力矩(回正力矩+阻尼),驱动手感电机 | ASIL-B(D) | P_FeedbackTorque(C/S输出) |
2. RTE通信关系定义
RTE层通过VFB(虚拟功能总线)视图连接上述SWC。关键通信路径如下:
- SteeringWheelSensor_SWC → ControlCore_SWC:发送驾驶员意图转角(周期10ms,C/S接口,数据类型
SteeringAngle_T)。 - VehicleState_SWC → ControlCore_SWC:发送车速与横摆角速度(周期20ms)。
- ControlCore_SWC → ActuatorCmd_SWC:发送目标前轮转角(周期10ms)。
- ActuatorCmd_SWC → FaultMgmt_SWC:上报实际执行反馈(周期10ms)。
- FaultMgmt_SWC → ControlCore_SWC:发送降级模式指令(事件触发,优先级高)。
RTE需配置为支持ASIL-D保护机制:对C/S接口启用E2E Profile 5校验(CRC+计数器),对模式接口启用End-to-End Protection。
3. BSW模块划分与配置要点
BSW层按AUTOSAR分层选择与SBW直接相关的模块,不涉及通用基础模块的完整展开:
| BSW模块 | 所属子层 | SBW相关配置要点 |
|---|---|---|
| MCU(微控制器驱动) | MCAL | 配置ADC通道用于传感器采样(12bit,双通道冗余);配置PWM用于电机驱动(20kHz) |
| PORT | MCAL | 引脚复用:方向盘转角传感器SPI片选、执行器使能信号 |
| SPI | MCAL | 配置为Master模式,时钟4MHz,用于读取角度传感器(帧格式:16bit地址+16bit数据) |
| PWM | MCAL | 生成电机驱动占空比信号,死区时间500ns |
| ADC | MCAL | 采集扭矩传感器模拟信号,采样率1kHz,DMA传输 |
| CanSM / CanIf / CanDrv | 通信服务/接口/驱动 | 配置CAN通道(500kbps)用于与ESP(电子稳定程序)交互车速信号 |
| Com | 通信服务 | 定义信号PDU:SBW_SteeringAngle(8字节,周期10ms) |
| E2E | 通信服务 | 启用E2E Profile 5,保护转向角信号(Data ID=0x123) |
| Dcm | 诊断服务 | 配置UDS服务(0x22读数据、0x2E写数据),用于标定参数在线更新 |
| NvM | 存储服务 | 存储转向角零点标定值(Block ID=0x01,CRC校验) |
| WdgM | 系统服务 | 监控ControlCore_SWC的10ms周期任务喂狗,超时触发安全停机 |
4. 功能安全分区与监控
依据ISO 26262,将应用SWC部署到两个独立分区(Partition):
- Partition 1(ASIL-D):SteeringWheelSensor_SWC、ControlCore_SWC、ActuatorCmd_SWC、FaultMgmt_SWC。使用MPU保护,禁止访问其他分区内存。
- Partition 2(ASIL-B):VehicleState_SWC、DriverFeedback_SWC。与Partition 1通过RTE的
Inter-Partition Communication交互,启用CRC校验。
FaultMgmt_SWC内部实现双通道比较:将ControlCore_SWC输出的目标转角与ActuatorCmd_SWC反馈的实际转角进行差值比较,若偏差超过阈值(如5°)持续50ms,则触发降级模式(切换至冗余通道或安全停机)。
核心代码实现(ARXML配置片段与SWC行为描述)
以下给出关键SWC的RTE接口定义(ARXML格式)与ControlCore_SWC的C语言行为骨架,用于说明映射落地方式。
// ========== ControlCore_SWC 行为骨架(C语言) ==========
#include "Rte_ControlCore_SWC.h"
#include "math.h"
#define ANGLE_THRESHOLD_DEG 5.0f
#define FAULT_DETECT_TIME_MS 50u
static float targetAngle_prev = 0.0f;
static uint16 faultCounter = 0u;
/* 10ms周期任务:RTE调用 */
void ControlCore_SWC_Run(void)
{
Std_ReturnType ret;
SteeringAngle_T driverIntent;
VehicleState_T vehState;
TargetAngle_T targetAngle;
ControlMode_T mode;
/* 1. 读取驾驶员意图(来自SteeringWheelSensor_SWC,经RTE路由) */
ret = Rte_Read_P_SteeringAngle_Data(&driverIntent);
if (ret != RTE_E_OK) {
/* 通信超时,进入安全状态 */
Rte_Write_P_ControlMode_Mode(&CONTROL_MODE_SAFE_STOP);
return;
}
/* 2. 读取车辆状态(来自VehicleState_SWC) */
ret = Rte_Read_P_VehicleSpeed_Data(&vehState.speed);
if (ret != RTE_E_OK) {
vehState.speed = 0.0f; /* 默认安全值 */
}
/* 3. 读取当前控制模式(来自FaultMgmt_SWC) */
Rte_Read_P_ControlMode_Mode(&mode);
if (mode == CONTROL_MODE_REDUCED) {
/* 降级模式:限制最大转角为正常值的50% */
targetAngle.angle = driverIntent.angle * 0.5f;
} else {
/* 正常模式:变传动比控制(示例:车速越高,转角增益越小) */
float speedGain = 1.0f / (1.0f + vehState.speed * 0.01f);
targetAngle.angle = driverIntent.angle * speedGain;
}
/* 4. 输出目标转角到ActuatorCmd_SWC */
Rte_Write_P_TargetAngle_Data(&targetAngle);
/* 5. 自检:与上一周期输出比较,检测异常跳变 */
if (fabsf(targetAngle.angle - targetAngle_prev) > 30.0f) {
faultCounter++;
if (faultCounter >= FAULT_DETECT_TIME_MS / 10u) {
/* 连续50ms异常,上报FaultMgmt_SWC */
FaultStatus_T fault;
fault.id = FAULT_ANGLE_JUMP;
Rte_Write_P_FaultStatus_Status(&fault);
faultCounter = 0u;
}
} else {
faultCounter = 0u;
}
targetAngle_prev = targetAngle.angle;
}
// ========== ARXML:ControlCore_SWC 端口与RTE映射(关键片段) ==========
<SWC>
<short-name>ControlCore_SWC</short-name>
<ports>
<RPort> <short-name>P_SteeringAngle</short-name>
<interface>SteeringAngle_Interface</interface> <!-- C/S接口 -->
</RPort>
<RPort> <short-name>P_VehicleSpeed</short-name>
<interface>VehicleSpeed_Interface</interface>
</RPort>
<PPort> <short-name>P_TargetAngle</short-name>
<interface>TargetAngle_Interface</interface>
</PPort>
<PPort> <short-name>P_FaultStatus</short-name>
<interface>FaultStatus_Interface</interface>
</PPort>
<RPort> <short-name>P_ControlMode</short-name>
<interface>ControlMode_Interface</interface> <!-- 模式接口 -->
</RPort>
</ports>
</SWC>
<!-- RTE连接:SteeringWheelSensor_SWC.P_SteeringAngle --> ControlCore_SWC.P_SteeringAngle -->
<RTE-Connector>
<short-name>Conn_Angle_Sensor2Control</short-name>
<rte-connector-type>CS-COMMUNICATION</rte-connector-type>
<rte-connector-protocol>E2E_PROFILE_5</rte-connector-protocol>
<rte-connector-period>10ms</rte-connector-period>
</RTE-Connector>
落地与验证方法
文件与工具链:本案例的ARXML配置与C代码需导入AUTOSAR工具链(如Vector DaVinci Developer、EB tresos)生成RTE与BSW配置。C代码骨架可直接编译用于Simulink/嵌入式目标仿真。
验证步骤:
- 静态检查:在DaVinci Developer中检查SWC端口与接口一致性,确认无未连接端口。
- RTE生成:生成RTE代码后,检查
Rte_Read/Write函数签名与ARXML定义一致。 - 功能仿真:在Simulink中集成ControlCore_SWC代码,输入方向盘阶跃信号(90°),车速恒定60km/h,观察目标转角输出是否满足变传动比曲线(预期增益约0.85,输出约76.5°)。
- 故障注入测试:人为将输入转角跳变100°,观察FaultMgmt_SWC是否在50ms内触发降级模式(通过RTE模式接口读取状态)。
判定标准:
- 所有SWC端口在RTE中成功映射,无悬空端口告警;
- 仿真中目标转角输出与理论计算偏差小于1°;
- 故障注入后,降级模式标志在50ms±5ms内置位,且ControlCore_SWC输出限幅至正常值的50%。