4. 软件组件设计与ARXML生成
在AUTOSAR项目交付中,软件组件(Software Component,SWC)是应用层功能的最小可交付单元。Vector工具链中,DaVinci Developer负责SWC的图形化设计与ARXML生成,DaVinci Configurator负责ECU配置与集成。本节围绕一个具体示例——车窗防夹控制SWC——完整走通从组件创建、端口接口定义、内部行为建模到ARXML导出的全过程。
一、SWC类型选择与组件创建
AUTOSAR定义了多种SWC类型,选择依据是功能在整车架构中的角色:
- Application SWC:实现具体应用逻辑,如防夹算法,是最常用的类型。
- Sensor/Actuator SWC:直接与传感器或执行器交互,负责信号采集与驱动。
- Service SWC:提供NvM、Dcm、Dem等基础服务。
- Composition SWC:将多个SWC组合为更大的功能单元。
防夹控制SWC属于Application SWC。在DaVinci Developer中新建组件时,需指定名称(如Swc_WindowAntiPinch)、类型和所属包路径(如/Application/WindowControl)。包路径决定了ARXML中元素的命名空间,必须与项目命名规范一致,否则后续集成时会出现引用冲突。
二、端口与接口定义
端口是SWC与外部交互的边界。防夹SWC需要以下端口:
| 端口名 | 方向 | 接口类型 | 数据元素 | 说明 |
|---|---|---|---|---|
| Pp_WindowPos | P-Port | SenderReceiver | WindowPosition (uint8, 0~100) | 接收车窗位置反馈 |
| Pp_PinchForce | P-Port | SenderReceiver | PinchForce (uint16, 单位0.1N) | 接收防夹力传感器值 |
| Rp_MotorCmd | R-Port | SenderReceiver | MotorCommand (enum: STOP/UP/DOWN) | 输出电机控制指令 |
| Rp_DiagStatus | R-Port | SenderReceiver | DiagStatus (uint8) | 输出诊断状态 |
接口定义时需注意:数据类型应优先使用AUTOSAR标准类型(如uint8、uint16),若需自定义范围约束,可在ApplicationDataType中定义CompuMethod和DataConstr。例如WindowPosition的物理范围0~100对应原始值0~100,线性映射即可;而PinchForce原始值0~5000对应0~500.0N,需定义线性CompuMethod:phys = raw × 0.1。
三、内部行为建模
内部行为(Internal Behavior)描述SWC的运行实体(Runnable Entity)、触发事件和内部变量。防夹SWC定义两个Runnable:
RE_AntiPinch_10ms:周期10ms触发,读取车窗位置和防夹力,执行防夹判断,输出电机指令。RE_Init:初始化时触发一次,复位内部状态变量。
触发事件通过TimingEvent绑定到Runnable,周期值需与后续OS任务周期一致。内部变量(IRV)如PinchCounter和CurrentState在ARXML中表现为VARIABLE-DATA-PROTOTYPE,仅在本SWC内可见。
防夹判断的核心逻辑可简化为:当PinchForce > 100(即10.0N)且车窗处于上升状态时,PinchCounter递增;连续3个周期(30ms)超过阈值,则判定为防夹事件,将CurrentState置为REVERSING,输出MotorCommand = DOWN,并保持200ms后恢复IDLE。这一逻辑在DaVinci Developer中通过Runnable的代码框架实现,工具生成Rte_Write_Rp_MotorCmd()等RTE接口调用。
四、ARXML导出与检查
完成设计后,通过File → Export → ARXML导出。导出前需确认:
- 所有端口已绑定接口,无未解析引用。
- 数据类型已定义CompuMethod和DataConstr。
- Runnable的触发事件已配置,周期与OS任务匹配。
- 包路径与项目命名规范一致。
导出的ARXML文件包含APPLICATION-SW-COMPONENT-TYPE、P-PORT-PROTOTYPE、R-PORT-PROTOTYPE、RUNNABLE-ENTITY、VARIABLE-DATA-PROTOTYPE等元素。可用DaVinci Developer的ARXML Viewer或文本编辑器检查结构完整性。常见问题包括:端口未绑定接口导致TYPE-TREF为空、Runnable未绑定触发事件导致无法调度、数据类型缺少SW-DATA-DEF-PROPS导致RTE生成失败。
arxml-validator或DaVinci Configurator的导入功能做一次反向验证:将ARXML导入空工程,检查是否报错。若导入成功且端口、Runnable、数据类型均正确显示,说明ARXML结构完整,可交付集成。
五、交付检查清单
| 检查项 | 判断依据 | 常见问题 |
|---|---|---|
| SWC类型与命名 | Application SWC,包路径符合规范 | 误用Service SWC |
| 端口方向与接口 | P-Port接收,R-Port发送,接口类型匹配 | 方向反接导致RTE生成错误 |
| 数据类型映射 | CompuMethod线性关系正确 | 物理量偏移未定义 |
| Runnable触发 | TimingEvent周期与OS任务一致 | 周期不匹配导致调度失败 |
| ARXML完整性 | 导入空工程无报错 | 引用缺失、命名空间冲突 |
完成以上步骤后,SWC设计即具备交付条件。下一阶段是将ARXML导入DaVinci Configurator,完成ECU级集成与RTE配置。