src.service.clientsvc package

Submodules

src.service.clientsvc.client_service module

DLT645 客户端服务模块。

本模块实现了 DLT645 协议的客户端业务服务功能,包括: - 电能数据读取 - 需量数据读取 - 变量数据读取 - 事件记录读取 - 参变量读写 - 通讯地址读写 - 密码管理

class src.service.clientsvc.client_service.MeterClientService(client)[源代码]

基类:object

电表客户端服务类。

用于与 DLT645 电表设备进行通信,提供数据读写等业务功能。

变量:
  • address -- 设备地址(6字节)。

  • password_manager -- 密码管理器。

  • operation_code -- 操作码(4字节)。

  • client -- 通信客户端(TCP 或 RTU)。

初始化电表客户端服务。

参数:

client (Union[TcpClient, RtuClient]) -- 通信客户端实例(TcpClient 或 RtuClient)。

classmethod new_tcp_client(ip, port, timeout=30.0)[源代码]

创建TCP客户端

返回类型:

MeterClientService

classmethod new_rtu_client(port, baudrate, databits, stopbits, parity, timeout)[源代码]

创建RTU客户端

返回类型:

MeterClientService

classmethod new_meter_client_service(client)[源代码]

创建新的MeterService实例

返回类型:

MeterClientService

get_time(t)[源代码]

从字节数据获取时间

返回类型:

datetime

set_address(address)[源代码]

设置设备地址

返回类型:

bool

set_password(password)[源代码]

设置设备密码, 修改数据的命令会带上密码发送出去

返回类型:

bool

change_password(old_password, new_password)[源代码]

修改设备密码

返回类型:

bool

read_00(di)[源代码]

读取电能

返回类型:

Optional[DataItem]

read_01(di)[源代码]

读取最大需量及发生时间

返回类型:

Optional[DataItem]

read_02(di)[源代码]

读取变量

返回类型:

Optional[DataItem]

read_03(di)[源代码]

读取事件记录

返回类型:

Optional[DataItem]

read_04(di)[源代码]

读取参变量

返回类型:

Optional[DataItem]

write_04(di, value, password)[源代码]

写参变量

返回类型:

Optional[DataItem]

read_address()[源代码]

读取通讯地址

返回类型:

Optional[DataItem]

write_address(new_address)[源代码]

写通讯地址

返回类型:

Optional[DataItem]

broadcast_time_sync(dt=None)[源代码]

广播校时命令(C=08H,数据域YYMMDDhhmmss)。

按 DL/T645-2007 第6节:广播校时使用广播地址 999999999999H, 数据域为 6 字节压缩 BCD 码(YY MM DD hh mm ss,自然顺序), 从站不要求应答,因此只发送不等待响应。

参数:

dt (Optional[datetime]) -- 校时时间,默认当前时间。

返回:

发送成功返回 True,失败返回 False。

返回类型:

bool

freeze(month=None, day=None, hour=None, minute=None, broadcast=False)[源代码]

冻结命令(C=16H,数据域MMDDhhmm)。

按 DL/T645-2007 第7节:数据域为 4 字节压缩 BCD 码(MM DD hh mm), 各字段缺省时取当前时间;可传 99 表示周期定时冻结: - 99DDhhmm:以月为周期定时冻结 - 9999hhmm:以日为周期定时冻结 - 999999mm:以小时为周期定时冻结 - 99999999:瞬时冻结

参数:
  • month (Optional[int]) -- 月(1-12 或 99)。

  • day (Optional[int]) -- 日(1-31 或 99)。

  • hour (Optional[int]) -- 时(0-23 或 99)。

  • minute (Optional[int]) -- 分(0-59 或 99)。

  • broadcast (bool) -- 是否广播冻结(使用广播地址,从站不要求应答)。

返回:

成功返回 DataItem,失败返回 None。

返回类型:

Optional[DataItem]

change_baud_rate(baud)[源代码]

更改通信速率命令(C=17H,数据域1字节通信速率特征字)。

按 DL/T645-2007 第8节:数据域为 1 字节特征字(见附录C), 从站正常应答帧中的数据与请求帧中的特征字必须相同。 标准速率:1200/2400/4800/9600/19200 bps。

参数:

baud (int) -- 目标通信速率(bps)。

返回:

成功返回 DataItem,失败返回 None。

返回类型:

Optional[DataItem]

clear_demand(di, password)[源代码]

最大需量清零命令(C=19H,数据域DI+密码)。

按 DL/T645-2007 第10节:数据域为 4 字节数据标识 + 4 字节密码, 将当前最大需量及发生时间数据清零。需 04 级及以上权限。

参数:
  • di (int) -- 需量数据标识。

  • password (str) -- 密码(4字节BCD,首字节为权限级别,数值越小权限越高,需 0-4 级)。

返回:

成功返回 DataItem,失败返回 None。

返回类型:

Optional[DataItem]

clear_meter(password)[源代码]

电表清零命令(C=1AH,数据域DI+密码)。

按 DL/T645-2007 第11节:数据域为 4 字节数据标识(00000000H) + 4 字节密码,清空电能量、最大需量及发生时间、冻结量、 事件记录、负荷记录等数据(电表清零事件记录不被清除)。

参数:

password (str) -- 密码(4字节BCD,首字节为权限级别,数值越小权限越高,需 0-2 级)。

返回:

成功返回 DataItem,失败返回 None。

返回类型:

Optional[DataItem]

clear_event(password, operator_code='00000000', di=4294967295)[源代码]

事件清零命令(C=1BH,数据域密码+操作者代码+数据标识)。

按 DL/T645-2007 第12节:数据域为 4 字节密码 + 4 字节操作者代码 + 4 字节数据标识。数据标识为 FFFFFFFFH 表示事件总清零; 分项事件清零时数据标识为事件记录数据标识(DI0 用 FF 表示)。

参数:
  • password (str) -- 密码(4字节BCD,首字节为权限级别,数值越小权限越高,需 0-2 级)。

  • operator_code (str) -- 操作者代码(4字节BCD)。

  • di (int) -- 数据标识,默认 FFFFFFFFH(事件总清零)。

返回:

成功返回 DataItem,失败返回 None。

返回类型:

Optional[DataItem]

send_and_handle_request(frame_bytes)[源代码]

发送请求并处理响应(带超时控制)

返回类型:

Optional[DataItem]

Args:

frame_bytes: 要发送的帧数据

Returns:

DataItem: 成功时返回数据项 None: 超时或失败时返回

handle_response(frame)[源代码]

处理响应帧,包括异常帧检测

返回类型:

Optional[DataItem]

connect()[源代码]

建立底层连接。

返回类型:

bool

disconnect()[源代码]

关闭底层连接。

返回类型:

bool

close()

关闭底层连接。

返回类型:

bool

enable_message_capture(queue_size=100)[源代码]

启用报文捕获功能。

参数:

queue_size (int) -- 报文队列大小,默认100

返回类型:

None

disable_message_capture()[源代码]

禁用报文捕获功能。

返回类型:

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]

clear_captured_messages()[源代码]

清空所有捕获的报文。

返回类型:

None

get_message_capture_stats()[源代码]

获取报文捕获统计信息。

返回:

统计信息字典

返回类型:

dict

src.service.clientsvc.log module

Module contents