#汽车 #autosar #arxml #文件格式 #读写 #数据模型

autosar-data

读取、编写和修改 Autosar arxml 数据

16 个版本 (重大更新)

新增 0.14.0 2024 年 8 月 16 日
0.13.0 2024 年 5 月 19 日
0.12.1 2024 年 2 月 1 日
0.12.0 2023 年 12 月 14 日
0.3.0 2022 年 10 月 19 日

解析器实现 中排名第 851

Download history 5/week @ 2024-05-02 24/week @ 2024-05-09 194/week @ 2024-05-16 15/week @ 2024-05-23 1/week @ 2024-05-30 4/week @ 2024-06-06 2/week @ 2024-06-13 3/week @ 2024-06-20 25/week @ 2024-06-27 64/week @ 2024-07-04 33/week @ 2024-07-11 215/week @ 2024-08-15

每月下载量 215

MIT/Apache

6MB
52K SLoC

autosar-data

Crates.io Github Actions codecov

该软件包提供读取、修改和写入 Autosar 4 arxml 文件的功能,无论是单独的还是由多个文件组成的工程项目。

功能

  • 读取和编写 arxml 文件
  • 加载时完全验证所有数据
  • 非严格模式,以便可以加载结构上合理但无效的数据
  • 各种元素操作以修改和创建子元素、数据和属性
  • 支持 Autosar 路径和交叉引用
  • 所有操作都是线程安全的,例如,可以在单独的线程上加载多个文件
  • 支持 Autosar 版本 4.0.1 及以上。

示例

use autosar_data::*;

/* load a multi-file data model */
let model = AutosarModel::new();
let (file_1, warnings_1) = model.load_file("some_file.arxml", false)?;
let (file_2, warnings_2) = model.load_file("other_file.arxml", false)?;

/* load a buffer */
let (file_3, _) = model.load_buffer(buffer, "filename.arxml", true)?;

/* write all files of the model */
model.write()?;

/* alternatively: */
for file in model.files() {
    let file_data = file.serialize();
    // do something with file_data
}

/* iterate over all elements in all files */
for (depth, element) in model.elements_dfs() {
    if element.is_identifiable() {
        /* the element is identifiable using an Autosar path */
        println!("{depth}: {}, {}", element.element_name(), element.path()?);
    } else {
        println!("{depth}: {}", element.element_name());
    }
}

/* get an element by its Autosar path */
let pdu_element = model.get_element_by_path("/Package/Mid/PduName").unwrap();

/* work with the content of elements */
if let Some(length) = pdu_element
    .get_sub_element(ElementName::Length)
    .and_then(|elem| elem.character_data())
    .and_then(|cdata| cdata.string_value())
{
    println!("Pdu Length: {length}");
}

/* modify the attributes of an element */
pdu_element.set_attribute_string(AttributeName::Uuid, "12ab34cd-1234-1234-1234-12ab34cd56ef");
pdu_element.remove_attribute(AttributeName::Uuid);

示例程序

可以在源代码仓库的 examples 目录中找到两个完整的示例程序。它们是:

  • businfo,它从 Autosar ECU 提取有关总线设置、帧、PDU 和信号的信息
  • generate_files,为每个 Autosar 版本生成一个 arxml 文件,其中至少包含一个指定元素的实例

依赖关系

~1.5–8MB
~47K SLoC