Python3 串口获取智能电表数据(DTL645-2007)

本文介绍如何使用Python的PySerial模块读取RS-485电表数据。通过设置串口参数,发送特定命令,解析返回的电表数据,并将其转换为常用数字格式。适用于智能电表数据采集和监测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先安装pyserial模块

import serial
import binascii
ser = serial.Serial("COM3",2400,parity=serial.PARITY_EVEN,timeout=2)  
#timeout为0时候无法获取返回值(串口有返回,但read不到)

print(ser.isOpen())     # 判断串口是否打开,返回"True" or "False"
ser.write((b'\xfe\xfe\xfe\xfe\x68\x77\x01\x02\x16\x12\x18\x68\x11\x04\x33\x33\x34\x33\x6c\x16'))
#根据DTL645-2007规约发送【读取(当前)正向有功总电能命令】-该命令为0x00010000,不发前导符4个"FE"也行
data = (ser.readline())    #获取该命令对应的返回报文
print(data)
print(binascii.b2a_hex(data)[-12:-4]) #将返回报文转码并提取报文中数据段
# 还需要进一步减33,反向取值,最终获取我们常用的数字
ser.close()

真实环境中运行结果如下图,正泰的RS-485的电表。

动力来自于想随时知道自家到底用电功率是多少,这样才能够知道怎么节约用电啊。 过程:找标准看,直接下载DL/T645-2007,看了半天,几十页过去了,有点眉目,然后就着手测试。还算顺利,把本次调测心得写下来。 1、先从485入手,就是一个USB串口TTL模块外加自己焊接的一个485转换电路连接到电表上的485接口就可以了。(注:本人用单片机控制流控DERE脚,我讨厌那种自动收发电路,是否可行不知道。) 2、默认速率前几页写的是1200bps,后面有一页写的默认速率又是2400bps,还好只说了两个,经测试,我手上的表是2400bps速率通讯的。 3串口是1位停止位,8位数据位,偶校验,1位停止位的配置。 4、校验和是一个个累加起来就可以了,从68一直加到校验和前一位就OK的。 5、FE前导码我发现发不发,电表都能正确接收并回复数据的。 6、电表发回来的数据是有4个FE前导码的。 7、我手上的表回复数据的间隔时间是不符合标准要求的,标准要求在收到数据后10-500ms内回复数据,结果我发现有时候2ms就回数据了。曾导致485收发切换不及时丢掉一两个表发回来的FE前导码的。 8、标准里面的波形失真度,一分钟有功功率平均值,零线电流等部分数据是读不出来的。 9、表内温度,电池电压我试了下是读得出来的。 10、一天看资料,一天写程序基本数据还是顺利读到了的。 11、可以绘制各个参数的曲线
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值