自定义数据模板 DataTPL 使用手册

文件状态 【√】 初 稿 【 】 审核稿 【 】 终 稿
版本号 V1.2.83
保密等级 限制公开
发布人员 谭祥
修订日期 2022-08-23

变更记录

版本 日期 修改人 描述(注明修改的条款或页)
1.0.12 2019-12-16 谭祥 文档初稿
1.0.41 2020-04-26 谭祥 增加时间格式定义
1.1.11 2021-01-12 谭祥 补充GPS格式支持、整型支持factor、offset
1.2.81 2022-08-15 易建华 完善GPS、时间格式示例
1.2.83 2022-08-23 易建华 增加支持可变字符数据格式

介绍

为满足车联网、物联网等数据高速采集频率(如100ms/次)、传输数据项多(如一次采集2000项)的要求,在数据采集中最大限度压缩数据包大小、降低数据包传输流量尤为重要。

脱胎于 RPC (基于TCP协议) 与 HTTP (基于HTTP协议) 的适用场景,借鉴 ProtoBuf 对于 Json数据格式在数据传输中的优点,提出自定义数据模板(DataTPL)方案,针对性解决数据采集高频率、大数据量的痛点。

同时,传统数据采集中一旦涉及数据项增减,云端与终端均需要进行大量的开发适配工作,自定义数据模板(DataTPL)方案在解决此场景时,仅需调整数据模板,云端根据模板匹配对应的数据采集项,免去了云端开发升级的工作量。

此外,云端还需要考虑同时支持不同设备类型的数据采集、兼容不同数据版本的终端数据采集,改动量巨大不利于采集平台的稳定。而自定义数据模板(DataTPL)支持定义多套、多版本的数据模板,灵活适配多类型数据设备的采集。

> 数据模板作用

  • 定义数据标准,规范终端数据采集上传、云端数据接收解析。
  • 面向数据模板编程,最大限度减少开发量

> 数据模板优势

  • 最大限度地压缩数据包的大小、降低数据传输流量
对比项 DataTPL Json
协议 TCP HTTP
数据传输 报文体积小 报文体积大,需要传输 key + value
安全性 加密性好 明文,安全性低
耗时 传输量小,耗时短 耗时较长
  • 减少开发工作量

>> 示例

经过测试,在采集数据项(772项)时,使用两种方案数据传输包的大小对比

对比项 DataTPL JSON
数据包大小 1.62KB 20.3KB

DataTPL方案下,由于数据项终端与云端完成约定,传输时只需要传输数据值,体积大幅减小

流程

定义

自定义数据包,最大支持9999字节(9.76K)数据传输

> 模板标识

模板标识即模板标号,是每一套数据模板的唯一标识。根据业务需要支持为不同类型的设备、不同版本的数据,设计为不同的数据模板。

例如:

  • 为A类设备定义数据模板 (1001),为B类设备定义数据模板 (1002);
  • 后续A类设备需要增加采集x项数据,则新增数据模板(1003)
  • …..

>> 规则

  • 数字,具备唯一性,模板录入系统时自动生成
  • 目前最高支持9999套模板 (4位数)

> 数据项

上图为模板中的数据项样例

>> 已支持数据类型

其中时间GPS可变字符为特定格式

编号 数据类型 字节长度 使用场景 说明 物理值示例
1 时间 固定为8 日期、时间格式 精度到毫秒 2022/10/15 16:02:17.0317
2 GPS 固定为10 GPS经纬度数据 标准经纬度数据 23.163207,80.023586
3 有符号整型 定义长度 带符号的数字,可结合factor、offset 有符号数字,支持结合比例因子/分辨率(factor)、偏移量(offset)表示负数、小数等数值 160
4 无符号整型 定义长度 无符号的数字,可结合factor、offset 无符号数字,支持结合比例因子/分辨率(factor)、偏移量(offset)表示负数、小数等数值 3282.05
5 字符 定义长度 可确定长度的字符 ASCII编码,不支持中文 2.2.1.202201090808.rc2.dev
6 可变字符 最大255 无法确定长度的字符型数据、各类复杂格式数据 首个BYTE为数据长度,第二个BYTE起为数据,采用ASCII编码,不支持中文 多维数组:[[21,32],[15,28],[13,18]……]

>> 数据格式说明

>>> 时间

【示例】:

2022年7月1日16点47分53秒725毫秒的表示

>>> GPS

【示例】:

109.412734,24.320514 (广西柳州市柳北区解放街道柳州商厦)

>>> 整型

针对可定义长度的数字,支持有符号整型、无符号整型,推荐使用无符号整型

  • 小数
    对于小数的数据值,为确保精度不丢失,可结合比例因子/分辨率(factor)转换为整数传输

  • 负数
    对于负数的数据值,可结合偏移量(offset)转换为正整数传输

关于分辨率(factor)和偏移量(offset)的使用

  • 数据解析

    • 转换公式:y=a*x+b
    • 公式说明:y 实际物理值, x 传输数据值, a 分辨率(factor), b 偏移量(offset)
    • 适用场景:将接收到数据转换为实际物理量
  • 数据发送

    • 转换公式:x=(y-b)/a
    • 公式说明:y 实际物理值, x 传输数据值, a 分辨率(factor), b 偏移量(offset)
    • 适用场景:编写程序时,将已有的物理量转换为传输数据发送出去

参考文档 https://blog.csdn.net/MQ0522/article/details/120502657

【示例】:

数据项如下

数据项中文名 数据项英文名 数据类型 字节长度 比例因子 偏移量 小数点位数 最大值 最小值 单位
液压温度 hrtValue 无符号整型 2 0.01 -80 2 -80 300 °C

一句话总结:传输时使用 0 - 38000 来表示 -80°C - 300°C

当前设备液压温度(HRT)物理值为 -72.46°C,则按照公式:x=(y-b)/a

x = (-72.46 - (-80))/0.01 = 754

此时使用754作为上传数据值

>>> 字符

可定义长度的字符,使用ASCII字符集编码

【示例】:

车辆VIN码:LKGESV520BW123456,转换后
0x4C 0x4B 0x47 0x45 0x53 0x56 0x35 0x32 0x30 0x42 0x57 0x31 0x32 0x33 0x34 0x35 0x36

>>> 可变字符

> 使用建议

  • 无符号整型、有符号整型,推荐优先使用无符号

  • 优先使用正数,针对负数场景建议结合偏移量进行处理

  • 比例因子/分辨率(factor)设计得越小,数值精度越高

  • 对于定义长度的数据类型,数据拼装时应注意数据长度的补白(保证满足数据长度)

  • 字符转换请使用ASCII字节码

  • 非强制场景不使用中文,由于中文需要采用UTF8字符集编码(将造成字符编码的整体变更,同时导致数据包大小整体变大)

开发

> 自定义数据包定义

>> 数据组装说明

  • 数据长度千位:自定义数据部分整体长度(包含数据长度的2个字节)
  • 自定义数据集模板标识:由平台配置后产生数据模板标识(模板编号, <=9999)
  • 自定义数据:终端根据对应数据模板所定义的数据项将所有自定义数据拼接而成

>> 注意事项

数据组装时注意处理网络字节序

> 参考示例

采用数据模板101、长度为1280字节的数据包示例如下:

D7 D6 D5 D4 D3 D2 D1 D0
BYTE0 0 0 0 1 0 0 1 0
BYTE1 1 0 0 0 0 0 0 0
BYTE2 0 0 0 0 0 0 0 1
BYTE3 0 0 0 0 0 0 0 1
…..

案例