src package
Subpackages
- src.common package
- src.model package
- src.protocol package
- src.service package
- src.transport package
Module contents
DLT645协议Python实现库
这个库提供了DLT645通信协议的完整实现,包括: - TCP和RTU通信方式 - 客户端和服务端功能 - 电能表数据读写操作 - 电能量、最大需量、变量数据类型支持 - 实时报文捕获功能
- class src.MeterServerService(server, address=bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00'), password_manager=<src.model.types.dlt645_type.PasswordManager object>)[源代码]
基类:
object电表服务端服务类。
用于模拟 DLT645 电表设备,响应客户端的数据读写请求。
- 变量:
server -- 通信服务器(TCP 或 RTU)。
address -- 设备地址(6字节)。
password_manager -- 密码管理器。
clear_meter_event_records -- 电表清零事件记录列表。
event_records -- 事件记录列表。
初始化电表服务端服务。
- 参数:
server (Union[TcpServer, RtuServer]) -- 通信服务器实例(TcpServer 或 RtuServer)。
address (Optional[bytearray]) -- 设备地址,默认为全零。
password_manager (Optional[PasswordManager]) -- 密码管理器,默认创建新实例。
- classmethod new_meter_server_service(server)[源代码]
创建新的MeterServerService实例
- 参数:
- 返回类型:
- 返回:
MeterServerService实例
- get_captured_messages(count=0)[源代码]
获取捕获的报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
报文列表
- 返回类型:
List[MessageRecord]
- get_captured_tx_messages(count=0)[源代码]
获取捕获的发送报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
发送报文列表
- 返回类型:
List[MessageRecord]
- get_captured_rx_messages(count=0)[源代码]
获取捕获的接收报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
接收报文列表
- 返回类型:
List[MessageRecord]
- get_captured_pairs(count=0)[源代码]
获取捕获的TX/RX配对列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
配对列表
- 返回类型:
List[MessagePair]
- class src.MeterClientService(client)[源代码]
基类:
object电表客户端服务类。
用于与 DLT645 电表设备进行通信,提供数据读写等业务功能。
- 变量:
address -- 设备地址(6字节)。
password_manager -- 密码管理器。
operation_code -- 操作码(4字节)。
client -- 通信客户端(TCP 或 RTU)。
初始化电表客户端服务。
- classmethod new_rtu_client(port, baudrate, databits, stopbits, parity, timeout)[源代码]
创建RTU客户端
- 返回类型:
- send_and_handle_request(frame_bytes)[源代码]
发送请求并处理响应(带超时控制)
- Args:
frame_bytes: 要发送的帧数据
- Returns:
DataItem: 成功时返回数据项 None: 超时或失败时返回
- get_captured_messages(count=0)[源代码]
获取捕获的报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
报文列表
- 返回类型:
List[MessageRecord]
- get_captured_tx_messages(count=0)[源代码]
获取捕获的发送报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
发送报文列表
- 返回类型:
List[MessageRecord]
- get_captured_rx_messages(count=0)[源代码]
获取捕获的接收报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
接收报文列表
- 返回类型:
List[MessageRecord]
- get_captured_pairs(count=0)[源代码]
获取捕获的TX/RX配对列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
配对列表
- 返回类型:
List[MessagePair]
- class src.DLT645Protocol[源代码]
基类:
objectDLT645 协议实现类。
该类实现了 DLT645 协议的核心功能,包括数据编码/解码、校验和计算、 帧构建和解析等操作。所有方法均为类方法,可直接调用。
- classmethod decode_data(data)[源代码]
数据域解码(-0x33H 转换)。
按照 DLT645 协议规定,对数据域进行解码处理, 每个字节减去 0x33H,并使用模 256 运算确保结果在 0-255 范围内。
- classmethod calculate_checksum(data)[源代码]
校验和计算(模 256 求和)。
按照 DLT645 协议规定,计算数据的校验和, 对所有字节进行累加,然后对结果取模 256。
- classmethod encode_data(data)[源代码]
数据域编码(+0x33H 转换)。
按照 DLT645 协议规定,对数据域进行编码处理, 每个字节加上 0x33H,并使用模 256 运算确保结果在 0-255 范围内。
- classmethod build_frame(addr, ctrl_code, data)[源代码]
构建 DLT645 协议帧。
按照 DLT645 协议规定,构建完整的协议帧,包括前导字节、 地址域、控制码、数据域、校验和和结束标志。
- 参数:
- 返回:
完整的 DLT645 协议帧。
- 返回类型:
- 抛出:
ValueError -- 当地址长度不为6字节时抛出。
- class src.CtrlCode(value)[源代码]
基类:
IntEnum控制码枚举。
DLT645 协议中控制码用于标识帧的功能类型。
- 变量:
BroadcastTimeSync -- 广播校时命令(0x08)
ClearDemand -- 需量清零命令(0x10)
ReadData -- 读数据命令(0x11)
ReadAddress -- 读通讯地址命令(0x13)
WriteData -- 写数据命令(0x14)
WriteAddress -- 写通讯地址命令(0x15)
FreezeCmd -- 冻结命令(0x16)
ChangeBaudRate -- 修改通信速率命令(0x17)
ChangePassword -- 修改密码命令(0x18)
- BroadcastTimeSync = 8
- ClearDemand = 16
- ReadData = 17
- ReadAddress = 19
- WriteData = 20
- WriteAddress = 21
- FreezeCmd = 22
- ChangeBaudRate = 23
- ChangePassword = 24
- class src.Demand(value, time)[源代码]
基类:
object需量数据类。
用于表示最大需量及其发生时间。
- 变量:
value -- 需量值(单位由具体数据项定义)。
time -- 需量发生时间。
初始化 Demand 实例。
- 参数:
value (float) -- 需量值。
time (datetime) -- 需量发生时间。
- class src.DataItem(di, name, data_format, value=0, unit='', update_time=datetime.datetime(2026, 2, 21, 1, 19, 18, 296140))[源代码]
基类:
object数据项实体类,表示一个具体的数据项。
- 变量:
di -- 数据标识 (DI),4 字节。
name -- 数据项名称。
data_format -- 数据格式字符串(如 "XXXXXX.XX")。
value -- 数据值。
unit -- 数据单位。
update_time -- 最后更新时间戳。
初始化 DataItem 实例。
- class src.DataFormat(value)[源代码]
基类:
Enum表示各种数据格式模板的枚举。
定义说明: - X: 十进制数字 - Y: 年 - M: 月 - D: 日 - W: 星期 - h: 时 - m: 分 - s: 秒 - N: 数字(通用)
- XXXXXXXX = 'XXXXXXXX'
- XXXXXX_XX = 'XXXXXX.XX'
- XXXX_XX = 'XXXX.XX'
- XXX_XXX = 'XXX.XXX'
- XX_XXXX = 'XX.XXXX'
- XXX_X = 'XXX.X'
- X_XXX = 'X.XXX'
- YYMMDDWW = 'YYMMDDWW'
- hhmmss = 'hhmmss'
- YYMMDDhhmm = 'YYMMDDhhmm'
- NN = 'NN'
- NNNN = 'NNNN'
- NNNNNNNN = 'NNNNNNNN'
- class src.TcpServer(ip, port, timeout, service)[源代码]
基类:
objectTCP 服务器类,用于与 DLT645 客户端进行 TCP 通信。
- 变量:
ip -- 服务器 IP 地址。
port -- 服务器端口号。
timeout -- 连接超时时间(秒)。
ln -- 监听套接字。
service -- 服务实例,用于处理业务逻辑。
初始化 TCP 服务器。
- 参数:
- class src.RtuServer(port, data_bits=8, stop_bits=1, baud_rate=9600, parity='N', timeout=5.0, service=None)[源代码]
基类:
objectRTU 服务器类,用于与 DLT645 客户端进行串口通信。
该类实现了 RTU(Remote Terminal Unit)服务器功能, 支持与 DLT645 协议客户端进行串口通信。
- 变量:
port -- 串口名称。
data_bits -- 数据位。
stop_bits -- 停止位。
baud_rate -- 波特率。
parity -- 校验位。
timeout -- 超时时间(秒)。
service -- 服务实例,用于处理业务逻辑。
conn -- 串口连接对象。
初始化 RTU 服务器。
- 参数:
- class src.TcpClient(ip='', port=0, timeout=5.0)[源代码]
基类:
objectTCP 客户端类,用于与 DLT645 设备进行 TCP 通信。
- 变量:
ip -- 服务器 IP 地址。
port -- 服务器端口号。
timeout -- 连接超时时间(秒)。
conn -- socket 连接对象。
初始化 TCP 客户端。
- send_request(data, write_timeout=2.0, read_timeout=5.0, total_timeout=10.0, min_response_len=1, retries=1)[源代码]
增强版TCP请求-响应(支持超时控制和分片数据处理)
- Args:
data: 要发送的请求数据 write_timeout: 数据写入超时(秒) read_timeout: 单次recv操作的超时(秒) total_timeout: 整个请求-响应的总超时(秒) min_response_len: 最小有效响应长度 retries: 失败重试次数
- Returns:
bytes: 成功接收的响应数据 None: 超时或失败时返回
- class src.RtuClient(port='', baud_rate=9600, data_bits=8, stop_bits=1, parity='N', timeout=1.0)[源代码]
基类:
objectRTU 客户端类,用于与 DLT645 设备进行串口通信。
该类实现了 RTU(Remote Terminal Unit)客户端功能, 支持与 DLT645 协议设备进行串口通信。
- 变量:
port -- 串口名称。
baud_rate -- 波特率。
data_bits -- 数据位。
stop_bits -- 停止位。
parity -- 校验位。
timeout -- 超时时间(秒)。
conn -- 串口连接对象。
初始化 RTU 客户端。
- 参数:
- class src.MessageRecord(direction, data, id=<factory>, timestamp=<factory>, hex_string='', pair_id=None)[源代码]
基类:
object单条报文记录。
用于存储发送或接收的单条报文数据。
- 变量:
id -- 唯一标识符 (UUID)
direction -- 报文方向,"TX"(发送)或 "RX"(接收)
data -- 原始报文数据
timestamp -- 时间戳(秒,带小数部分)
hex_string -- 十六进制字符串表示
pair_id -- 配对的报文ID,用于TX/RX关联
- class src.MessagePair(id=<factory>, tx=None, rx=None, round_trip_time=None)[源代码]
基类:
objectTX/RX配对记录。
用于将发送报文和接收报文配对,便于分析请求-响应对。
- 变量:
id -- 配对ID
tx -- 发送报文记录
rx -- 接收报文记录
round_trip_time -- 往返时间(秒)
-
tx:
Optional[MessageRecord] = None
-
rx:
Optional[MessageRecord] = None
- set_tx(record)[源代码]
设置发送报文。
- 参数:
record (MessageRecord) -- 发送报文记录
- 返回类型:
- set_rx(record)[源代码]
设置接收报文。
- 参数:
record (MessageRecord) -- 接收报文记录
- 返回类型:
- class src.MessageCapture(enabled=False, queue_size=100)[源代码]
基类:
object报文捕获管理器。
管理TX和RX报文的捕获、配对和存储。 默认禁用,需要显式调用enable()启用。
- 变量:
_enabled -- 是否启用捕获
_queue_size -- 队列大小
_tx_queue -- 发送报文队列
_rx_queue -- 接收报文队列
_pairs -- 配对队列
_pending_pairs -- 等待配对的记录(TX等待RX)
初始化报文捕获管理器。
- get_tx_messages(count=0)[源代码]
获取发送报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
发送报文列表
- 返回类型:
List[MessageRecord]
- get_rx_messages(count=0)[源代码]
获取接收报文列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
接收报文列表
- 返回类型:
List[MessageRecord]
- get_pairs(count=0)[源代码]
获取配对列表。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
配对列表
- 返回类型:
List[MessagePair]
- get_all_messages(count=0)[源代码]
获取所有报文(TX和RX),按时间排序。
- 参数:
count (int) -- 要获取的数量,0表示全部
- 返回:
所有报文列表
- 返回类型:
List[MessageRecord]