一种任意二进制设备接入解析与标准化的系统及方法与流程

文档序号:16062665发布日期:2018-11-24 12:21阅读:161来源:国知局

本发明涉及一种数据解析系统及方法,尤其涉及一种适用于任意二进制设备接入的解析与标准化的系统及方法。

背景技术

物联网领域中存在大量应用于同一场景的不同厂商的设备,由于物联网行业发展速度快,应用范围广,很多领域没有标准的协议格式,这样同一个系统或平台对接不同厂商的设备时,甚至同一个系统或平台对接同一厂商不同时期的设备时,存在数据类型不一致、数据格式不一致的问题。

为了解决上述问题,目前采用的解决方法主要分为两种,一是在平台建设时仅对接一种或一类设备,多类设备对接需要不断地调整代码结构。二是采用类似googleprotobuffer类的描述协议,protocolbuffers是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化,适合做数据存储或rpc数据交换格式,可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。但是,googleprotobuffer在物联网领域应用时依然存在许多确问题。首先,googleprotobuffer是一种自定义协议,不能有效的描述已经定义好的协议格式,其次,googleprotobuffer不支持位操作和条件操作,也不支持标准化功能。

具体而言,物联网领域设备通信时,为了降低带宽要求很多时候都采用了定义bit位的方式来传输数据,有时还会采用了定义bit位的方式来定义条件,如果成立则读取后面的数据,否则没有该项数据,而googleprotobuffer主要是为了平台间通信设计的,没有对bit进行的操作,也不提供这样的条件操作。并且,googleprotobuffer只是一个协议定义与解析工具,不支持协议标准化功能。

对于数据类型不一致、数据格式不一致的二进制设备(使用二进制通讯的设备)接入同一平台,目前的接入方法均存在一定的局限性,不能支持任意二进制设备的接入,也不能对接入的设备进行标准化,便于平台读取。



技术实现要素:

本发明提供了一种任意二进制设备接入解析与标准化的系统及方法,旨在解决目前的接入方法存在局限性,不能支持任意二进制设备的接入,也不能对接入的设备进行标准化的问题。

为实现上述目的,本发明提供了一种任意二进制设备接入解析与标准化的系统,包括:

接入单元,读取接入的二进制设备的协议数据,通过预定义的消息分割规则完成二进制数据流的分割和转义,得到原始消息数据;

解析单元,接收原始消息数据,并根据预定的原始属性集定义把协议消息数据解析为原始属性集;

标准化单元,根据标准属性集定义,将原始属性集中的数据对应填充至标准属性集,完成标准属性集构造。

与现有技术相比,本发明公开的一种任意二进制设备接入解析与标准化的系统,通过接入单元对任意结构的二进制数据流进行分割和转义得到原始数据消息,解析单元将原始数据消息解析为原始属性集,标准化单元通过原始属性集生成标准化属性集,标准化属性集可以别第三方平台(也就背景技术中提到的,会接入多个设备的同一平台或系统)。本发明中的接入单元可以预定义消息分割规则,所述消息分割规则的定义是基于xml的二进制数据流协议规则定义,故而该系统支持位操作和条件操作。通过在接入单元中预定义消息分割规则,该系统可以对任意构造的二进制数据流进行分割和转义得到原始数据消息,通过在解析单元中预定义原始属性集定义,该系统可以将原始数据消息进行解析,至此,该系统实现了对任意二进制设备的接入解析,解决了目前在平台建设时仅对接一种或一类设备的局限。通过在标准化单元中根据第三方平台的要求预定义标准属性集,解析得到的原始属性集可映射得到标准属性集,便于第三方平台读取,解决了googleprotobuffer不支持协议标准化功能的问题。并且,由于消息分割规则,原始属性集定义,标准化属性集定义都是在该系统上配置的,而不需要二进制设备以数据流的方式发送协议规则,所接入的二进制设备仅仅发送数据内容即可,无需发送协议内容,实现了数据内容与协议规则分离,大大减小了二进制设备的传输压力。该发明通过接入单元与解析单元实现了任意二进制设备的接入与解析问题,通过标准化单元得到了可以供第三方平台读取的标准属性集,实现了任意二进制设备接入解析与标准化,解决了对于数据类型不一致、数据格式不一致的二进制设备接入同一平台,目前接入方法均存在一定局限的问题。

为实现上述目的,本发明提供了一种任意二进制设备接入解析与标准化的方法,其特征在于,包括以下步骤:

s1,对任意二进制设备接入解析系统进行规则预定义;

s2,接收接入的二进制设备发送的二进制数据流,并对接收到的二进制数据流进行分割和转义,得到原始消息数据;

s3,对原始消息数据进行解析,在预定义的原始属性中填入对应的属性值,得到原始属性集;

s4,在预定义的标准属性集中填入由原始属性集映射得到的属性值,构成标准属性集。

与现有技术相比,本发明公开的一种任意二进制设备接入解析与标准化的方法,通过规则预定义步骤在消息分割规则定义模块、原始属性定义模块及标准属性集定义模块中完成规则预定义。本发明中预定义的消息分割规则是基于xml的二进制数据流协议规则定义,故而该方法可以支持位操作和条件操作。由于预定义了消息分割规则,对任意结构的二进制数据流都可以根据预定义的规则进行分割和转义得到原始数据消息,由于预定义了原始属性集,原始数据消息可解析为原始属性集,至此,该系统实现了对任意二进制设备的接入解析,解决了目前在平台建设时仅对接一种或一类设备的局限。根据第三方平台的要求预定义标准属性集,解析得到的原始属性集可映射得到标准属性集,便于第三方平台读取,解决了googleprotobuffer不支持协议标准化功能的问题。并且,由于消息分割规则,原始属性集定义,标准化属性集定义都是在规则定义步骤(步骤s1)的,而不与协议数据传输一同完成,所接入的二进制设备仅仅发送数据内容即可,无需发送协议内容,实现了数据内容与协议规则分离,大大减小了二进制设备的传输压力。该发明通过预定义消息分割规则定义和原始属性定义,实现了任意二进制设备的接入与解析问题,通过预定义标准化属性集得到了可以供第三方平台读取的标准属性集,实现了任意二进制设备接入解析与标准化,解决了对于数据类型不一致、数据格式不一致的二进制设备接入同一平台,目前的接入方法均存在一定局限的问题。

附图说明

图1是一种任意二进制设备接入解析与标准化的系统的结构框图;

图2是一种任意二进制设备接入解析与标准化的方法的流程图;

图3是一种任意二进制设备接入解析与标准化的方法的步骤s1的流程图;

图4是一种任意二进制设备接入解析与标准化的方法的步骤s2的流程图;

图5是一种任意二进制设备接入解析与标准化的方法的步骤s3的流程图;

图6是一种任意二进制设备接入解析与标准化的方法的步骤s4的流程图;

图7是一种任意二进制设备接入解析与标准化的方法一个实施例的流程图。

具体实施方式

如图1所示,一种任意二进制设备接入解析与标准化的系统,包括:接入单元,读取接入的二进制设备的协议数据,通过预定义的消息分割规则完成二进制数据流的分割和转义,得到原始消息数据;解析单元,接收原始消息数据,并根据预定的原始属性集定义把协议消息数据解析为原始属性集;标准化单元,根据标准属性集定义,将原始属性集中的数据对应填充至标准属性集,完成标准属性集构造。该发明通过接入单元与解析单元实现了任意二进制设备的接入与解析问题,通过标准化单元得到了可以供第三方平台读取的标准属性集,实现了任意二进制设备接入解析与标准化,解决了对于数据类型不一致、数据格式不一致的二进制设备接入同一平台,目前的接入方法均存在一定局限的问题。

如图1所示,所述接入单元包括:消息分割规则定义模块,接收用户预定义,将用户操作存储在消息分割规则定义模块形成用户预定义的消息分割规则;数据分段模块,接收协议数据,利用消息分割规则定义模块中存储的消息分割规则对协议数据进行分割,得到包含转义字符的数据消息;转义处理模块,对数据分段模块转发的数据消息进行转义,得到原始消息数据。所述接入模块完成设备协议数据的接入与分割工作,接入模块通过预定义的消息分割规则,完成二进制数据流的分割算法。本发明的一个实施例中,所述消息分割规则包括二进制基本信息、消息的分割方法和转移处理方法三部分。具体而言,二进制基本信息:标明二进制流字节序处理方式。消息的分割方法:一般物联网消息可分为定长类、变长类两大类消息,定长类消息一般以消息开始标志(特殊字符或字符串)开头,后面紧跟协议长度的定义,依靠消息开始标志加上协议长度的字节数来完成消息的分割;变长类是指消息没有固定长度,依靠开始标志与结束标志或长度字段标明的长度来实现消息的分割。转义处理方法:由于消息体中数值与开始标志或结束标志相同的数据需要使用转义方式传输,因此数据接入模块需要根据预定义的转义规则完成转义数据的处理,从而形成独立的协议消息数据。通过在该种任意二进制设备接入解析与标准化系统的接入单元中预先定义包含上述内容的消息分割规则,实现对任意二进制消息的分割,得到原始的消息数据。

如图1所示,所述解析单元包括:原始属性集定义模块,接收用户操作,在二进制设备接入前根据二进制设备的协议说明定义所有的原始属性集;属性解析模块,从原始消息数据中读取数值,解析得到配置的属性所对应的属性值,完整原始属性集;属性值转换模块,为特定的属性值进行属性值转换。所述解析单元对原始消息数据进行解析得到原始属性集,在本发明的一个实施例中,原始属性集定义包括协议消息中包括的所有属性所对应的属性解析模块的定义(属性解析定义)以及属性解析模块的顺序和读取条件的定义。原始属性集定义一般在接入物联网设备之前,根据该物联网设备的协议说明,完成所有的原始属性集定义。所述属性解析模块可以是属性解析器,该属性解析器完成从二进制流中读取值,并根据配置的属性名称形成属性的工作,属性解析模块的定义(属性解析定义)中包属性名称、数据类型、协议读取长度、协议读取方式、协议读取条件及属性值转换模块等信息。本实施例中,该种任意二进制设备接入解析与标准化系统预制一批属性解析器包括布尔型属性解析器、字符串型属性解析器、整数型属性解析器、浮点型属性解析器等常用数据的属性解析器。所述属性值转换模块可以是属性值转换器,所述属性值转换器完成特定的属性值转换,比如为了保证数据精度,在数据传输中浮点数采用整数方式传输,那么在读取属性值之后需要通过属性值转换器将其恢复为最初的属性值。本实施例中,该种任意二进制设备接入解析与标准化系统预制四则运算表达式型属性值转换器。

如图1所示,所述标准化单元包括,标准属性集定义模块,根据第三方平台的要求定义标准属性集;属性映射规则模块,根据标准属性集定义中的映射规则,将原始属性集中的属性与标准属性集中的属性对应;标准化属性集填充模块,对标准属性集中的各个属性填入对应的属性值。该标准化单元完成根据标准属性集定义实现标准属性集构造的工作,本发明的一个实施例中,标准属性集定义包括属性集中的属性映射规则以及属性集完成条件两部分。具体而言,属性映射规则:采用指定原始属性名的方式完成原始属性集中属性名与标准属性集中属性名的映射规则,默认采用同名方式完成映射。属性集完成条件:由于物联网设备众多,同类设备属性不尽相同,属性集完成条件指明必须具备值的属性,当这些属性都被赋值后,标准化属性集就具备了第三方物联网应用平台使用的条件。本实施例中,标准属性集定义由第三方物联网应用平台提供。有基于此,物联网设备协议数据通过该种任意二进制设备接入解析与标准化系统处理之后,就形成了可供第三方物联网应用平台使用的标准属性集合,从而实现应用平台与物联网设备的完全解耦。

如图2所示,一种任意二进制设备接入解析与标准化的方法,包括以下步骤:s1,对任意二进制设备接入解析系统进行规则预定义;s2,接收接入的二进制设备发送的二进制数据流,并对接收到的二进制数据流进行分割和转义,得到原始消息数据;s3,对原始消息数据进行解析,在预定义的原始属性中填入对应的属性值,得到原始属性集;s4,在预定义的标准属性集中填入由原始属性集映射得到的属性值,构成标准属性集。该发明通过预定义消息分割规则定义和原始属性定义,实现了任意二进制设备的接入与解析问题,通过预定义标准化属性集得到了可以供第三方平台读取的标准属性集,实现了任意二进制设备接入解析与标准化,解决了对于数据类型不一致、数据格式不一致的二进制设备接入同一平台,目前的接入方法均存在一定局限的问题。

如图3所示,所述步骤s1包括以下步骤:s11,对消息分割规则进行定义,预定义的消息分割规则将存储在消息分割规则定义模块;s12,对原始属性集进行定义,预定义的原始属性集将存储在原始属性定义模块;s13,对标准属性集进行定义,预定义的标准属性集将存储在标准属性集定义模块。本发明通过规则定义步骤(步骤s1)预先完成消息分割规则定义,原始属性集定义,标准化属性集定义,使得规则内容不与协议数据传输一同完成,所接入的二进制设备仅仅发送数据内容即可,无需发送协议内容,实现了数据内容与协议规则分离,大大减小了二进制设备的传输压力。并且,其规则定义采用xml方式实现,保障了操作和条件操作,解决了使用googleprotobuffer存在的缺点。本发明的一个实施例中,消息分割规则定义包括字节序规则定义(二进制基本信息)、消息的分割方法定义和转义规则定义(转义处理方法)三部分,原始属性集定义包括属性解析定义以及属性解析顺序和读取条件的定义,标准属性集定义包括属性映射规则定义以及属性集完成条件定义两部分。

具体而言,本实施例中,字节序规则定义取值可为big或little,分别代表大端和小端字节序。消息的分割方法定义包含以下参数:开始字符,取值为16进制字节或字节数组,形如:0xff,用于标识协议消息开始。结束字符,取值为16进制字节或字节数组,形如:0xff,用于标识协议消息结束。如果没有标明结束字符,则寻找消息长度属性名来计算定长类消息的结束位置。转义规则包括多个属性,属性名称为需要转义的字符,而该属性的值即为转义的定义。原始属性集定义包括以下参数:定义该属性集的消息id,用于表示协议中的不同消息;针对定长类协议标明此协议消息长度;定义该属性集中的所有属性。定义属性集中属性的定义包括以下参数:定义该属性的名称,该名称在属性集内唯一;属性解析器类型,该数据类型对应了系统中预制的属性解析器;定义属性解析器的读取长度,标准数据类型的属性解析器不需要指明长度,非标准长度数据类型及自定义类型必须指明长度值,长度值由nb/nb来表示,分别代表n字节或n比特;属性值转换器,定义一个四则运算实现属性值的转换,如果未设置,则不进行转换;定义一个boolean表达式作为属性解析器的触发条件,如果未设置,默认为true;定义解析顺序。标准化属性集定义采用xml格式定义,由于标准化属性集一般采用自描述类协议传输,因此不再定义类型与长度。只包括属性名称、原始属性名称以及是否必须三个字段即可,其中原始属性名称必须与消息格式规则定义中的属性名称匹配。属性名称为任意非0长度字符串,一个标准属性集中不能重复,该属性名称必须与原始属性集中的属性名称匹配。如果未定义,默认为name属性值。是否必须由值为true或false来判断,如不设置此属性,则默认为false。

如图4所示,所述步骤s2包括以下步骤:s21,读取协议数据;s22,判断协议消息是否开始,或者已经结束,协议消息未开始则丢弃当前字节,返回步骤s21,协议消息已经结束,则进入步骤s23;s23,利用消息分割规则定义模块中存储的消息分割规则对协议数据进行分割,可以分割则得到数据消息进入步骤s24,无法分割则返回步骤s21;s24,通过转义处理模块对数据分段模块转发的数据消息进行转义,得到原始消息数据。该步骤完成对接收到的二进制流数据的消息分割、转义处理两项工作。本发明的一个实施例中,匹配开始标识,该种任意二进制设备接入解析与标准化的系统按照协议规则配置匹配开始标志,若在匹配开始标志之前已经接收到的数据采用丢弃处理。根据协议规则配置的结束标识或者消息长度找到结束位置。切割数据段,形成含转义字符的字节数组。扫描字节数组,根据协议规则定义进行必要的将待转义的字符替换为转义字符。形成一个完整的原始消息字节数组。

如图5所示,所述步骤s3包括以下步骤:s31,根据原始消息数据的消息id,通过原始属性定义模块获得对应的原始属性集定义;s32,按顺序遍历原始属性集定义中的属性解析定义,根据属性解析定义创建属性读取器,确定读取长度;s33,判断属性解析条件是否成立,成立则读取属性的属性值,不成立则返回步骤s32;s34,判断该属性的属性值是否需要转换,如果是则进行属性值转换后放入原始属性集,如果不是则直接放入原始属性集;s35,判断原始属性集中的所有属性是否遍历,如果是则进入步骤s4,如果不是则返回步骤s32。本发明的一个实施例中,遍历原始属性集定义中的所有属性,并使用对应的属性解析器读取到msgid值。通过读取的msgid值找到对应的原始属性集定义。遍历对应原始属性集定义中的所有属性。检查属性的读取条件,如果条件符合要求,则使用该属性定义的属性解析器匹配原始消息字节数组,否则忽略此属性。根据协议定义的属性值转换器完成属性值转换。根据原始属性集定义规则中的属性名及属性解析器匹配出来的属性值形成原始消息属性集。

如图6所示,所述步骤s4包括以下步骤:s41,遍历原始属性集中的所有属性;s42,遍历定义的所有标准属性集;s43,为标准属性集中的属性赋值;s44,检测标准属性集的属性是否完全赋值,是则结束步骤,不是则返回步骤s2。本发明的一个实施例中,统一接入引擎根据原始消息属性集的消息类型选择相对应的目标标准属性集定义。统一接入引擎创建标准属性集实例,将原始消息属性集中同名的属性填充到标准属性集中。检查标准属性集定义描述的完成条件,如果已经完成则将标准属性集实例发送到下游平台,否则等待后续的原始消息属性集,继续填充其他要求的属性,直至符合要求。

以下介绍本发明的一个具体的实施例,流程如图7所示。

进行规则预定义。某物联网设备定期上报自身状态,包括设备id、电量与报警,其中如果包含报警,则在消息中附加对应报警状态值。设备id:10字节长的字符串。电量:上报设备的电池电压,单位为mv,但是业务系统采用电量百分比的形式展示,电量满时为5000mv,低于4000mv则设备不能工作。报警:通过一个32位整数的第一位表示是否有温度报警、第二位表示是否有速度报警,其他30位保留,用于扩展。如果有温度报警,协议中增加4个字节用于说明报警时的温度值,整数类型,单位为度。如果有速度报警,消息中增加4个字节用于说明报警时的速度值,单位为公里/小时,带有小数部分。

接收接入的二进制设备发送的二进制数据流并进行分割和转义。统一接入引擎逐个扫描接收到的每个字节,如果字节等于结束标识符0xff,并且已经读取到开始标识符0xff,则标记该条消息分割完成,否则继续读取字节。遇到另一个0xff,一个消息结束。得到0001303132333435363738390000119401000000fe01。从消息缓冲区中取得消息数据,使用定义的转义规则0xff=“0xfe01”、0xfe=“0xfe02”定义,将0xfe01替换为0xff,0xfe02替换为0xfe,完成转义,得到消息数据:0001303132333435363738390000119401000000ff。

对原始消息数据进行解析得到原始属性集。使用第一个属性定义,创建hexstring型属性解析器进行匹配,得到属性id=0x0001。获取msgid为0x0001的原始属性集定义。使用原始属性集的第一个属性定义创建字符串型属性解析器进行匹配,得到属性deviceid=0123456789。使用原始属性集的第二个属性定义创建整数型属性解析器进行匹配,得到属性battery=0x00001194(4500)。使用第二个属性定义中的valueconverter定义(${battery}-4000)/(5000–4000)*100),创建属性值转换器进行属性值标准化,值变为50=(4500-4000)/(5000–4000)*100),得到属性battery=50。使用第三个属性定义,创建整数型属性解析器,并设置读取长度为1b后进行匹配,得到属性值alarm_temp=1。使用第四个属性定义,创建整数型属性解析器,并设置读取长度为1b后进行匹配,得到属性值alarm_speed=0。使用第五个属性定义,创建整数型属性解析器,并设置读取长度为30b后进行匹配,得到属性值reserved=0。检查第六个属性条件是否成立,获取alarm_temp的值与1比较,条件成立,使用第六个属性定义匹配,得到属性temp=255。查第七个属性条件是否成立,alarm_speed的值与1比较,条件不成立,不使用第7个属性定义匹配。解析完成,得到原始属性集{deviceid=0123456789,battery=50,alarm_temp=1,alarm_speed=0,temp=255}。

映射得到标准属性集。用此原始属性集填充标准属性集1,得到标准属性集1{deviceid=0123456789,battery=50},所有必填项都已填充完毕,发送至下游系统。此原始属性集填充标准属性集2,得到标准属性集2{deviceid=0123456789,alarm_temp=1,temp=255},所有必填项都已填充完毕,发送至下游系统。用此原始属性集填充标准属性集3,得到标准属性集3{deviceid=0123456789,alarm_speed=0speed=null},必填项speed未能填充,等待下一条消息。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1