当前位置: 首页 > news >正文

JT808教程:消息的结构

REDISANT 提供互联网与物联网开发测试套件 #

互联网与中间件:

  • Redis Assistant
  • ZooKeeper Assistant
  • Kafka Assistant
  • RocketMQ Assistant
  • RabbitMQ Assistant
  • Pulsar Assistant
  • HBase Assistant
  • NoSql Assistant
  • Etcd Assistant
  • Garnet Assistant

工业与物联网:

  • MQTT Assistant
  • Modbus 从站模拟器
  • Modbus 主站模拟器
  • IEC104/101 主站/客户端 模拟器
  • IEC104/101 从站/服务端 模拟器
  • IEC61850 客户端模拟器
  • IEC61850 服务端模拟器
  • DL/T 645 主站模拟器
  • DL/T 645 从站模拟器
  • CJ/T 188 主站模拟器
  • BACnet 浏览与模拟器
  • OPCUA 客户端模拟器
  • COMTRADE 图表浏览
  • HL7 助手
  • JT/T 808终端模拟器

在JT808协议的学习和调试过程中,一款终端模拟器非常重要,推荐 JT808 Terminal Simulator,官网下载地址:JT808 Terminal Simulator - JT808 终端模拟器


通信方式 #

JT/T 808 协议主要基于 TCP 连接进行通信,也支持 UDP,但使用较少。使用TCP的优势如下:

  • 保证消息顺序、有序可靠传输;
  • 支持平台对接多个终端并持续维持连接;
  • 天然支持心跳机制(0x0002)、应答机制等;

JT/T 808 标准正文并没有禁止使用 UDP,但一般只有在对实时性要求极高、对丢包容忍度高的场景中才会使用 UDP,例如:

  • 高频率位置信息上报;
  • 摄像头视频预览/抓拍传输;
  • 或企业内部私有定制。

数据类型介绍 #

协议消息中使用的数据类型入下:

数据类型描述及要求
BYTE无符号单字节整型(字节,8位)
WORD无符号双字节整型(字节,16位)
DWORD无符号四字节整型(双字,32位)
BYTE[n]n字节
BCD[n]8421码,n字节
STRINGGBK编码,若无数据,置空

协议应采用大端模式的网络字节序来传递字和双字。传输规则约定如下:

  • 字节(BYTE)的传输,按照字节流的方式传输;
  • 字(WORD)的传输,先传递高八位,再传递低八位;
  • 双字( DWORI)的传输,先传递高二十四位,然后传递高十六位,再传递高八位,最后传递低位

消息的组成 #

每条消息由标识位、消息头、消息体和校验码组成,消息结构如下图所示。

标识位 #

标识位应采用0x7e表示,若校验码、消息头以及消息体中出现0x7e0x7d,则要进行转义处理。转义规则定义如下:

  1. 先对0x7d进行转义,转换为固定两字节数据:0x7d0x01
  2. 再对0x7e进行转义,转换为固定两字节数据:0x7d0x02

转义处理过程如下:

  • 发送消息时:先对消息进行封装,然后计算并填充校验码,最后进行转义处理;
  • 接收消息时:先对消息进行转义还原处理,然后验证校验码,最后解析消息。

示例:发送一包内容为0x30 0x7e 0x08 0x7d 0x55的数据包,则经过封装如下:0x7e 0x30 0x7d 0x02 0x08 0x7d 0x01 0x55 0x7e

消息头 #

消息头的结构如下所示:

起始字节字段数据类型描述及要求
0消息IDWORD
2消息体属性WORD消息体属性格式结构
4协议版本号BYTE协议版本,每次关键修订递增,初始版本为1
5终端手机号BCD[10]根据安装后终端自身的手机号转换。手机号不足位的,则在前补充数字0
15消息流水号WORD按发送顺序从0开始循环累加
17消息包封装项如果消息体属性中相关标识位确定消息分包处理,则该项有内容,否则无该项

其中消息体属性格式结构如下图所示:

数据应按照如下方式进行加密:

  • bit10-bit12为数据加密标识位;
  • 当此三位都为0,表示消息体不加密;
  • 当第10位为1,表示消息体经过RSA算法加密;
  • 其他位为保留位。

消息分包应按照如下要求进行处理:

  • 当消息体属性中第13位为1时表示消息体为长消息,进行分包发送处理,具体分包信息由消息包封装项决定;
  • 若第13位为0,则消息头中无消息包封装项字段。

消息包封装项内容如下:

起始字节字段数据类型描述及要求
0消息总包数WORD该消息分包后的总包数
2包序号WORD从1开始

消息体 #

每个不同的命令消息体格式内容由各命令确定,后续章节会详细介绍各类JT808消息类型。

校验码 #

校验码的计算规则应从消息头首字节开始,同后一字节进行异或操纵,直到消息体末字节结束;校验码长度为1字节。

报文举例 #

下面是一条终端注册消息,原始的报文如下:

7E 01 00 40 54 01 00 00 00 00 00 02 23 45 67 89 00 00 00 0B 00 65 01 23 45 67 89 AB CD EF 00 00 00 01 23 45 67 89 AB CD EF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 23 45 67 89 AB CD EF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 BE A9 44 31 32 33 34 35 93 7E

我们逐个字段的分析后得到(该分析结果由 JT808 Terminal Simulator生成,软件下载地址:JT808 Terminal Simulator - JT808 终端模拟器):

{"消息头": {"协议版本号": 1,"消息ID": 256,"消息体属性": {"版本标识": true,"是否分包": false,"数据加密方式": 0,"消息体长度": 84},"终端手机号": "00000000000223456789","消息流水号": 0,"消息包封装项": null},"消息体": {"省域ID": 11,"市县域ID": 101,"制造商ID": "0123456789ABCDEF000000","终端型号": "0123456789ABCDEF00000000000000000000000000000000000000000000","终端ID": "0123456789ABCDEF00000000000000000000000000000000000000000000","车牌颜色": 1,"车牌号": "京D12345"}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.redisant.cn

http://www.dtcms.com/a/263636.html

相关文章:

  • react中在Antd3.x版本中 Select框在单选时 选中框的高度调整
  • Qt 实现Opencv功能模块切换界面功能
  • 【算法】动态规划:python实现 1
  • TensorFlow内核剖析:分布式TensorFlow架构解析与实战指南
  • mini-electron使用方法
  • 内部类与Lambda的衍生关系(了解学习内部类,Lambda一篇即可)
  • C# WPF + Helix Toolkit 实战:用两种方式打造“六面异色立方体”
  • QNN SDK学习笔记
  • 二十八、【环境管理篇】灵活应对:多测试环境配置与切换
  • python开发|yaml用法知识介绍
  • STM32F4操作内部FLASH简洁版
  • 【代码审计】安全审核常见漏洞修复策略
  • 位运算经典题解
  • 启用不安全的HTTP方法
  • 图像处理专业书籍以及网络资源总结
  • Java编程之状态模式
  • 《UE5_C++多人TPS完整教程》学习笔记40 ——《P41 装备(武器)姿势(Equipped Pose)》
  • 基于Socketserver+ThreadPoolExecutor+Thread构造的TCP网络实时通信程序
  • mac重复文件清理,摄影师同款清理方案
  • flv.js视频/直播流测试demo
  • 2025 推理技术风向标:DeepSeek-R1 揭示大模型从 “记忆” 到 “思考” 的进化路径
  • 【linux】基础开发工具(1)
  • Flink Savepoints 总结
  • js代码09
  • Spring Boot WebSocket方案终极指南:Netty与官方Starter对比与实践
  • MFC的List Control自适应主界面大小
  • Android Gradle 插件和 Android Studio 兼容性
  • Windows下配置Docker+WSL集成开发环境
  • 【C#】如果有一个数值如 168.0000100,如何去除末尾的无效零,只显示有效的小数位数,让DeepSeek给我们解答
  • 飞算JavaAI—AI编程助手 | 编程领域的‘高科技指南针’,精准导航开发!