实习的时候接触到北斗部标的808协议,有一次对接项目时对方说收到的数据中显示车辆的速度是400千米/时,这是肯定不对的,于是从原始数据本身入手,手动解析一下试试。
部标协议中有几个重要的点,下面先说明一下。
数据类型如下,需要注意每个数据类型所占的字节数。
消息结构如下,每条消息都是由以下部分构成。
标识位一般是指传输过来的数据,我们默认数据都是以0x7E开头。
消息头内容如下:
非常重要的位置信息如下(消息ID是0x0200)
我们服务器收到一段包含0200定位信息的数据,我们需要手动解析出来。
7E-02-00-00-3C-06-48-08-35-42-96-02-3D-00-00-00-00-00-08-00-42-02-1F-D9-34-07-22-75-80-00-11-02-60-01-3A-17-08-25-14-42-57-01-04-00-04-32-92-02-02-00-00-03-02-00-00-25-04-00-00-00-00-2B-04-00-00-00-00-30-01-11-31-01-14-77-7E-1C-0D
字段 | 数据类型 | 数据 | 解析 | 说明 |
---|---|---|---|---|
标识位 | BYTE | 7E | 数据开始的标志位 | |
消息体ID | WORD | 0200 | 位置信息ID | |
消息体属性 | WORD | 003C | 短消息,不加密 | 详见附件里的消息体属性格式 |
终端手机号 | BCD[6] | 064808354296 | ||
消息流水号 | WORD | 023D | 第573条 | 从0还是累加 |
--------- | ---------- | --------- | --------- | ----------- |
报警标志 | DWORD | 00000000 | 无 | 无 |
状态 | DWORD | 00080042 | 暂不解析 | 详见附件里状态位表25 |
纬度 | DWORD | 021FD934 | 35.641652 | 转换成十进制,精确到百万分之一 |
经度 | DWORD | 07227580 | 119.698816 | 转换成十进制,精确到百万分之一 |
高程 | WORD | 0011 | 17 | 转换成十进制,海拔高度,单位是m |
速度 | WORD | 0260 | 60.8 | 转换成十进制,1/10km/h |
方向 | WORD | 013A | 314 | 转换成十进制,0-359,正北为 0,顺时针 |
时间 | BCD[6] | 170825144257 | 17年8月25日14时42分47秒 | |
--------- | ---------- | --------- | --------- | ----------- |
附件信息ID | BYTE | 0104 | … | … |
… | … | … | … | … |
①对接的客户提到的车辆速度400多,是因为客户没有按照协议处理数据,跟设备传输的数据没有关系。
②部分数据例如报警标志位和状态没有解析,自己按照协议里的表格解析就行。
③消息ID 0200 是位置数据,是最重要的数据之一,但是在此之前需要终端设备和服务器进行鉴权识别等。