src.model.types package

Submodules

src.model.types.data_type module

class src.model.types.data_type.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 实例。

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

  • name (str) -- 数据项名称。

  • data_format (str) -- 定义数据结构的格式。

  • value (Union[str, float, List], 可选) -- 数据项的实际值,默认为 0。

  • unit (str, 可选) -- 单位字符串(如 "kWh"),默认为空字符串。

  • update_time (datetime.datetime, 可选) -- 数据更新的时间戳,默认为当前时间。

class src.model.types.data_type.DataType(Di='', Name='', Unit='', DataFormat='')[源代码]

基类:object

数据类型配置类。

变量:
  • di -- 数据标识 (DI),整数形式。

  • name -- 数据类型名称。

  • unit -- 计量单位。

  • data_format -- 格式字符串定义。

初始化 DataType 实例。

参数:
  • Di (str, 可选) -- 数据标识字符串(十六进制),默认为空字符串。

  • Name (str, 可选) -- 数据类型名称,默认为空字符串。

  • Unit (str, 可选) -- 计量单位,默认为空字符串。

  • DataFormat (str, 可选) -- 格式字符串,默认为空字符串。

classmethod from_dict(data)[源代码]

从字典创建 DataType 实例。

参数:

data (dict) -- 包含 'Di', 'Name', 'Unit', 'DataFormat' 的字典。

返回:

DataType 实例。

返回类型:

DataType

class src.model.types.data_type.uint32_from_string[源代码]

基类:int

自定义整数类型,用于处理从字符串(包括十六进制)解析 uint32。

classmethod from_json(data)[源代码]

将输入数据解析为 uint32 整数。

处理以下情况: - 空字符串 -> 0 - 十六进制字符串(带或不带 0x 前缀) - 普通整数

参数:

data (Union[str, int]) -- 待解析的输入数据。

返回:

解析后的整数值。

返回类型:

uint32_from_string

抛出:

ValueError -- 如果转换失败。

src.model.types.data_type.init_data_type_from_list(data_list)[源代码]

从 Python 数据列表初始化 DataType 对象列表。

参数:

data_list (Iterable[dict]) -- 包含字典的可迭代对象,每个字典包含 DataType 的字段。

返回:

初始化后的 DataType 对象列表。

返回类型:

list[DataType]

class src.model.types.data_type.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'

src.model.types.dlt645_type module

DLT645 协议类型定义模块。

本模块定义了 DLT645 协议所需的各种类型,包括: - 数据标识分类枚举 (DICategory) - 控制码枚举 (CtrlCode) - 错误码枚举 (ErrorCode) - 需量数据类 (Demand) - 事件记录类 (EventRecord) - 密码管理器类 (PasswordManager)

class src.model.types.dlt645_type.DICategory(value)[源代码]

基类:IntEnum

数据标识分类枚举。

DLT645 协议中数据项按功能分为多个类别, 数据标识 (DI) 的高字节决定了数据所属的类别。

变量:
  • CategoryEnergy -- 电能量数据(0x00)

  • CategoryDemand -- 需量数据(0x01)

  • CategoryVariable -- 变量数据(0x02)

  • CategoryEvent -- 事件记录数据(0x03)

  • CategoryParameter -- 参变量数据(0x04)

  • CategoryFreeze -- 冻结量数据(0x05)

  • CategoryLoad -- 负荷记录数据(0x06)

CategoryEnergy = 0
CategoryDemand = 1
CategoryVariable = 2
CategoryEvent = 3
CategoryParameter = 4
CategoryFreeze = 5
CategoryLoad = 6
class src.model.types.dlt645_type.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.model.types.dlt645_type.ErrorCode(value)[源代码]

基类:IntEnum

错误码枚举。

DLT645 协议中从站响应异常时返回的错误码。 错误码采用位域方式,可以组合多个错误。

变量:
  • OtherError -- 其他错误(bit0)

  • RequestDataEmpty -- 无请求数据(bit1)

  • AuthFailed -- 认证失败/密码错误(bit2)

  • CommRateImmutable -- 通信速率不可改变(bit3)

  • YearZoneNumExceeded -- 年时区数超出范围(bit4)

  • DaySlotNumExceeded -- 日时段数超出范围(bit5)

  • RateNumExceeded -- 费率数超出范围(bit6)

OtherError = 1
RequestDataEmpty = 2
AuthFailed = 4
CommRateImmutable = 8
YearZoneNumExceeded = 16
DaySlotNumExceeded = 32
RateNumExceeded = 64
src.model.types.dlt645_type.error_messages = {ErrorCode.OtherError: '其他错误', ErrorCode.RequestDataEmpty: '无请求数据', ErrorCode.AuthFailed: '认证失败', ErrorCode.CommRateImmutable: '通信速率不可改变', ErrorCode.YearZoneNumExceeded: '年区数超出范围', ErrorCode.DaySlotNumExceeded: '日区数超出范围', ErrorCode.RateNumExceeded: '速率数超出范围'}

错误码对应的中文错误信息映射表

src.model.types.dlt645_type.get_error_msg(error_code)[源代码]

根据错误码获取对应的中文错误信息。

参数:

error_code (ErrorCode) -- 错误码。

返回:

对应的中文错误信息,如果错误码未知则返回 "未知错误码"。

返回类型:

str

src.model.types.dlt645_type.DI_LEN = 4

数据标识长度(4字节)

src.model.types.dlt645_type.ADDRESS_LEN = 6

设备地址长度(6字节)

src.model.types.dlt645_type.PASSWORD_LEN = 4

密码长度(4字节)

src.model.types.dlt645_type.OPERATOR_CODE_LEN = 4

操作者代码长度(4字节)

class src.model.types.dlt645_type.Demand(value, time)[源代码]

基类:object

需量数据类。

用于表示最大需量及其发生时间。

变量:
  • value -- 需量值(单位由具体数据项定义)。

  • time -- 需量发生时间。

初始化 Demand 实例。

参数:
  • value (float) -- 需量值。

  • time (datetime) -- 需量发生时间。

class src.model.types.dlt645_type.EventRecord(di, event)[源代码]

基类:object

事件记录类。

用于表示电表的事件记录数据。

变量:
  • di -- 数据标识 (DI)。

  • event -- 事件数据,可以是元组、浮点数或字符串。

初始化 EventRecord 实例。

参数:
class src.model.types.dlt645_type.PasswordManager[源代码]

基类:object

密码管理器类。

用于管理 DLT645 协议中的九级密码。 密码级别从 0-8,数字越小权限越高。

变量:

_password_map -- 密码映射表,键为密码级别,值为密码字节数组。

初始化 PasswordManager 实例。

创建九级密码映射表,每级密码初始化为全零。

is_password_valid(password)[源代码]

验证密码格式是否有效。

检查密码长度是否为4字节,以及密码级别是否在有效范围内(0-8)。

参数:

password (bytearray) -- 待验证的密码字节数组。

返回:

密码格式有效返回 True,否则返回 False。

返回类型:

bool

set_password(password)[源代码]

设置指定级别的密码。

参数:

password (bytearray) -- 密码字节数组,第一个字节为密码级别。

返回:

设置成功返回 True,失败返回 False。

返回类型:

bool

get_password(level)[源代码]

获取指定级别的密码。

参数:

level (int) -- 密码级别(0-8)。

返回:

密码字节数组,如果级别不存在则返回全零密码。

返回类型:

bytearray

check_password(password)[源代码]

验证密码是否正确。

参数:

password (bytearray) -- 待验证的密码字节数组。

返回:

密码正确返回 True,错误返回 False。

返回类型:

bool

change_password(old_password, new_password)[源代码]

修改密码。

只有当旧密码正确且旧密码权限等级不低于新密码权限等级时才能修改成功。 权限等级数字越小权限越高(0级最高,8级最低)。

参数:
  • old_password (bytearray) -- 旧密码字节数组。

  • new_password (bytearray) -- 新密码字节数组。

返回:

修改成功返回 True,失败返回 False。

返回类型:

bool

Module contents