搜索
bottom↓
回复: 21

分享一个协议(智能设备通信协议(草稿)

[复制链接]

出0入8汤圆

发表于 2015-8-9 18:05:36 | 显示全部楼层 |阅读模式
本帖最后由 lindabell 于 2015-8-9 18:10 编辑

前段时间初读MQTT协议,订阅与发布的思想很不错,但是协议没有校验;我个人觉得没有校验后患无穷;
也许在TCP协议下可能不会出现什么问题,但是工业上的话就会很多问题了。
分享一下我一个协议草稿,大家多提提意见,希望适用性比较好,但也不缺扩展性。

智 能设备通信协议(Smart Devices Protocol)

日 期

备 注

修 改人

2015.7.14

初 版

80eboy



本 协议是一对多协议,即一台服务器对应多台终端;协议规定了基本帧格式,还定义了一些常用命令。

协 议中保留了部分命令和设备类型,协议中也给出了标准设备的具体通信协议。如果用户的设备时协议中的标准设备,那么应该使用标准设备给出的协议。

协 议格式:

名称:

帧头

长度

设备类型

设备ID

命令

数据

校验

字节数:

1

1

1

2

1

n

1



帧头: 固定为0X55

长度: 表示长度以后的字节数,包括设备类型、设备ID、命令、数据、检验的总字节数

设备类型: 表示设备的类型

设备ID: 表示本设备的ID编号

命令:D7位为1时是服务器命令,

     为0时是终端设备命令

数据:

校验: 是没有转义之前,从帧头到数据的最后一个字节的异或值



转义: 整帧数据把校验值计数好并填入到相应位置,再进行转义(帧头不用转义)

0xAA: 0xAA 0x01

0x55: 0xAA 0x02



设备类型:(0x00~0x7F保留给协议,0x80~0xFF给用户自定义)



协议保留命令范围

终 端:   0x00~0x1F (共32个 命令)

服 务器: 0x80~0x9F(共32个命令)

用户自定义命令范 围

终 端:   0x20~0x7F (共95个 命令)

服 务器: 0xA0~0xFF(共95个命令)



通 用命令(协议保留命令):

0x00: 终 端设备通 用应答命 令 1字节数据

数 据定义:

0x00:正确

0x01:错误

0x02:命令无效

0x03:超时

0x80: 服 务器通 用应答命 令 1字节数据

数 据定义:

0x00:正确

0x01:错误

0x02:命令无效

0x03:超时



0x01 终 端鉴 权 命 令(1字节)+鉴 权码(n字节)

0x81 服 务器鉴 权 命 令(1字节)+鉴 权码(n字节)

终 端命令:

0x00:鉴权请求+鉴权码

0x01:鉴权成功 (无鉴权码)

0x02:鉴权失败 (无鉴权码)

0x03:拒绝鉴权  (无鉴权码)  (由于多次鉴权失败,为了防止被破解鉴权协议)

服 务器命令:

0x00:鉴权+鉴权码

0x04:请求鉴权 (无鉴权码)

作用:用于鉴 别服务器是否安全

说明:终端发 送鉴权码到服务器,服务器应该根据终端鉴权码生产另一个鉴权码返回给终端,终端判断鉴权码是否符合加密要求来决定是否受这个服务器控制。

1)终端发起鉴权

终端发送:0x00+鉴权码

服务器回复:0x00+鉴权码

终端检查鉴权 码后回复:0x01(鉴权成功)或0x02(鉴权失败)

2)服务器发起鉴权

服务器发送:0x04(请求鉴权)

终端收到后发 送:0x00+鉴权码 或  0x03(拒绝 鉴权)

服务器收到终 端鉴权码后发送:0x00+鉴权码

终端检查鉴权 码后回复:0x01(鉴权成功)或0x02(鉴权失败)



0x82 请 求设备信息 无数据

0x02 设 备信息

设 备类型(1字节)+设备ID(2字节)+硬件版本YYXX(2字节)+软件版本YYXX(2字节)+生产商字符串(n字节)"

例:服务器:55  05  XX  XX  XX   82  CRC

终端:   55  11  A0  00 01  02  A0  00 01  01 23  01 56  73 61 69 79 69  58

说明:

服务器:XX表示任意值

终端:11表示有17个字节

      A0表示设备类型

  0001表示设备ID

  02表示设备信息命令

     A0表示设备类型

  0001表示设备ID

  0123表示硬件版本是V01.23版本

  0156表示软件版本是V01.56版本

  73 61 69 79 69表示生产公司 是saiyi

      58是校验码



0x83    心 跳信号 无数 据

0x03 心 跳信号 无数 据

作用:维持长 连接



0x84 开 机 无 数据

终 端返回通用应答



0x85 关 机 无 数据

终 端返回通用应答



0x86 设 备升级   总包大小(2字节)+序号(2字节)+当前包大小(1字节)

0x06 设 备升级状态 数 据1字节

0x00:等待升级数据

0x01:升级完成

0x02:升级失败

0x03:检验码错误

0x04:不支持升级

注: 第0包应该发送升级数据的MD5码





标准设备列表:

设备类型

设备名称

命令

数据结构

应答数据结构

0xA0

灯光类

0xA0 设 置亮度

R(1字节)+G(1字节)+B(1字节)

通用应答

待添加。。。













非标准设备:

设备类型

设备名称

命令

数据结构

应答命令

应答数据结构

0x80

空气净化器

0xA0

负离子开





通用应答





0xA1

负离子关





通用应答





0xA2

设置风机档位



档位值(1字节)

通用应答





0xA3

指定时间关机



HHMMSS(2字节)

如:0x13 0x41 0x32

     表示13:41:32

通用应答





0xA4

定时

时间值(单位小时)(1字节)

通用应答





0xA5

设置自动模式



通用应答





0xA6

滤网清洗开





通用应答





0xA7

滤网清洗关





通用应答





待添加。。。









出0入8汤圆

 楼主| 发表于 2015-8-9 18:07:55 | 显示全部楼层
排版有些错位
在意的话可以移步 http://www.80eboy.com/blog/onet/SmartDevicesProtocol.html

出0入0汤圆

发表于 2015-8-9 18:23:16 | 显示全部楼层
高深的技术不懂,顶贴学习。

出0入0汤圆

发表于 2015-8-9 20:37:24 | 显示全部楼层
大神,很厉害定义的很好,怎么没有SN serial number  通讯过程中总会发生重传的情况,为了避免误处理
要主每发一条消息sn加一 从发一条消息sn加一 重传时不加

出300入477汤圆

发表于 2015-8-9 20:59:51 来自手机 | 显示全部楼层
转义忘了AA自身!

出0入0汤圆

发表于 2015-8-9 21:03:04 | 显示全部楼层
话说MQTT是基于TCP协议的上层协议,还需要加校验?

出0入8汤圆

 楼主| 发表于 2015-8-9 21:41:52 | 显示全部楼层
磊磊映画 发表于 2015-8-9 20:37
大神,很厉害定义的很好,怎么没有SN serial number  通讯过程中总会发生重传的情况,为了避免误处理
要主 ...

恩这个不错
感觉越写越写大了,我初衷是小型单片机也能使用的;现在感觉协议好大啊

出0入0汤圆

发表于 2015-8-9 22:13:45 来自手机 | 显示全部楼层
很不错,支持

出200入0汤圆

发表于 2015-8-9 23:33:40 来自手机 | 显示全部楼层
支持,学习

出0入0汤圆

发表于 2015-8-10 00:47:39 | 显示全部楼层
分享一个实际运用的协议:
帧头0x1002+数据长度N+源设备地址+目的设备地址+数据N+CRC16+帧尾0x1003
对0x10转义,发送时,在数据中出现了,增加一个0x10,接收时删除一个即可。

出0入0汤圆

发表于 2015-8-10 08:26:58 | 显示全部楼层
都能自己写协议了?

出0入0汤圆

发表于 2015-8-10 08:30:10 来自手机 | 显示全部楼层
有各种平台的库支持吗?有支持才是王道

出0入0汤圆

发表于 2015-8-10 08:44:22 | 显示全部楼层
lindabell 发表于 2015-8-9 18:07
排版有些错位
在意的话可以移步 http://www.80eboy.com/blog/onet/SmartDevicesProtocol.html ...

谢谢,分享

出0入8汤圆

 楼主| 发表于 2015-8-10 08:46:45 | 显示全部楼层
3050311118 发表于 2015-8-10 08:30
有各种平台的库支持吗?有支持才是王道

还没有呢,要是能讨论出个比较好的协议的话,库支持会相对容易的。

出0入0汤圆

发表于 2015-8-10 08:54:19 | 显示全部楼层
其实协议这种东西还是参考成熟的比较好,国内可以参考一下电网规约,毕竟人家是实践过的。

出0入0汤圆

发表于 2015-8-10 09:25:12 | 显示全部楼层
先标记了,谢谢分享

出0入0汤圆

发表于 2015-8-10 09:36:18 | 显示全部楼层
链路层走IP协议?楼主你没说应用对象。

出0入8汤圆

 楼主| 发表于 2015-8-10 13:39:34 来自手机 | 显示全部楼层
styleno1 发表于 2015-8-10 09:36
链路层走IP协议?楼主你没说应用对象。

像modbus那种,和链路不相关的

出10入95汤圆

发表于 2017-5-4 12:38:22 | 显示全部楼层
学习学习,储备一下,多谢分享

出0入0汤圆

发表于 2017-6-8 09:26:10 | 显示全部楼层
Mark,谢谢分享

出0入0汤圆

发表于 2017-6-8 22:07:49 | 显示全部楼层
弱弱问一句协议写完 了没有,

出0入8汤圆

 楼主| 发表于 2017-6-9 08:27:49 | 显示全部楼层
蜗牛蜗牛 发表于 2017-6-8 22:07
弱弱问一句协议写完 了没有,

已经完成了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-1 02:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表