车辆管理系统越来越成熟,设备价格越做越低。但设备一旦出去后,运城运维变得越来越重要。
这些运维包含:升级,设备检测,标定,远程诊断,车辆在线状态分析等。
制定一个统一的协议是十分必要的。考虑到实际现状,运营平台首先要兼容性好。
我们 制定了运维管理平台的统一协议以满足各个厂家的实际运维的需要。
运维服务器通信协议
V0.1 初稿
修订记录
作者 |
版本 |
说明 |
日期 |
邓铁山 |
0.1 |
2023年6月16 |
|
1协议基础
1.1 通信方式
通信协议采用TCP,平台作为服务器端,终端作为客户端。
1.2 数据类型
协议消息中使用的数据类型见 表 1:
表 1 数据类型
数据类型 |
描述及要求 |
BYTE |
无符号单字节整型(字节,8 位) |
WORD |
无符号双字节整型(字,16 位) |
DWORD |
无符号四字节整型(双字,32 位) |
BYTE[n] |
n 字节 |
BCD[n] |
8421 码,n 字节 |
STRING |
GBK 编码,若无数据,置空 |
1.3 传输规则
协议采用大端模式(big-endian)的网络字节序来传递字和双字。
约定如下:
——字节(BYTE)的传输约定:按照字节流的方式传输;
——字(WORD)的传输约定:先传递高八位,再传递低八位;
——双字(DWORD)的传输约定:先传递高 24 位,然后传递高 16 位,再传递高八位,
最后传递低八位。
1.4 消息的组成
1.4.1 消息结构
每条消息由标识位、消息头、消息体和校验码组成,消息结构图如图 1 所示:
图 1 消息结构图
标识位 |
消息头 |
消息体 |
检验码 |
标识位 |
1.4.2 标识位
采用 0x7e 表示,若校验码、消息头以及消息体中出现 0x7e,则要进行转义处理,转义规则定义如下:
0x7e <————> 0x7d 后紧跟一个 0x02;
0x7d <————> 0x7d 后紧跟一个 0x01。
转义处理过程如下:
发送消息时:消息封装——>计算并填充校验码——>转义;
接收消息时:转义还原——>验证校验码——>解析消息。
示例:
发送一包内容为 0x30 0x7e 0x08 0x7d 0x55 的数据包,则经过封装如下:0x7e 0x30 7d 0x02 0x08 0x7d 0x01 0x55 0x7e。
1.4.3 消息头
消息头内容详见 表 2:
表 2 消息头内容
起始字节 |
字段 |
数据类型 |
描述及要求 |
0 |
消息 ID |
WORD |
|
2 |
消息体属性 |
WORD |
消息体属性格式结构图见图 2 |
4 |
终端手机号 |
BCD[6] /BCD[10] |
注意:系统支持JT808-2011,2013和JT2019版本 |
10 |
消息流水号 |
WORD |
按发送顺序从 0 开始循环累加 |
12 |
消息包封装项 |
如果消息体属性中相关标识位确定消息分包处理,则该项有内容,否则无该项 |