#automotive #dbc #ecu #数据交换 #can

can-dbc

DBC格式的解析器。DBC格式用于交换CAN网络数据。

16个稳定版本 (5个主要版本)

6.0.0 2024年2月8日
5.0.0 2022年6月22日
4.0.0 2021年11月15日
3.0.2 2020年10月28日
1.0.0 2018年12月9日

#126解析器实现

Download history 1852/week @ 2024-04-07 1769/week @ 2024-04-14 1932/week @ 2024-04-21 2057/week @ 2024-04-28 2058/week @ 2024-05-05 2313/week @ 2024-05-12 1764/week @ 2024-05-19 1783/week @ 2024-05-26 1906/week @ 2024-06-02 1269/week @ 2024-06-09 1515/week @ 2024-06-16 1521/week @ 2024-06-23 1787/week @ 2024-06-30 1807/week @ 2024-07-07 1459/week @ 2024-07-14 1578/week @ 2024-07-21

6,676 每月下载量
用于 5 个crates (4 个直接使用)

MIT 许可证

82KB
2K SLoC

can-dbc

LICENSE VERSION Actions Status codecov docs Cargo Deny Status

使用Rust的nom解析器组合库编写的CAN-dbc格式解析器。

1. 示例

读取dbc文件并根据dbc中定义的消息/信号生成Rust结构体。

use can_dbc::DBC;
use codegen::Scope;

use std::fs::File;
use std::io;
use std::io::prelude::*;

fn main() -> io::Result<()> {
    let mut f = File::open("./examples/sample.dbc")?;
    let mut buffer = Vec::new();
    f.read_to_end(&mut buffer)?;

    let dbc = can_dbc::DBC::from_slice(&buffer).expect("Failed to parse dbc file");

    let mut scope = Scope::new();
    for message in dbc.messages() {
        for signal in message.signals() {

            let mut scope = Scope::new();
            let message_struct = scope.new_struct(message.message_name());
            for signal in message.signals() {
                message_struct.field(signal.name().to_lowercase().as_str(), "f64");
            }
        }
    }

    println!("{}", scope.to_string());
    Ok(())
}

对于根据DBC读取或写入CAN帧的正确实现,我建议您查看dbc-codegen

2. 示例

文件解析器简单地解析dbc输入文件并打印解析内容。

cargo test && ./target/debug/examples/file_parser -i examples/sample.dbc

安装

can-dbc可在crates.io上找到,并可以像这样包含在您的Cargo启用项目中

[dependencies]
can-dbc = "3.0"

实现的DBC部分

  • 版本
  • new_symbols
  • bit_timing (已弃用但必需)
  • nodes
  • value_tables
  • messages
  • message_transmitters
  • environment_variables
  • environment_variables_data
  • signal_types
  • comments
  • attribute_definitions
  • sigtype_attr_list (格式缺少文档)
  • attribute_defaults
  • attribute_values
  • value_descriptions
  • category_definitions (已弃用)
  • categories (已弃用)
  • filter (已弃用)
  • signal_type_refs
  • signal_groups
  • signal_extended_value_type_list

偏离标准

  • 在解析器之间使用多空格而不是单空格,例如 (两个空格) SIG_GROUP 13
  • VAL_后缀可以是 ;;

替代方案

致谢

测试dbcs文件已从cantools项目复制。

许可证检查

本项目使用cargo-deny检查依赖项的许可证。要本地运行检查,请运行以下命令

cargo install cargo-deny
cargo deny check

依赖项

~2.5MB
~56K SLoC