理疗仪设备通讯文档-系统文档
描述
规约
本文档所述的协议是用以东骏科技有限公司物联网服务平台和慢充设备的数据交互。
客服(技术)联系方式
杭州东骏科技有限公司
电话:0571-87017551
手机:13082852087
兼容性
仅适用于授权设备。
词汇表
端口:充电时使用的接口,设备可以单独控制的电力输出结构。
端口编号:端口的程序代码,和设备编号共用用以表示端口在系统中的唯一值。端口编号必须以数字顺序编码,每台机器端口编号不得跳跃,不得重用。
响应类型:上报服务端的数据响应类型。分为即时响应上报和设备主动上报。
会话ID: 由服务端生成,用以区分不同的命令数据链。
网络通讯协议
本章节内容定义通讯模块和服务器之间的通讯协议。
通讯方式
- 数据上报:string字符串
- 指令数据:定长报文
- 通讯网络协议:TCP
关于粘包
由于服务器操作系统在处理TCP通讯时,将数据包转换成流传输给应用层,在数据频率高或者并发高的情况下很容易出现粘包,单片机受内存限制将不处理粘包,所以服务器在发送数据的时候需要注意的是尽量不要以特别高的频率向单片机发送数据,单片机如果接收到数据有粘包则只能处理前面一包的数据,后面的数据将会被丢弃,服务器可以通过重发机制避免粘包对业务产生影响,同时在很偶尔的情况下服务器发送数据可能出现分包(虽然现在大部分服务器发送慢充这样的数据不会出现分包),如果大量出现分包,请调整服务器网络参数设置,如果同一条数据被分包发送间隔大于2s将被单片机将在接收到后面的数据之前就认为前面的数据是非法的。同时因为服务器内存资源充足,建议服务器尽量对接收数据进行粘包处理。
协议结构
命令结构
定义:服务器发送,通讯模块接收的数据报文。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
1:开始标识(1byte) “_”
2:报文长度(3byte)(ASCII数字)
3:命令(3byte)(英文大写,第一字节A为保留字段)
4:会话ID(6byte)(每一字节0x00-0x3D之间数字+偏移量0x31,当然如果使用A-Za-z0-9就一定再这个范围之内了,也就满足要求了),每次不同的通讯的会话ID都需要不一样(服务器发起的通讯至少连续的20次通讯不一样,除了特殊说明以外,当然我们的建议还是让每次通讯的会话ID尽可能的不一样),通常设备会在获取到服务器指令执行以后需要回复结果的会返回相同的会话ID给服务器,服务端可以通过会话ID获得设备当前回应的数据是哪一个会话的。同一个会话ID设备会认为是同一次通讯的重复发送,如果设备已经处理了相关的指令,就会丢弃之后相同会话ID的指令。设备由于内存限制,比对的会话ID是之前10次通讯的会话ID,为了可靠期间服务端只要保证连续的20次服务器发起的通讯会话ID不一致就可以了确保设备不会触发丢弃操作而影响指令的执行。另外如果有些命令服务器为了使设备一定收到,但设备只需要执行一次的,这样的命令多次发送用同一会话ID发送就可以了
5:分隔符(1byte) “/”
6:参数(如果没有参数则没有该部分)
7:结束标识(2byte) (0x0D 0x0A)
响应结构
定义:通讯模块发送,服务器接收的报文。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
1:开始标识(1byte) “_”
2:响应类型(2byte) PG-ping,DV-设备号(IMEI),ID-SIM卡ICCID号,CM-客户端命令,RP-数据上报,RS-命令响应, RJ-Json数据上报
3:命令(3byte)(大写英文,回传服务器请求的命令,如果没有服务器请求则为AAA)
4:会话ID(6byte)(无服务器会话ID则返回”000000”,文档中指令的会话ID有特殊定义的,已定义为准)
5:内容长度(3byte)(ASCII数字)6的长度
6:内容(内容长度可以为空)
7:结束标识(2byte) (0x0D 0x0A)
命令限制
- ADV(设备号IMEI号) AID(SIM卡ICCID号) AXT(心跳) AAA(空指令) 为系统内置命令不能用于其他接口
- 业务级别的接口命令不得用 A 开头
业务协议
获取服务端配置
状态查询请求
关联设备命令:0x01
发送方 | 通信模块 |
说明 | 询问设备当前应该处于的状态 |
开始标志 | 1byte,“_” |
响应类型 | 2byte,RP |
命令 | 3byte,CZT |
会话ID | 6byte,A70001 |
内容长度 | 3byte,表示内容长度,ASCII数字表示 |
内容 | 1 |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ RP CZT A70001 001 1 <0x0D> <0x0A>
状态查询响应
发送方 | 服务器 |
说明 | 服务端应答当前设备应处于的状态 |
开始标志 | 1byte,“_” |
报文长度 | 3byte,表示整个报文的总长度,ASCII数字表示 |
命令 | 3byte,CZT |
会话ID | 6byte,服务器生成 |
分隔符 | 1byte,“/” |
参数 | 当前状态(Y-启动时间为运行时间长度,N-停止,S-启动后在重置时间时运行时间清零,#分割),
重置时间(时-分,HH-MM格式,#分割), 当前时间(1970年的秒数) |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ 016 CZT 123456 / N#12-00#321784732189 <0x0D> <0x0A>
下发启动命令
下发启动命令
发送方 | 服务器 |
说明 | 服务端下发启动命令 |
开始标志 | 1byte,“_” |
报文长度 | 3byte,表示整个报文的总长度,ASCII数字表示 |
命令 | 3byte,CQD |
会话ID | 6byte,服务器生成 |
分隔符 | 1byte,“/” |
参数 | 命令状态(Y-启动时间为运行时间长度,N-停止,S-启动后在重置时间时运行时间清零,#分割),
运行时间(时-分,HH-MM格式,#分割), 当前时间(1970年的秒数) |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ 016 CZT 123456 / N#12-00#321784732189 <0x0D> <0x0A>
启动命令回应
发送方 | 通信模块 |
说明 | 收到启动命令之后回应 |
开始标志 | 1byte,“_” |
响应类型 | 2byte,RS |
命令 | 3byte,CQD |
会话ID | 6byte,服务器生成 |
内容长度 | 3byte,表示内容长度,ASCII数字表示 |
内容 | S-成功,F-失败 |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ RS CQD 123456 001 S <0x0D> <0x0A>
设备完成上报
发送方 | 通信模块 |
说明 | 设备在结束运行状态后上报服务端 |
开始标志 | 1byte,“_” |
响应类型 | 2byte,RP |
命令 | 3byte,CJS |
会话ID | 6byte,A70003 |
内容长度 | 3byte,表示内容长度,ASCII数字表示 |
内容 | 00 |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例: _ RP CJS 123456 002 00 <0x0D> <0x0A>
二维码查询
二维码查询接口
发送方 | 通信模块 |
说明 | 查询服务端设备的二维码 |
开始标志 | 1byte,“_” |
响应类型 | 2byte,RP |
命令 | 3byte,CWM |
会话ID | 6byte,A70002 |
内容长度 | 3byte,表示内容长度,ASCII数字表示 |
内容 | 1 |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ RP CZT A70002 001 1 <0x0D> <0x0A>
二维码查询响应
发送方 | 服务器 |
说明 | 服务端应答当前设备应处于的状态 |
开始标志 | 1byte,“_” |
报文长度 | 3byte,表示整个报文的总长度,ASCII数字表示 |
命令 | 3byte,CWM |
会话ID | 6byte,服务器生成 |
分隔符 | 1byte,“/” |
参数 | 二维码字符串(必须为ASCII字符) |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ 048 CZT 123456 / http://www.poseidong.com/erweima <0x0D> <0x0A>
设备启动/暂停
查询设备运行状态
发送方 | 服务器 |
说明 | 服务端查询设备启动或暂停的状态 |
开始标志 | 1byte,“_” |
报文长度 | 3byte,表示整个报文的总长度,ASCII数字表示 |
命令 | 3byte,CCX |
会话ID | 6byte,服务器生成 |
分隔符 | 1byte,“/” |
参数 | 固定为0 |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ 017 CCX 123456 / 0 <0x0D> <0x0A>
设备响应运行状态
发送方 | 通信模块 |
说明 | 模块响应服务端设备运行状态 |
开始标志 | 1byte,“_” |
响应类型 | 2byte,RS |
命令 | 3byte,CCX |
会话ID | 6byte,服务端下发 |
内容长度 | 3byte,表示内容长度,ASCII数字表示 |
内容 | 1-启动,0-暂停 |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ RS CCX 123456 001 1 <0x0D> <0x0A>
设备启动/暂停
发送方 | 服务器 |
说明 | 服务端下发设备启动或暂停状态 |
开始标志 | 1byte,“_” |
报文长度 | 3byte,表示整个报文的总长度,ASCII数字表示 |
命令 | 3byte,CST |
会话ID | 6byte,服务器生成 |
分隔符 | 1byte,“/” |
参数 | 1-启动,0-暂停 |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ 017 CST 123456 / 1 <0x0D> <0x0A>
设备启动/暂停响应
发送方 | 通信模块 |
说明 | 模块响应服务端执行情况 |
开始标志 | 1byte,“_” |
响应类型 | 2byte,RS |
命令 | 3byte,CST |
会话ID | 6byte,服务端下发 |
内容长度 | 3byte,表示内容长度,ASCII数字表示 |
内容 | 执行的结果(S-成功,F-失败) |
结束标志 | 2byte,\r\n(0x0D 0x0A) |
示例:
_ RS CST 123456 001 S <0x0D> <0x0A>