手把手教你用DaVinci Developer设计Autosar SWC:从端口定义到内部行为配置
如果你刚接触AUTOSAR,面对一堆陌生的术语和复杂的工具链,是不是感觉有点无从下手?特别是当你打开Vector的DaVinci Developer时,看到满屏的配置项和ARXML文件,那种“我知道这很重要,但就是不知道从哪开始”的困惑,我太理解了。几年前我第一次接触这个工具时,也是同样的感受——明明知道SWC是应用层的核心,但具体怎么设计、端口怎么配、内部行为怎么定义,每一步都小心翼翼,生怕配错了某个选项导致整个工程编译失败。
这篇文章就是为你准备的。我不会给你讲太多抽象的理论,而是直接带你进入DaVinci Developer的实际操作界面,一步步完成一个完整SWC的设计。从最基础的Package创建,到端口接口定义,再到内部可运行实体的配置,我会用真实的截图和具体的配置示例,让你在操作中理解每个概念的实际意义。更重要的是,我会分享那些官方文档里不会写的“坑点”——比如为什么你的端口连接总是失败,为什么生成的代码里找不到预期的接口函数。
1. 环境准备与项目理解:不只是打开一个工具
在开始设计第一个SWC之前,我们需要先搞清楚几个基本问题:DaVinci Developer在整个AUTOSAR工具链中处于什么位置?它和DaVinci Configurator Pro是什么关系?我们设计的SWC最终会变成什么?
1.1 DaVinci工具链的分工
很多人容易混淆DaVinci Developer和DaVinci Configurator Pro,其实它们的分工很明确:
| 工具名称 | 主要用途 | 输出产物 | 使用者 |
|---|---|---|---|
| DaVinci Developer | 设计应用层软件组件(SWC) | SWC的ARXML描述文件 | 应用软件工程师 |
| DaVinci Configurator Pro | 配置基础软件(BSW)和RTE | BSW配置代码、RTE接口文件 | 系统集成工程师、BSW工程师 |
简单来说,Developer负责“应用逻辑的设计”,Configurator负责“底层平台的搭建”。你作为SWC设计者,主要工作在Developer中完成。
1.2 理解ARXML:AUTOSAR的“设计图纸”
AUTOSAR的核心思想之一就是“模型驱动开发”,而ARXML文件就是这个模型的载体。你可以把它理解为建筑行业的CAD图纸——它用标准化的XML格式描述了整个ECU软件的结构。
在DaVinci Developer中,你的每一个操作(创建SWC、定义端口、配置Runnable)最终都会反映在ARXML文件中。这个文件会被Configurator读取,用于生成RTE接口代码;也会被Simulink等建模工具导入,用于模型在环仿真。
注意:ARXML文件有严格的Schema验证,这意味着如果你手动编辑XML文件,很容易因为格式错误导致工具无法识别。强烈建议始终通过工具界面进行配置。
1.3 项目结构规划
在开始设计前,先规划好你的项目结构。一个典型的AUTOSAR项目通常包含以下目录:
Your_Project/
├── BSW/ # 基础软件配置
├── SWC/ # 软件组件设计
│ ├── Composition/ # 组合SWC
│ ├── Application/ # 应用SWC
│ ├── SensorActuator/ # 传感器执行器SWC
│ └── Interfaces/ # 端口接口定义
├── GeneratedCode/ # 生成的代码
└── Documentation/ # 设计文档
在DaVinci Developer中,我们主要通过Package来组织这些内容。一个Package可以看作是一个逻辑容器,里面可以包含SWC、接口定义、数据类型等。
2. 创建你的第一个SWC:从Package开始
现在让我们打开DaVinci Developer,开始实际的操作。我假设你已经安装好了工具并获得了相应的License。
2.1 新建Package和SWC
启动DaVinci Developer后,首先需要创建一个Package来容纳你的设计:
- 在Object Browser中右键点击项目根节点
- 选择New → Package
- 给Package命名,比如
MyFirstSWC_Pkg - 在Package内右键,选择New → Software Component
创建SWC时,你需要选择SWC的类型。对于大多数应用逻辑,我们选择Application SWC。其他类型如SensorActuator、ComplexDriver等有特定的用途,我们后续再讨论。
<!-- 这是DaVinci Developer在后台生成的ARXML片段 -->
<AR-PACKAGE UUID="...">
<SHORT-NAME>MyFirstSWC_Pkg</SHORT-NAME>
<ELEMENTS>
<APPLICATION-SW-COMPONENT-TYPE UUID="...">
<SHORT-NAME>MyFirstSWC</SHORT-NAME>
</APPLICATION-SW-COMPONENT-TYPE>
</ELEMENTS>
</AR-PACKAGE>
2.2 理解SWC的三种描述
在AUTOSAR中,一个SWC有三种不同层次的描述,这在DaVinci Developer中对应不同的配置视图:
-
SW-Component Type Description(类型描述)
- 定义SWC的“接口契约”——它提供什么、需要什么
- 包括端口定义、数据类型、接口规范
- 这是最抽象的设计层,不涉及具体实现
-
SW-Component Internal Behavior Description(内部行为描述)
- 定义SWC的“内部逻辑”——它如何工作
- 包括Runnable实体、触发事件、局部变量
- 这是设计的具体化,但仍然独立于具体ECU
-
SW-Component Implementation Description(实现描述)
- 定义SWC的“具体实现”——代码如何生成
- 包括源代码文件、编译器选项、链接信息
- 这是最具体的实现层
在DaVinci Developer中,我们主要在前两个层次上工作。第三个层次通常由代码生成工具自动处理。
3. 端口接口设计:SWC的“通信协议”
端口是SWC与外界通信的唯一通道。设计好端口接口,相当于定义了SWC的“API规范”。
3.1 端口类型详解
AUTOSAR定义了两种主要的端口接口类型,每种都有特定的使用场景:
Sender/Receiver接口(S/R接口)
- 用于数据传输,类似于全局变量共享
- 一个发送者可以对应多个接收者(1:N通信)
- 数据元素之间相互独立
- 典型应用:传感器数据、状态信息、配置参数
Client/Server接口(C/S接口)
- 用于服务调用,类似于函数调用
- 一个服务器可以被多个客户端调用(N:1通信)
- 包含操作(Operation)定义,可以有参数和返回值
- 典型应用:控制命令、复杂计算服务、诊断服务
3.2 创建S/R接口的完整流程
让我们通过一个具体例子来学习。假设我们要设计一个车速计算SWC,它需要接收轮速信号,输出计算后的车速。
步骤1:定义数据类型
首先需要定义传输数据的数据类型。在AUTOSAR中,数据类型有严格的层次:
- Base Type(基础类型):
uint8、uint16、float32等 - Implementation Data Type(实现类型,IDT):带单位、范围限制的类型
- Application Data Type(应用类型,ADT):有物理意义的类型
在DaVinci Developer中创建IDT:
- 在Package中右键 → New → ImplementationDataType
- 设置名称:
VehicleSpeed_T - 选择Base Type:
float32 - 设置单位:
km/h - 设置范围:
0.0到300.0
步骤2:创建数据元素
数据元素是接口中实际传输的数据项:
- 在Package中右键 → New → DataElement
- 设置名称:
VehicleSpeed - 关联数据类型:选择刚才创建的
VehicleSpeed_T - 设置初始值:
0.0


8157

被折叠的 条评论
为什么被折叠?



