夜雨聆风学习资料网

ARTICLE · 1218242

Python + canmatrix:Excel 批量转 ARXML,打通 AUTOSAR 通信设计全流程

Python + canmatrix:Excel 批量转 ARXML,打通 AUTOSAR 通信设计全流程

汽车电子开发 · Python 自动化

做过汽车电子开发的朋友都知道,通讯矩阵的格式转换是家常便饭。DBC 用得多,但随着 AUTOSAR 越来越普及,ARXML 也成了绕不开的格式。相比 DBC 的扁平文本结构,ARXML 是层级分明的 XML,学起来门槛不低。
之前我写过一篇 Excel 转 DBC 的文章,用的是 canmatrix 这个库。很多朋友问:能不能直接转 ARXML?当然可以,canmatrix 同样支持。
今天就来聊聊怎么用 Python + canmatrix 把 Excel 批量转成 ARXML 文件,打通 AUTOSAR 通信设计的第一步。
一句话:不用啃 ARXML 的 XSD 结构,把报文、信号整理清楚,canmatrix 帮你生成标准 ARXML。

01 Excel转ARXML工具

1、Excel矩阵:通信矩阵表头与 DBC 转换工具一样,核心信息包括帧 ID、帧名称、周期、信号列表等:
2、工具效果:生成的是 AUTOSAR 标准的 .arxml 文件,可用 Vector 工具链(CANoe、DaVinci)直接打开。
3、ARXML文件效果:生成文件包含完整的 AUTOSAR 分层结构:

02 工具业务流程

整体流程与 Excel 转 DBC 类似,可以分成三步:
第一步:界面功能main.py:命令行入口,选择 Excel 文件、指定 ARXML 输出路径,一键生成。
第二步:解析 Excel获取数据对象excelparse.py:逐行读取 Excel,把表格内容转成程序里的数据对象。
第三步:canmatrix传入数据对象generatearxml.py:把上一步的数据对象转成 canmatrix 能识别的格式,再调用 canmatrix 接口导出 ARXML。

03 调用 canmatrix 接口整体思路

调用 canmatrix 生成 ARXML,与生成 DBC 的整体思路类似:
创建 canmatrix 实体→添加 ECU 节点→添加报文 Frame→添加信号 Signal→导出 ARXML 文件(指定 AUTOSAR 版本)
对应到代码里,整体流程是这样:
生成ARXML文件结果如下图

04 ARXML 与 DBC 的核心区别

虽然都是通信矩阵格式,ARXML 和 DBC 在结构上有本质差异:

4.1 文件结构

4.2 ARXML 分层结构

ARXML 遵循 AUTOSAR 标准,数据分层存储:

4.3 AUTOSAR 版本选择

canmatrix 支持导出不同版本的 ARXML:
3.2.x:旧版本 AUTOSAR,老工具链
4.0 - 4.3:新版本 AUTOSAR,主流工具链
4.2.0:推荐版本,兼容性最好

05 方案边界与局限性(使用前必读)

canmatrix 能帮你不用关注 ARXML 的 XSD 结构细节,实现自动化生成 ARXML 文件,但不是万能的。

有局限的场景

Excel 解析需自己写:canmatrix 自带的 convert 功能要求遵循它的 Excel 模板;自定义模板意味着解析逻辑全部要自己处理
数据类型映射:复杂的数据类型约束(Data Constraint)需要额外处理

06 canmatrix 还能做什么

canmatrix 是通信矩阵处理的瑞士军刀,支持的格式非常全面:

导入格式

.dbc
- Vector DBC
.dbf
- DBF 数据库
.kcd
- KCD 格式
.xls(x)
- Excel
.arxml
- AUTOSAR XML
.sym
- 其他工具格式

导出格式

.dbc
- Vector DBC
.arxml
- AUTOSAR XML
.json
- JSON 格式
.yaml
- YAML 格式
.xml
- Fibex 格式
.scapy
- Wireshark 脚本
除了格式转换,canmatrix 还支持:
矩阵整合:识别路由报文信号(CanCluster)
DBC 对比:cancompare 功能
数据库合并:多文件整合

总结

Excel 转 ARXML 的核心思路和转 DBC 一样:
解析 Excel 获取数据
构建 canmatrix 对象
调用导出接口生成文件
不同的是 ARXML 遵循 AUTOSAR 标准,结构更复杂、层级更分明。canmatrix 帮你封装了这些复杂度,你只需要关注数据本身。
如果你正在做 AUTOSAR 通信设计,或者需要批量生成 ARXML 文件,不妨试试这个方案。
你们平时 ARXML 都是怎么生成的?有没有遇到什么坑?欢迎评论区交流。

全文完

相关学习资料