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_WindowPosP-PortSenderReceiverWindowPosition (uint8, 0~100)接收车窗位置反馈
Pp_PinchForceP-PortSenderReceiverPinchForce (uint16, 单位0.1N)接收防夹力传感器值
Rp_MotorCmdR-PortSenderReceiverMotorCommand (enum: STOP/UP/DOWN)输出电机控制指令
Rp_DiagStatusR-PortSenderReceiverDiagStatus (uint8)输出诊断状态

接口定义时需注意:数据类型应优先使用AUTOSAR标准类型(如uint8、uint16),若需自定义范围约束,可在ApplicationDataType中定义CompuMethod和DataConstr。例如WindowPosition的物理范围0~100对应原始值0~100,线性映射即可;而PinchForce原始值0~5000对应0~500.0N,需定义线性CompuMethod:phys = raw × 0.1。

Swc_WindowAntiPinch 端口与内部行为结构 Application SWC Swc_WindowAntiPinch Runnable: RE_AntiPinch_10ms 周期 10ms · 防夹判断与电机控制 Runnable: RE_Init 初始化 · 状态复位 IRV 内部变量 PinchCounter : uint8 CurrentState : enum {IDLE, MOVING, REVERSING} Pp_WindowPos uint8 · 0~100 % Pp_PinchForce uint16 · 0.1N/LSB Rp_MotorCmd enum STOP/UP/DOWN Rp_DiagStatus uint8 · 诊断状态 ARXML 导出关键元素: APPLICATION-SW-COMPONENT-TYPE → Swc_WindowAntiPinch P-PORT-PROTOTYPE / R-PORT-PROTOTYPE → 端口实例与接口引用 RUNNABLE-ENTITY → RE_AntiPinch_10ms (周期10ms) / RE_Init

三、内部行为建模

内部行为(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导出。导出前需确认:

  1. 所有端口已绑定接口,无未解析引用。
  2. 数据类型已定义CompuMethod和DataConstr。
  3. Runnable的触发事件已配置,周期与OS任务匹配。
  4. 包路径与项目命名规范一致。

导出的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配置。