文章作者:激萌の小宅
促销:¥0
价格:¥0
0 天
有效期
0
总销量
累计评价
工程源码下载:GPS定位系统VUE版本源码下载
在集成TCP通讯之前,我们需要提前制订好我们的通讯协议,同时也是为了后续TCP通信做准备。在物联网通讯中,通讯协议的设计,有时也是直接决定你系统稳定性的一个关键指标。
关于我们协议中使用的数据类型说明如下:
数据类型
描述及要求
BYTE
无符号单字节整型(字节,8位)
WORD
无符号双字节整型(字,16位)
DWORD
无符号四字节整型(双字,32位)
BYTE[n]
n字节
BCD[n]
8421码,n字节
STRING
GBK编码,若无数据,置空
我们物联网通信协议一般都是按modbus的协议格式来设计的,通常都会包含如下几个内容:
1、网络识别码:
网络识别码也是校验方式的一种,其主要功能是用于识别数据包的包头,在串口等低速率或者高速率的情况下,如果接收处理的不好,就很容易出现数据被拆包和和拼包的现象。此时,这个字段就会变的非常有用,可以用来识别一个包的起始位置,然后对拼包或者拆包数据进行重新组装,从而实现数据还原,当然,该字段你不一定只用一个字符来表示,同样的,你也可以改成任意N个字符来作为包头使用。
2、数据包长度:
通常该字段并非一定需要,可有可无。该字段通常是为了说明当前数据包有多长,当出现拼包或者拆包现象时,你就可以通过该字段知道,当前数据包一共有多少个字符,这个能让你更准确的还原完整的数据包。当然了,当你同类型功能码的数据载荷长度是固定的时候,该字段的作用就不是特别大了,完全可以忽略,当你载荷长度属于动态的时候,并且很容易发生拆包和拼包现象的时候,最好还是加上该字段,这对你还原数据还是很有用的。
在当前GPS定位系统项目中,由于数据载荷长度基本都是固定的,所以在设计协议时,该字段我们目前可以忽略。
3、设备类型:
该字段的作用是用于区分下位机类型的,比如GPS设备你可以定义为1,温湿度设备,你可以定义为2,以此类推。
一般情况下,同种类型的设备共用同种设备类型ID。
4、设备号:
设备号的作用是:当同种设备的类型的数量很多时,设备号的作用是对每个设备进行独立编号。这样,系统就能对下位机设备进行详细区分了。
5、包号:
包号的作用主要是为了确保每个通讯包的唯一性,当相同的命令需要重复发送时,此时就可以通过包号来做区分,该字段通常是按不断累加的方式进行递增的,当达到最大值时,再从0开始重新计数,通常,我们可以通过判断包号的连续性,来判断通讯的稳定情况,从而确保系统的稳定性。
6、功能码:
功能码的作用主要是为了说明当前数据包属于哪种功能,比如:开、关或者查询等等。
7、数据:
该字段属于当前数据包主体部分,保存了当前数据包需要发送的所有数据内容,并且数据长度可以动态变化。
当前GPS定位系统项目中,我们的GPS坐标数据就是放在该字段中。
8、校验码:
校验方式,你可以采用单字节的异或校验,或者双字节的CRC16校验,在数据较为简单的情况下,我们一般采用异或校验。如果通讯数据种类较多,数据长度经常动态变化,我这里推荐采用CRC16校验。
按照前面的说明,我们最终的协议格式如下:
网络识别码
设备类型
设备号
包号
功能码
数据
校验码
举例
发送:CC 01 00 01 00 00 11 37 38 36 36 64 62 32 32 66 33 39 34 34 37 35 32 39 39 32 31 39 37 62 39 61 65 39 39 36 36 32 64 00 00 00 00 B5 F4 78 00 27 CB FD A4
接收:CC 01 00 01 00 00 01 00 CD
发送部分解析:
字段
含义
CC
网络识别码 0xCC
01
当前的设备类型 1
00 01
设备号 1
00 00
包号 0
11
功能码 0x11
37 38 36 36 64 62 32 32 66 33 39 34 34 37 35 32 39 39 32 31 39 37 62 39 61 65 39 39 36 36 32 64 00 00 00
用户ID:
7866db22f3944752992197b9ae99662d
00 B5 F4 78
精度:119.24600
00 27 CB FD
纬度:26.08125
A4
和校验
接收部分解析:
功能码 0x01,反馈码
00
结果码,0x00成功,0x01失败
CD