远程控制-通信协议解读

    这篇文章介绍单片机与云平台的通讯协议,了解硬件和云平台的通信格数据式,以及在此协议基础上如何自定义自己的通信协议!

    通信协议主要是为了解决设计的标准化问题,通信的各方都按照标准化的协议进行通信发送数据,彼此才能正确接收和理解数据。简单来说一个人说四川方言,一个人说德语,这两人是聊不到一块去的。

通信协议下载链接: https://pan.baidu.com/s/1oAhtvED1rEW9tT5OUNpLLA 提取码: trf2

协议的数据包结构和定义如下:

1、数据说明

1.1、数据类型

协议中传输的数据数据类型如上图

1.2、传输规则

协议采用大端模式传输字和双字

2、数据包结构和定义

完整的数据包包含了七部分,起始符、命令单元、唯一设备号、数据单元加密方式、数据单元长度、数据单元、校验码

数据包结构和定义

3、命令单元

3.1、命令标识

命令标识采用两个字节表示,是发起方的唯一标识,告诉对方这条数据具体是用来干啥的,本系统目前只使用到了实时信息上报和控制命令

命令标识定义

3.1、应答表示

    当命令的被动接收方应答标志不是OXFE时,此包表示为应答包。当服务端发送应答时,应变更应答标志,保留报文时间删除其余报文内容并重新计算校验位。

4、时间定义

5、数据单元格式和定义

数据单元由数据采集时间、信息类型标识、信息体构成。其中时间的格式见上面的“4、时间定义”

5.1、信息类型标识定义

这里定义一些信息类型标识,比如0x03是基础控制,单片机收到0x03就知道上位机下发的是控制指令,然后再解析控制的灯、蜂鸣器数据,数据从信息体定义查看。如果你需要自定义,0x80以前的命令都是系统自用,你可以从0x80开始自己定义属于你的命令!

5.2、信息体定义

从这儿能看到信息类型标识0x03,对应的信息体有灯和蜂鸣器两个字节。单片机收到0x03的信息后,肯定有两个字节的控制内容,比如解析灯这个字节是0x02那么就对应的开启灯,对应的解析这两个字节的数据做对应的控制即可;如果发现某个字节是0x00,那么就不做任何操作;

6、校验码

    命令的倒数第一位是校验码,采用BCC异或校验法;从命令单元的第一个字节开始,一直到校验码前一字节为止;我在网上找到一个网站很好用,可以验证BCC加密:http://www.ip33.com/bcc.html

js:

function checkCBC(recv){

var bcc=0x00;

    for(i=0;i

    {

  bcc^=recv[i];

    };

    return bcc;

}

c语言:

unsigned char CheckBCC(unsigned char len, unsigned char *recv){

unsigned char bcc = 0x00;

unsigned char i=0;

 for(i=0;i

    {

        bcc^=recv[i];

    };

    return bcc;

}

7、通信示例

建议在做硬件开发时,先用一些PC软件模拟硬件和云平台通信,如果这些软件模拟的数据能正常和云平台通信,那么单片机也采用这种数据格式,很快就调试通;

欢迎各位老板转发和点在看!

本文参考 GB∕T 32960.3-2016 电动汽车远程服务与管理系统技术规范 第3部分:通信协议及数据格式

你可能感兴趣的:(远程控制-通信协议解读)