该协议内容遵循modbus-rtu协议,如有不足,还请各路大神指正。
1、设备链接服务器或与服务器心跳
设备主机上电:设备主机自动向服务器发送 “00” 指令,请求注册或设备与服务器通讯心跳(每10秒)。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口数据长度(字节) | 端口编号 | 端口状态 | 端口编号 | 端口状态 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 00 | 04 | 01 | 00 | 02 | 01 | 69 |
说明:端口数据长度包括端口编号和端口状态,如有12个端口,则数据长度是24字节
端口状态:00空闲, 01可用, 02关闭, 03充电中。
设备主机:未收到“01”指令,说明服务器未连接成功,设备每隔3秒向服务器发送1次“00” 指令,直至收到服务器回复“01”指令,说明注册成功。
此处如果分不清注册连接和心跳,可分为两个协议来使用,需确认。
2、设备链接服务器后,服务器回复连接成功并发送校时时间
服务器:收到“00”指令后注册,回复“01”指令,说明注册成功并要求同步网络时间。
头标识符 | 数据起始符 | 命令字 | 数据长度高位字节 | 数据长度低位字节 | 年 | 月 | 日 | 时 | 分 | 秒 | crc16校验高位字节 | crc16校验低位字节 | 结束符 | |
FA | F5 | 96 | 01 | 22 | 08 | 01 | 18 | 06 | 23 | 69 |
说明:协议中时间年月日时分秒都是十进制下的值
3、卡信息查询
设备主机上报:用户刷卡,查询人员信息,发送“02”指令,请求查询。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 芯片号1 | 芯片号2 | 芯片号3 | 芯片号4 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 02 | 01 | 0E | FA | 36 | 69 |
说明:芯片号码由“芯片号码1”“芯片号码2”“芯片号码3”“芯片号码4”组成,即示例中芯片号为:“010EFA36”。
4、人脸信息查询
设备主机上报:用户刷脸,查询人员信息,发送“03”指令,请求查询。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 人脸数据 字节长度 | 人脸信息01 | 人脸信息02 | 人脸信息03 | 人脸信息04 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 03 | 04 | 01 | 0E | FA | 36 | 69 |
说明:人脸信息字节长度是指后面“人脸信息01”,“人脸信息02”,“人脸信息03”,.....等数据组合的字节长度。
5、设备刷卡和人脸识别后,服务器返回人员信息
服务器:收到刷卡“02”或人脸识别“03”查询人员信息后,回复“04”指令,并返回人员信息。
头标识符 | 数据起始符 | 命令字 | 数据长度高位字节 | 数据长度低位字节 | 会员号 01 | 会员号 02 | 会员号 03 | 余额千万位百万位 | 余额十万位万位 | 余额千位百位 | 余额 十位个位 | 余额 小数位 | crc16校验高位字节 | crc16校验低位字节 | 结束符 | |
FA | F5 | 96 | 04 | 22 | 08 | 01 | 00 | 00 | 23 | 12 | 56 | 69 |
说明:会员号是由“会员号01”“会员号02”“会员号03”组成,即示例中会员号是“220801”,余额是由“余额千万位百万位”“余额十万位万位”“余额千位百位”“余额十位个位”“余额小数位”组成,即实例中余额为“2312.56”元。
6、服务器控制设备开始充电
服务器:小程序端用户开启充电或设备前用户刷卡或刷脸后按键启动充电,发送“05”指令,设备指定端口开启充电。
头标识符 | 数据起始符 | 命令字 | 数据长度高位字节 | 数据长度低位字节 | 端口编号 | crc16校验高位字节 | crc16校验低位字节 | 结束符 | |
FA | F5 | 96 | 05 | 02 | 69 |
说明:通知设备指定端口号开启充电,端口编号十六进制,表达第几号端口。
7、服务器通知设备停止充电
服务器:小程序端用户停止充电或设备前用户刷卡或刷脸后按键停止充电,发送“06”指令,设备指定端口开启充电。
头标识符 | 数据起始符 | 命令字 | 数据长度高位字节 | 数据长度低位字节 | 端口编号 | crc16校验高位字节 | crc16校验低位字节 | 结束符 | |
FA | F5 | 96 | 06 | 02 | 69 |
说明:通知设备指定端口号停止充电,端口编号十六进制,表达第几号端口。
8、服务器通知设备充电或关闭/开启端口后,设备回复服务器端口状态
设备主机上报:服务器通知设备主机开启充电成功后或者关闭端口号后或开启端口号后,回复“07”指令,上报端口状态。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | 端口状态 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 07 | 01 | 00 | 69 |
说明:设备开启充电后,向服务器上报端口状态,端口状态:00空闲, 01可用, 02关闭, 03充电中。
9、服务器通知设备停止充电后,设备上报数据给服务器
设备主机上报:服务器通知设备主机停止充电成功后,回复“08”指令,上报端口状态,上报功率和电量。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | 端口状态 | 功率高位 | 功率低位 | 电量高位 | 电量低位 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 08 | 01 | 00 | 69 |
说明:设备停止充电后,向服务器发送当前设备端口状态,功率,电量信息。
10、服务器查询设备所有端口状态
服务器:查询设备状态,发送“09”指令。
头标识符 | 数据起始符 | 命令字 | 数据长度高位字节 | 数据长度低位字节 | crc16校验高位字节 | crc16校验低位字节 | 结束符 | |
FA | F5 | 96 | 09 | 69 |
11、设备响应服务器查询端口状态
设备主机上报:服务器查询设备状态,发送“09”指令后,回复“0A”指令,上报端口状态。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口数据长度(字节) | 端口编号 | 端口状态 | 端口编号 | 端口状态 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 0A | 04 | 01 | 00 | 02 | 01 | 69 |
说明:通知服务器端口状态,端口编号十六进制,端口状态:00空闲, 01可用, 02关闭, 03充电中。
12、电枪插入,设备上报服务器
电枪插入车辆后,设备向服务器发送指令“0B”指令,告知服务器当前插入设备的端口号。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 0B | 01 | 69 |
说明:通知设备指定端口号开启充电,端口编号十六进制,表达第几号端口。
13、电枪拔开,设备上报服务器
电枪插入车辆后,设备向服务器发送指令“0C”指令,告知服务器当前插入设备的端口号。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 0C | 01 | 69 |
说明:通知设备指定端口号开启充电,端口编号十六进制,表达第几号端口。
14、电量充满后,设备自动断电
设备判断充满电后,自动断电,向服务器发送“0D”指令,告知服务器端口订单已充满
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 0D | 01 | 69 |
说明:服务器收到该指令后,是否需服务器发送停止指令给设备,具体看设备定。
15、低功率充电心跳
低功率充电桩开始充电后,发送心跳数据到服务器,指令“0E”
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | 端口状态 | 功率高位 | 功率低位 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 0E | 01 | 00 | 69 |
说明:端口编号十六进制,端口状态:00空闲, 01可用, 02关闭, 03充电中。
功率需要硬件补充完整,此处可以使用高位低位来表达功率数据,整数部分,小数部分。
16、大功率充电心跳
低功率充电桩开始充电后,发送心跳数据到服务器,指令“0F”
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | 端口状态 | 功率高位 | 功率低位 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 0F | 01 | 00 | 69 |
说明:端口编号十六进制,端口状态:00空闲, 01可用, 02关闭, 03充电中。
功率需要硬件补充完整,此处可以使用高位低位来表达功率数据,整数部分,小数部分。
17、汽车交流心跳
汽车交流充电桩开始充电后,发送心跳数据到服务器,指令“10”
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | 端口状态 | 电量高位 | 电量低位 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 10 | 01 | 00 | 69 |
说明:端口编号十六进制,端口状态:00空闲, 01可用, 02关闭, 03充电中。
电量需要硬件补充完整,此处可以使用高位低位来表达电量数据,整数部分,小数部分。
18、汽车直流心跳
汽车交流充电桩开始充电后,发送心跳数据到服务器,指令“11”
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | 端口状态 | 电量高位 | 电量低位 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 11 | 01 | 00 | 69 |
说明:端口编号十六进制,端口状态:00空闲, 01可用, 02关闭, 03充电中。
电量需要硬件补充完整,此处可以使用高位低位来表达电量数据,整数部分,小数部分。
19、关闭端口
管理端控制设备某个端口关闭,发送指令“12”
头标识符 | 数据起始符 | 命令字 | 数据长度高位字节 | 数据长度低位字节 | 端口编号 | crc16校验高位字节 | crc16校验低位字节 | 结束符 | |
FA | F5 | 96 | 12 | 02 | 69 |
说明:端口编号十六进制。
20、开启端口
管理端控制设备某个端口关闭,发送指令“13”
头标识符 | 数据起始符 | 命令字 | 数据长度高位字节 | 数据长度低位字节 | 端口编号 | crc16校验高位字节 | crc16校验低位字节 | 结束符 | |
FA | F5 | 96 | 13 | 02 | 69 |
说明:端口编号十六进制。
21、刷卡或刷脸后,设备选择端口
设备点击某个端口按钮后,通知服务器,发送指令“14”,等待服务器返回指令。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 14 | 01 | 69 |
说明:端口编号十六进制。
22、刷卡或刷脸后,设备开启充电
设备点击某个端口按钮后,通知服务器,发送指令“15”,服务器校验通过后,发回指令可以开始充电,设备点击开始充电,通知服务器,等待服务器返回充电指令。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 15 | 01 | 69 |
说明:端口编号十六进制。此场景需确定设备是否有开始按钮,若没有此按钮,则在协议【刷卡或刷脸后,设备选择端口,发送指令“14”】后,服务器就会下发充电指令。具体看硬件设备定。
23、设备端点击结束充电按钮
点击结束前,需设备先选择结束那个端口的充电订单,即选择端口号,发送“16”指令。
设备编号(15字节) | 头标识符 | 数据起始符 | 命令字 | 数据长度 高位字节 | 数据长度 低位字节 | 端口编号 | crc16校验 高位字节 | crc16校验 低位字节 | 结束符 | |
383630303539303530393532303633 | FA | F5 | 96 | 16 | 01 | 69 |
说明:端口编号十六进制。
补充说明:
不论是从那个终端发起操作,统一使用场景有:开始充电、停止充电、开启端口、关闭端口
- 服务器开始充电指令与设备开启充电后上报指令
- 服务器停止充电指令与设备停止充电后上报指令
- 服务器开启端口指令与设备端口状态上报指令
- 服务器关闭端口指令与设备端口状态上报指令
指令集:
场景 | 指令 |
设备连接服务器 | 0x00 |
设备与服务器心跳通讯 | 0x00 |
服务器响应连接并发送服务器时间 | 0x01 |
易充卡信息查询 | 0x02 |
人脸信息查询 | 0x03 |
刷卡或人脸查询的人员信息及余额 | 0x04 |
服务器通知设备开始充电 | 0x05 |
服务器通知设备停止充电 | 0x06 |
服务器通知设备开始充电、开启端口、关闭端口后,设备执行后端口状态上报 | 0x07 |
设备停止充电后,数据上报服务器 | 0x08 |
服务器查询设备所有端口状态 | 0x09 |
设备所有端口状态上报 | 0x0A |
电枪插入,设备上报给服务器 | 0x0B |
电枪拔开,设备上报给服务器 | 0x0C |
电量充满后,设备主动断电 | 0x0D |
低功率设备充电心跳 | 0x0E |
大功率设备充电心跳 | 0x0F |
汽车交流桩充电心跳 | 0x10 |
汽车直流桩充电心跳 | 0x11 |
服务器通知设备关闭端口 | 0x12 |
服务器通知设备开启端口 | 0x13 |
刷卡或刷脸后,设备上点击端口按钮 | 0x14 |
刷卡或刷脸后,设备上点击开始充电按钮 | 0x15 |
设备上点击结束充电按钮 | 0x16 |