文章作者:激萌の小宅
促销:¥0
价格:¥0
0 天
有效期
0
总销量
累计评价
参考视频如下,视频来源《GPS定位系统-MVC-自定义GPRS通讯协议》
备注:视频中的部分操作可能会因为Visual Studio的版本差异有所不一样,总体操作流程都是一样的,请自行尝试。视频中采用的是安信可的A9G模块,和当前系列使用的EC-01G模块在AT指令上可能存在差异,这里以博客内容为主,视频主要是讲操作流程。
工程源码下载:GPS定位EC-01G模块系列教程源码下载页(物联网)
IDE环境:Visual Studio 2022
整个项目的前端部分,在上一节中已经基本完成了,当前章节主要是教大家如何指定通信协议,不讲代码,同时也是为了后续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校验。
按照前面的说明,我们最终的协议格式如下:
网络识别码
设备类型
设备号
包号
功能码
数据
校验码