DBC格式解析和报文解析方法、装置、电子设备及介质与流程

文档序号:26759593发布日期:2021-09-25 05:24阅读:1159来源:国知局
DBC格式解析和报文解析方法、装置、电子设备及介质与流程
dbc格式解析和报文解析方法、装置、电子设备及介质
技术领域
1.本发明涉及文件格式转换领域,尤其涉及一种dbc格式解析和报文解析方法、装置、电子设备及介质。


背景技术:

2.can总线协议是iso国际标准化的一种串行通信协议,其具有极好的抗干扰、差错检测和处理能力,能够满足信息传输实时性的要求,同时具有控制接口结构简单、易于配置的优点,因而在汽车、电子等领域具有日益广泛的应用。随着技术的进步以及人们对驾驶要求的不断提高,汽车网络中的can节点不断增加,网络中的数据也越来越庞大,为便于整车的设计和维护,通常采用dbc文件对汽车can数据进行解析和管理的技术方案。dbc是database can的缩写,其代表的是can的数据库文件,是用来描述can网络通信信号的一种格式文件。它可以用来监测与分析can网络上的报文数据,也可以用来模拟某个can节点。绝大多数汽车生产厂家都有相应的dbc文件数据库。dbc文件解析的过程就是将汽车can网络传输的十六进制数据转换成通常熟知的物理量,比如车速、转速、温度等。dbc文件非常完整清楚地定义了can通讯的信息,而can网络的通讯就是依据这个文件的描述进行的。dbc文件的作用非常强大,它使得整个can网路的节点控制器无差错地协同开发。
3.当前在终端设备上已经实现了dbc的识别,但是,终端在实现dbc解析时,采用的是第三方的c语言库,不能动态识别dbc,因此,在使用时,不是很方便。每一次dbc文件有变化,都需要重新生成新的解析库,然后同步升级相应的程序。同时,基于该库生成的java版本的jar包,在应用于网站后台或者安卓系统时,都需要被动地升级对应的jar包。这导致开发的体验感非常差。因此,有必要对这功能进行改造,通过实现动态识别dbc的报文格式,解析相应的报文。而且,原有的方案,是基于一些第三方开源的代码,这也导致依赖性比较强。


技术实现要素:

4.本发明的目的是提供一种dbc格式解析和报文解析方法、装置、电子设备及介质,以解决现有技术中存在的问题。
5.第一方面,本发明提供一种dbc格式解析方法,包括:
6.读取dbc文件;
7.对dbc的文本,进行词法分析,将所述文本解析成各个独立的单词;
8.根据格式定义的语法规范,对dbc文本的各个字段进行语法解析;
9.将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构。
10.进一步地,所述对dbc的文本,进行词法分析,将所述文本解析成各个独立的单词,包括:
11.按行读取所述dbc格式的文本文件;
12.根据空格、制表符、特殊字符和/或双引号,对每一行内容进行分割,解析成单个词。
13.进一步地,所述根据格式定义的语法规范,将dbc文本的各个字段进行语法解析包括:
14.根据语法定义,对所述dbc的文本的各个字段进行语法解析,生成带标识的结构体;
15.根据所述dbc文本中的字段的相关参数,基于所述带标识的结构体,生成所述dbc文件中信号和/或消息帧的解析结果值;
16.其中所述相关参数包括字段的起始比特位置、比特长度、大小端格式、精度、偏移量、最小值、最大值以及单位。
17.进一步地,所述根据语法定义,对所述dbc的文本的各个字段进行语法解析包括:解析信号和解析消息帧。
18.进一步地,所述将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构包括:
19.通过字段连接操作,将各个字段之间的关系,分别匹配起来,形成所述对象结构。
20.第二方面,本发明提供一种报文解析方法,包括:
21.根据基于第一方面所述的dbc格式解析方法所形成的对象结构,对can网络上的报文进行解析。
22.第三方面,本发明提供一种dbc格式解析装置,包括:
23.读取模块,用于读取dbc文件;
24.词法分析模块,用于对dbc的文本,进行词法分析,将所述文本解析成各个独立的单词;
25.语法解析模块,用于根据格式定义的语法规范,对dbc文本的各个字段进行语法解析;
26.对象结构形成模块,用于将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构。
27.第四方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现根据第一方面所述dbc格式解析方法的步骤或第二方面所述报文解析方法的步骤。
28.第五方面,本发明提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现根据第一方面所述dbc格式解析方法的步骤或第二方面所述报文解析方法的步骤。
29.由上面技术方案可知,本发明提供的dbc文件解析和组装方法、装置、电子设备及存储介质,通过dbc对象的创建,每个dbc文件生成独立的对象;允许动态加载,调用时指定某dbc文件,生成一个对应的dbc对象;每个dbc对象,都独立管理该dbc的属性说明,以hashmap的格式管理,可以根据名称找到该对象的格式实例;对于消息实体,还增加了掩码,以便于根据带掩码的canid来查询实际的数据格式。处理速度快,在安卓系统上运行时,处理一个包,也就5毫秒左右。
附图说明
30.图1是根据本发明实施例的dbc格式解析方法的流程图;
31.图2是根据本发明实施例的报文解析方法的流程图;
32.图3是根据本发明实施例的dbc格式解析装置的示意图;
33.图4是根据本发明实施例的电子设备的结构示意图。
具体实施方式
34.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
35.为了动态解析dbc文件,并能够基于报文结构,需要允许实时解析出实际报文的数据。为此,对整个解析过程进行重新设计。首先,根据dbc各类型的关键字及格式规范,对各个类型的结构进行对象的定义。
36.然后,对dbc的文本文件,进行词法分析,将文本解析成各个独立的单词。
37.再次,根据格式定义的语法规范,将文本进行语法解析;
38.此后,将类型结构的各个字段,分别赋值,形成对象结构。
39.最后,生成两个方法,分别是:解析can数据报文的方法,以及将数据组装成can数据报文的方法。
40.图1是根据本发明实施例的dbc格式解析方法的流程图,参照图1,本发明实施例提供的dbc格式解析方法包括如下步骤:
41.步骤110,读取dbc文件;
42.步骤120,对dbc的文本,进行词法分析,将所述文本解析成各个独立的单词;
43.步骤130,根据格式定义的语法规范,对dbc文本的各个字段进行语法解析;
44.步骤140,将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构。
45.在本发明实施例中,需要说明的是,要对报文结构进行解析,最基本的操作就是词法分析和语法分析。
46.词法分析,就是将文件中的每个“词”,都要解析出来,并进行管理。
[0047]“词”的解析:由于规范将双引号内的所有内容,作为一个独立的“词”,所以,对词的解析,不仅仅是根据空格/制表符/其它特殊字符来分割,还要对遇到的双引号进行压栈,当遇到下一个双引号时,才能算是解析出一个双引号内的“词”,并弹出上一个双引号。根据规范,双引号内不允许出现带双引号的词。
[0048]
语法分析,就是基于词法分析得出的各个“词”,根据dbc的语法格式的定义,将相关“词”进行翻译解析,生成相应的结构,并通过链接操作,将各个对象之间的关系,分别匹配起来,形成最终的格式对象。
[0049]
所述读取dbc文件包括按行读取所述读取dbc文件。根据dbc格式规范,每一行字符,都是一个完整的定义。因此,首先从文件中,将文本内容一行一行地读取出来。
[0050]
所述根据格式定义的语法规范,将dbc文本的各个字段进行语法解析包括:
[0051]
根据语法定义,对所述dbc的文本的各个字段进行语法解析,生成带标识的结构体;
[0052]
根据所述dbc文本中的字段的相关参数,基于所述带标识的结构体,生成所述dbc文件中信号和/或消息帧的解析结果值;
[0053]
其中所述相关参数包括字段的起始比特位置、比特长度、大小端格式、精度、偏移量、最小值、最大值以及单位。
[0054]
根据语法定义,对dbc的各个字段进行解析。dbc主要涉及的关键字(keyword)有以下这几种:
[0055]
"version":版本信息
[0056]
"ev_":环境信息
[0057]
"ns_":新定义的符号
[0058]
"bs_":波特率
[0059]
"bu_":网络节点
[0060]
"bo_":消息帧
[0061]
"sg_":信号
[0062]
"cm_":注释
[0063]
"ba_def_":属性定义
[0064]
"ba_def_def_":属性默认值
[0065]
"ba_":属性
[0066]
"val_":数值表
[0067]
所述根据语法定义,对所述dbc的文本的各个字段进行语法解析包括:解析信号和解析消息帧。
[0068]
鉴于sg/bo的格式是最复杂的,解析部分说明就以sg/bo为例。sg的语法格式如下:
[0069]
sg_<signalname>[<m|m<multiplexeridentifier>]:<startbit>|<length>@<endianness><signed>(<factor>,<offset>)[<min|<max>]"[unit]"[receivingnodes]
[0070]
根据语法格式,定义对象的如下:
[0071]
[0072][0073]
由于词法解析时,已经将每一行解析为一个个的“词”,所以,后续的判断,都是基于指定符号以及“词”。当遇到“sg_”词,则往后扫码,直到遇到“:”,以前面部分的词作为信号名,将其赋予signame属性;其后,根据signal格式的规范,分别将解析后的各个字段进行相应的赋值。
[0074]
bo的语法格式为:
[0075]
bo_<can

id><messagename>:<messagelength><sendingnode>
[0076]
此处的can

id为十进制的数字。
[0077]
由于在实际的使用中,根据can标准定义(一般id是4个字节32比特),以及使用习惯(一般以pgn为基础,即3个字节24比特),特意新增一个掩码,然后以掩码后的值,再造一张映射表,以便于使用者的方便使用。
[0078]
映射表的格式为:
[0079]
hashmap<string,string>,即<can

id&maskval,can

id>
[0080]
有了这张映射表,使用者既可以用原始canid(即dbc报文中定义的值)来查询,也能通过实际id来查询,增加了使用的灵活性及便利性。
[0081]
对于其它字段,如果存在多值(例如:ba_def_)的话,就以hashmap存储其映射关系,便于查找相关的数值。否则就以<key,value>简单保存。鉴于解析较为简单,此处略去,不做详解。
[0082]
在词法解析及语法解析已经完毕的前提下,为了匹配全部的信息,很有必要增加一个字段连接的步骤。由于dbc是管理整个系统的数据格式,因此,在将各个字段解析出来之后,还需要建立起来各个字段间的应用关系。
[0083]
扫描注释列表,将注释的详细定义值,分别赋予指定的各个字段的对应属性
(object:comment)中去。
[0084][0085]
扫码属性列表,将各属性的定义,都添加到相对应的字段对象中去。扫码属性列表的代码类似扫描注释列表的代码。
[0086]
扫描bo列表,根据bo对象中所带的signal列表,找到相对应的sg对象,并将其赋予sig列表中,建立隶属关系。
[0087]
在将各字段都连接完毕之后,分别将各个字段,以<key,value>的格式,进行保存,此处的key为dbc主要涉及的关键字(keyword)。
[0088]
具体的实现如下(节选):
[0089][0090]
根据代码实现,最终,使用者只需要根据任意的canid(或带掩码的canid)或者signame等等,都能得到格式体对象。
[0091]
参考图2,图2是根据本发明实施例的报文解析方法的流程图。本发明实施例提供的报文解析方法包括:
[0092]
根据基于dbc格式解析方法所形成的对象结构,对can网络上的报文进行解析。
[0093]
具体地,dbc解析后的最终要求是,能根据指定的canid以及can的消息体,将数据解析并展示给使用者。所以,其中最重要的一点就是,要根据格式,将数据生成。
[0094]
在信号sg的格式中,对每个字段都定义了该字段的起始比特位置,比特长度,大小端格式,精度,偏移量,最小值,最大值,单位等等。因此可以设计结果值生成算法:
[0095]
1)根据字段的比特长度,确定其所占用的字节数,作为目标存储字段segbody;
[0096]
2)根据起始位和8的余数,确定位移的起始位置;
[0097]
3)用一个数字作为位置游标curbitstart,始终指向当前处理的比特位;另外用一个数字作为目标游标,用于确定已经处理了的比特数,并精确确定该字段应该放置在
segbody的哪个字节中去。(详见代码的parsesig()的while()部分)
[0098]
4)待处理完比特后,再将segbody将内容,按照大小端的定义,形成十六进制的原始值字符串以及数值,若是数字类型,则根据偏移量和精度,形成最终的结果值。
[0099]
结果值生成算法的代码如下:
[0100]
[0101]
[0102][0103]
根据实际情况,使用者也有要求把已知can各个字段的数值,将其转换成can报文,并发送到总线上。因此,就需要有一个解析的逆过程,这里称之为根据dbc格式定义而进行的报文组装过程。
[0104]
在信号sg的格式中,对每个字段都定义了该字段的起始比特位置,比特长度,大小
端格式,精度,偏移量,最小值,最大值,单位等等。在数据发送时,是无需将“单位”传递到总线上的。
[0105]
所述报文组装包括:
[0106]
根据字段的起始比特位置和比特长度,确定所述字段占用的字节数,建立具有所述字节数的源存储字段;
[0107]
将所述can字段的数值根据偏移量、精度等换算成保存值,然后对所述保存值进行处理生成字节序列;
[0108]
计算所述字节序列实际占用的字节数,用于存储源存储字段在字节中的实际存储位置;
[0109]
处理完比特后,将所述字节序列实际占用的字节数存入实际的字节所处位置;
[0110]
处理完所有信号字段后,生成所述dbc文件。
[0111]
报文组装的整体逻辑:
[0112]
1)根据字段的起始比特位置,以及字段比特长度,确定其所占用的字节数,作为源存储字段srcbuf。例如,如果起始位置是28,长度为15,则需要(28+15)/8+1=6个字节;
[0113]
2)根据原始数值,根据偏移量,精度等,换算成保存值,然后,将其进行按位移动,将其分别赋予某个字节中,待8位满了,则存入srcbuf;这样就将对应的值,转化为字节序列了。
[0114]
3)随之,先计算出,实际上这数据是占了几个字节(bytecount),然后定义一个dstbuf,大小为bytecount,用于存储源数据在字节中的实际位置(从sg的起始位置所在的字节开始计算)。
[0115]
4)待处理完比特后,再将对应的dstbuf,存入整个消息体的实际的字节所处位置;
[0116]
5)待处理完所有sg字段后,形成最终的结果值。
[0117]
dbc文件生成方法的代码如下:
[0118]
[0119]
[0120]
[0121]
[0122][0123]
参照图3,图3是根据本发明实施例的dbc格式解析装置的结构示意图,本实施例提供的dbc格式解析装置,包括:读取模块310、词法分析模块320、语法解析模块330、对象结构形成模块340:
[0124]
读取模块310,用于读取dbc文件;
[0125]
词法分析模块320,用于对dbc的文本,进行词法分析,将所述文本解析成各个独立的单词;
[0126]
语法解析模块330,用于根据格式定义的语法规范,对dbc文本的各个字段进行语法解析;
[0127]
对象结构形成模块340,用于将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构。
[0128]
由于本发明实施例提供的dbc格式解析装置,可以用于执行上述实施例所述的dbc格式解析方法,其工作原理和有益效果类似,故此处不再详述,具体内容可参见上述实施例的介绍。
[0129]
在本实施例中,需要说明的是,本发明实施例的装置中的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
[0130]
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(communications interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行:
[0131]
dbc格式解析方法,该方法包括读取dbc文件;对dbc的文本,进行词法分析,将所述
文本解析成各个独立的单词;根据格式定义的语法规范,对dbc文本的各个字段进行语法解析;将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构;
[0132]
或,报文解析方法,该方法包括根据基于dbc格式解析方法所形成的对象结构,对can网络上的报文进行解析。
[0133]
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0134]
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的:
[0135]
dbc格式解析方法,该方法包括读取dbc文件;对dbc的文本,进行词法分析,将所述文本解析成各个独立的单词;根据格式定义的语法规范,对dbc文本的各个字段进行语法解析;将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构;
[0136]
或,报文解析方法,该方法包括根据基于dbc格式解析方法所形成的对象结构,对can网络上的报文进行解析。
[0137]
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的:
[0138]
dbc格式解析方法,该方法包括读取dbc文件;对dbc的文本,进行词法分析,将所述文本解析成各个独立的单词;根据格式定义的语法规范,对dbc文本的各个字段进行语法解析;将词法分析和语法解析后得到的类型结构的各个字段,分别赋值,形成对象结构;
[0139]
或,报文解析方法,该方法包括根据基于dbc格式解析方法所形成的对象结构,对can网络上的报文进行解析。
[0140]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0141]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0142]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管
参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1