通过DBC文件的解析可以得到CAN数据库的结构,多个DBC文件组合可以得到整车网络拓扑。
因此DBC文件对于一辆车来说至关重要。
DBC文件是一个文本文件,其格式如下:

/******************************************************************************DBC_File(network)=version                           // VERSIONnew_symbols                       // NS_(DESC_)bit_timing                        // BS_   (*obsolete but required*)nodes                             // BU_value_tables                      // VAL_TABLE_messages                          // BO_ / SG_message_transmitters              // BO_TX_BU_environment_variables             // EV_environment_variables_data        // ENVVAR_DATA_signal_types                      // (*not used in normal DBC files*)// SGTYPE_// SGTYPE_VAL_// BA_DEF_SGTYPE_// BA_SGTYPE_comments                          // CM_ ...attribute_definitions             // BA_DEF_(REL_)sigtype_attr_list                 // (*not used in normal DBC files*)attribute_defaults                // BA_DEF_DEF_(REL_)attribute_values                  // BA_(REL_)value_descriptions                // VAL_category_definitions              // CAT_DEF_     (*obsolete*)categories                        // CAT_         (*obsolete*)filter                            // FILTER_      (*obsolete*)signal_type_refs                  // (*not used in normal DBC files*)// SIG_TYPE_REF_signal_groups                     // SIG_GROUP_signal_extended_value_types       // (*not used in normal DBC files*)// SIG_VALTYPE_// SIGTYPE_VALTYPE_extended_multiplexing             // SG_MUL_VAL_;
******************************************************************************/

使用巴科斯-诺尔范式定义后,各字段的展开如下:

/******************************************************************************version = ['VERSION' '"' 'CANdb_version_string {}' "'];new_symbols = ['NS_' ':' ['CM_'] ['BA_DEF_'] ['BA_'] ['VAL_'] ['CAT_DEF_']['CAT_'] ['FILTER'] ['BA_DEF_DEF_'] ['EV_DATA_'] ['ENVVAR_DATA_']['SGTYPE_'] ['SGTYPE_VAL_'] ['BA_DEF_SGTYPE_'] ['BA_SGTYPE_']['SIG_TYPE_REF_'] ['VAL_TABLE_'] ['SIG_GROUP_'] ['SIG_VALTYPE_']['SIGTYPE_VALTYPE_'] ['BO_TX_BU_'] ['BA_DEF_REL_'] ['BA_REL_']['BA_DEF_DEF_REL_'] ['BU_SG_REL_'] ['BU_EV_REL_'] ['BU_BO_REL_']];bit_timing = 'BS_:' [baudrate ':' BTR1 ',' BTR2 ]baud rate = unsigned_integerBTR1 = unsigned_integerBTR2 = unsigned_integernodes = 'BU_:' {node_name}node_name = C_identifiervalue_tables = {value_table}value_table = 'VAL_TABLE_' value_table_name {value_description } ';'value_table_name = C_identifiervalue_description = double char_stringmessages = {message}message = BO_ message_id message_name ':' message_size transmitter {signal}message_id = unsigned_integermessage_name = C_identifiermessage_size = unsigned_integertransmitter = node_name | 'Vector__XXX'signal = 'SG_' signal_name multiplexer_indicator ':' start_bit '|' signal_size '@' byte_order value_type '(' factor ',' offset ')' '[' minimum '|' maximum ']' unit receiver {',' receiver}signal_name = C_identifiermultiplexer_indicator = ' ' | 'M' | 'm' multiplexer_switch_valuestart_bit = unsigned_integersignal_size = unsigned_integerbyte_order = '0' | '1' (* 0=little endian, 1=big endian *)value_type = '+' | '­-' (* +=unsigned, -­=signed *)factor = doubleoffset = doublephysical_value = raw_value * factor + offsetraw_value = (physical_value – offset) / factorminimum = doublemaximum = doubleunit = char_stringreceiver = node_name | 'Vector__XXX'signal_extended_value_type_list = 'SIG_VALTYPE_' message_id signal_name signal_extended_value_type ';'signal_extended_value_type = '0' | '1' | '2' | '3' (*0=signed or unsigned integer, 1=32­bit IEEE­float, 2=64­bit IEEE­double *)message_transmitters = {message_transmitter}message_transmitter = 'BO_TX_BU_' message_id ':' {} transmitter ';'value_descriptions = { value_descriptions_for_signal | value_descriptions_for_env_var }value_descriptions_for_signal = 'VAL_' message_id signal_name { value_description } ';'environment_variables = {environment_variable}environment_variable = 'EV_' env_var_name '' env_var_type '[' minimum '|' maximum ']' unit initial_value ev_id access_type access_node {',' access_node } ';'env_var_name = C_identifierenv_var_type = '0' | '1' | '2' (* 0=integer, 1=float, 2=string *)minimum = doublemaximum = doubleinitial_value = doubleev_id = unsigned_integer (* obsolete *)access_type = 'DUMMY_NODE_VECTOR0' | 'DUMMY_NODE_VECTOR1' | 'DUMMY_NODE_VECTOR2' | 'DUMMY_NODE_VECTOR3' (* 0=unrestricted, 1=read, 2=write, 3=readWrite *)access_node = node_name | 'VECTOR_XXX'environment_variables_data = environment_variable_dataenvironment_variable_data = 'ENVVAR_DATA_' env_var_name: ' data_size ';'data_size = unsigned_integervalue_descriptions_for_env_var = 'VAL_' env_var_aname { value_description } ';'signal_types = {signal_type}signal_type = 'SGTYPE_' signal_type_name ':' signal_size '@' byte_order value_type '(' factor ',' offset ')' '[' minimum '|' maximum ']' unit default_value ',' value_table ';'signal_type_name = C_identifierdefault_value = doublevalue_table = value_table_namesignal_type_refs = {signal_type_ref}signal_type_ref = 'SGTYPE_' message_id signal_name ':' signal_type_name ';'signal_groups = 'SIG_GROUP_' message_id signal_group_name repetitions ':' { signal_name } ';'signal_group_name = C_identifierrepetitions = unsigned_integercomments = {comment}comment = 'CM_' (char_string| 'BU_' node_name char_string| 'BO_' message_id char_string| 'SG_' message_id signal_name char_string| 'EV_' env_var_name char_string)';'attribute_definitions = { attribute_definition | attribute_definition_relation}attribute_definition = 'BA_DEF_' object_type attribute_name attribute_value_type ';'object_type = '' | 'BU_' | 'BO_' | 'SG_' | 'EV_'attribute_name = '"' C_identifier '"'attribute_value_type = 'INT' signed_integer signed_integer| 'HEX' signed_integer signed_integer| 'FLOAT' double double| 'STRING'| 'ENUM' [char_string {',' char_string}]attribute_definition_relation = 'BA_DEF_REL_' 'BU_SG_REL_' attribute_name attribute_value_type ';'attribute_defaults = { attribute_default }attribute_default = 'BA_DEF_DEF_' attribute_name attribute_value ';'attribute_value = unsigned_integer| signed_integer| double| char_stringattribute_values = { attribute_value_for_object }attribute_value_for_object = ('BA_' attribute_name (attribute_value| 'BU_' node_name attribute_value| 'BO_' message_id attribute_value| 'SG_' message_id signal_name attribute_value| 'EV_' env_var_name attribute_value)';'| 'BA_REL_' attribute_name ( 'BU_SG_REL_' node_name 'SG_' message_id signal_name attribute_value| 'BU_BO_REL_' node_name message_id attribute_value) ';')******************************************************************************/

使用上面的格式定义,可以比较容易的通过代码,实现自己的文件解析器。

维克多DBC文件结构相关推荐

  1. android 定义集合长度,Android Dex文件结构解析

    Java源文件通过Java编译器生成CLASS文件,再通过dx工具转换为classes.dex文件. DEX文件从整体上来看是一个索引的结构,类名.方法名.字段名等信息都存储在常量池中,这样能够充分减 ...

  2. 1 字节的 utf-8 序列的字节 1 无效_字节码文件结构详解

    点击上方" Java资料站 ",选择"标星公众号" 优质文章,第一时间送达 陈建源  |  作者 urlify.cn/INFrUr  |  来源 "一 ...

  3. Nginx入门笔记之————配置文件结构

    在nginx.conf的注释符号位# nginx文件的结构,这个对刚入门的同学,可以多看两眼. 默认的config: #user nobody; worker_processes 1;#error_l ...

  4. Class类文件结构、类加载机制以及字节码执行

    一.Class类文件结构 Class类文件严格按照顺序紧凑的排列,由无符号数和表构成,表是由多个无符号数或其他数据项构成的符合数据结构. Class类文件格式按如下顺序排列: 类型 名称 数量 u4 ...

  5. 深入理解java虚拟机之类文件结构以及加载

    我们都知道,java是一种平台无关的语言.java代码通过java编译器(如javac等),将.java文件编译成字节码,也就是.class文件.字节码是运行在jvm虚拟机之上的.而不同的平台则 有不 ...

  6. dbm,dbi,dbd,db,dbc的区别是什么

    都是功率增益的单位. 1.dBm dBm是一个表征功率绝对值的量,计算公式为:10lgP(功率值/1mw). [例1] 如果发射功率P为1mw,折算为dBm后为0dBm. [例2] 对于40W的功率, ...

  7. 什么是dBi、dBd、dB、dBm、dBc ?

    我们在看到相关的技术资料时候,经常遇到dB和dBm的概念.dB,就是分贝,是一个以十为底的对数概念.注意,分贝只用来评价一个物理量和另一个物理量之间的比例关系,它本身并没有物理量纲.两个量之间的比例每 ...

  8. 修改class文件_VM实战(六) - 通过案例深入学习class文件结构原理

    0 更多干货关注 JavaEdge 公众号 1 什么是JVM的"无关性"? Java具有平台无关性,也就是任何操作系统都能运行Java代码.之所以能实现这一点,是因为Java运行在 ...

  9. nginx模型概念和配置文件结构

    一. nginx模型概念: Nginx会按需同时运行多个进程: 一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程( ...

  10. Xamarin XAML语言教程XAML文件结构与解析XAML

    Xamarin XAML语言教程XAML文件结构与解析XAML XAML文件结构 在上文中,我们创建XAML文件后,会看到类似图1.16所示的结构 图1.16  结构 其中,.xaml文件和.xaml ...

最新文章

  1. 20172324 2018-2019-1《程序设计与数据结构》实验2报告
  2. python的x 2是什么意思_python中startx是什么意思
  3. Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
  4. 关于系统用户数,并发用户数,在线用户数,吞吐量
  5. SSM+KindEditor实现富文本编辑器图片上传
  6. 四十五、深入Java的网络编程(上篇)
  7. 剑指offer 树的子结构
  8. Apple Swift编程语言新手教程
  9. Python基础语法和数据类型最全总结
  10. 开源软件许可协议简介
  11. 冰汽朋克侦查机器人_冰汽时代生病机制是什么 寒霜朋克所有机制漏洞一览
  12. 记录一次被DDOS攻击,攻击类型:UDPFLOOD
  13. 如何快速实现一个颜色选择器
  14. Far planner之 障碍物的图搜索
  15. Python中index函数用法总结
  16. 【vue+bootstrap】音乐聚合搜索引擎实现(music-box)
  17. android 指纹框架,Android标准化指纹识别框架(只基于api23官方标准)
  18. 第十七届智能视觉组线上赛比赛流程及相关补充说明
  19. 人体的神经系统图 分布,神经系统分布图解析图
  20. spark master web ui 端口8080被占用解决方法

热门文章

  1. 【IPTV】TCP/IP四层模型
  2. 阿里代码规范检查自定义规则扩展
  3. 使用idea格式化xml中的SQL
  4. 串口(Uart)的基础知识
  5. 网络基础知识之报文格式介绍
  6. 机房收费系统个人重构—图(文档)
  7. WS2811B驱动使用及使用说明应用
  8. ab测试工具结果分析
  9. 产品流程图的制作方法详解
  10. 查询的端口 -解决端口被占用的问题