派克资源网 - 每天进步一点点
每天发现一点点!
  • 原因大全
  • 十万个为什么
  • 方法百科
  • 知识百科
  • 一站到底
  • 最强大脑
  • 基于正则表达式与多叉树的DBC网络协议解析方法

    分类:方法百科 时间:2023-02-17 16:30:09 本文已影响

    孙 汉,杨亚联,周 林,张 昕

    (1. 重庆大学 a. 机械与运载工程学院; b. 机械传动国家重点实验室, 重庆 400044;
    2. 金康赛力斯新能源汽车设计院,重庆 401120;
    3. 江铃重型汽车有限公司,太原 030032)

    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.1 结构信息

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

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

    1.2 属性信息

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

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

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

    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等),每个节点可以发送若干报文,每条报文由若干信号组成。

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

    3.1 主界面和功能的开发

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

    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)。

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

    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表示信号的最高位,等于文件中的起始位。

    (1)

    (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))。

    为验证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文件解析后的转速和车速,对全试验过程结果分别求取方差,结果如下:

    (3)

    (4)

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

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

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

    图12 解析后的车速曲线对比Fig. 12 Analyzed vehicle speed curve comparison

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

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

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

    猜你喜欢 报文数据管理节点 基于J1939 协议多包报文的时序研究及应用汽车电器(2022年9期)2022-11-07以太网QoS技术研究及实践电子技术与软件工程(2022年11期)2022-09-09基于RSSI测距的最大似然估计的节点定位算法导航定位学报(2022年4期)2022-08-15企业级BOM数据管理概要汽车实用技术(2022年10期)2022-06-09定制化汽车制造的数据管理分析汽车实用技术(2022年5期)2022-04-02避免饥饿的CAN 总线高优先级反转算法软件导刊(2022年3期)2022-03-25分区域的树型多链的无线传感器网络路由算法现代电子技术(2022年4期)2022-02-21航发叶片工艺文件数据管理技术研究智能制造(2021年4期)2021-11-04一种基于能量和区域密度的LEACH算法的改进智能计算机与应用(2021年4期)2021-06-05基于报文类型的限速值动态调整科学家(2021年24期)2021-04-25

    推荐访问:解析 协议 方法

    基于正则表达式与多叉树的DBC网络协议解析方法相关文章