DLT645协议Python实现库
Reason this release was yanked:
这个版本串口通讯存在bug
Project description
DLT645协议Python实现库
一个功能完整的DLT645电能表通信协议Python实现库,支持TCP和RTU两种通信方式,可用于电能表数据读写和通信测试。
功能特性
- 🌐 多种通信方式:支持TCP和RTU(串口)通信
- 📊 完整协议支持:实现DLT645协议的主要功能
- 🔌 客户端/服务端:同时提供客户端和服务端功能
- 📈 多种数据类型:支持电能量、最大需量、变量数据读写
- 🛡️ 设备认证:支持设备地址验证和密码保护
- 📝 完善日志:内置日志系统,便于调试
- 🎯 易于使用:简洁的API设计,快速上手
支持的数据类型
- 电能量数据(00类):正向有功电能、反向有功电能等
- 最大需量数据(01类):最大需量及发生时间
- 变量数据(02类):实时电压、电流、功率等
安装
pip install dlt645-protocol
或者从源码安装:
git clone <your-repo-url>
cd dlt645
pip install .
快速开始
创建TCP服务器
from dlt645 import new_tcp_server
# 创建TCP服务器
server_service = new_tcp_server("127.0.0.1", 8021, 3000)
# 设置电能量数据
server_service.set_00(0x00000000, 100.0)
# 设置变量数据
server_service.set_02(0x02010100, 86.0)
# 启动服务器
server_service.server.start()
创建RTU服务器
from dlt645 import new_rtu_server
# 创建RTU服务器
server_service = new_rtu_server("COM4", 8, 1, 9600, "N", 1000)
# 设置数据
server_service.set_00(0x00000000, 100.0)
server_service.set_02(0x02010100, 86.0)
# 启动服务器
server_service.server.start()
创建TCP客户端
from dlt645 import MeterClientService
# 创建TCP客户端
client = MeterClientService.new_tcp_client("127.0.0.1", 8021, 30.0)
# 设置设备地址
client.set_address(b'\x00\x00\x00\x00\x00\x00')
# 读取电能量数据
data = client.read_01(0x00000000)
if data:
print(f"电能量: {data.value}")
# 读取变量数据
data = client.read_03(0x02010100)
if data:
print(f"变量值: {data.value}")
创建RTU客户端
from dlt645 import MeterClientService
# 创建RTU客户端
client = MeterClientService.new_rtu_client(
port="COM4",
baudrate=9600,
databits=8,
stopbits=1,
parity="N",
timeout=30.0
)
# 设置设备地址
client.set_address(b'\x01\x02\x03\x04\x05\x06')
# 读取数据
data = client.read_01(0x00000000)
API参考
服务器端API
MeterServerService
主要的服务器服务类,提供以下方法:
set_00(di: int, value: float)- 设置电能量数据set_01(di: int, demand: Demand)- 设置最大需量数据set_02(di: int, value: float)- 设置变量数据set_address(address: bytearray)- 设置设备地址set_password(password: bytearray)- 设置密码
便捷函数
new_tcp_server(ip: str, port: int, timeout: int)- 创建TCP服务器new_rtu_server(port: str, dataBits: int, stopBits: int, baudRate: int, parity: str, timeout: float)- 创建RTU服务器
客户端API
MeterClientService
主要的客户端服务类,提供以下方法:
new_tcp_client(ip: str, port: int, timeout: float)- 创建TCP客户端(类方法)new_rtu_client(port: str, baudrate: int, databits: int, stopbits: int, parity: str, timeout: float)- 创建RTU客户端(类方法)read_01(di: int)- 读取电能量数据read_02(di: int)- 读取最大需量数据read_03(di: int)- 读取变量数据read_address()- 读取设备地址write_address(new_address: bytes)- 写入设备地址set_address(address: bytes)- 设置本地设备地址set_password(password: bytes)- 设置密码
数据标识说明
DLT645协议使用4字节的数据标识来标识不同的数据项:
电能量数据(00类)
0x00000000- 总有功电能0x00010000- 正向有功电能0x00020000- 反向有功电能
最大需量数据(01类)
0x01000000- 总最大需量0x01010000- 正向最大需量
变量数据(02类)
0x02010100- A相电压0x02010200- B相电压0x02010300- C相电压0x02020100- A相电流0x02020200- B相电流
配置文件
库包含了丰富的配置文件,定义了各种数据类型:
config/energy_types.json- 电能量数据类型配置config/demand_types.json- 最大需量数据类型配置config/variable_types.json- 变量数据类型配置
开发指南
环境要求
- Python >= 3.7
- loguru >= 0.5.0
- pyserial >= 3.4
运行测试
# 安装开发依赖
pip install -e .[dev]
# 运行测试
pytest
调试日志
库使用loguru进行日志记录,可以通过以下方式启用详细日志:
from loguru import logger
logger.add("dlt645.log", level="DEBUG")
常见问题
Q: 如何处理通信超时?
A: 可以在创建客户端时设置timeout参数,或者使用try-catch捕获超时异常。
Q: 支持哪些串口参数?
A: 支持标准的串口参数:波特率(1200-115200)、数据位(7-8)、停止位(1-2)、校验位(N/E/O)。
Q: 如何添加自定义数据类型?
A: 可以修改config目录下的JSON配置文件,添加新的数据标识和格式定义。
许可证
Apache License 2.0
贡献
欢迎提交Issue和Pull Request!
联系方式
- 作者:Chen Dongyu
- 邮箱:1755696012@qq.com
- 项目地址:https://gitee.com/chen-dongyu123/dlt645
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dlt645-1.0.0.tar.gz.
File metadata
- Download URL: dlt645-1.0.0.tar.gz
- Upload date:
- Size: 47.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
597df70f0eb0bf96256cabc1f1f20ffe407b8a606e78cfe5ae34d60dc26c5fbc
|
|
| MD5 |
ae4f36305fe9f4097a5cd27f7c574915
|
|
| BLAKE2b-256 |
8b56bcfa6c18e63f8b6476d492409b3b178f15251d89a82e933b06b37a0c0d31
|
File details
Details for the file dlt645-1.0.0-py3-none-any.whl.
File metadata
- Download URL: dlt645-1.0.0-py3-none-any.whl
- Upload date:
- Size: 40.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1d19f7995354e57a725fd5a066a912a1b15f12829ee60f9317d551a0d31e83f
|
|
| MD5 |
381f75c293b2be06408d975d4cc1e8dd
|
|
| BLAKE2b-256 |
592ba5708bdfef4942879713cef665903da8ba17154cfbafa960a8040fa1edd4
|