开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 677|回复: 19
收起左侧

[易源码分享] DLT645-2007电表协议解析开源

[复制链接]
结帖率:95% (18/19)
发表于 2025-7-27 23:11:08 | 显示全部楼层 |阅读模式   福建省厦门市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -

DLT645-2007协议规定了数据帧结构,如下图:

[color=var(--theme)]

根据帧结构定义,我们分析出应答帧是电表回复的正向有功电能数据,由固定前导码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,对比实际表号,确认解析正确。

[color=var(--theme)]

解析控制码: 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协议定义如下:

[color=var(--theme)]

解析控制码,我们需要将十六进制的控制码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,cha询DLT645-2007协议,可以知道,00 01 00 00标识当前正向有功总电能,即我们常用的电量值。

[color=var(--theme)]

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

[color=var(--theme)]

解析电量: 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,对比电表实际示数,发现计算正确,下图是实际电表

[color=var(--theme)]

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

[color=var(--theme)]

解析和计算校验和:

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,校验通过。

[color=var(--theme)]

下面是解析的正确答案.


[color=var(--theme)]


根据上面文章使用易语言编写而成,文章来至于网络 非原创。


DLT645-2007协议例子.e

959.64 KB, 下载次数: 22, 下载积分: 精币 -2 枚

例子

2007.e

972.01 KB, 下载次数: 22, 下载积分: 精币 -2 枚

解析协议模块

评分

参与人数 2好评 +2 精币 +3 收起 理由
网络注册网员 + 1 + 1 支持开源~!感谢分享
xshu8 + 1 + 2 感谢分享,很给力!~

查看全部评分


结帖率:0% (0/2)

签到天数: 8 天

发表于 7 天前 | 显示全部楼层   广西壮族自治区玉林市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 8 天

发表于 2025-7-30 09:37:36 | 显示全部楼层   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

签到天数: 9 天

发表于 2025-7-29 12:38:15 | 显示全部楼层   新疆维吾尔自治区巴音郭楞蒙古自治州
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2025-7-29 09:33:54 | 显示全部楼层   浙江省杭州市
分析的好详细
回复 支持 反对

使用道具 举报

结帖率:80% (59/74)

签到天数: 7 天

发表于 2025-7-29 08:48:59 | 显示全部楼层   广东省珠海市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 7 天

发表于 2025-7-29 08:27:19 | 显示全部楼层   江西省上饶市
yuye123 发表于 2025-7-28 14:27
问问有没有清零这个功能

哈哈,这就真有点强大了
回复 支持 反对

使用道具 举报

签到天数: 8 天

发表于 2025-7-29 07:27:44 | 显示全部楼层   河北省张家口市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2025-7-28 20:39:26 | 显示全部楼层   广东省惠州市
加油!努力学习!
回复 支持 反对

使用道具 举报

签到天数: 8 天

发表于 2025-7-28 20:14:51 | 显示全部楼层   江苏省连云港市

感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表