python 语言实现jtt808协议终端报文上报及交互1
此次我们采用的协议时jtt808-2013
首先我们要了解jtt808协议是什么,这个只做简介。
先给一段报文,网上随便找的:
7E0200005B014141138693224E00000100000000000157E6DE06CBEC600000000000001703090019200104000026F5EB3700060089FFFFFFFD000700B400FFFFFFFF002400A901CC000627BD0FABCC27910000B727911287BF27BD1159C327BD0000BB27910ED1B5C97E
详细解释
原始数据为十六进制,转换成十进制后得到标准数据
7E –标识符
02 00 –消息头(消息ID)
00 5B –消息头(消息体属性)
01 41 41 13 86 93 –消息头(终端手机号)
22 4E –消息头(消息流水号)
00 00 01 00 –报警标志
00 00 00 00 –状态
01 57 E6 DE –纬度
06 CB EC 60 –经度
00 00 –高程
00 00 –速度
00 00 –方向
17 03 09 00 19 20 –时间(GTM+8)
01 –附加消息ID(0x01)
04 –附加消息长度(DWORD)
00 00 26 F5 –附加消息(里程)
EB –附加消息(0xEB,这里是厂商自定义的)
37 –附加消息长度(DWORD,16进制的37,10进制为55,剩下的消息55个长度)
0006 0089 FFFFFFFD –附加消息(厂商自定)
0007 00B4 00 FFFF FFFF –附加消息(厂商自定)
0024 00A9 01CC 00 06 –附加消息(厂商自定)
27BD 0FAB CC –附加消息(厂商自定)
2791 0000 B7 –附加消息(厂商自定)
2791 1287 BF –附加消息(厂商自定)
27BD 1159 C3 –附加消息(厂商自定)
27BD 0000 BB –附加消息(厂商自定)
2791 0ED1 B5 –附加消息(厂商自定)
C9 –校验码
7E –标识符
协议基础:
通信协议采用TCP方式,服务端和客户端
协议中采用大端模式(Big-Endian)的网络字节序来传递字和双字。
平台、设备数据交换间隔最长**秒一次 否则平台会自动断开连接。
平台、设备数据交互字符类型采用GBK编码。
从上面的解析可以看出,一条报文可以分为几个部分,
该消息结构包括:消息开始标识符、消息头(header)、消息体(body)、校验码(CRC)和消息结束标识符。
|
消息开始标识符(7e) |
消息头 |
消息体 |
校验码 |
消息结束标识符(7e) |
消息开始标识符:
标识位:采用0x7e表示,若校验码!消息头以及消息体中出现 0x7e ,则要进行转义处理
转义规则定义如下
0x7e → 0x7d 后紧跟一个 0x02
0x7d → 0x7d 后紧跟一个 0x01
发送一条内容为 0x30 0x7e 0x08 0x7d 0x55的数据包,则经过封装如下0x30 0x7d 0x02 0x08 0x7d 0x01 0x55
1.1.1 JTT808-2013数据类型
|
数据类型 |
说明 |
|
BYTE |
无符号整型,1byte |
|
WORD |
无符号整型,2byte |
|
DWORD |
无符号整型,4byte |
|
BYTE[n] |
n字节 |
|
BCD[n] |
8421码,nbyte |
|
STRING |
GBK编码,采用0终结符,如无数据,则放一个0x00终结符 |
2.数据类型:
|
数据类型 |
说明 |
|
INT8 |
有符号整型,1byte |
|
BYTE(UINT8) |
无符号整型,1byte |
|
INT16 |
有符号整型,2byte |
|
WORD (UINT16) |
无符号整型,2byte |
|
INT32 |
有符号整型,4byte |
|
DWORD(UINT32) |
无符号整型,4byte |
|
BCD[n] |
8421码,nbyte |
|
BYTE[n] |
nbyte |
|
STRING |
GBK编码,采用0终结符,如无数据,则放一个0x00终结符 |
效验码:
检验码指从消息头开始,同后一字节异或,直到校验码前一个字节,校验码占用一个字节
消息处理:
消息处理过程如下
发送消息时: 消息体加密 > 消息封装(消息头、消息体) > 计算并填充校验码 > 转义
接收消息时: 转义还原 > 验证校验码 > 消息拆分(消息体、消息体) > 消息体解密
以上先写协议内容及大概,第二部分写python实现
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/272157.html