慢充设备通讯文档-系统接口(老板,2018-6以前)

来自东骏科技波塞冬平台开发者文档
跳转至: 导航搜索

目录

版本变更说明

2018-4-10

【设置充电站5档计费功率、比例】-【设置功率比例】增加了功率设置的注意事项。

【设置充电站5档计费功率、比例】-【设置功率比例应答】增加了对设置失败的支持。

【 ID卡刷卡充电充值】-【刷卡向模块发送卡号和扣费金额】增加了对退费的支持。

【充值指令:给卡充值+发送卡余额给后台数据同步】-【充值-回复充值】增加了卡号。

2018-3-29

【ID卡刷卡充电充值】增加了对数字卡号生成规则的说明。

2018-3-27

【设备充电】-【设备启动请求】增加了对功率档位的支持。

【查询设备端口状态】-【端口查询请求】增加了对功率的设置。

【充电完成通知】-【设备充电完成上报】停止原因增加了“因充电器功率过大”。

【查询某个端口的充电状态】-【查询端口当前的充电状态响应】增加了对剩余功率退款的支持。

【远程开关机】新增远程开关机的支持。

【ID卡刷卡充电充值】新增了ID卡消费和充值的支持。

【设置充电站充满自停、刷卡退费】新增了设置充电站充满自停、刷卡退费

【设置充电站5档计费功率、比例】新增了设置充电站5档计费功率、比例(特殊说明,目前支持3档,后面两档数据目前默认为0)

【读取设备5档计费功率、比例】新增了读取设备5档计费功率、比例

对应硬件版本:2.2.7

描述

规约

本文档所述的协议是用以东骏科技有限公司物联网服务平台和慢充设备的数据交互。

客服(技术)联系方式

杭州东骏科技有限公司

电话:0571-87017551

手机:13082852087

兼容性

仅适用于授权设备。

词汇表

端口:充电时使用的接口,设备可以单独控制的电力输出结构。

端口编号:端口的程序代码,和设备编号共用用以表示端口在系统中的唯一值。端口编号必须以数字顺序编码,每台机器端口编号不得跳跃,不得重用。

响应类型:上报服务端的数据响应类型。分为即时响应上报和设备主动上报。

会话ID: 由服务端生成,用以区分不同的命令数据链。

网络通讯协议

本章节内容定义通讯模块和服务器之间的通讯协议。

通讯方式

  1. 数据上报:string字符串
  2. 指令数据:定长报文
  3. 通讯网络协议: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)

命令限制

  1. ADV(设备号IMEI号) AID(SIM卡ICCID号) AXT(心跳) AAA(空指令) 为系统内置命令不能用于其他接口
  2. 业务级别的接口命令不得用 A 开头

业务协议

查询设备端口状态

端口查询请求

关联设备命令:0x01

发送方 服务器
说明 服务端询问设备状态
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,STA
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 STA DSfFGd / <0x0D> <0x0A>

端口查询响应

关联设备命令:0x01

发送方 通信模块
说明 返回服务端查询内容
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,STA
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 端口号

状态(1-端口空闲,2-端口正在使用,3-端口禁用,4-端口故障)

(“/”端口分隔符)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS STA DSfFGd 011 1 : 0 / 2 : 1 / 3 : 1 <0x0D> <0x0A>

设备充电

最后变更版本:2.2.7,变更日期:2018-3-23

关联设备命令:0x02

设备启动请求

发送方 服务器
说明 支付完成后,启动设备,开始充电
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,RUN
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 端口字段长度(2byte)

端口号(任意长度)

充电时长字段长度(2byte)

充电时长(任意长度)

功率档位字段长度(2byte)

功率档位(任意长度,0-255,0表示不选择)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 023 RUN 123456 / 01 2 02 60 01 1 <0x0D> <0x0A>

设备启动响应

发送方 通信模块
说明 响应服务端启动情况
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,RUN
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 状态(1-成功,2-故障,3-端口已用)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS RUN 123456 001 1 <0x0D> <0x0A>

设备参数设置

关联设备命令:0x08、0x0C

变更设备参数设置

发送方 服务器
说明 设置设备的参数
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DCC
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 3byte最大输出功率,若该值为0时,表示不设置这个值(不足3byte在前面补零)

3byte用户每次刷卡消耗的金额,单位:角(不足3byte在前面补零)

3byte第一个币的充电时间(0-999分钟)或者充电电量(0-9.99度)(不足3byte在前面补零)

3byte第二个币的充电时间(0-999分钟)或者充电电量(0-9.99度)(不足3byte在前面补零)

3byte第三个币的充电时间(0-999分钟)或者充电电量(0-9.99度)(不足3byte在前面补零)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 031 DCC 123456 / 100 010 030 070 120 <0x0D> <0x0A>

变更设备参数设置响应

发送方 通信模块
说明 返回服务端设置情况
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DCC
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 1byte 1-成功,0-失败
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DCC 123456 001 1 <0x0D> <0x0A>

设备参数查询请求

发送方 服务器
说明 查询设备设置的参数
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DCN
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 DCN 123456 / <0x0D> <0x0A>

设备参数查询响应

发送方 通讯模块
说明 返回服务端设置情况
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DCN
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 1、最大输出功率,若该值为0时,表示不设置这个值(#/#分割)

2、用户每次刷卡消耗的金额,单位:角(#/#分割)

3、第一次投币时长,单位:分钟(#/#分割)

4、第二次投币时长,单位:分钟(#/#分割)

5、第三次投币时长,单位:分钟

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DCN 123456 024 100 #/# 10 #/# 30 #/# 70 #/# 120 <0x0D> <0x0A>

设置IC卡、投币器是否可用

关联设备命令:0x09

更改IC卡、投币器是否可用

发送方 服务器
说明 设置投币器和IC卡是否可用
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DCD
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 1byte投币器开关设置:0-表示关闭 1-表示打开

1byte刷卡功能设置:0-表示关闭 1-表示打开

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 DCD 123456 / 0 1 <0x0D> <0x0A>

更改IC卡、投币器是否可用响应

发送方 通信模块
说明 返回服务端执行情况
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DCD
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 1byte 1-表示成功 0-表示失败
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DCD 123456 001 1 <0x0D> <0x0A>

端口锁定、解锁

关联设备命令:0x0A

设备端口锁定、解锁设置

发送方 服务器
说明 锁定/解锁设备指定端口
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DCG
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 2byte 端口号

1byte 0-锁定指令/1-解锁指令

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 019 DCG 123456 / 01 1 <0x0D> <0x0A>

设备端口锁定、解锁响应

发送方 通信模块
说明 返回服务端操作结果
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DCG
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 1byte 1-表示成功 0-表示失败
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DCG 123456 001 1 <0x0D> <0x0A>

远程停止充电

关联设备命令:0x0B

停止指定端口充电

发送方 服务器
说明 停止指定的充电端口(执行退款功能时使用)
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,RTN
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 2byte 端口号
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 RTN 123456 / 01<0x0D> <0x0A>

停止指定端口充电响应

关联设备命令:0x0B

发送方 通信模块
说明 返回服务端执行结果
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DCH
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 端口号#/#剩余时间(单位:分)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DCH 123456 001 1 #/# 60 <0x0D> <0x0A>

充电完成通知

最后更新版本:2.2.7,最后更新日期:2018-3-23

关联设备命令:0x05

设备充电完成上报

发送方 通信模块
说明 设备充电完成后,上报服务端
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,UWC
会话ID 6byte,A80005
内容长度 3byte,表示内容长度,ASCII数字表示
内容 充电端口#/#

充电剩余时间/电量(单位:分钟/度)#/#

停止原因(0-时间用完了,1-用户手动停止(拔插头或是按了停止按钮),2-充满自动停止,3-端口出现问题被迫停止,4-因充电器功率过大,5-刷卡退费结束)#/#

重传序号(通讯模块生成,该参数是后面DLB命令的参数,获取到充电完成就必须要发送DLB回应设备已经接收到,如果不回应,设备为了保证服务端收到该条消息会每隔一分钟重新发送)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP UWC A80005 017 1 #/# 70 #/# 2 #/# 56<0x0D> <0x0A>

删除重传队列

发送方 服务器
说明 服务端收到设备充电完成上报后,回应设备让设备删除重传列表中的该条数据。
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DLB
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 重传序号(通讯模块生成)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 DLB 123456 / 56 <0x0D> <0x0A>

线下消费上报

关联设备命令:0x03

设备上报投币数据

发送方 通信模块
说明 设备上报服务端投币数量
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,UTB
会话ID 6byte,A80006
内容长度 3byte,表示内容长度,ASCII数字表示
内容 投币数量(#/#分割)

端口(#/#分割)

重传序号:DLB重传序号,服务端接收到该指令以后必须立刻返回DLB通知设备收到此条数据,否则设备会一直发送直到服务端确认收到。该序号在返回DLB通知的时候需要带回来的序号。注意,为了防止DLB命令设备没有接收到导致设备重发而将同一条订单被识别成两条甚至多条,建议服务器将该功能的重传序号进行比对,即5分钟内如果上报的投币数据的重传序号相同,则认为是同一次投币订单。

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP UTB A80006 005 1 #/# 1 #/# 56 <0x0D> <0x0A>

删除重传队列

发送方 服务器
说明 服务端收到设备投币订单上报后,回应设备让设备删除重传列表中的该条数据。
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DLB
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 重传序号(通讯模块生成)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 DLB 123456 / 56 <0x0D> <0x0A>

设备上报刷卡信息

关联设备命令:0x04

发送方 通信模块
说明 设备上报服务端投币数量
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,USK
会话ID 6byte,A80007
内容长度 3byte,表示内容长度,ASCII数字表示
内容 卡号类型(0-默认 1-包月 2-普通)#/#

刷卡金额(单位:角)#/#

卡号(目前为0,卡号上报需硬件对接)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP USK A80007 010 2 #/# 20 #/# 0 <0x0D> <0x0A>

设备故障上报

关联设备命令:0x0D

发送方 通信模块
说明 设备上报服务端发生故障
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,DCE
会话ID 6byte,A80008
内容长度 3byte,表示内容长度,ASCII数字表示
内容 端口号#/#

故障类型(设备之定义)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP DCE A80008 010 2 #/# 20 #/# 0 <0x0D> <0x0A>

查询某个端口的充电状态

关联设备命令:0x06

查询端口当前的充电状态

发送方 服务器
说明 查询某个端口的充电状态
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DCA
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 2byte 端口号
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 DCA 123456 / 01<0x0D> <0x0A>

查询端口当前的充电状态响应

关联设备命令:0x06

发送方 通信模块
说明 响应某个端口的充电状态
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DCA
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 端口号:当前上报的端口

(#/#)

剩余时间/剩余电量:当前端口的充电剩余时间或者剩余电量

(#/#)

当前端口的瞬时功率:当前端口的瞬时功率,单位W

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DCA 123456 015 1 #/# 1234 #/# 1234 <0x0D> <0x0A>

查询消费数据

最后更新版本:2.2.7,最后更新日期:2018-3-23

关联设备命令:0x07

查询消费总额数据

发送方 服务器
说明 查询设备的消费总额
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DCB
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 固定值 0
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 DCB 123456 / <0x0D> <0x0A>

查询消费总额数据响应

发送方 通信模块
说明 返回查询到的消费总额数据
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DCB
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 刷卡总金额

(#/#)

投币总金额

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DCB 123456 009 100#/#100 <0x0D> <0x0A>

远程开关机

最后更新版本:2.2.7,最后更新日期:2018-3-23

关联设备命令:0x0E

打开或关闭充电站

发送方 服务器
说明 打开或关闭充电站
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DKB
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 开关机模式:1-代表关闭,0-代表开机
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 017 DCB 123456 / 1 <0x0D> <0x0A>

打开或关闭充电站响应

发送方 通信模块
说明 远程开打或关闭充电站的响应
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DKB
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 结果:1-表示成功,0-表示失败或不支持
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DKB 123456 001 1 <0x0D> <0x0A>

ID卡刷卡充电充值

关联设备命令:0x11、0x12

数字卡号对应规则:本命令支持的ID卡的卡号都是4个字节。比如硬件卡号的值“0x01 0x02 0x03 0x04”。而卡号在服务端系统中维护时为了方便操作需要转换成一个数字序列,我们规定这个数字序列是一个10位的固定长度的整数,比如“0016909060”,不足10位的在前面补零。该数字卡号的生成规则如下。


硬件卡号如下:

字节一 字节二 字节三 字节四


我们定义我们的数字在计算时使用uint32_t(32位无符号整形),卡号 = 字节一 << 24 + 字节二 << 16 + 字节三 << 8 + 字节四(<<代表左移)后的十进制数值,不足10个数字的在前面补零得到。

比如卡的硬件卡号是0x01 0x02 0x03 0x04那么,数字卡号就是 (00000001 00000010 00000011 00000100)2进制 = “0016909060”。

当然如果用户需要打印的卡号具有个性化的定义,用户只需要在制作卡的时候和服务端维护卡号做一个转换,本文档定义的规则要求只是确保服务端和通讯模块之间的通讯使用这种方式(能够对应)即可。


如果还不太明白,可以看下下面用计算器做的演示:上图输入的是原始的硬件卡号(十六进制的01 02 03 04),下图是转换成10进制的数字卡号

十六进制的原始硬件卡号

转换成十进制的数字卡号

刷卡向模块发送卡号和扣费金额

关联设备命令:0x11

发送方 通信模块
说明 刷卡向模块发送卡号和扣费金额
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,COI
会话ID 6byte,A80013
内容长度 3byte,表示内容长度,ASCII数字表示
内容 卡号:ID卡卡号( #/#分割)

刷卡扣费退费金额:1代表0.1元,0代表不扣费(#/#分割)

卡里余额:1代表0.1元(#/#分割)

卡类型:服务端设置的卡的厂家号或型号,ASCII数字(#/#分割)

端口:充电的端口号,ASCII数字(#/#分割)

状态:1byte,1-代表扣款成功,2-代表扣款失败 余额不足,3-代表退费成功(#/#分割)

重传序号:DLB重传序号,服务端接收到该指令以后必须立刻返回DLB通知设备收到此条数据,否则设备会一直发送直到服务端确认收到。该序号在返回DLB通知的时候需要带回来的序号。

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP COI A80013 035 1234567890#/#10#/#1000#/#1#/#1#/#1#/#56 <0x0D> <0x0A>

删除重传队列

发送方 服务器
说明 服务端收到设备ID卡付款上报后,回应设备让设备删除重传列表中的该条数据。
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DLB
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 重传序号(通讯模块生成)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 DLB 123456 / 56 <0x0D> <0x0A>

充值-上报卡信息

关联设备命令:0x12

发送方 通信模块
说明 卡充值步骤一:刷卡向模块发送卡号和扣费金额
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,COP
会话ID 6byte,A80014
内容长度 3byte,表示内容长度,ASCII数字表示
内容 卡号:ID卡卡号

卡里余额:1代表0.1元

卡类型:服务端设置的卡的厂家号或型号,ASCII数字

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP COP A80014 021 1234567890#/#1000#/#1 <0x0D> <0x0A>

充值-回复充值

关联设备命令:0x12

发送方 服务器
说明 卡充值步骤二:服务器回复充值
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,COQ
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 卡号:10byte,ID卡卡号

设置金额:5byte,单位:0.1元(最多65500)

卡类型:5byte,服务端设置的卡的厂家号或型号,ASCII数字

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 021 COQ 123456 / 01000 00001 <0x0D> <0x0A>

充值:设备再回复

关联设备命令:0x16

发送方 通信模块
说明 卡充值步骤三:设备再次应答不服气充值是否成功
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,COQ
会话ID 6byte,服务器下发
内容长度 3byte,表示内容长度,ASCII数字表示
内容 卡号:ID卡卡号(#/#分割)

卡里余额:1代表0.1元(#/#分割)

卡类型:服务端设置的卡的厂家号或型号,ASCII数字(#/#分割)

充值结果:1byte,1-充值成功,0-充值失败(#/#分割)

重传序号:DLB重传序号,服务端接收到该指令以后必须立刻返回DLB通知设备收到此条数据,否则设备会一直发送直到服务端确认收到。该序号在返回DLB通知的时候需要带回来的序号。

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS COQ 123456 026 1234567890#/#1000#/#1#/#1#/#56 <0x0D> <0x0A>

删除重传队列

发送方 服务器
说明 服务端收到设备ID卡充值再回复上报后,回应设备让设备删除重传列表中的该条数据。
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DLB
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 重传序号(通讯模块生成)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 DLB 123456 / 56 <0x0D> <0x0A>

设置充电站充满自停、刷卡退费

关联设备命令:0x13

设置充满退费参数

发送方 服务器
说明 设置充电站充满自停、刷卡退费
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,CHI
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 充满自停设置:1byte,0-不自停,1-自停

刷卡退费设置:1byte,0-不退废,1-退费

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 018 CHI 123456 / 1 1 <0x0D> <0x0A>

设置充满退费参数应答

发送方 通信模块
说明 设置充电站充满自停、刷卡退费应答
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,CHI
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 固定值:1
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS CHI 123456 001 1 <0x0D> <0x0A>

设置充电站5档计费功率、比例

关联设备命令:0x14

设置功率比例

发送方 服务器
说明 设置充电站5档计费功率、比例,具体用几档依设备而定
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,CHM
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 第一档功率:5byte,ASCII数字 设置第一档的功率范围0-第一档功率,单位:W

第一档比例:3byte,电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%

第二档功率:5byte,ASCII数字 设置第二档的功率范围:第一档功率—第二档功率,单位:W

第二档比例:3byte,电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%

第三档功率:5byte,设置第三档的功率范围:第二档功率—第三档功率,单位:W

第三档比例:3byte,电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%

第四档功率:5byte,设置第四档的功率范围:第三档功率—第四档功率,单位:W(目前预留)

第四档比例:3byte,电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%(目前预留)

第五档功率:5byte,设置第五档的功率范围:第四档功率—第五档功率,单位:W(目前预留)

第五档比例:3byte,电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%(目前预留)

注意:功率第一档不能大于第二档,第二档不能大于第三档,以此类推。

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 055 CHM 123456 / 00100 100 00200 050 00300 030 00400 015 0500 010 <0x0D> <0x0A>

设置功率比例应答

发送方 通信模块
说明 设置充电站5档计费功率、比例应答,主板不支持则不回复
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,CHM
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 1-成功,0-失败(与主板要求的不符,比如功率超出了主板的最大功率,功率大小限制与主板要求不符等)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS CHM 123456 001 1 <0x0D> <0x0A>

读取设备5档计费功率、比例

关联设备命令:0x15

读取功率比例

发送方 服务器
说明 读取充电站5档计费功率、比例,读出来是5档,没用的档位全是 0
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,CHO
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 固定值 0
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 017 CHO 123456 / 0 <0x0D> <0x0A>

读取功率比例应答

发送方 通信模块
说明 返回五档功率比例值
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,CHO
会话ID 6byte,服务器生成
内容长度 3byte,表示内容长度,ASCII数字表示
内容 第一档功率:设置第一档的功率范围0-第一档功率,单位:W(#/#分割)

第一档比例:电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%(#/#分割)

第二档功率:设置第二档的功率范围:第一档功率—第二档功率,单位:W(#/#分割)

第二档比例:电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%(#/#分割)

第三档功率:设置第三档的功率范围:第二档功率—第三档功率,单位:W(#/#分割)

第三档比例:电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%(#/#分割)

第四档功率:设置第四档的功率范围:第三档功率—第四档功率,单位:W(#/#分割)

第四档比例:电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%(#/#分割)

第五档功率:设置第五档的功率范围:第四档功率—第五档功率,单位:W(#/#分割)

第五档比例:电动车在此功率范围内充电时间对应机器设置时间的百分比,充电时间=设置时间*对应比例%

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS CHO 123456 053 100#/#100#/#200#/#50#/#300#/#30#/#400#/#15#/#500#/#10 <0x0D> <0x0A>

烟雾报警器

上报烟雾报警

发送方 通信模块
说明 设备每分钟读取一次烟雾值,如果烟雾浓度超限则上报
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,YBJ
会话ID 6byte,A80015
内容长度 3byte,表示内容长度,ASCII数字表示
内容 报警状态,1-烟雾超限(#/#分割)

烟雾浓度(ppm)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP YBJ A80015 007 1#/#998 <0x0D> <0x0A>

开关传感器

发送方 服务器
说明 设备上电联网之后默认不会检查烟雾传感器,需要服务端主动开启,开启之后设备在重启之前会每个30s读取一次烟雾传感器值,发现烟雾超过设定值将会报警,服务器可以通过该命令读取当前烟雾值或者关闭烟雾报警上报。如果你连接了烟雾报警器,关闭烟雾上报并不会关闭烟雾传感器电源,烟雾传感器如果存在声光报警功能,仍然现场会有声光报警,只是报警的同时并不会上报给服务器。
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,DYW
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 1-开启,2-读取,3-关闭查询,4-关闭并传感器断电(暂不支持)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 017 DYW 123456 / 1 <0x0D> <0x0A>

响应开关传感器

发送方 通信模块
说明 设备每分钟读取一次烟雾值,如果烟雾浓度超限则上报
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,DYW
会话ID 6byte,服务器下发
内容长度 3byte,表示内容长度,ASCII数字表示
内容 响应数据类型,1-开启,2-读取,3-关闭查询,4-关闭并传感器断电(#/#分割),0-异常

当前设备设定报警阈值(ppm,关闭操作时该值为0,#/#分割)

当前烟雾值(ppm,开启和关闭操作时该值为0,仅读取有效)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS DYW 123456 012 1#/#1000#/#0 <0x0D> <0x0A>

设备报警阈值

发送方 服务器
说明 服务器改变报警器的报警阈值,以及模块上报报警的阈值,传感器不支持报警或修改存储报警阈值时服务器每次开启报警后都需要修改该值,否则为固定值1500ppm。
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,GYW
会话ID 6byte,服务器生成
分隔符 1byte,“/”
参数 报警阈值(ppm,5byte,不足在前面补0)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 021 GYW 123456 / 01000 <0x0D> <0x0A>

响应报警阈值设置

发送方 通信模块
说明 响应服务器报警阈值设置
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,GYW
会话ID 6byte,服务器下发
内容长度 3byte,表示内容长度,ASCII数字表示
内容 1-成功(#/#分割)

当前的报警阈值

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS GYW 123456 008 1#/#1000 <0x0D> <0x0A>

系统及网络接口

获取设备号

请求设备号

发送方 服务器
说明 在设备连接服务端成功后,服务端立即发送指令请求该设备的设备号

现在约定设备的GSM模块的IMEI号作为唯一设备号

开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,ADV
会话ID 6byte,000000
分隔符 1byte,“/”
参数 IMEI
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 020 ADV 000000 / IMEI 0x0D 0x0A

设备号响应

发送方 通信模块
说明 设备收到设备号请求时,返回设备号

现在约定设备的GSM模块的IMEI号作为唯一设备号

设备号返回后才能开始真正的业务级别通讯

开始标志 1byte,“_”
响应类型 2byte,DV
命令 3byte,ADV
会话ID 6byte,000000
内容长度 3byte,表示内容长度,ASCII数字表示
内容 2byte ID类型:IM

2byte 编码长度:IMEI号长度,一般为15

(一般15byte)设备号:GSM模块IMEI号

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

IMEI号: 987654321012345 _ DV ADV 000000 019 IM 15 987654321012345 0x0D 0x0A

心跳Ping

发送心跳Ping

发送方 通信模块
说明 设备连接成功后,轮询发送心跳包,保持长连接。

综合考虑运营商GPRS的超时、路由映射缓存超时、流量节省等因素,

心跳间隔建议在60秒

开始标志 1byte,“_”
响应类型 2byte,PG
命令 3byte,AXT
会话ID 6byte,000000
内容长度 3byte,001
内容 信号值:0-31(,分割)

误码率:0-7(#/#分割)

上次心跳响应时间:整数值(可能为负,10ms为单位,上次心跳发出时间到上次接收到服务器心跳返回的时间,可以初略估计出网络的传输和服务器的响应速度,#/#分割)

网络制式:GPRS、HSPA、WCDMA、LTE、CDMA等

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ PG AXT 000000 016 31 , 0 #/# 74 #/# GPRS 0x0D 0x0A

信号值显示建议:

以下以5格信号显示为例:信号值0-5显示0格,信号值6-12显示为1格,信号值13-16显示为2格,信号值17-20显示为3格,信号值21-25显示为4格,信号值26-31显示为5格。同时如果误码率≥5,则信号格数在原来基础上减去1,如果计算的信号格数为负数则显示为零格。

通常信号值为15以下(包括15)的建议通过信号放大或者调整天线匹配等手段使模块获得更好的信号,在这种信号情况下会出现掉线率高,数据延时高等情况,对通讯和业务会造成影响。

关于天线:

天线是将传输线中的电磁能转化成自由空间的电磁波,或将空间电磁波转化成传输线中的电磁能的专用设备。在无线通信系统中,天线是收发信机与外界传播介质之间的接口。同一个天线既可以辐射又可以接收无线电波:发射时,把高频电流转换为电磁波;接收时把电磁波转换为高频电流。

天线是一种变换器,它把传输线上传播的导行波,变换成在无界媒介(通常是自由空间)中传播的电磁波,由于天线具有可逆性,在接收时,天线进行相反的变换;天线是发射和接收电磁波的一个重要装置,没有天线也就没有无线电通信。因此天线的好坏以及天线的安装环境直接影响通讯的质量甚至是是否可以通讯。当你发现你同一个地方2G信号是覆盖的,但是设备的信号很差时,请务必确认天线是否匹配2G网络,天线的安装环境是否良好。天线周围不应该有金属屏蔽或者对信号有反射和吸收的介质,天线周围也不应该有高频信号源或者电力线路,天线安装应该有一定的高度,并查看天线频率、增益、驻波比系数、功率,灵敏度等参数是否符合你的要求,如果你认为设备没有达到预期的信号效果,请咨询专业的天线厂家。

响应心跳Ping

发送方 服务器
说明 服务端回复心跳
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,AXT
会话ID 6byte,000000
分隔符 1byte,“/”
参数 P
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 017 AXT 000000 / P 0x0D 0x0A

获取ICCID以及软硬件版本号

请求ICCID以及软硬件版本号

发送方 服务器
说明 在设备返回设备号后,服务端发送指令获取SIM卡的ICCID
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,AID
会话ID 6byte,000000
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 AID 000000 / 0x0D 0x0A

ICCID以及软硬件版本号响应

发送方 通信模块
说明 设备收到ICCID请求时,返回ICCID
开始标志 1byte,“_”
响应类型 2byte,ID
命令 3byte,AID
会话ID 6byte,000000
内容长度 3byte,表示内容长度,ASCII数字表示
内容 ICCID号(#/#分割)

软件版本号(#/#)

硬件版本号

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

ICCID号 : 898602B3131650175846

_ ID AID 000000 045 898602B3131650175846 #/# mc-2.3.0 #/# DJ-BSD-8202 0x0D 0x0A

获取连接地址

请求获取连接地址

发送方 服务器
说明 用户请求获取模块当前所配置的连接地址
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,AAB
会话ID 6byte,服务端生成
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 AID 000000 / 0x0D 0x0A

响应连接地址

发送方 通信模块
说明 设备收到ICCID请求时,返回ICCID
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,ABB
会话ID 6byte,服务端下发
内容长度 3byte,表示内容长度,ASCII数字表示
内容 固定地址:IP(#/#分割)端口($$$分割)

配置连接地址:IP(#/#分割)端口(如果不支持配置连接地址则返回NOT_SUPPORT,如果没有配置地址则返回空串,否则返回当前配置的连接地址)

结束标志 2byte,\r\n(0x0D 0x0A)

注意:固定连接地址是烧录的连接地址,在没有配置连接地址的情况下,则模块连接固定连接地址,在存在配置地址的情况下模块连接配置地址。

示例:

_ RS AAB 123456 044 111.142.145.37 #/# 9876 $$$ 34.165.34.195 #/# 3865 0x0D 0x0A

设置连接地址

设置配置连接地址,只有当模块支持配置连接地址的时候才能进行配置,注意配置不等于连接,配置完以后需要连接配置的地址需要远程重启

设置连接地址

发送方 服务器
说明 设置模块的配置连接地址
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,AAC
会话ID 6byte,服务端下发
分隔符 1byte,“/”
参数 地址:端口(地址可以是域名或者IP,最长不得超过30字节,如果地址为CLEAR_ADDRESS则清空配置地址,模块下次重连会使用固定地址连接)
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 035 AAC 123456 / 145.164.254.37:3657 0x0D 0x0A

设置连接地址响应

发送方 通信模块
说明 返回设置的结果
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,AAC
会话ID 6byte,服务端下发
内容长度 3byte,表示内容长度,ASCII数字表示
内容 设置结果:S-成功,F-失败(#/#分割)

配置号的地址:端口

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS AAC 123456 023 S #/# 145.164.254.37:3657 0x0D 0x0A

远程重启

设置远程重启

发送方 服务器
说明 设置设备重启
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,ABT
会话ID 6byte,000000
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 ABT 000000 / 0x0D 0x0A

请求设备类型

请求设备类型

发送方 服务器
说明 请求设备的类型编号,服务端约定
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,ASY
会话ID 6byte,000000
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 ASY 000000 / 0x0D 0x0A

响应设备类型

发送方 通信模块
说明 响应设备的类型编号
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,ASY
会话ID 6byte,A00003
内容长度 3byte,表示内容长度,ASCII数字表示
内容 设备类型
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RP ASY A00003 001 1 0x0D 0x0A

加密验证获取信号值

认证方式一

加密验证使用设备在出厂时和系统约定的8byte密钥,服务器再需要进行验证时,向设备请求加密认证,发送一个7byte随机串,设备将服务器下发的7byte串+IMEI最后一个字节构成一个8byte字串,经过出厂时约定的8byte密钥使用DES加密后返回密文,服务端收到密文后判断密文所解密出来的明文的前7byte是否和服务器下发的相同,并且判断最后一个字节是否和IMEI的最后一个字节相同。


服务器用来确定客户机是否合法的方式,如果认证不通过则服务器可以踢掉该设备。服务器可以在需要的时候进行认证,但服务器需要注意的是如果发送一次客户机没有相信,可能由于网络等原因导致消息没有处理,服务器可以多次发送设备依然没有响应或者响应错误判断设备是否合法。使用此种认证方式需要确定模块在出厂对此种认证方式进行了支持,否则无法通过次方式判断设备是否非法。

请求加密认证并请求信号值

发送方 服务器
说明 在设备返回设备号后,服务端发送指令获取SIM卡的ICCID
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,ASG
会话ID 6byte,000000
分隔符 1byte,“/”
参数 1byte 认证方式(0-不需要加密认证仅获取信号值,1-认证方式一:DES加密认证)

14byte 随机字串的十六进制表示方式(如果认证方式为0则此字段无效)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 ASG 000000 / 0x0D 0x0A

响应加密认证消息获取信号值

发送方 通信模块
说明 返回认证消息以及获取响应的信号值
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,ASG
会话ID 6byte,000000
内容长度 3byte,表示内容长度,ASCII数字表示
内容 加密字串:十六进制字符串表示(如果使用加密认证或不支持则返回16个0,#/#分割)

信号值(#/#分割)

网络制式(GPRS、HSPA、WCDMA、LTE、CDMA等)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS ASG 000000 030 014764D784C8D282 #/# 31,0 #/# GPRS 0x0D 0x0A

获取心跳参数

获取心跳参数

发送方 服务器
说明 获取设备的心跳参数
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,AXA
会话ID 6byte,服务器下发
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 AXA 123456 / 0x0D 0x0A

响应心跳参数

发送方 通信模块
说明 响应服务器心跳参数,心跳间隔,心跳超时时间
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,AXA
会话ID 6byte,服务端下发
内容长度 3byte,表示内容长度,ASCII数字表示
内容 心跳间隔(秒,#/#分割)

心跳超时时间(秒)

结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS AXA 123456 007 30 #/# 90 0x0D 0x0A

获取固件说明

请求固件说明

发送方 服务器
说明 请求设备固件说明
开始标志 1byte,“_”
报文长度 3byte,表示整个报文的总长度,ASCII数字表示
命令 3byte,AAE
会话ID 6byte,服务器下发
分隔符 1byte,“/”
参数
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ 016 AAE 123456 / 0x0D 0x0A

响应固件说明

发送方 通信模块
说明 响应服务器固件说明
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,AAE
会话ID 6byte,服务端下发
内容长度 3byte,表示内容长度,ASCII数字表示
内容 固件说明utf8字段base64之后的字符
结束标志 2byte,\r\n(0x0D 0x0A)

示例:

_ RS AAE 123456 016 5Zu65Lu26K+05piO 0x0D 0x0A

心跳和握手流程

设备通讯模块连接上服务器后会首先发送一次心跳,此时服务器就可以和模块通讯了,一般来说首先进行身份鉴别,通过获取IMEI和ICCID指令,获取设备的IMEI和ICCID号校验设备的身份信息。心跳是由模块发起,当发起心跳以后服务端必须在5秒钟之内回复心跳,建立连接以后模块会每个一定的时间发送心跳给服务器用来保持长连接和通讯确认。