CN111190851A - 可变长协议的解析方法、装置、设备及介质 - Google Patents

可变长协议的解析方法、装置、设备及介质 Download PDF

Info

Publication number
CN111190851A
CN111190851A CN201911267135.3A CN201911267135A CN111190851A CN 111190851 A CN111190851 A CN 111190851A CN 201911267135 A CN201911267135 A CN 201911267135A CN 111190851 A CN111190851 A CN 111190851A
Authority
CN
China
Prior art keywords
data
header
length
protocol
content
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911267135.3A
Other languages
English (en)
Inventor
何围
熊友军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ubtech Robotics Corp
Original Assignee
Ubtech Robotics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ubtech Robotics Corp filed Critical Ubtech Robotics Corp
Priority to CN201911267135.3A priority Critical patent/CN111190851A/zh
Publication of CN111190851A publication Critical patent/CN111190851A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Communication Control (AREA)

Abstract

本发明公开了一种可变长协议的解析方法,包括:当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息;当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息;根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息;根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。本发明解决了现有通信协议的可扩展性差、无法兼容新旧协议的问题。

Description

可变长协议的解析方法、装置、设备及介质
技术领域
本发明涉及信息技术领域,尤其涉及一种可变长协议的解析方法、装置、设备及介质。
背景技术
在主控器与设备间的总线通信中,通信方式采用总线半/全双工串口通信,通信协议格式相对固定,只能针对某一特定类型的场景使用。当需求发生了变更或者协议需要新增属性时,则必须重新定制新的协议来满足需求,可扩展较差;并且无法兼容新旧协议,难以应用于各种不同级别的系统之间的通讯。
因此,寻找一种方法解决现有通信协议的可扩展性差、无法兼容新旧协议的问题成为本领域技术人员亟需解决的技术问题。
发明内容
本发明实施例提供了一种可变长协议的解析方法、装置、设备及介质,以解决现有通信协议的可扩展性差、无法兼容新旧协议的问题。
一种可变长协议的解析方法,包括:
当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息;
当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息;
根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;
解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息;
根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。
可选地,所述根据所述包头长度信息从所述数据帧中抓取包头内容字段包括:
将所述包头长度信息与包头长度初始值进行比较;
若所述包头长度信息大于或等于所述包头长度初始值时,按照所述包头长度信息从所述数据帧中依次抓取若干个字节,得到包头内容字段。
可选地,所述按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容包括:
当所述包头长度信息等于所述包头长度初始值时,依次对所述包头内容字段中的字节进行解析;
当所述包头长度信息大于所述包头长度初始值时,若设备支持的协议版本为初始版本,则依次对所述包头内容字段中的字节按照所述初始版本进行解析,然后丢弃剩余的字节。
可选地,所述按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容包括:
当所述包头长度信息大于所述包头长度初始值时,若设备支持的协议版本为扩展版本,则依次对所述包头内容字段中的字节按照所述扩展版本进行解析;
其中,所述可变长协议的扩展版本对应的包头内容字段包括所述可变长协议的初始版本对应的包头内容字段和至少一个扩展字段。
可选地,所述可变长协议的初始版本对应的包头内容字段包括设备型号、设备ID、帧序号、命令号,所述可变长协议的扩展版本对应的包头内容字段包括设备型号、设备ID、帧序号、命令号和至少一个扩展字段。
可选地,所述根据所述数据长度信息从所述数据帧中抓取数据内容字段包括:
根据包头内容获取数据长度预设值;
将所述数据长度信息与数据长度预设值进行比较;
若所述数据长度信息大于或等于所述数据长度预设值时,按照所述数据长度信息从所述数据帧中依次抓取若干个字节,得到数据内容字段。
可选地,所述按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容包括:
当所述数据长度信息等于所述数据长度预设值时,依次对所述数据内容字段中的字节进行解析;
当所述数据长度信息大于所述数据长度预设值时,若设备支持的协议版本为初始版本,则依次对所述数据内容字段中的字节进行解析,然后丢弃剩余的字节。
可选地,所述按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容包括:
当所述数据长度信息大于所述数据长度预设值时,若设备支持的协议版本为扩展版本,则依次对所述数据内容字段中的字节进行解析;
其中,所述可变长协议的扩展版本对应的数据内容字段包括所述可变长协议的初始版本对应的数据内容字段和至少一个扩展字段。
一种可变长协议的解析装置,包括:
帧头获取模块,用于当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息;
包头长度获取模块,用于当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息;
包头内容获取模块,用于根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;
数据长度获取模块,用于解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息;
数据内容获取模块,用于根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述可变长协议的解析方法。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述可变长协议的解析方法。
本发明实施例提供了一种可变长协议,以满足根据实际需求增加协议的字节内容;并在协议解析过程中引入对协议版本的辨别,通过在接收到待解析的数据帧并解析所述数据帧包头长度字段,得到包头长度信息后,然后按照所述包头长度信息从所述数据帧中抓取包头内容字段,按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;接着解析所述数据帧中的数据长度字段,得到数据长度信息;按照所述数据长度信息从所述数据帧中抓取数据内容字段,按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容;从而使得新旧设备均可正常解析变长前后的协议格式,实现在不同场景下使用同一套协议进行通讯,有利于协议的扩展操作,解决了现有通信协议的可扩展性差、兼容性差的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中可变长协议的数据结构示意图;
图2是本发明一实施例中可变长协议的解析方法的一流程图;
图3是本发明一实施例中可变长协议的解析方法中步骤S203中抓取待解析的包头内容的一流程图;
图4是本发明一实施例中可变长协议的解析方法中步骤S203中对待解析的包头内容进行解析及赋值的一流程图;
图5是本发明一实施例中可变长协议的解析方法中步骤S205中抓取待解析的数据内容的一流程图;
图6是本发明一实施例中可变长协议的解析方法中步骤S205中对待解析的数据内容进行解析及赋值的一流程图;
图7是本发明一实施例中可变长协议的解析装置的一原理框图;
图8是本发明一实施例中计算机设备的一示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有主控器与设备间的总线通信协议相对固定,应用场景单一,可扩展性和兼容性较差的问题,本发明实施例提供了一种可变长协议,以实现根据实际需求增加协议的字节内容;并在协议解析过程中引入对协议版本的辨别,根据协议版本来对数据帧进行解析及赋值,得到不同协议版本的包头内容和数据内容,使得新旧设备均可正常解析变长前后的协议格式,实现在不同场景下使用同一套协议进行通讯。可选地,图1示出了本发明实施例提供的可变长协议的数据结构。如图1所示,所述每一帧数据包括但不限于帧头、包头长度、包头内容、数据长度、数据内容以及校验码;其中,所述包头内容和数据内容分别包括若干个字段,并可进行扩展。
对于包头内容,可变长协议的初始版本中所述包头内容包括基本的包头内容字段;可变长协议的扩展版本中所述包头内容包括初始版本对应的包头内容字段和至少一个扩展字段,即包括基本的包头内容字段以及至少一个扩展字段。可选地,作为本发明的一个优选示例,所述基本的包头内容字段包括但不限于设备类型、设备ID、帧序号、命令号。
对于数据内容,可变长协议的初始版本中所述数据内容包括基本的数据内容字段;可变长协议的扩展版本中所述数据内容包括初始版本对应的数据内容字段和至少一个扩展字段,即所述数据内容包括基本的数据内容字段以及至少一个扩展字段。
可选地,为了方便对包头内容和数据内容进行扩展,本发明实施例对包头内容和数据内容采用结构体的方式进行数据处理。
以下对本实施例提供的可变长协议的解析方法进行详细的描述。图2为本发明实施例提供的可变长协议的解析方法的实现流程图。如图2所示,所述可变长协议的解析方法包括:
在步骤S201中,当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息。
在通信过程中,数据帧首先将帧头传输过来。在本发明实施例中,所述帧头字段的大小为一个字节,且固定为预设值0xDC。当有数据帧传输过来时,本发明实施例接收并解析所述数据帧的第一个字节,得到帧头信息。
在步骤S202中,当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息。
将所得到的帧头信息与帧头预设值进行比较,若所述帧头信息为帧头预设值时,即帧头信息解析正确时,则继续获取所述数据帧的第二个字节,得到包头长度字段,解析所述包头长度字段得到包头长度信息。
在本发明实施例中,所述包头长度字段的大小固定为一个字节,表示该数据帧中包头内容的实际总字节数。示例性地,当所述包头内容占用六个字节时,则所述包头长度信息为6。
在步骤S203中,根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容。
在得到包头长度信息后,从第三个字节起,按照所述包头长度信息依次抓取若干个字节,作为包头内容字段。承接前文示例,若所述包头长度信息为6时,则从第三个字节起,依次抓取第三个字节、第四个字节、第五个字节、第六个字节、第七个字节、第八个字节共6个字节作为包头内容字段。
可选地,考虑到包头内容字段可能会扩展,即包括新增的扩展字段,本发明实施例在解析前增加了对包头长度信息的判断。可选地,如图3所示,步骤S203中所述的根据所述包头长度信息从所述数据帧中抓取包头内容字段包括:
在步骤S301中,将所述包头长度信息与包头长度初始值进行比较。
在这里,所述包头长度初始值是指可变长协议的初始版本中包头内容的总字节数。由于所述初始版本中包头内容包括最基本的包头内容字段,因此所述包头长度初始值是最小的包头长度。本发明实施例通过将所述包头长度信息与包头长度初始值进行比较,以判断所述数据帧是否为异常数据帧。
在步骤S302中,若所述包头长度信息大于或等于所述包头长度初始值时,按照所述包头长度信息从所述数据帧中依次抓取若干个字节,得到包头内容字段。
若所述包头长度信息大于或等于所述包头长度初始值时,表示所述数据帧是正常的,则按照所述包头长度信息从所述数据帧接下来的字节中依次抓取若干个字节,作为包头内容字段。
若所述包头长度信息小于所述包头长度初始值时,表示所述数据帧为异常的数据帧,则回复对应的err信息。
可选地,作为本发明的一个优选示例,对于初始版本,所述包头内容字段包括但不限于设备类型、设备ID、帧序号、命令号,其中设备类型用一个字节表示,设备ID用一个字节表示,帧序号用两个字节表示,命令号用两个字节表示,因此所述包头长度初始值优选是6个字节。若当前所接收的数据帧的包头长度信息小于6个字节时,则所述数据帧是错误的,返回错误提示信息;若所述包头长度信息大于或等于6个字节时,则按照所述包头长度信息从所述数据帧接下来的字节中依次抓取若干个字节。
可选地,为了使得同一设备可以兼容新旧版本的可变长协议,本发明实施例在对包头内容的解析过程中引入协议版本的判别。如图4所示,步骤S203中所述的按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容包括:
在步骤S401中,当所述包头长度信息等于所述包头长度初始值时,依次对所述包头内容字段中的字节进行解析。
在这里,若所述包头长度信息等于所述包头长度初始值,表明待解析的数据帧的格式符合可变长协议的初始版本标准,则依次对所抓取的若干个字节进行解析,然后依次赋值给初始版本对应的包头字段,比如前文所述的设备类型、设备ID、帧序号、命令号。
在步骤S402中,当所述包头长度信息大于所述包头长度初始值时,若设备支持的协议版本为初始版本,则依次对所述包头内容字段中的字节按照所述初始版本进行解析,然后丢弃剩余的字节。
若所述包头长度信息大于所述包头长度初始值,表明待解析的数据帧的格式符合可变长协议的扩展版本标准,则根据设备当前所适用的协议版本,对所抓取的若干个字节进行解析,然后赋值。
若设备当前所适用的协议版本为初始版本,则依次对所抓取的若干个字节进行解析,然后依次赋值给初始版本对应的包头内容字段,比如前文所述的设备类型、设备ID、帧序号、命令号。剩余的字节默认为包头内容的扩展字段,自动丢弃。
在步骤S403中,若设备支持的协议版本为扩展版本,则依次对所述包头内容字段中的字节按照所述扩展版本进行解析。
若设备当前所适用的协议版本为扩展版本,则依次对所抓取的若干个字节进行解析,然后依次赋值给扩展版本对应的包头内容字段,即初始版本对应的包头内容字段和扩展字段。
可选地,为了便于理解,以下对上述步骤S401至步骤S403进行举例说明。如前所述,为了方便对包头内容和数据内容进行扩展,本发明实施例采用结构体的方式对包头内容和数据内容进行数据处理。假设Header A为可变长协议的初始版本中的包头内容;Header B为可变长协议的扩展版本中的包头内容。Header A采用结构体的方式定义如下:
struct Header A{
uint8 dev;
uint8 id;
uint16 seq;
uint16 cmd;
}
Header B比Header A新增加一个扩展字段uint32 attribute,采用结构体的方式定义如下:
struct Header B{
uint8 dev;
uint8 id;
uint16 seq;
uint16 cmd;
uint32 attribute;
}
当接收到的数据帧为:DC 0A 01 01 00 01 00 01 12 34 56 78 00 87,从帧头信息开始解析,第一个字节为帧头预设值0xDC,第二个字节为包头长度信息0x0A,表示包头内容有10个字节,按照所述包头长度信息从所述数据帧接下来的字节中依次抓取10个字节,作为包头内容字段。
当所述包头长度初始值为6个字节时,所述包头长度信息大于包头长度初始值,若设备当前适用初始版本时,则按照Header A依次对所抓取的10个字节进行解析,然后依次赋值给基本的包头内容字段:设备类型、设备ID、帧序号、命令号,得到:
dev=0x01;
id=0x01;
seq=0x0001;
cmd=0x0001;
剩余的字节四个字节默认为包头内容的扩展字段,自动丢弃。
若设备当前适用扩展版本时,则按照Header B依次对所抓取的若干个字节进行解析,然后依次赋值给基本的包头内容字段:设备类型、设备ID、帧序号、命令号,以及扩展字段attribute,得到:
dev=0x01;
id=0x01;
seq=0x0001;
cmd=0x0001;
attribute=0x12345678;
本发明实施例提供的一种可变长协议,可以根据实际需求增加协议的字节内容;并通过在协议解析过程中引入对协议版本的辨别,根据协议版本来对可变长协议中的包头内容字段进行解析,使得新旧设备均可正常解析变长前后的协议格式,实现在不同场景下可使用同一套协议进行通讯,有效地提高了通信协议的可扩展性、兼容性。
在解析得到的包头内容中,所述命令号为两个字节,用于指示命令具体行为。不同命令号对应不同的命令参数,决定了数据内容的长度预设值。
在步骤S204中,解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息。
在完成对包头内容字段的解析之后,继续对所述数据帧中的下一个字节进行解析,得到数据长度信息。在这里,所述数据长度信息固定为一个字节,表示所述数据帧中的数据内容的实际总字节数。若所述数据长度信息为0,则表示所述数据帧中没有数据内容。
在步骤S205中,根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。
与包头内容字段的解析逻辑相似,在得到数据长度信息后,按照所述数据长度信息依次抓取若干个字节,作为数据内容字段。
可选地,考虑到数据内容可能会扩展,即包括新增的扩展字段,本发明实施例在解析前增加了对数据长度信息的判断。可选地,如图5所示,步骤S205中所述的根据所述数据长度信息从所述数据帧中抓取数据内容字段包括:
在步骤S501中,根据包头内容获取数据长度预设值。
具体地,本发明实施例根据包头内容中的命令号获取数据长度预设值。所述数据长度预设值是指在可变长协议的初始版本中命令号对应的数据内容的总字节数。不同命令号对应不同的命令参数,同一命令参数在初始版本中对应的数据内容字段是确定的,因此命令号对应的数据内容在可变长协议的初始版本中的长度是确定的。同样地,由于所述初始版本中数据内容包括最基本的数据内容字段,因此所述数据长度预设值是最小的数据长度。
由于每一个数据帧传输的命令参数不一定相同,本发明实施例根据命令号确定当前传输的命令参数,进而得到对应的数据长度预设值。
在步骤S502中,将所述数据长度信息与数据长度预设值进行比较。
本发明实施例通过将所述数据长度信息与数据长度预设值进行比较,以判断所述数据帧是否为异常数据帧。
在步骤S503中,若所述数据长度信息大于或等于所述数据长度预设值时,按照所述数据长度信息从所述数据帧中依次抓取若干个字节,得到数据内容字段。
若所述数据长度信息大于或等于所述数据长度预设值时,表示所述数据帧是正常的,则按照所述数据长度信息从所述数据帧接下来的字节中依次抓取若干个字节,作为数据内容字段。
若所述数据长度信息小于所述数据长度预设值时,表示所述数据帧为异常的数据帧,则回复对应的err信息。
可选地,为了使得设备可以兼容新旧版本的可变长协议,本发明实施例在对数据内容的解析过程中引入协议版本的判别。如图6所示,步骤S205中所述的按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容包括
在步骤S601中,当所述数据长度信息等于所述数据长度预设值时,依次对所述数据内容字段中的字节进行解析。
在这里,若所述数据长度信息等于所述数据长度预设值,表明待解析的数据帧的格式符合可变长协议的初始版本标准,则依次对所抓取的若干个字节进行解析,然后依次赋值给初始版本对应的数据内容字段。
在步骤S602中,当所述数据长度信息大于所述数据长度预设值时,若设备支持的协议版本为初始版本,则依次对所述数据内容字段中的字节进行解析,然后丢弃剩余的字节。
若所述数据长度信息大于所述数据长度预设值,表明待解析的数据帧的格式符合可变长协议的扩展版本标准,则根据设备当前所适用的协议版本,对所抓取的若干个字节进行解析。
若设备当前所适用的协议版本为初始协议版本,则依次对所抓取的若干个字节进行解析,然后依次赋值给初始版本对应的数据内容字段。剩余的字节默认为数据内容的扩展字段,自动丢弃。
在步骤S603中,若设备支持的协议版本为扩展版本,则依次对所述数据内容字段中的字节进行解析。
若设备当前所适用的协议版本为扩展版本,则依次对所抓取的若干个字节进行解析,然后依次赋值给扩展版本对应的数据内容字段,即初始版本对应的数字内容字段和扩展字段。
可选地,为了便于理解,以下对上述步骤S601至步骤S603进行举例说明。如前所述,为了方便对数据内容进行扩展,本发明实施例采用结构体的方式对数据内容进行数据处理。假设数据内容中携带对LED进行设置的指令字段,其中LED灯设置指令A为初始协议版本,包括基本的指令字段:占空比、闪烁频率、显示时间,定义如下:
Figure BDA0002313166050000151
LED灯设置指令B为扩展协议版本,包括基本的指令字段:占空比、闪烁频率、显示时间以及扩展字段rgb值,定义如下:
Figure BDA0002313166050000152
当接收到的数据帧为:0xDC 0x06 0x08 0x01 0x00 0x01 0x03 0xEA 0x0B 0x130x88 0x03 0xE8 0x00 0x00 0xFF 0xFF 0xFF 0x00 0xff 0x7A,从帧头信息开始解析,帧头为0xDC,包头长度信息为0x06,包头内容为0x08 0x01 0x00 0x01 0x03 0xEA,数据长度信息为0x0B,数据内容为0x13 0x88 0x03 0xE8 0x00 0x00 0xFF 0xFF 0xFF 0x00 0xff,校验码为0x7A。其中包头内容中的命令号为0x03 EA,根据命令号得到命令参数对应的数据长度预设值为8个字节,而所接收到的数据帧的数据长度信息为11个字节,大于数据长度预设值,若设备当前适用初始协议版本,则依次对所抓取的字节进行解析,然后依次赋值给基本的指令字段:占空比0x1388、闪烁频率0x03E8、显示时间0x0000FFFF,剩下的三个字节数据0xFF、0x00、0xff不解析,自动丢弃;若设备当前适用扩展协议版本,则依次对所抓取的若干个字节进行解析,然后依次赋值给基本的指令字段:占空比0x1388、闪烁频率0x03E8、显示时间0x0000FFFF以及扩展字段rgb值,其中rgb[0]:0xFF、rgb[1]:0x00、rgb[2]:0xff。
可选地,本发明提供的可变长协议及其解析方法,除了应用在传输LED灯控制指令的场景中,还可以应用在传输其他硬件设备的控制指令,包括但不限于对舵机、电机、红外传感器、温湿度传感器、音响、超声传感器、数码管、颜色传感器等的控制指令。
综上所述,本发明实施例通过提供一种可变长协议,该协议简洁,可读性和易开发性好,实现了根据实际需求增加协议的字节内容,即使需求发生了变更或者协议需要新增属性时,也无需重新定制新的协议;并且通过在协议解析过程中引入对协议版本的辨别,按照协议版本依次对抓取的字节进行解析,得到不同协议版本的包头内容和数据内容;从而使得新旧设备均可正常解析变长前后的协议格式,可以兼容不同版本的协议格式,实现在不同场景下使用同一套协议进行通讯,有效地解决了现有通信协议的可扩展性、兼容性差的问题,提高了现有通信协议的可扩展性。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
在一实施例中,提供一种可变长协议的解析装置,该可变长协议的解析装置与上述实施例中可变长协议的解析方法一一对应。如图7所示,该可变长协议的解析装置包括帧头获取模块71、包头长度获取模块72、包头内容获取模块73、数据长度获取模块74、数据内容获取模块75。各功能模块详细说明如下:
帧头获取模块71,用于当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息;
包头长度获取模块72,用于当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息;
包头内容获取模块73,用于根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;
数据长度获取模块74,用于解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息;
数据内容获取模块75,用于根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。
可选地,所述包头内容获取模块73包括:
包头长度比较单元,用于将所述包头长度信息与包头长度初始值进行比较;
包头内容获取单元,用于若所述包头长度信息大于或等于所述包头长度初始值时,按照所述包头长度信息从所述数据帧中依次抓取若干个字节,得到包头内容字段;
可选地,所述包头内容获取模块73还包括:
第一包头解析单元,用于当所述包头长度信息等于所述包头长度初始值时,依次对所述包头内容字段中的字节进行解析;
第二包头解析单元,用于当所述包头长度信息大于所述包头长度初始值时,若设备支持的协议版本为初始版本,则依次对所述包头内容字段中的字节按照所述初始版本进行解析,然后丢弃剩余的字节;
第三包头解析单元,用于当所述包头长度信息大于所述包头长度初始值时,若设备支持的协议版本为扩展版本,则依次对所述包头内容字段中的字节按照所述扩展版本进行解析;
其中,所述可变长协议的扩展版本对应的包头内容字段包括所述可变长协议的初始版本对应的包头内容字段和至少一个扩展字段。
可选地,所述可变长协议的初始版本对应的包头内容字段包括但不限于设备型号、设备ID、帧序号、命令号,所述可变长协议的扩展版本对应的包头内容字段包括但不限于设备型号、设备ID、帧序号、命令号和至少一个扩展字段。
可选地,所述数据内容获取模块75包括:
长度预设值获取单元,用于根据包头内容获取数据长度预设值;
数据长度比较单元,用于将所述数据长度信息与数据长度预设值进行比较;
数据内容获取单元,用于若所述数据长度信息大于或等于所述数据长度预设值时,按照所述数据长度信息从所述数据帧中依次抓取若干个字节,得到数据内容字段。
可选地,所述数据内容获取模块75还包括:
第一数据解析单元,用于当所述数据长度信息等于所述数据长度预设值时,依次对所述数据内容字段中的字节进行解析;
第二数据解析单元,用于当所述数据长度信息大于所述数据长度预设值时,若设备支持的协议版本为初始版本,则依次对所述数据内容字段中的字节进行解析,然后丢弃剩余的字节;
第三数据解析单元,用于当所述数据长度信息大于所述数据长度预设值时,若设备支持的协议版本为扩展版本,则依次对所述数据内容字段中的字节进行解析;
其中,所述可变长协议的扩展版本对应的数据内容字段包括所述可变长协议的初始版本对应的数据内容字段和至少一个扩展字段。
关于可变长协议的解析装置的具体限定可以参见上文中对于可变长协议的解析方法的限定,在此不再赘述。上述可变长协议的解析装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器、机器人主控制器、舵机、传感器模块,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种可变长协议的解析方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息;
当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息;
根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;
解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息;
根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

Claims (11)

1.一种可变长协议的解析方法,其特征在于,包括:
当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息;
当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息;
根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;
解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息;
根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。
2.如权利要求1所述的可变长协议的解析方法,其特征在于,所述根据所述包头长度信息从所述数据帧中抓取包头内容字段包括:
将所述包头长度信息与包头长度初始值进行比较;
若所述包头长度信息大于或等于所述包头长度初始值时,按照所述包头长度信息从所述数据帧中依次抓取若干个字节,得到包头内容字段。
3.如权利要求2所述的可变长协议的解析方法,其特征在于,所述按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容包括:
当所述包头长度信息等于所述包头长度初始值时,依次对所述包头内容字段中的字节进行解析;
当所述包头长度信息大于所述包头长度初始值时,若设备支持的协议版本为初始版本,则依次对所述包头内容字段中的字节按照所述初始版本进行解析,然后丢弃剩余的字节。
4.如权利要求2或3所述的可变长协议的解析方法,其特征在于,所述按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容包括:
当所述包头长度信息大于所述包头长度初始值时,若设备支持的协议版本为扩展版本,则依次对所述包头内容字段中的字节按照所述扩展版本进行解析;
其中,所述可变长协议的扩展版本对应的包头内容字段包括所述可变长协议的初始版本对应的包头内容字段和至少一个扩展字段。
5.如权利要求4所述的可变长协议的解析方法,其特征在于,所述可变长协议的初始版本对应的包头内容字段包括设备型号、设备ID、帧序号、命令号,所述可变长协议的扩展版本对应的包头内容字段包括设备型号、设备ID、帧序号、命令号和至少一个扩展字段。
6.如权利要求1所述的可变长协议的解析方法,其特征在于,所述根据所述数据长度信息从所述数据帧中抓取数据内容字段包括:
根据包头内容获取数据长度预设值;
将所述数据长度信息与数据长度预设值进行比较;
若所述数据长度信息大于或等于所述数据长度预设值时,按照所述数据长度信息从所述数据帧中依次抓取若干个字节,得到数据内容字段。
7.如权利要求6所述的可变长协议的解析方法,其特征在于,所述按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容包括:
当所述数据长度信息等于所述数据长度预设值时,依次对所述数据内容字段中的字节进行解析;
当所述数据长度信息大于所述数据长度预设值时,若设备支持的协议版本为初始版本,则依次对所述数据内容字段中的字节进行解析,然后丢弃剩余的字节。
8.如权利要求6或7所述的可变长协议的解析方法,其特征在于,所述按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容包括:
当所述数据长度信息大于所述数据长度预设值时,若设备支持的协议版本为扩展版本,则依次对所述数据内容字段中的字节进行解析;
其中,所述可变长协议的扩展版本对应的数据内容字段包括所述可变长协议的初始版本对应的数据内容字段和至少一个扩展字段。
9.一种可变长协议的解析装置,其特征在于,所述装置包括:
帧头获取模块,用于当接收到待解析的数据帧时,解析所述数据帧的帧头字段,得到帧头信息;
包头长度获取模块,用于当所述帧头信息为帧头预设值时,解析所述数据帧的包头长度字段,得到包头长度信息;
包头内容获取模块,用于根据所述包头长度信息从所述数据帧中抓取包头内容字段,然后按照设备支持的协议版本依次对所述包头内容字段进行解析,得到包头内容;
数据长度获取模块,用于解析所述数据帧中所述包头内容字段后的数据长度字段,得到数据长度信息;
数据内容获取模块,用于根据所述数据长度信息从所述数据帧中抓取数据内容字段,然后按照设备支持的协议版本依次对所述数据内容字段进行解析,得到数据内容。
10.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至8任一项所述的可变长协议的解析方法。
11.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的可变长协议的解析方法。
CN201911267135.3A 2019-12-11 2019-12-11 可变长协议的解析方法、装置、设备及介质 Pending CN111190851A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911267135.3A CN111190851A (zh) 2019-12-11 2019-12-11 可变长协议的解析方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911267135.3A CN111190851A (zh) 2019-12-11 2019-12-11 可变长协议的解析方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN111190851A true CN111190851A (zh) 2020-05-22

Family

ID=70707797

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911267135.3A Pending CN111190851A (zh) 2019-12-11 2019-12-11 可变长协议的解析方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN111190851A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114157395A (zh) * 2021-11-05 2022-03-08 在线途游(北京)科技有限公司 一种基于变长整数编码的数据通信方法、装置及系统
CN114979307A (zh) * 2022-04-19 2022-08-30 杭州涂鸦信息技术有限公司 通信协议的解析方法、智能终端及存储介质
CN115801195A (zh) * 2022-11-25 2023-03-14 天津津航计算技术研究所 一种可变帧头搜索系统和方法
CN116760135A (zh) * 2023-06-13 2023-09-15 东莞市颜仔电子科技有限公司 一种多快充协议电源适配器及其控制方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101594355A (zh) * 2009-06-17 2009-12-02 华为技术有限公司 一种实现软件跨版本交互的方法及装置
CN101958902A (zh) * 2010-09-30 2011-01-26 北京锐安科技有限公司 一种网络数据包的解析方法与装置
CN101998508A (zh) * 2009-08-14 2011-03-30 华为技术有限公司 数据封装方法及装置
CN102457901A (zh) * 2011-12-22 2012-05-16 中兴通讯股份有限公司 鲁棒性头压缩版本适配方法和装置
US20140059157A1 (en) * 2012-08-24 2014-02-27 Fujitsu Limited Apparatus and method for transferring data via heterogeneous networks
CN105069740A (zh) * 2015-08-05 2015-11-18 北京宇航时代科技发展有限公司 一种.ser文件格式和.ser文件的读取方法
CN107766265A (zh) * 2017-09-06 2018-03-06 中国航空工业集团公司西安飞行自动控制研究所 一种支持定长包、变长包、混合包的串口数据提取方法
CN110086703A (zh) * 2018-01-26 2019-08-02 香港乐蜜有限公司 一种基于tcp协议的消息传输方法及装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101594355A (zh) * 2009-06-17 2009-12-02 华为技术有限公司 一种实现软件跨版本交互的方法及装置
CN101998508A (zh) * 2009-08-14 2011-03-30 华为技术有限公司 数据封装方法及装置
CN101958902A (zh) * 2010-09-30 2011-01-26 北京锐安科技有限公司 一种网络数据包的解析方法与装置
CN102457901A (zh) * 2011-12-22 2012-05-16 中兴通讯股份有限公司 鲁棒性头压缩版本适配方法和装置
US20140059157A1 (en) * 2012-08-24 2014-02-27 Fujitsu Limited Apparatus and method for transferring data via heterogeneous networks
CN105069740A (zh) * 2015-08-05 2015-11-18 北京宇航时代科技发展有限公司 一种.ser文件格式和.ser文件的读取方法
CN107766265A (zh) * 2017-09-06 2018-03-06 中国航空工业集团公司西安飞行自动控制研究所 一种支持定长包、变长包、混合包的串口数据提取方法
CN110086703A (zh) * 2018-01-26 2019-08-02 香港乐蜜有限公司 一种基于tcp协议的消息传输方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114157395A (zh) * 2021-11-05 2022-03-08 在线途游(北京)科技有限公司 一种基于变长整数编码的数据通信方法、装置及系统
CN114157395B (zh) * 2021-11-05 2023-08-08 在线途游(北京)科技有限公司 一种基于变长整数编码的数据通信方法、装置及系统
CN114979307A (zh) * 2022-04-19 2022-08-30 杭州涂鸦信息技术有限公司 通信协议的解析方法、智能终端及存储介质
CN115801195A (zh) * 2022-11-25 2023-03-14 天津津航计算技术研究所 一种可变帧头搜索系统和方法
CN116760135A (zh) * 2023-06-13 2023-09-15 东莞市颜仔电子科技有限公司 一种多快充协议电源适配器及其控制方法

Similar Documents

Publication Publication Date Title
CN111190851A (zh) 可变长协议的解析方法、装置、设备及介质
CN112104654B (zh) 多协议自动识别与转换方法,存储介质及智能网关
CN109525990B (zh) 无线投屏方法、装置、计算机设备和存储介质
CN112688967B (zh) 一种物联网数据处理方法、装置、设备及存储介质
CN111865736B (zh) 一种设备控制方法及装置
WO2020248375A1 (zh) 数据库间数据同步方法、系统、计算机设备及存储介质
CN106330483B (zh) 信息获取方法、客户端设备和服务端设备
CN108322437B (zh) 用于多规约设备之间的自适应通讯方法和装置
CN113824731B (zh) 一种串口协议帧解析方法、设备及计算机可读存储介质
CN111813622B (zh) 一种设备监控方法及装置
CN112351471A (zh) 设备接入网关的方法、网关设备及计算机可读存储介质
CN110996346B (zh) 一种下行报文轨迹追踪方法、装置及计算机可读存储介质
WO2014169589A1 (zh) 智能终端的同步操作方法及装置
CN111405059A (zh) 云端设备的数据传输方法、电子设备及物联网系统
CN113965904A (zh) 设备注册方法、装置和存储介质
US20040249923A1 (en) Efficient home network management system and method
CN112788576A (zh) 设备离线的处理方法和系统、存储介质及电子装置
CN112671770A (zh) 室外机串口协议解析方法、装置、计算机设备及存储介质
CN112910838B (zh) 复合协议解析方法、装置、设备、系统和存储介质
CN101938765B (zh) 一种网管和网元自动适配的方法和系统
CN111141015A (zh) 一种远程空调控制方法
US20220385594A1 (en) Method for configuring and managing tsn network and system applying the method
CN113114704B (zh) 基于设备属性选择的视频结构化数据单向传输方法及装置
CN114143385A (zh) 一种网络流量数据的识别方法、装置、设备和介质
CN108928213B (zh) 控制面板的参数配置方法、控制面板及被控设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200522