重庆大学学报  2022, Vol. 45 Issue (8): 78-86  DOI: 10.11835/j.issn.1000-582X.2021.109 RIS(文献管理工具)
0

引用本文 

孙汉, 杨亚联, 周林, 张昕. 基于正则表达式与多叉树的DBC网络协议解析方法[J]. 重庆大学学报, 2022, 45(8): 78-86. DOI: 10.11835/j.issn.1000-582X.2021.109.
SUN Han, YANG Yalian, ZHOU Lin, ZHANG Xin. A regular-expression and multi-tree based DBC network protocol analysis method[J]. Journal of Chongqing University, 2022, 45(8): 78-86. DOI: 10.11835/j.issn.1000-582X.2021.109.

基金项目

国家自然科学基金资助项目(51575064)

通信作者

杨亚联, 男, 教授, 博士生导师, 主要从事动力传动及控制、车联网等研究, (E-mail)yyl@cqu.edu.cn

作者简介

孙汉(1996—), 男, 重庆大学硕士研究生, 主要从事车联网研究, (E-mail)2253975649@qq.com

文章历史

收稿日期: 2021-01-07
基于正则表达式与多叉树的DBC网络协议解析方法
孙汉 1a,1b, 杨亚联 1a,1b, 周林 2, 张昕 3     
1a. 重庆大学 机械与运载工程学院, 重庆 400044;
1b. 重庆大学 机械传动国家重点实验室, 重庆 400044;
2. 金康赛力斯新能源汽车 设计院, 重庆 401120;
3. 江铃重型汽车有限公司, 太原 030032
摘要: 为解决CAN网络下DBC(database CAN)协议数据解析和结构表征问题,通过正则表达式解析了DBC文件协议信息,利用多叉树结构,对CAN网络协议信息进行结构表征。针对Intel和Motorola不同格式下的协议解析问题,提出了报文数据场的信号色块表示方法以及起始位转换公式。基于C#语言设计和开发了CAN网络数据管理软件,并将CAN网络协议以DBC数据管理文件输出。用实车试验验证了所提出DBC协议解析方法的有效性。
关键词: CAN网络    DBC    数据管理    正则表达式    多叉树    
A regular-expression and multi-tree based DBC network protocol analysis method
SUN Han 1a,1b, YANG Yalian 1a,1b, ZHOU Lin 2, ZHANG Xin 3     
1a. College of Mechanical and Vehicle Engineering, Chongqing University, Chongqing 400044, P. R. China;
1b. State Key Laboratory of Mechanical Transmissions, Chongqing University, Chongqing 400044, P. R. China;
2. Jinkang Seres New Energy Automobile Design Institute, Chongqing 401120, P. R. China;
3. JMC Heavy Duty Vehicle Co., Ltd., Taiyuan 030032, P. R. China
Abstract: To solve the problem of DBC (Database CAN) protocol data analysis and structure characterization in the CAN network, in this paper, the DBC file protocol is analyzed through regular expressions, and the CAN network protocol is characterized by using the multi-tree structure. To solve the protocol analysis problem in different formats of Intel and Motorola, an expression method of signal color blocks in the data field of messages and a start bit conversion formula are proposed. The CAN network data management software is designed and developed based on the C# language, and the CAN network protocol is output as a DBC data management file. An actual vehicle test is conducted, which verifies the validity of the DBC protocol analysis method proposed in this paper.
Keywords: CAN network    DBC    data management    regular expression    multi-tree    

CAN网络在发展的过程中衍生出了多种应用层协议,包括CANopen、J1939、DeviceNet,目前分别由美国ODVA协会、SAE协会和欧洲CiA协会管理。其中CANopen协议的核心内容是对象字典,它是一个有序的对象组,定义一个设备的所有信息[1],并记录在EDS或DCF电子文档中,但是对于那些有很多对象,特别是很多数组的设备,EDS文档将会变得很大,对嵌入式系统的存储器是一个挑战;J1939协议主要适用那些以柴油为动力的卡车、公共汽车以及非陆地的交通工具;DeviceNet协议更多是应用在工业设备上。在之前的研究中,也有采用XML作为CAN网络协议的描述文件[2],这种方法是将协议内容录入到XML文件中,利用了XML格式解析的方便性,但是并没有根本解决工作量大且录入容易出错的问题。

DBC数据文件由德国Vector公司发布,它是一种汽车CAN网络协议描述文件,里面大量的字符映射了各逻辑节点信息及相互之间的通信规则。相较于Excel、Word版的CAN协议描述文件,DBC文件格式结构清楚、设计方便,已经成为CAN通信行业的标准,被CANoe、Matlab、Labview、INCA等软件和平台广泛采用。

基于DBC文件可以进一步开发出CAN网络仿真工具软件,用来监视和分析CAN网络中所有逻辑节点的参数和状态[3]。CANoe是具有代表性的工具软件之一,它需要借助DBC数据文件来对CAN网络上的报文帧进行解析[4]。基于CANoe平台,DBC文件被应用到很多具体的场景中:车身控制器局域网络仿真[5]、基于CAN的故障诊断系统[6-7]、汽车动力总成的试验台架测试[8]、汽车电子ECU控制器开发,还被应用于Simulink和CANoe联合仿真[9]以对混合动力汽车的通信和控制策略进行验证[10-13],同时在整车ECU和网关等软硬件的开发和测试[14]中也得到了应用。

基于CAN网络数据管理的需要,并针对上述CAN网络协议描述方式存在的弊端,笔者基于DBC文件规范,设计了协议解析的正则表达式,根据CAN网络协议信息的结构关系,利用多叉树对该网络协议进行表征,针对Intel和Motorola不同格式下的协议解析问题,提出了报文数据场的信号色块表示方法和起始位转换公式,并基于C#语言设计和开发了DBC数据管理软件,将CAN网络协议描述为一个dbc格式的文件。实车试验表明:所设计开发的DBC数据管理软件实现了CAN网络的协议解析、结构表征和数据管理,进一步验证了所提出DBC解析方法的有效性。

1 DBC文件规范

根据《DBC File Format Document》规范,DBC协议定义了网络节点、报文帧、信号(图 1,其中“ ”符号表示一个空格符),它们对CAN网络的结构信息和属性信息进行了描述。

图 1 DBC示例文件局部结构 Fig. 1 Part of a DBC sample file
1.1 结构信息

图中以“BU_”开头的行定义了节点信息,包括Engine、Display、Light 3个节点;以“BO_”开头的行定义了报文信息,包括EngineState、LightState2条报文;每条报文下又定义了所包含的信号信息,以“SG_”开头,例如,EngineState报文下定义了EngineSpeed和OnOff 2条信号。

1.2 属性信息

BO_ MessageId(10进制数表示) MessageName: MessageSize Transmitter为报文的格式模板,依据该模板,图中BO_ 100 EngineState: 3 Engine就可以解析成一条由Engine节点发送,数据域长度为3字节,ID为100(0x64),名字为EngineState的报文。同样,信号按照该规范对其属性进行了描述。

因此依据上述DBC文件规范可以通过适当的解析方法让计算机快速对CAN协议进行解析。

2 DBC文件的正则表达式解析

DBC文件含有“@”“(”“)”“|”“[”“]”、空格等多种字符信息,并且内容信息不固定,不存在通用的解析技术,需要进行专门的解析方法设计。考虑到正则表达式在字符串信息匹配方面的方便性,基于DBC文件规范,设计了DBC文件中CAN协议节点Node、报文Message、信号Signal对应的正则表达式,分别为regex1、regex2、regex3。

Regex regex1 = new Regex(" BU_: \\\\s+([\\\\w+\\\\s+]+)");

Regex regex2 = new Regex(" (BO_\\\\s*)(\\\\d+)(\\\\s*)(\\\\w+)(: )(\\\\s*)(\\\\d+)(\\\\s*)(\\\\w+)$");

Regex regex3 = new Regex("SG_\\\\s*(\\\\w+\\\\s*\\\\w*)\\\\s*: \\\\s*(\\\\d+)\\\\|(\\\\d+)@([10])([+-])\\\\s*\\\\((-*\\\\d*\\\\.*\\\\d*), (-*\\\\d*\\\\.*\\\\d*)\\\\)\\\\s*\\\\[(-*\\\\d*\\\\.*\\\\d*)\\\\|(-*\\\\d*\\\\.*\\\\d*)\\\\]\\\\s*\\"(.*)[?\\"]\\\\s+([\\\\w+, *]+)$")。

利用regex1、regex2、regex3对DBC文件中每行信息进行匹配,判断该行信息描述的是节点、报文还是信号等,利用字符分割技术获取其中描述的具体属性值,从而创建CAN网络中对应的节点、报文、信号等实例对象,并建立起各对象之间的结构关系。为了方便计算机对CAN网络进行描述,通过多叉树[15]对其进行结构表征,最终得到如图 2所示的多叉树结构模型。

图 2 多叉树结构模型图 Fig. 2 Diagram of multi-tree structure model

该模型描述了一个完整的CAN网络工程,其中包括若干个节点(Node1、Node2、Node3等),每个节点可以发送若干报文,每条报文由若干信号组成。

3 DBC数据管理软件开发

DBC数据管理软件的目的是对CAN网络进行管理,并将CAN网络协议以DBC数据管理文件的形式输出。通过可视化窗体设计和交互式操作可以直观地对DBC文件进行创建、修改和编辑。考虑到C#运行在.NET框架之下,开发出来的程序可以直接在Windows系统下使用,因此基于C#语言进行DBC数据管理软件的开发。

3.1 主界面和功能的开发

窗体DBCViewer作为主界面(图 3),左侧的TreeView树控件展示了CAN网络的结构关系,通过如下代码为TreeView添加了点击和拖拽事件监听的响应函数:

图 3 主功能界面 Fig. 3 Main function interface

this.dbcTreeView.ItemDrag += new ItemDragEventHandler(this.DbcTreeView_ItemDrag);

this.dbcTreeView.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.DbcTreeView_NodeMouseClick);

this.dbcTreeView.DragDrop += new DragEventHandler(this.DbcTreeView_DragDrop);

this.dbcTreeView.DragEnter += new DragEventHandler(this.DbcTreeView_DragEnter)。

TreeView的拖拽事件用于建立CAN网络的结构关系,具体分为图中①②③3种情况:

① Signals树节点下的信号拖拽到Messages树节点下的报文中,确定该报文下的信号;

② Messages树节点下的报文拖拽到TxMessages树节点下,确定该报文的发送节点;

③ Signals树节点下的信号拖拽到对应Node的RxSignals树节点下,确定该信号的接收节点。

3.2 编辑功能开发

通过SignalWindow、MessageWindow、NodeWindow窗体实现Signal、Message、Node对象的创建和修改。图 4通过设置标签的BackColor形成连续色块来模拟连续的信号占位,当左侧表格中信号的起始位变化时,根据Intel和Motorola的格式,整个数据场将自动调整色块布局。具体的调整程序如图 5所示。

图 4 报文数据场的信号布局界面 Fig. 4 Signal layout interface of the message data field
图 5 报文数据场的色块布局调整程序 Fig. 5 Color block layout adjustment program of the message data field

通过上述程序和取余算法,实现了报文数据场的色块布局调整,保证不同信号使用不同的颜色标记,相邻信号之间不会干扰。

3.3 Motorola格式下的起始位转换

DBC文件中信号矩阵的编码格式分为Intel和Motorola两种。一般情况下,将CAN报文抽象成8×8的数据场(图 6),每行表示一个字节的8个位,从右到左依次是bit0,bit1,…,bit7,左边代表高位;从上到下依次是byte0,byte1…byte7,下边代表高字节。根据CAN报文的发送规则,通常情况下,先发送低位字节LSB,后发送高位字节MSB;而单个字节则是先传输高位msb,后传输低位lsb。如图 6所示,左边采用Intel编码格式,右边采用Motorola编码格式,通过比较和分析总结出:

图 6 跨字节时Intel和Motorola格式的布局对比 Fig. 6 Comparison of the layouts of Intel and Motorola formats when crossing bytes

1) 数据场中,单个信号的起始位均为最低位(即lsb);

2) 数据场中,单个信号的水平填充方向均是从右至左(即lsb至msb的方向);

3) 数据场中,当跨字节时,Intel是自上而下填充,Motorola是自下而上填充;

4) Motorola格式下,DBC文件中信号的起始位与数据场中的起始位不同,是数据场中信号的最高位msb,即大端方式,因此在对DBC文件进行解析和保存时须进行起始位转换。

在进行程序的开发过程中,针对Motorola格式进行特殊处理,其中解析DBC文件时按照式(1)计算,保存DBC文件时按照式(2)计算。式(1)(2)中“/”表示取商运算符,“%”表示取余运算符,length表示信号的长度,lsb表示信号的最低位,等于数据场中的起始位,msb表示信号的最高位,等于文件中的起始位。

$\left\{ \begin{array}{l} 1{\rm{sb}} = {\rm{msb}} - {\rm{ length }} + 1, ({\rm{ length }} \leqslant {\mathop{\rm msb}\nolimits} \% 8 + 1);\\ 1{\rm{sb}} = 16\{ [{\rm{ length }} - {\rm{msb}}\% 8 + 6]/8\} + {\rm{msb}} - {\rm{ length }} + 1, ({\rm{ length }} > {\rm{msb}}\% 8 + 1){\rm{。}} \end{array} \right.$ (1)
$\left\{ \begin{array}{l} {\rm{msb}} = 1{\rm{sb}} + {\rm{ length }} - 1, ({\rm{ length }}\leqslant 8 - 1{\rm{sb}}\% 8);\\ {\rm{msb}} = 1{\rm{sb}} + {\rm{ length }} - 1 - 16\{ [{\rm{ length }} + 1{\rm{sb}}\% 8 - 7]/8\} , ({\rm{ length }} > 8 - 1{\rm{sb}}\% 8){\rm{。}} \end{array} \right.$ (2)

在Intel格式下,DBC文件中信号的起始位就代表信号的最低位,即小端方式,故不存在转换的问题。

3.4 DBC文件输出

以装车发动机的CAN通信矩阵为例,将汽车CAN网络协议描述为一个具体的DBC文件。如图 7(a)所示,共创建了HCU_EMS、EMS 2个节点,EMS_205、EMS_245、EMS_255、EMS_265、EMS_275、EMS_355 6条报文,71个信号。通过TreeView树节点拖拽,将Node、Message、Signal之间关联起来。以EMS_255报文为例,该报文中添加了EMS_RollingCount_id255、EMS_EngineIntakeAirTemp等16个信号,在MessageWindow窗体的布局中,调整每个信号的起始位来对报文数据场中的信号进行布局排列,调整之后的信号颜色块分布情况如图 7(b)所示。

图 7 DBC文件制定 Fig. 7 DBC file production

通过上述Node、Message、Signal的创建和关联操作之后,后台程序将这些信息自动同步到CAN网络的多叉树结构中。当点击“文件”-“保存”后,程序依据多叉树的广度搜索算法和深度搜索算法对多叉树结构进行遍历,按照DBC文件规范将CAN网络协议信息写入到can_engine.dbc文件(图 7(c))。

4 实车试验

为验证DBC协议解析方法的有效性,首先对DBC数据管理软件输出的can_engine.dbc文件信息进行验证:1)将文件信息与软件解析界面信息进行比较,相当于图 7(c)图 7(a)7(b)中的信息进行比较,发现DBC协议属性信息和结构信息均一致,并且Intel和Motorola格式下的起始位实现了正确转换;2)根据装车发动机的CAN通信矩阵,利用CANoe输出can_engine_canoe.dbc文件,并与can_engine.dbc文件比对,节点、报文、信号等信息均一致。初步表明了所提出的正则表达式解析、多叉树结构表征、报文数据场信号色块表示方法和不同格式下起始位转换公式的正确性。

然后将can_engine.dbc在某乘用车上进行了实车试验,同时基于can_engine_canoe.dbc进行对比,通过汽车CAN总线上报文采集和解析结果对比进一步验证。实车CAN网络自带报文信息,而且报文数据和种类较多,与仿真环境相比提供了更可靠准确的报文来源。

将USBCAN-Ⅱ C和Vector硬件设备同时连接到汽车OBD接口,电脑打开对应设备的软件,配置好通道和参数。在试验环境准备好之后,驾驶车辆在重庆大学A区校园内(图 8)行驶,副驾驶进行汽车CAN报文的采集工作(图 9)。根据采集到的数据报文ID(图 10,此处为USBCAN-Ⅱ C设备采集到的部分数据截图)发现,除了发动机的CAN报文外,还包括其他节点发送的报文ID。

图 8 汽车驾驶路段 Fig. 8 Car driving section
图 9 汽车CAN报文采集 Fig. 9 Car CAN message collection
图 10 采集到的报文数据 Fig. 10 Collected message data

最后通过can_engine.dbc文件对采集的报文进行解析,其中发动机转速位于ID为0x255的报文下,采用Motorola编码格式,起始位为24,长度为16,Factor因子为0.25,Offset偏移量为0;车速信号位于ID为0x265的报文下,采用Motorola编码格式,起始位为16,长度为13,Factor因子为0.05625,Offset偏移量为0。另外也通过can_engine_canoe.dbc文件对Vector硬件设备采集到的数据进行解析。rpm、v为本文所开发软件生成can_engine.dbc文件解析后的转速和车速;rpm′、v′为采用CANoe工具软件生成的can_engine_canoe.dbc文件解析后的转速和车速,对全试验过程结果分别求取方差,结果如下:

$\sum\limits_{i = 1}^{33\;500} {{{\left( {{\rm{rp}}{{\rm{m}}_i} - {\rm{rpm}}_i^\prime } \right)}^2}} = 0, $ (3)
$\sum\limits_{i = 1}^{33\;500} {{{\left( {{\rm{rp}}{{\rm{m}}_i} - {\rm{rpm}}_i^\prime } \right)}^2}} = 0{\rm{。}}$ (4)

计算结果均为0,说明两种方式解析后的车速和发动机转速真实值是一致的;两种方式解析之后对应的曲线如图 1112所示。试验结果证明了本软件所制定的DBC文件能够正确解析汽车CAN报文。

图 11 解析后的发动机转速曲线对比 Fig. 11 Analyzed engine speed curve comparison
图 12 解析后的车速曲线对比 Fig. 12 Analyzed vehicle speed curve comparison

XML的解析方式首先将DBC格式的协议文件人工转换为XML格式的文件,然后计算机通过XML格式来识别和解析CAN网络协议。本研究中利用正则表达式来直接解析原DBC文件协议,利用多叉树的结构表征DBC协议,通过减少操作步骤,显著提高了DBC数据管理的效率,并且上述的试验结果证明了所提出方法的有效性。

5 结论

1) 通过分析DBC文件规范,总结出Intel、Motorola编码格式下CAN报文的布局规律并推导出Motorola格式下起始位转换公式,进一步设计和开发出DBC数据管理软件;该软件能够以可视化窗口的交互方式创建和修改DBC文件。

2) 通过正则表达式的设计实现了对已有DBC文件的解析,提出的CAN网络多叉树结构模型能够对CAN网络信息进行统一管理。

3) 通过实车试验,所开发软件根据汽车CAN通信矩阵制定出来的DBC文件与CANoe生成的DBC文件进行汽车CAN报文的对比试验解析,两者结果一致,验证了所开发软件的实用性。

参考文献
[1]
孔峰, 张衡, 宋雪桦, 等. 基于CANopen协议的汽车控制网络初探[J]. 汽车工程, 2007, 29(7): 594-596, 605.
Kong F, Zhang H, Song X H, et al. A preliminary investigation into vehicle control network based on CANopen protocol[J]. Automotive Engineering, 2007, 29(7): 594-596, 605. (in Chinese) DOI:10.3321/j.issn:1000-680X.2007.07.013
[2]
黄赛杰, 徐敏, 郑小鹿, 等. 动力电池充放电检测系统的设计与实现[J]. 储能科学与技术, 2019, 8(1): 146-154.
Huang S J, Xu M, Zheng X L, et al. Design and implementation of power battery charging and discharging detection system[J]. Energy Storage Science and Technology, 2019, 8(1): 146-154. (in Chinese)
[3]
Cai Q J, Xu Y, Fu J K, et al. Study on development and testing of vehicle CAN network platform based on CANoe[J]. Applied Mechanics and Materials, 2014, 687/688/689/690/691: 56-59.
[4]
杨璐激, 陈立涛, 吕妮娜. 基于CAN总线的整车电子电气架构的研究[C]//2015中国汽车工程学会年会论文集. 上海: 中国汽车工程学会, 2015: 280-283.
Yang L J, Chen L T, Lv N N. Research on vehicle electronic and electrical architecture based on CAN bus[C]//Proceedings of 2015 annual meeting of China Society of Automotive Engineering. Shanghai: China Society of Automotive Engineering, 2015: 280-283. (in Chinese)
[5]
张新波, 孙泽昌, 罗峰. 使用CANoe对车身控制器局域网络仿真的研究[J]. 江苏大学学报(自然科学版), 2003, 24(5): 36-39.
Zhang X B, Sun Z C, Luo F. Study on CAN body network simulation with CANoe[J]. Journal of Jiangsu University (National Science Edition), 2003, 24(5): 36-39. (in Chinese) DOI:10.3969/j.issn.1671-7775.2003.05.009
[6]
丁志华, 罗峰, 孙泽昌. 基于CANoe的汽车故障诊断系统研制[J]. 汽车工程, 2007, 29(5): 449-452.
Ding Z H, Luo F, Sun Z C. Development of vehicle fault diagnostic system based on CANoe[J]. Automotive Engineering, 2007, 29(5): 449-452. (in Chinese) DOI:10.3321/j.issn:1000-680X.2007.05.020
[7]
Li L J, Ye H J, Gao S. Development of instrument cluster simulation system based on canoe[J]. Advanced Materials Research, 2012, 490/491/492/493/494/495: 1198-1201.
[8]
陈燕平, 殷承良, 张勇. 混合动力大客车动力总成试验台架的构建及试验研究[J]. 汽车工程, 2011, 33(6): 468-471.
Chen Y P, Yin C L, Zhang Y. Construction and experimental study of test bench for the powertrain assembly of a hybrid electric bus[J]. Automotive Engineering, 2011, 33(6): 468-471. (in Chinese)
[9]
Zhang X B, Xu L F, Li J Q, et al. Real-time estimation of vehicle mass and road grade based on multi-sensor data fusion[C]// 2013 IEEE Vehicle Power and Propulsion Conference (VPPC), October 15-18, 2013, Beijing, China. IEEE, 2013: 1-7.
[10]
Han J, Liu Z, Cui S, et al. A study on the application of the controller area network communication protocol to hybrid electric vehicle[J]. Automotive Engineering, 2011, 33(12): 1062-982.
[11]
Sharma D, Gupta M. Controller area network for automobile application using ASIC based on PsoC and analysin g through vector CANoe[J]. International Journal of Innovative Technology and Exploring Engineering (IJITEE), 2013, 2(5): 287-292.
[12]
Peng J K, Fan H, He H W, et al. A rule-based energy management strategy for a plug-in hybrid school bus based on a controller area network bus[J]. Energies, 2015, 8(6): 5122-5142. DOI:10.3390/en8065122
[13]
Yi L, He H W, Peng J K. Hardware-in-loop simulation for the energy management system development of a plug-in hybrid electric bus[J]. Energy Procedia, 2016, 88: 950-956. DOI:10.1016/j.egypro.2016.06.118
[14]
魏学哲, 戴海峰, 孙泽昌. 汽车嵌入式系统开发方法、体系架构和流程[J]. 同济大学学报(自然科学版), 2012, 40(7): 1064-1070.
Wei X Z, Dai H F, Sun Z C. Methodology, architecture and development flow of automotive embedded systems[J]. Journal of Tongji University (Natural Science), 2012, 40(7): 1064-1070. (in Chinese) DOI:10.3969/j.issn.0253-374x.2012.07.018
[15]
Zhang L M, Yang F, Lei Y. Tree-based intermittent connection fault diagnosis for controller area network[J]. IEEE Transactions on Vehicular Technology, 2019, 68(9): 9151-9161. DOI:10.1109/TVT.2019.2929419