(二)DLT645-2007协议数据帧结构解析     

书接上回,下图展示的是DLT645-2007协议读取电表电量的交互过程,数据请求帧里面请求的数据类型是当前正向有功电量。

PC请求帧:   68 AA AA AA AA AA AA 68 11 04 33 33 34 33 AE 16

电表应答帧:  FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

PC请求帧是广播请求当前正向有功电能的DTL646-2007协议数据帧,我们暂时跳过它,首先分析它的应答帧。DLT645-2007协议规定了数据帧结构,如下图:

根据帧结构定义,我们分析出应答帧是电表回复的正向有功电能数据,由固定前导码FE、固定68帧头、表地址、控制码、数据长度、数据类型、校验、帧尾组成,下面将对数据帧不同字段进行着色,方便展示。

                        FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

        其中红色部分数据为固定值,FE FE为前导码,用于发送方让接收方提前准备好接收数据,不同厂家不同型号的表前导码FE的个数是不同的,还有些厂家不会发送前导码FE,我们解析接收数据的一般方法是忽略前面N个FE,寻找数据帧中的68帧头作为一帧的起始位置,下面我们进行解析。


解析表号:

                        FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

从第一个68开始到第二个68之间的绿色数据为表号字段,在DLT645协议中规定,表号字段,数据字段都是逆序的,也就是与实际表号循序相反,我们要得到实际表号,需要反转数据帧中的表号字段 72 00 32 09 17 20,反转后我们得到:20 17 09 32 00 72,对比实际表号,确认解析正确。

        

 


解析控制码:

                        FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

应答帧中紫色1字节数据91为帧控制码,它表示本数据帧的帧类型,我们可以根据这个字节判断识别是07还是97协议,也可以通过此字节判断是请求帧还是应答帧,DLT645-2007协议定义如下:

解析控制码,我们需要将十六进制的控制码91转换成二进制数据10010001,高位的1对应上图控制码中的D7位,我们将转换后二进制数据一一对应到上图中,得出91的含义为主站发送的读数据应答帧,从站正确应答,且无后续数据帧。


解析数据段长度:

                        FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

应答帧中黑色1字节数据 08 为数据段长度,它表示从本帧数据中数据段的长度,也就是从长度字节 08 之后有多少个字节是数据段。本帧中长度字段为 08,表示数据段长度为8字节,我们可以据此,将数据段截取出来,即:

                                                 33 33 34 33 B9 34 33 33

 


解析数据段的数据项标识:

                        FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

应答帧中黄色和蓝牙部分数据为数据段,数据段分为两部分,数据项标识部分和数值部分。

数据像标识部分为黄色部分33 33 34 33,它也是逆序传输的,且需要统一逐个减去十六进制0x33后才是真实值,步骤如下:

第一步:减去十六进制0x33

                                                33 33 34 33   -------减33------->  00 00 01 00

第二步:四个字节反转顺序

                                                00 00 01 00   -------反转------->  00 01 00 00

得到数据项标识00 01 00 00,查询DLT645-2007协议,可以知道,00 01 00 00标识当前正向有功总电能,即我们常用的电量值。

tips:减0x33计算可用windows计算器完成,记得切换到程序员十六进制下。


 解析电量:

                          FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

应答帧中蓝色部分数据是当前正向有功电能,也就是我们常用的电量,同样的,它也是逆序传输的,且需要统一逐个减去十六进制0x33后才是真实值,下面我们对B9 34 33 33 进行三步处理:

第一步:减去十六进制0x33

                                                B9 34 33 33   --------减33-------->  86 01 00 00

第二步:四个字节反转顺序

                                                86 01 00 00   --------反转-------->  00 00 01 86

第三步:在指定位置加入小数点

                                                00 00 01 86   ------加小数点----->  00 00 01.86

三步骤完成得出当前电量为1.86kW.h,对比电表实际示数,发现计算正确,下图是实际电表

第三步中的小数点位置在DL645协议中由规定,查询得知,它的固定格式为:XXXXXX.XX   不同类型的数据项小数点格式不同,解析其他数据项时,应根据协议规定套用不同数据格式。


解析和计算校验和:

FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

通信校验是很重要,但是DLT645只有一个字节的简单校验和,即接收帧中紫色6D,他固定为倒数第二字节,它的值是它前面从第一个68起始符开始到最后一字节数据段的单字节累加和(单字节累加,忽略溢出),如下图灰色背景指示的累加范围:

FE FE 68 72 00 32 09 17 20 68 91 08 33 33 34 33 B9 34 33 33 6D 16

计算方式是十六进制加法:

                68+72+00+32+09+17+20+68+91+08+33+33+34+33+B9+34+33+33=46D

计算结果为十六进制的46D,超出一个字节的高位溢出部分我们忽略,也就是忽略高位4,最后计算出的校验和为6D,经过对比我们收到的校验码也是6D,校验通过。


 

DLT645调试小程序:

        上面是一帧数据的手工解析方法,为的是深入理解DLT645协议,实际工程中我们还需要借助工具解析数据帧,为此我开发了DLT645调试小程序"红外抄表",大家可以在微信上搜索小程序“红外抄表”或者扫描下方二维码找到小程序,里面有自动解析工具可以解析DLT645协议的数据帧。

打开程序后选择第二个选项,数据帧解析,之后输入你需要解析的报文,点击“解析”按钮就可以看到表号,自动计算校验值,自动计算电量等,如下图。


TH076红外读表器:

        上面介绍的数据交互都是通过新科聚合的TH076红外读表器与电表交互的,TH076红外读表器是新科聚合专门针对电表采集行业推出的红外读表器,它可以将红外信号转换成RS485信号,连接各类物联网关或者电脑,相比传统停电接485线缆,具有低施工成本,高实施速度的特点。

上面介绍的“红外抄表”微信小程序是TH076红外读表器的配套的小程序,借助小程序用户可以直接手机蓝牙连接TH076红外读表器,现场就可以测试电表的可接入性。

         TH076红外读表器可以实现免停电,免拆装电表、非侵入式的数据采集,它采用38k红外调制波与电表建立DL/T645通信,采集正向有功电量,电压,电流,功率等重要参数,红外数据采集器的红外读头贴在计量柜玻璃窗或者电表附近即可。

工程采购或者购买测试都可以联系新科聚合网络技术有限公司,网址: www.thinker.vc

            

至此,我们初步完成DLT645-2007协议电量数据应答帧的解析,成功解析出当前电量数据项,并于实际电表表盘示数确认一致。

下一篇文章我们将解析DLT645-2007的电量请求帧。

DLT645协议解析(二)---07协议数据帧结构解析相关推荐

  1. Thrift源码解析(二)序列化协议

    概述 对于一个RPC框架,定义好网络数据的序列化协议是最基本的工作,thrift的序列化协议主要包含如下几种: TBinaryProtocol TCompactProtocol TJSONProtoc ...

  2. 简单说说USB协议(二)包的结构与包的分类

    无论是什么传输设备,通信的过程就涉及到传输方法,USB协议中有四种传输方式:批量传输.中断传输,等时传输,控制传输.因此在这些传输方式上传输的都是包,所以在了解传输方式前,还需要知道包是个什么东西. ...

  3. 解析二维码如何批量解析二维码内容

    1.如下图文件夹中含有部分二维码图片,现在我们想要批量解析这些二维码内容. 2.首先我们打开Excel ​ 3.点击[图片工具](Excel工具箱,百度即可了解详细下载安装信息,本文这里就不做详细解说 ...

  4. JAVA实现报文解析:协议的数据类型和完整的报文结构解析

    **JAVA实现GBT32960报文解析系列文章链接:** JAVA实现GBT32960报文解析(一):协议的数据类型和完整的报文结构解析 JAVA实现GBT32960报文解析(二):数据包结构解析源 ...

  5. Android超方便 集成 Zxing实现扫一扫,闪光灯,生成二维码图片,解析二维码(条码)等功能

    之前我写过一篇博客是关于如何将zxing集成到Android Studio中,以及简单的实现扫一扫功能. 详情请看:Android Studio集成Zxing扫一扫 但是,上面那篇博客只有有一个扫一扫 ...

  6. java生成以及解析二维码

    java生成以及解析二维码 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 ...

  7. 【zxing生成二维码及解析二维码】

    导入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><gr ...

  8. 【Python3解析二维码】翻遍全网找到 2 款库推荐给大家~

    文章目录 ⛳️ 实战场景 ⛳️ pyzbar 解析二维码 ⛳️ cv2 解析二维码 总结 ⛳️ 实战场景 上一篇博客,我们整理了 4 款 Python 二维码模块,发到社群之后,有小伙伴反馈非常棒,那 ...

  9. Java简单的生成/解析二维码(zxing qrcode)

    Hi I'm Shendi Java简单的生成/解析二维码(zxing qrcode) 在之前使用 qrcode.js 方式生成二维码,但在不同设备上难免会有一些兼容问题,于是改为后端(Java)生成 ...

最新文章

  1. iOS-iOS9.Plist插入网络安全xml
  2. 使用ESP32能驱动电子墨水屏吗?
  3. MySQL复习资料(三)——MySQL-DML语句
  4. SQL 中 not in 查询不到数据问题
  5. arch linux 安装xfce_树莓派安装ArchLinux+桌面环境
  6. LAMP架构,纯文本作品
  7. 电商项目的并发量一般是多少_掌握这些,高并发秒杀系统就不用担心了!
  8. mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())
  9. Linux系统中常用操作命令
  10. 数理逻辑习题集(6)
  11. 计算机熵的定义是,信息熵
  12. Android将数据导出为excel文件的方法
  13. cc链2(小宇特详解)
  14. 运放放大倍数计算公式_运算放大器基础1——用作比较器
  15. 农村环境保护之平时作业一
  16. python图片转手绘软件_酷!一个仿漫画手绘风格的 Python 图表库
  17. 六年级计算机课学什么意思,六年级信息技术上册《第一单元第2课与计算机交朋友》教案及教学反思...
  18. ubuntu16.04 安装keepass并汉化,解决乱码问题
  19. 【Docker】使用docker安装部署NextCloud私人网盘
  20. 6寸 掌上电脑 linux,真·掌上电脑!这是台仅6英寸大小的Windows 10袖珍电脑

热门文章

  1. 快来帮您一分钟了解移动互联网
  2. Altium Designer 13 将pcb图导出为stp文件
  3. R语言caret机器学习(三):数据预处理下集
  4. Android 字体库的使用
  5. oracle如何收缩表空间文件,ORACLE 收缩表空间的数据文件
  6. 橄榄山BIM大学论坛正式启用,有Revit二次开发专版。可去那里问问题 http://bbs.glsbim.com
  7. 请写下你的烦恼——读《解忧杂货店》有感
  8. Rest ful API的一些基本概念
  9. git每次都弹窗提示输入用户名和密码的解决方法
  10. C++数值和字符串之间的转换方法(只讨论比较简单的办法)