首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA腾晖数据帧对接指南

JAVA腾晖数据帧对接指南

作者头像
gang_luo
发布2020-08-13 14:32:52
3.7K1
发布2020-08-13 14:32:52
举报
文章被收录于专栏:gang_luogang_luo

Java基础

(1)基本数据类型各占多少个字节

数据类型

字节

byte

1

short

2

int

4

long

8

float

4

double

8

char

2

boolean

4

(2)十六进制

十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F表示,其中:A~F相当于十进制的10~15,这些称作十六进制数字。

参考地址: https://zh.wikipedia.org/wiki/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6

(3)大小端模式

大端模式:低位(字节/比特)放在高地址中,高位(字节/比特)放在低地址中。

小端模式:低位(字节/比特)放在低地址中,高位(字节/比特)放在高地址中。

一般操作系统都是小端模式;而通讯协议是大端模式。

java和平台无关,默认是大端模式。

参考地址:https://www.cnblogs.com/justkong/p/8807534.html

自定义协议

(1)对接数据帧封装协议

表2.3.1 通用数据帧

帧 头 2byte

帧长度 4byte

帧流水号 2byte

协议版本 1byte

命令 1byte

数据载荷 LEN byte

校验和 1byte

0x5A55

0x0000 ~0xFFFFFFFF

0x0000 ~0xFFFF

0x00~0xFF

0x00-0xFF

——

0x00~0xFF

表2.3.2命令子域值

命令值

描述

反馈命令值

0x01

厂商识别码验证请求

0x01

0x03

心跳

0x03

0xFE

获取平台时间

0xFE

0x26

上传车牌识别数据

0x26

注:

1、所有信息传输时,低字节在前,高字节在后。

2、信息的反馈

信息产生端发送数据包给信息处理端后,信息处理端反馈数据包格式和请求帧一致,定义如下:

表2.3.3 反馈数据帧

帧 头 2byte

帧长度 4byte

帧流水号 2byte

协议版本 1byte

命令 1byte

数据载荷 LEN byte

校验和 1byte

0x5A55

0x0000 ~0xFFFFFFFF

同请求帧流水号

同请求帧协议版本

请求帧命令

——

0x00~0xFF

如表2.3.1所示,通信帧结构包括帧头子域、帧长度子域、帧流水号子域、协议版本子域、命令子域、数据载荷子域、校验和子域。其中,帧头为固定的2个字节(0x5A55);帧长度子域4个字节,其值为除帧头外实际数据帧长度,包括帧长度子域本身的长度;帧流水号子域2个字节,信息产生端上发数据是产生的帧流水号约定在1-1024数字范围内,对信息产生端主动上报的数据,信息处理端返回响应帧中的帧流水号同上报帧流水号,同样信息产生端响应平台请求帧的流水号也需相同,该帧流水号区分不同帧;协议版本子域1个字节,表示命令的协议版本;命令子域1个字节,其值定义如表所示;数据载荷子域的字节数LEN是根据不同的数据帧结构变化的,详见具体帧结构;校验和:从帧头0x5A55开始累加到校验和子域之前,包括帧头字节。

(2)文档分析

确定数据值为:帧头固定、帧流水号约到在1-1024之间、协议版本固定01、命令固定,

需要计算的值为:帧长度,数据载荷长度(数据载荷为json字符串,可详情参看河源对接文档)、校验和

需要小端排序字段:帧长度、帧流水号

(3)变量声明

帧头为2字节,Java基本数据类型应声明为short

帧长度为4字节,Java基本数据类型应声明为int

帧流水号为2字节,Java基本数据类型应声明为short

协议版本为1字节,Java基本数据类型应声明为byte

命令为1字节,Java基本数据类型byte

数据载荷为json字符串,Java基本数据类型应声明为String

校验和为1字节,Java基本数据类型应声明为byte

(4)相关计算

帧长度计算:

帧长度是除帧头以为的数据长度,现在只有数据载荷长度未知,那么帧长度4+帧流水号长度2+协议版本长度1+命令长度1+数据载荷长度?+校验和长度1即为帧长度

帧长度计算公式则变成:9+?数据载荷长度

数据载荷长度计算:

数据载荷为String,将String转为byte数组,获取byte数组的长度即为数据载荷长度

校验和计算:

校验和:从帧头0x5A55开始累加到校验和子域之前,包括帧头字节

(这个校验和计算是请教的硬件部门同事)

就是把帧头到数据载荷放到一个byte数组然后计算长度

(5)帧长度、帧流水号小端排序计算:

数据包组装:

经和对接方确认tcp调试工具发送的是十六进制的数据包

所以要将对接的数据转换为十六进制,然后拼接在一起形成一个完整的16进制数据包

(6)数据包调试

使用TCP调试助手以十六进制发送数据包,验证能否收到返回,能收到即说明数据包组装无误。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java基础
  • 自定义协议
相关产品与服务
汽车相关识别
汽车相关识别(Vehicle Optical Character Recognition,Vehicle OCR)基于行业前沿的深度学习技术,提供驾驶证识别、行驶证识别、车牌识别、车辆 VIN 码识别等多种服务,支持将图片上的文字内容,智能识别为结构化的文本,应用于车主身份认证、ETC 出行、违章识别、停车管理等多种场景,大幅提升信息处理效率。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档