一种用于物联网设备的通讯协议快速开发方法与流程

文档序号:33514065发布日期:2023-03-22 05:41阅读:29来源:国知局
一种用于物联网设备的通讯协议快速开发方法与流程

1.本发明涉及物联网技术领域,具体为一种用于物联网设备的通讯协议快速开发方法。


背景技术:

2.目前在物联网项目开发的过程中,关于设备协议处理相关的工作普遍存在着混乱,低效的情况。常常设计出来的协议存在拓展性不高,压缩性不高的情况。关于协议编码和解码的代码往往需要人为的去编写,如果协议变更的话,又要重新去修改编解码代码,在这个过程中容易出错,产生问题,造成系统的不稳定性。于此同时,在往常的后台开发过程中,后台开发人员一般需要真实的设备进行数据联调,这个过程和硬件研发的工作耦合了,降低了开发效率。而如果前期不通过真实设备,只是单纯通过数据规范进行对接的话,开发人员就有没有一个很好的测试方式,所以在此背景下,设计了一种物联网设备的通讯协议,同时定义了一套快速开发方法和流程,为此提出一种用于物联网设备的通讯协议快速开发方法,来解决此问题。


技术实现要素:

3.本发明的目的在于提供一种用于物联网设备的通讯协议快速开发方法,以解决上述背景技术提出的问题。
4.为实现上述目的,本发明提供如下技术方案:一种用于物联网设备的通讯协议快速开发方法,包括以下步骤:
5.步骤1:编写设备描述信息:开发人员对设备的每个属性进行描述,标明设备属性的数据类型,设备属性的描述和单位信息等。生成对应的json格式信息;
6.步骤2:生成协议:通过协议代码生成器生成用于物联网设备的二进制协议,本协议在设计上考虑到物联网设备的受限制性(算力受限,网络受限),其优点如下:
7.1.协议动态化,只上传必要字段,减少流量损失:每一个设备属性字段都有一个编号,通过给设备属性编号的方式可以让编解码方知道对应的属性是什么名字,实现动态化上传。
8.2.数据紧凑,压缩程度高:组包采用二进制的的方式,比用ascii明文编码方式(如json)节省更多的存储空间。同时某些数据帧使用varint编码方式,对数据进行压缩来减少存储空间。关于协议的描述可见具体实施方式的描述;
9.步骤3:生成代码:通过生成器可生成为嵌入式代码,用于嵌入式开发人员的快速编码工作;服务器代码,实现服务器的自动编码工作;模拟器代码,快速完成设备模拟测试工作;
10.步骤4:生成数据规范文档:开发人员选择设备需要传输的设备属性作为单条消息,说明消息的用途,而后再通过生成器生成数据规范文档;用于实现设备协议设计到代码编写、对接、测试工作的快速进行。定义的设备传输协议具有结构紧凑,动态化的特点,节省
设备带宽。所有代码自动生成,减少程序员的编码的错误,提升系统的稳定性。
11.优选的,所述步骤3中,其中c语言的代码主要是将所有属性封装成结构体进行描述,开发人员只需要赋值属性,调用方法进行编码即可。
12.优选的,所述步骤3中,服务器代码可针对服务器开发语言进行编码代码的自动生成,输入是设备传上来的二进制流数据,输出是json格式的字符串。
13.优选的,所述步骤3中,模拟器代码主要是放在服务器上用于设备模拟的代码,模拟器的输入方式可以用json格式进行设备上传数据描述,也可以为界面进行设备上传数据的描述。测试开发人员通过设备模拟器快速生成对应模拟设备的代码,平台开发人员对需要上传的属性进行赋值进行模拟上传,快速实现设备端的模拟,解耦硬件开发和平台开发,完成快速开发。
14.与目前技术相比,本发明的有益效果是:本发明通过完成物联网设备通讯协议从设计,编解码代码编写,平台数据对接,设备模拟和测试工作的快速进行,提高物联网项目的稳定性及开发效率,实现设备协议设计到代码编写、对接、测试工作的快速进行。定义的设备传输协议具有结构紧凑,动态化的特点,节省设备带宽。所有代码自动生成,减少程序员的编码的错误,提升系统的稳定性。
附图说明
15.图1为本发明开发方法和流程;
16.图2为本发明表3功能码定义表;
17.图3为本发明表5数据类型表;
18.图4为本发明表6属性编码表;
19.图5为本发明表7事件编码表;
20.图6为本发明表8温度tag格式;
21.图7为本发明表9温度完整数据格式;
22.图8为本发明表10温度tag格式;
23.图9为本发明表11属性上传格式表;
24.图10为本发明表12事件上传格式表。
具体实施方式
25.下面将通过实施例的方式对本发明作更详细的描述,这些实施例仅是举例说明性的而没有任何对本发明范围的限制。
26.本发明提供一种技术方案:一种用于物联网设备的通讯协议快速开发方法,包括以下步骤:
27.步骤1:编写设备描述信息:开发人员对设备的每个属性进行描述,标明设备属性的数据类型,设备属性的描述和单位信息等。生成对应的json格式信息;
28.步骤2:生成协议:通过协议代码生成器生成用于物联网设备的二进制协议,本协议在设计上考虑到物联网设备的受限制性(算力受限,网络受限),其优点如下:
29.1.协议动态化,只上传必要字段,减少流量损失:每一个设备属性字段都有一个编号,通过给设备属性编号的方式可以让编解码方知道对应的属性是什么名字,实现动态化
上传。
30.2.数据紧凑,压缩程度高:组包采用二进制的的方式,比用ascii明文编码方式(如json)节省更多的存储空间。同时某些数据帧使用varint编码方式,对数据进行压缩来减少存储空间。关于协议的描述可见具体实施方式的描述;
31.步骤3:生成代码:通过生成器可生成为嵌入式代码,用于嵌入式开发人员的快速编码工作;服务器代码,实现服务器的自动编码工作;模拟器代码,快速完成设备模拟测试工作;其中c语言的代码主要是将所有属性封装成结构体进行描述,开发人员只需要赋值属性,调用方法进行编码即可,服务器代码可针对服务器开发语言进行编码代码的自动生成,输入是设备传上来的二进制流数据,输出是json格式的字符串,模拟器代码主要是放在服务器上用于设备模拟的代码,模拟器的输入方式可以用json格式进行设备上传数据描述,也可以为界面进行设备上传数据的描述。测试开发人员通过设备模拟器快速生成对应模拟设备的代码,平台开发人员对需要上传的属性进行赋值进行模拟上传,快速实现设备端的模拟,解耦硬件开发和平台开发,完成快速开发。
32.步骤4:生成数据规范文档:开发人员选择设备需要传输的设备属性作为单条消息,说明消息的用途,而后再通过生成器生成数据规范文档;用于实现设备协议设计到代码编写、对接、测试工作的快速进行。定义的设备传输协议具有结构紧凑,动态化的特点,节省设备带宽。所有代码自动生成,减少程序员的编码的错误,提升系统的稳定性。
33.协议设计流程:
34.设计人员编写用于描述物联网设备的设备属性、设备事件。以下是关于设备属性表和设备事件表的具体描述。
35.设备属性表需要开发人员对设备的每个属性进行描述,标明设备属性的数据类型,设备属性的描述和单位信息等。描述过程可以通过编写json的方式进行录入,更进一步可以采用前端界面的方式进行描述录入,这里为方便说明,以json格式的方式进行说明,以温湿度设备为例,其设备属性表的伪格式如下:
[0036][0037]
事件描述表主要描述设备某一时间段发生的事件,其伪格式如下:
[0038][0039]
协议生成阶段:
[0040]
该协议的生成的格式描述如下:
[0041]
报文帧基本单元为字节,每个字节包含八个数据位。
[0042]
协议版本为一个字节,范围为0~255,通过协议版本号,作为本报文版本信息,通过协议版本号的区分新旧协议,从而对新旧协议进行兼容。
[0043]
时间戳由4字节无符号整型组成,代表时间戳是从1970年1月1日 (utc/gmt的午夜)开始所经过的秒数,表示范围为1970年1月1日到2106 年2月7日。
[0044]
id号为该设备识别号,为8个字节
[0045]
功能码由一字节构成,功能码定义见表3:表3功能码定义表。
[0046]
tlv是一种可变格式,由tag标签、lengh长度、value值组成。主要参考的是参考protobuf的tlv格式。tag由数据类型和编号组成,最小为一个字节。length为两个字节,有些数据类型可以不传。其中数据类型和length 的关系如下:表5数据类型表。
[0047]
tag编码表主要对设备的属性和事件进行编码,对属性和事件做唯一标识,例如设备属性如下:电压,电流,电功率。设备事件有设备用电量,那么可以给设备进行编码,编码如下:表6属性编码表和表7事件编码表。
[0048]
为了方便理解,这里直接举例说明一下tag标签的编码方式,例如设备的电流的属
性编号为0x01,数据类型是float,电流为23.5a,那么他的tag 编码将会是:表8温度tag格式。
[0049]
d7为扩展标志位,由于属性编号0x01,可以用4位可以表示,所以无需扩展。d2-d0表示数据类型,由表3可以知道float类型的编号为1,填入其中。完整的数据为:表9温度完整数据格式。
[0050]
可以看出表示温度数据的tag只需要多一个字节就可以完整描述,大大提高了编码压缩率。
[0051]
tag标签的d0位为扩展位,如果属性编号大于16的话,第一个字节的扩展标志位置为1,例如上面的温度的tag为16,那么tag变成如下表所示的结果:表10温度tag格式。
[0052]
d15为扩展标志位,由于属性编号0x16无法用4位可以表示,所以需要扩展字节,d15置为1。接着发现可以用两个字节表示,所以第二个字节的拓展标志位置d7置为0。而属性编号0x16将用d3-d6,d8-d14来表示,d2-d0 表示数据类型,由表3可以知道float类型的编号为1,填入其中。
[0053]
属性上传和事件上传有不同种tlv的编排方式,这里简要说明一下
[0054]
1.属性上传:表11属性上传格式表。
[0055]
2.事件上传:表12事件上传格式表。
[0056]
生成阶段:接下来生成器通过上一步格式进行进一步的代码生成,其会生成两种类型的代码,一种用于嵌入式设备的c语言代码,一种用于服务器解码用的代码(针对后台开发的语言选择生成不同类型的代码),还有一种是用于设备模拟器的代码。
[0057]
其中c语言的代码主要是将所有属性封装成结构体进行描述,在调用过程需要进行结构体初始化,结构体赋值,结构体编码的几个流程。结构体初始化的过程主要是将结构体的属性置为空,由于c语言的基本数据类型没有空的概念,所以会将其置为平时取值不到的值,例如int32取int32的最小值。接下来是结构体赋值,嵌入式开发人员将需要上传的属性进行赋值即可。结构体编码,结构体编码时开发人员调用相关的函数进行编码上传即可。
[0058]
服务器代码可针对服务器开发语言进行编码代码的自动生成,输入是设备传上来的二进制流数据,输出是json格式的字符串。
[0059]
接下来是规定传输消息,需要开发人员选择相关的设备属性或者需要上传的设备事件,下发的设备消息,作为单条消息的规范,用于后续模拟器代码的生成和数据规范文档的生成。
[0060]
模拟器代码主要是用于设备模拟的代码,通过上述规定的传输消息,测试人员通过选择发送消息,实现设备端的模拟,解耦硬件开发和平台开发,完成快速开发。
[0061]
而数据规范文档将上述规定的传输消息进行文本化的说明,例如规定了一分钟上传一条温湿度数据,那么生成的数据规范文档可以如下所示
[0062]
标题:温湿度数据上传
[0063]
说明:一分钟上传一次
[0064]
消息格式:
[0065]
{
[0066]“deviceid”:123,
[0067]“temp”:2.2,
[0068]“humid”:3.3
[0069] }
[0070]
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1