基于FlatBuffers的机车通信数据序列化方法应用研究

2022-03-17 07:57杜海宾陈广泰
铁道运输与经济 2022年3期
关键词:序列化二进制原始数据

杜海宾,姜 正,于 健,陈广泰,陈 雪

(中国中车股份有限公司 中车大连机车研究所有限公司,辽宁 大连 116000)

0 引言

随着我国经济不断发展和行业内互连互通程度的加深,作为经济发展必要助推剂的轨道交通行业也得到了迅速发展。铁路机车作为轨道交通的重要组成部分,其车载系统、车载设备、监控装置等装备的信息化程度得到不断提升,这些系统和设备相互之间的通信数据量也越来越庞大。在既有通信模式下,如何更加简便、易懂、高效、快速地进行大数据序列化处理已成为提高设备通信交互水平、增强数据峰值应对能力的关键因素。

当前铁路机车的系统与系统之间、系统与设备之间、设备与设备之间进行通信交互时,数据处理的序列化方式多采用二进制协议方式或文本传输协议方式。随着机车系统种类的增加和设备数量的增大,设备间的互联互通产生了更加庞大的交互数据信息量,这使得常用的2种序列化处理方式在数据序列化能力、数据可读性、平台兼容性、维护扩展能力等方面显得不足,如数据序列化占用资源多且时间长、数据协议繁多复杂且不通用、数据交互带宽需求高、较小的需求变更需要增加较大工作量等问题,间接地增加了人力、物力和时间成本消耗。

因此,在数据处理方面,追求更加便捷高效、跨平台、可读性强、扩展维护方便的通信数据序列化方式的需求日益强烈[1-2]。选用一种更为友好、高效、安全的数据序列化方式不仅能够将用户从通信数据结构和通信协议繁琐的应用工作中解脱出来,而且能够增加通信交互效率、减小通信总线占用压力,达到事半功倍的效果[3-5]。基于FlatBuffers的数据序列化技术以其更高效的数据处理速率与效率、更友好的接口封装与调用、更便捷的数据移植与扩展、更可靠的信息安全管理与保障等优势逐渐得到人们的更多关注。

1 FlatBuffers数据序列化技术优势分析

数据序列化技术是指将数据以特定方式转换成可以存储或传输的数据信息的过程,一般涵盖数据结构组织、通信协议制定、数据序列化打包编码和数据反序列化拆包解码等多个数据处理环节。基于FlatBuffers的数据序列化技术相对于常用的数据序列化技术,如二进制序列化技术、文本序列化技术等具有明显的优势。

1.1 常用数据序列化技术分析

二进制序列化技术对数据内容不做特殊处理,发送端仅按照约定的数据结构、通信协议组织数据信息的缓存、读取、打包、编码,并以原始二进制数据流的形式通过通信介质进行传输;接收端依据与发送端相同的数据结构、通信协议读取缓存区中收到的数据并拆包、解码后还原原始数据信息,二进制序列化数据流程如图1所示。这种序列化方式具有内存空间占用小、加密校验灵活的优点,但其可读性差、非跨平台、扩展维护性差等[6]方面的缺点给用户带来繁重的工作负担。其中,可读性差表现为数据信息必须参照详细的数据结构和通信协议才能准确解读;非跨平台表现为不同硬件平台和系统环境在机器字节序与对齐方式上的差异将导致数据信息无法正确解析;扩展维护性差表现为除数据以追加处理方式外,任何数据结构和通信协议的变更将导致原有数据处理方式无法继续使用。

图1 二进制序列化数据流程Fig.1 Data processing flow of binary serialization

文本序列化技术是在二进制序列化技术基础上以一种更加友好的、可读性的数据协议方式组织封装数据的序列化技术,目前使用最为广泛的文本序列化技术有Json,Xml和Yaml[7-8]。文本序列化数据流程如图2所示。这种方式的优缺点同二进制序列化方式的优缺点相反,它具有可读性强、跨平台、跨语言、易扩展等优点,但存在内存和传输带宽占用高等不足[9-10]。

图2 文本序列化数据流程Fig.2 Data processing flow of textual serialization

1.2 FlatBuffers数据序列化技术优势

FlatBuffers数据序列化技术是以类库方式开源发布的一种高性能、跨平台、高安全、多语言支持的新一代数据序列化技术,满足了数据处理在实时性、高频交互、大数据量等多个方面的苛刻要求。

FlatBuffers数据序列化技术在融合二进制序列化技术和文本序列化技术优点的基础上,提供了更友好、完善的接口封装数据处理服务,以更加高效、便捷、安全的方式将用户从数据结构组织、通信协议制定等环节解放出来。FlatBuffers数据序列化流程如图3所示。

图3 Flatbuffers数据序列化流程Fig.3 Data processing flow of Flatbuffers-based serialization

FlatBuffers数据序列化技术具有以下特点。 ①自动数据序列化。用户只需组织数据结构,调用FlatBuffers标准接口即可自动完成数据序列化,从而避免了繁琐的通信协议制定、数据打包与拷贝、数据拆包与解码等过程。②高效性。开源类库接口提供更少环节、更加高效的数据编码和解码过程。③高扩展与灵活性。支持可选字段功能,为数据结构与通信协议的增删改预留弹性空间。 ④跨平台。支持包括Windows,Linux在内的多种系统与多种数据宽度位数的硬件平台,具有良好的编译器兼容特性。⑤易于理解。面向用户的数据是以原始数据结构形式展现的(如struct,enum等),用户不需要额外的协议文档就能直观地获取数据字段含义。⑥最小代码依赖。仅需要少量的自动生成代码文件依赖,方便软件系统集成和应用调用。

1.3 FlatBuffers数据序列化技术原理

FlatBuffers数据序列化技术通过3步实现。

(1)构建编译器。Flatbuffers提供了独特的编译工具flatc,它能将指定的数据结构文件转换为用户应用开发调用的目标接口头文件。flatc面向除C语言外的所有语言(Flatbuffers为C语言提供了专用的flatcc)。①确保机车设备的运行环境或者其宿主设备的开发环境中已经安装CMake工具,用以构建Flatbuffers的编译规则文件。②在机车设备环境指定的Flatbuffers工程根目录下,依次执行make和make install命令以完成flatc编译器工具的编译和安装工作。③通过输入命令flatc --version查看并确认编译器编译工具是否安装成功。

(2)编译接口文件。schema文件(IDL文件)为原始数据结构的组织文件,需要依据具体业务需要进行组织编写。编写schema文件需要遵循一定的变量类型与语法要求(同C++/C语言类似),最终以“.fbs”的后缀形式保存。在当前系统环境下使用flatc编译工具编译schema文件,编译器将自动生成指定目标语言的含有丰富序列化接口函数的头文件,如自动生成C++使用的头文件fb_api.hpp。

(3)接口调用。将生成的接口头文件(如fb_api.hpp)提供给数据发送端和数据接收端以便于接口调用。①数据发送端实例化一个flatbuffers:: FlatBufferBuilder类,使用该类的实例调用指定头文件(如fb_api.hpp)中提供的对应数据结构转换接口函数,即可完成自动编码并获取原始数据结构二进制数据流。②数据接收端实例化一个flatbuffers::FlatBufferBuilder类,使用该类的实例调用指定头文件(如fb_api.hpp)中提供的对应数据结构转换接口函数,以解码反序列化接收的数据流,函数自动解析并返回发送端的原始数据结构体。

2 基于FlatBuffers的HXD2机车数据序列化应用研究

通过对FlatBuffers数据序列化技术优势分析,其更适合应用于HXD2机车辅助驾驶系统(ATO)与列车控制管理系统(TCMS)及制动控制单元(BCU)等机车主控系统间的通信交互中。ATO依据机车牵引与制动特性,基于列车运行线路数据、机车信号状态、列车编组、运行揭示等信息,结合运行时间和速度限制要求,在线规划最优列车运行速度及牵引制动状态,实时控制列车按照规划速度曲线运行。该系统需要依据多种机车数据处理复杂的业务场景,系统各设备间数据通信交互频繁,对通信数据的处理效率、通信响应时延、通信数据安全、运用扩展维护等多个方面有着更高的要求,而基于FlatBuffers的数据序列化技术更为贴合该系统的通信数据处理需求。

2.1 应用场景分析

TCMS作为机车网络设备的主控系统,主要实现对整车关键设备的运行控制、运行监测、数据处理等;BCU是控制列车空气制动的主控单元,主要实现对列车自阀、单阀的空气制动施加、缓解、自监测等。外部设备如果需要对机车网络系统、空气制动系统进行控制和监测均需要通过连接TCMS和BCU来间接实现,由于涉及列车运行安全、运行平稳、运行效能等因素,外部设备与TCMS和BCU通信的效率与时延成为一个重要的因素和衡量指标。

ATO与TCMS、BCU之间进行通信交互的数据主要分为3种:实时数据、消息数据和心跳校验数据。实时数据为表征当前设备或机车状态的数据,采用基于UDP的异步校验通信方式,实时数据发送不需要应答,以确保数据的高效高频通信;消息数据为表征操作动作的指令数据,采用基于TCP的同步校验通信方式,消息事件需要应答,以确保消息事件发送与接收的完整性和准确性;心跳校验数据采用基于TCP的异步通信方式,用于确保设备之间连接的有效性和合法性。设备之间通信数据信息如表1所示。

表1 设备之间通信数据信息Tab.1 Communication data between equipment

2.2 应用流程与调用流程

基于FlatBuffers技术特定的数据组织方式,借助其灵活的应用编译服务,用户能够简便快捷地获得通用编程语言接口文件,从而为应用软件编写提供更加高效、友好的标准化数据处理接口调用。

步骤1:依据具体业务场景,组织创建原始数据结构,并汇总形成schema数据文件。以TCMS发送至ATO的部分实时数据为例,原始数据结构与对应的schema数据结构如图4所示。

图4 原始数据结构与对应的schema数据结构Fig.4 Original data structure and corresponding schema data structure

步骤2:编译schema文件,自动生成数据序列化与反序列化接口C++头文件。

步骤3:ATO应用软件引用接口C++头文件,依照原始数据结构组织数据。调用数据序列化接口函数实现预发送数据的自动序列化,调用数据反序列化接口函数实现接收数据自动反序列化。

步骤4:TCMS应用软件引用接口C++头文件,依照原始数据结构组织数据。调用数据反序列化接口函数实现接收数据自动反序列化;调用数据序列化接口函数实现预发送数据的自动序列化。

步骤5:BCU应用软件引用接口C++头文件,依照原始数据结构组织数据,调用方法与TCMS应用软件的处理方式相同。

ATO与TCMS、ATO与BCU间应用调用流程如图5所示。①ATO与TCMS通信交互调用。ATO作为TCP/UDP通信交互的客户端,TCMS作为服务器端。②ATO与BCU通信交互调用。ATO作为TCP/UDP通信交互的客户端,BCU作为服务器端。

图5 ATO与TCMS、ATO与BCU应用调用流程图Fig.5 Flow charts for application calls of ATO with TCMS and BCU

2.3 性能分析

基于相同硬件平台(相同ATO,TCMS和BCU硬件设备)、相同网络环境(同一带宽的局域网内)、相同通信交互方式(均为TCP通信),将FlatBuffers数据序列化方式与二进制序列化方式、文本序列化方式在数据序列化响应延迟和数据序列化处理效率2个方面进行性能对比。

(1)数据序列化响应延迟体现了单位时间内数据处理量的变化对数据序列化处理时间的总体变化趋势情况,数据序列化响应延迟对比示意图如图6所示。

图6 数据序列化响应延迟对比示意图Fig.6 Time delay comparison of data serialization in different ways

式中:T数据序列化时延表示进行数据序列化的时延,μs;T3为预传输数据序列化的完成时刻;T2为预传输数据开始序列化的时刻。

式中:T数据反序列化时延表示进行数据反序列化的时延,μs;T7为预接收数据开始反序列化的时刻;T8为接收数据反序列化接收完成时刻。

由图6可知,随着不同设备之间通信交互数据量的增加,基于FlatBuffers序列化技术的数据通信响应延迟基本保持不变;同时,与使用基于二进制序列化方式和基于Json的文本序列化方式的通信响应延迟相比,基于FlatBuffers序列化技术的数据通信时延更低,更加符合机车外部设备与TCMS和BCU通信时对于通信稳定性和低通信时延的要求。

(2)数据序列化处理效率体现在数据处理量的变化所带来的总的数据处理时间的变化趋势上,对比Flatbuffers序列化处理方式、二进制序列化处理方式及文本序列化处理方式,数据序列化处理效率对比示意图如图7所示。

由图7可知,相同通信时间内,相比基于二进制序列化方式和基于Json的文本序列化方式,使用FlatBuffers序列化技术方式,在TCMS或BCU端所接收处理的原始数据量最大,即具有更高的通信效率。因此,FlatBuffers序列化技术更加符合机车外部设备与TCMS或BCU通信时对于高通信效率的要求。

图7 数据序列化处理效率对比示意图Fig.7 Efficiency comparison of data serialization in different ways

经过以上通信性能对比分析,应用FlatBuffers数据序列化技术后,HXD2机车ATO与TCMS和ATO与BCU之间的通信交互在数据序列化方面的综合性能得到一定的提升,提升效果为:响应延迟率平均降低3%,处理效率平均提升5%。

此外,为了对比分析FlatBuffers技术在数据序列化中其他方面的性能,以64位Windows7环境作为共同的测试平台,以10个数值字段变量(1个struct、4个string或char数组、若干int/float标量数据)组成的数据流作为共同的处理对象分别进行测试,相应基准测试Benchmark对比如表2所示。由表2可知,FlatBuffers数据序列化技术方式较二进制序列化方式、文本序列化技术方式等在跨平台、可读性、可维护性、便捷性、安全性、异常处理等多个方面均占有优势。

表2 基准测试Benchmark对比Tab.2 Benchmark for performance comparison

3 结束语

作为提升数据处理速率和提高通信交互效率的一种数据应用技术,数据序列化技术一直受到技术人员的高度重视,而FlatBuffers数据序列化技术作为开源的前沿技术,以其更加高效、灵活、友好、安全的特性获得了越来越多的认可。通过共用平台环境下的数据处理能力对比分析,以及在通信实时性要求较高的实际项目中的应用验证可以得出,FlatBuffers数据序列化技术较现行使用较为广泛的技术具有更加突出的性能及功能优势,在铁路机车上的应用与推广能够促进轨道交通的互联互通,并对提升铁路运用智能化、信息化、规范化水平起到了良好的推动作用。

猜你喜欢
序列化二进制原始数据
Java Web反序列化网络安全漏洞分析
用二进制解一道高中数学联赛数论题
受特定变化趋势限制的传感器数据处理方法研究
如何建构序列化阅读教学
某物资管理调度系统的数据序列化技术
有趣的进度
全新Mentor DRS360 平台借助集中式原始数据融合及直接实时传感技术实现5 级自动驾驶
Java 反序列化漏洞研究
对物理实验测量仪器读数的思考
二进制宽带毫米波合成器设计与分析