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 实例。
- class src.model.types.data_type.DataType(Di='', Name='', Unit='', DataFormat='')[源代码]
基类:
object数据类型配置类。
- 变量:
di -- 数据标识 (DI),整数形式。
name -- 数据类型名称。
unit -- 计量单位。
data_format -- 格式字符串定义。
初始化 DataType 实例。
- 参数:
- class src.model.types.data_type.uint32_from_string[源代码]
基类:
int自定义整数类型,用于处理从字符串(包括十六进制)解析 uint32。
- classmethod from_json(data)[源代码]
将输入数据解析为 uint32 整数。
处理以下情况: - 空字符串 -> 0 - 十六进制字符串(带或不带 0x 前缀) - 普通整数
- 参数:
- 返回:
解析后的整数值。
- 返回类型:
- 抛出:
ValueError -- 如果转换失败。
- 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.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 实例。
创建九级密码映射表,每级密码初始化为全零。