AI 如何助力 AUTOSAR 系统设计和配置
AutoC 开始做 System 层了。转向灯加双闪,Plan 里拆 SWC、建端口、生成 DataType,再丢进 DaVinci Developer 对一下。
起因
之前 AutoC 能干的是 ECUC 层,CanIf、PduR、Com 这些 BSW 模块的参数。System 层一直得自己在 DaVinci Developer 或 ISOLAR 里点:SWC 怎么连、Port 怎么建、Mapping 怎么对。
DataType、PortInterface 手工建尤其烦。类型名、CompuMethod、Application / Implementation 映射,漏一项后面 RTE 就对不上。
这次想试试 System 层。Plan 里先把架构定下来,再生成到工程。我随便假设了个转向灯加双闪的需求。
先看一个测试
功能不复杂,但仲裁、闪烁、10ms Runnable、四路输出都有,够看 Plan 会怎么下手。
假设的系统需求
功能描述:
车辆的转向灯需要响应两类独立的输入:驾驶员的转向开关,以及危险报警灯(双闪)开关。两者都可能要求控制同一组灯(左前 / 左后 / 右前 / 右后),需要合理的优先级仲裁。
详细要求:
- 转向开关输入:状态包括左转、右转、关闭三种,来自转向杆。
- 危险报警灯开关输入:状态包括开启、关闭两种,来自独立的危险报警灯按钮。
- 优先级规则:
- 危险报警灯开启时,无论转向开关处于什么状态,所有转向灯(左右两侧)都应同步闪烁。
- 危险报警灯关闭后,恢复响应转向开关的正常单侧转向指示。
- 闪烁特性:
- 闪烁频率约 1.5Hz(周期约 667ms,亮灭各占一半时间)。
- 无论是转向指示还是危险报警灯触发的闪烁,闪烁的时序生成逻辑应该一致(即两种场景下灯的"闪烁节拍"是同一套机制)。
- 状态切换要求:
- 任何输入状态变化(转向开关切换、危险报警灯开启 / 关闭)都应立即响应,重新从"亮"状态开始新的闪烁相位,不延续之前的相位。
- 该功能需要周期性运行,判定周期为 10ms。
- 最终输出:左前、左后、右前、右后四路灯的亮灭状态,供车灯驱动相关模块使用。
Plan 模式怎么拆
把需求丢进 Plan。它没直接写 ARXML,先拆输入、仲裁、闪烁、输出,再落到 SWC 边界。

控制逻辑放一个原子 SWC 里,开关源和灯驱动先放外面。危险报警优先、同一套闪烁、输入一变就重相位,都写在这个 SWC 的行为里。
架构图
组合 C_TurnSignalHazard 包着原子 SWC TurnSignalHazardCtrl,对外三个端口:转向开关、危险报警开关、四路灯命令。组合端口 Delegation 到内部,开关源和灯驱动后面再接。
HZ["危险报警开关源 SWC"] -->|HazardSwitchStatus| CPH CPL -->|"LampLeftFront/LeftRear/RightFront/RightRear"| LD["车灯驱动 SWC(后续)"] -->
Plan 里的实现细节
下面这些都是 Plan 里出来的。
数据类型(DataTypes.arxml → /DataTypes)
| 元素 | 类型 | 关键参数 |
|---|---|---|
CompuMethod_TurnSwitchStatus | COMPU-METHOD | CATEGORY=TEXTTABLE;0=TURN_OFF, 1=TURN_LEFT, 2=TURN_RIGHT(保证左=1、右=2、关=0) |
TurnSwitchStatus | APPLICATION-PRIMITIVE-DATA-TYPE | CATEGORY=TYPECODE;compuMethod→CompuMethod_TurnSwitchStatus |
TurnSwitchStatus_Impl | IMPLEMENTATION-DATA-TYPE | baseType=uint8;compuMethod→CompuMethod_TurnSwitchStatus;swDataDefProps 默认 |
ApplBoolean | APPLICATION-PRIMITIVE-DATA-TYPE | CATEGORY=TYPECODE;impl→平台 boolean |
Appl_DataMappingSet | DATA-TYPE-MAPPING-SET | 映射:TurnSwitchStatus→TurnSwitchStatus_Impl,ApplBoolean→/AUTOSAR_Platform/ImplementationDataTypes/boolean |
危险报警直接用 ApplBoolean(TRUE=开),不单独做枚举。四灯是接口上 4 个独立布尔元素,没有 ApplicationRecordDataType。
转向开关才建 TEXTTABLE:关 / 左 / 右,Application 和 Implementation 各一份,Appl_DataMappingSet 把它们对上。
端口接口(PortInterfaces.arxml → /PortInterfaces)—— 全部 SENDER-RECEIVER-INTERFACE
| 接口 | 数据类型元素 | 元素类型 |
|---|---|---|
TurnSwitchStatus_I | TurnSwitchStatus | TurnSwitchStatus(Appl) |
HazardSwitchStatus_I | HazardSwitchStatus | ApplBoolean |
LampCommand_I | LampLeftFront / LampLeftRear / LampRightFront / LampRightRear | 各为 ApplBoolean |
三个接口都是 Sender-Receiver。灯命令做成四个独立布尔,后面接灯驱动可以按路连。
原子应用 SWC(/ComponentTypes)
TurnSignalHazardCtrl(APPLICATION-SW-COMPONENT-TYPE)
PP LampCommand(interface=LampCommand_I)RP TurnSwitch(interface=TurnSwitchStatus_I)RP HazardSwitch(interface=HazardSwitchStatus_I)SwcInternalBehavior:RunnableEntity TurnSignalHazardCtrl_RunTimingEvent:period=10.0ms,offset=0- DataReceivePoints:
TurnSwitch、HazardSwitch - DataSendPoints:
LampCommand
PerInstanceMemoryVariable(用平台实现类型):flashTick(uint16,0..周期-1)lastTurn(TurnSwitchStatus_Impl)lastHazard(boolean)
Runnable 周期是需求里的 10ms。flashTick 跑闪烁,lastTurn / lastHazard 记上一拍输入,变了就从亮开始。
组合组件与连接器(/ComponentTypes)
C_TurnSignalHazard(COMPOSITION-SW-COMPONENT-TYPE)
SWCPrototype:TurnSignalHazardCtrl(type=上面的原子 SWC)- 组合端口(接口与上述一致):
R-Port TurnSwitch、R-Port HazardSwitch、P-Port LampCommand
DelegationConnector三条:C_TurnSignalHazard.TurnSwitch → TurnSignalHazardCtrl.TurnSwitchC_TurnSignalHazard.HazardSwitch → TurnSignalHazardCtrl.HazardSwitchC_TurnSignalHazard.LampCommand → TurnSignalHazardCtrl.LampCommand
组合不放逻辑,只外露端口。开关源和灯驱动这次没建。
开始实现
Plan 确认完,让 AutoC 往工程里写。

在 DaVinci Developer 中查看
导入 Developer,对一下类型、接口、端口和组合连接。

CompuMethod_TurnSwitchStatus 的 Int To Phys:0=TURN_OFF、1=TURN_LEFT、2=TURN_RIGHT。

HazardSwitchStatus_I,S/R,一个布尔。灯命令那边是四路独立布尔。

TurnSignalHazardCtrl_Run 的 Access Points:读 TurnSwitch、HazardSwitch,写四路 LampCommand。

两个输入,一个输出。C_TurnSignalHazard 用 Delegation 接到这块内部 SWC。

Messages 里有一条 40501:Invalid periodic runnable trigger offset。Plan 里 TimingEvent 的 offset 写的是 0。这条要不要动,看工程里的周期触发约束。
在 AutoC 中进行查看
AutoC 里也能看同一份结果。

对象浏览器里有组合 C_TurnSignalHazard,还有 ApplBoolean、TurnSwitchStatus。

问了一句 C_TurnSignalHazard 是什么。它把类型、外部端口、Delegation 从模型里捞出来了。后面改端口或补 mapping,可以继续在 AutoC 里做。
小结
这次测的是 System 层。DataType、PortInterface、原子 SWC、组合 Delegation,Plan 里定完能写进工程。Developer 里大部分对得上,offset 那条提示还在。
