基于 PyQt5 开发的 DL/T 645-2007《多功能电能表通信协议》测试工具,用于电表通信协议调试、常规参数抄读与自定义报文收发。
功能特性
1. 通信方式
支持两种通信模式,可在界面顶部切换:
串口通信:自动枚举本机串口,可选波特率(600/1200/2400/4800/9600/19200)、数据位、校验位、停止位•
TCP 客户端:连接电表集中器或串口服务器的 TCP 端口(需填入 IP 和端口)
2. 协议实现
严格遵循 DL/T 645-2007 规约:
• 帧格式:FE FE FE FE 68H A0~A5 68H C L DATA CS 16H
• 唤醒头 FE FE FE FE(发送时自动添加,接收时自动过滤)
• 地址域 6 字节,低字节在前,按十六进制打包
• 数据域所有字节 +33H 传输
• 校验码 CS:从第一个 68H 到 CS 前所有字节的模 256 和
• 控制码:读数据(11H)、读后继(12H)、读地址(13H)等
• 异常应答解析(D6=1,错误码:无数据/密码错/权限不足等)
3. 抄读参数
内置 30 项常用参数,按规约附录 A.2 数据标识编码表分类:
| 分类 | 参数示例 |
| 电能量 | 组合/正向/反向有功总电能、各费率电能、四象限无功电能 |
| 最大需量 | 正向有功最大需量、反向有功最大需量 |
| 变量数据 | A/B/C 相电压电流、瞬时总有功/无功/视在功率、总功率因数、电网频率 |
| 参变量 | 日期及星期、时间、最大需量周期、滑差时间、通信口速率特征字 |
- • 数据格式自动按规约解析(BCD 码、小数位、单位)• 支持一次选择多个参数批量抄读,结果在表格中显示• 支持"读地址"广播命令(地址域 999999999999H)
4. 自定义报文
- • 支持手动输入任意十六进制报文直接发送• 可用于测试电表对非标准帧的响应,或调试特殊命令
5. 日志与持久化
- • 实时通信日志(发送/接收报文、时间戳、解析结果)• 日志支持保存为文本文件• 电表地址自动持久化(下次启动自动填入上次地址)• 结果表格支持导出
界面说明
界面分为四个区域:
┌─────────────────────────────────────────────┐
│ 通信设置区(顶部) │
│ 通信模式 | 串口/TCP参数 | 电表地址 | 连接 │
├─────────────────────────────────────────────┤
│ 参数选择区(左) │ 结果表格区(右) │
│ 参数列表(可多选) │ 参数名 | 值 | 单位 | 时间 │
│ [读取选中] │ │
│ [读地址] │ │
├─────────────────────────────────────────────┤
│ 自定义帧发送区 │
│ HEX 输入框 | [发送] │
├─────────────────────────────────────────────┤
│ 通信日志区(底部) │
│ [保存日志] [清空] │
└─────────────────────────────────────────────┘
使用方法
1. 启动
双击 DLT645Tool.exe 运行(首次启动需 2-3 秒解压,之后正常)。
无需安装 Python 环境,单文件即可运行。
2. 连接电表
1. 选择通信模式:串口 或 TCP 客户端
2. 串口模式:选择串口号、波特率(电表常用 2400)、校验(通常偶校验)
3. TCP 模式:填入串口服务器的 IP 和端口(如 192.168.1.100:8080)
4. 在"电表地址"框输入 12 位十六进制电表地址(如 122512050318)
5. 点击"连接"按钮
3. 抄读参数
- 1. 在左侧参数列表勾选要读取的参数(可多选)2. 点击"读取选中"按钮3. 结果显示在右侧表格,包含参数名、数值、单位、读取时间4. 如读不到数据,查看底部日志区是否有异常应答
4. 读取电表地址(读地址命令)
- • 当不知道电表通信地址时,点击"读地址"按钮• 工具自动发送广播帧(地址域 999999999999H,C=13H)• 读到的地址会自动填入地址框
5. 自定义报文发送
-
-
- • 在 HEX 输入框输入完整报文(如
FE FE FE FE 68 AA AA AA AA AA AA 68 13 00 4F 16- )
-
-
- • 点击"发送"按钮,原样发送(不二次加唤醒头)
-
- • 用于调试特殊命令或非标准帧
6. 日志操作
- • 底部日志区实时显示每次收发的报文• 点击"保存日志"将日志导出为文本文件• 点击"清空"清除当前日志
报文示例
以读取"正向有功总电能"为例(电表地址 122512050318):
发送帧:
FE FE FE FE 68 18 03 05 12 25 12 68 11 04 33 33 34 33 1B 16
-
-
- • 地址域:
18 03 05 12 25 12
-
- • 唤醒头:
FE FE FE FE(低字节在前,对应 122512050318)
-
- • 数据标识:33 33 34 33(DI0~DI3 各+33H,DI3DI2DI1DI0=00010000,正向有功总电能)
-
-
- • 校验码:
1B
-
- 正常应答帧
-
- (电表返回):
FE FE FE FE 68 18 03 05 12 25 12 68 91 08 33 33 34 33 XX XX XX XX CS 16 -
-
-
- • 控制码
91
- :正常应答(D7=1)
-
-
- • 数据域前 4 字节为数据标识,后 4 字节为电能数据(BCD,格式 XXXXXX.XX kWh)
技术参数
| 项目 | 说明 |
| 协议标准 | DL/T 645-2007 |
| 通信模式 | RS232/RS485 串口、TCP 客户端 |
| 串口参数 | 600~19200bps,5/6/7/8 数据位,无/奇/偶校验,1/1.5/2 停止位 |
| 地址格式 | 12 位十六进制(BCD 编码) |
| 运行环境 | Windows 7 及以上,无需 Python 环境 |
| 程序类型 | 单文件 exe(37 MB) |
常见问题
Q: 连接后读不到数据?
- • 检查串口参数是否与电表一致(默认 2400bps、偶校验)• 检查电表地址是否正确(可用"读地址"命令获取)• 检查物理连接(RS485 的 A/B 极性)• 查看日志区是否有异常应答(如"无数据"表示电表无此数据项)
Q: 日志显示发送报文但无应答?
- • 确认电表已上电且通信端口正常• TCP 模式下确认 IP 和端口可达• 串口模式下确认串口未被其他程序占用
Q: 报文里的 FE FE FE FE 是什么?
- • 唤醒头,用于唤醒电表通信模块,部分电表必须加,工具默认自动添加
Q: 校验码怎么算?
- • 从第一个 68H 到校验码前所有字节相加,取模 256,工具自动计算无需手动处理
下载链接
https://download.csdn.net/download/wuquan_1230/93222947
223