大家可能看到网络上的很多文章用的是TLV(Tag、Length、Value)格式数据。实际中,可以根据实际需要进行修改。我们这里稍微改一下,实际上也是大同小异的。
我们这里的ITLV各字段的含义:
I:ID或Index,用于区分是什么数据。
T:Type,代表数据类型,如int、float等。
L:Length,表示数据的长度(Value的长度)。
V:Value,表示实际的数据。
其中,I、T、L是固定长度的,在制定具体的数据协议之前,需要评估好当前项目的数据会有多少、数据的最大长度是多少,考虑好后续数据扩展也可以保证协议通用。一般I设置为1~2字节,T设置为1字节,L设置为1~4字节。
下面我们制定一个格式:
实际中,如果在物联网系统中数据传输,我们用户自定义的协议字段可能就只包含如上四个字段就可以了。比如我们公司的云平台上的用户数据格式用的就是类似ITLV这样的格式。用户在制定协议时的协议字段包含如上字段就可以了。
没有包头做一些数据区分,也没有校验字段,只包含如上字段就能保证数据可靠传输吗?
因为端云通信采用MQTT,基于TCP,TCP的特点就是可靠的,网络协议中会带有校验。并且,实际在传输用户数据时,还会再用户数据之前增加一些字段区分这就是用户数据。所以,其实基于它的设备SDK来进行开发,操作的数据就是如上的数据。
但是,如果应用于板与板之间的通信,只包含如上字段自然是有风险的。我们至少还需要还要包头、校验字段。
实际中根据需要还可以增加其它字段,比如如果需要分包发送,还需要增加包号;如果多块板之间进行通信,还需要增加发送数据目标地址等。
这里我们增加包头与校验字段:
其中:
(1)Head固定为0x55、0xAA。
(2)Length为1字节,即Value最大为256B。
|