src.protocol package

Submodules

src.protocol.frame module

DLT645 协议帧结构模块。

本模块定义了 DLT645 协议帧的数据结构和相关常量。

src.protocol.frame.FRAME_START_BYTE = 104

帧起始字节

src.protocol.frame.FRAME_END_BYTE = 22

帧结束字节

src.protocol.frame.BROADCAST_ADDR = 170

广播地址

class src.protocol.frame.Frame(preamble=bytearray(b''), start_flag=0, addr=bytearray(b''), ctrl_code=0, data_len=0, data=bytearray(b''), check_sum=0, end_flag=0)[源代码]

基类:object

DLT645 协议帧结构类。

表示一个完整的 DLT645 协议数据帧。

帧格式:

前导码(FE) | 起始符(68H) | 地址域(6B) | 起始符(68H) | 控制码(1B) |
数据长度(1B) | 数据域(NB) | 校验和(1B) | 结束符(16H)
变量:
  • preamble -- 前导字节(通常为 0xFE 0xFE 0xFE 0xFE)。

  • start_flag -- 起始标志(0x68)。

  • addr -- 地址域(6字节)。

  • ctrl_code -- 控制码。

  • data_len -- 数据域长度。

  • data -- 数据域内容(已解码)。

  • check_sum -- 校验和。

  • end_flag -- 结束标志(0x16)。

初始化 Frame 实例。

参数:
  • preamble (bytearray) -- 前导字节,默认为空。

  • start_flag (int) -- 起始标志,默认为 0。

  • addr (bytearray) -- 地址域,默认为空(将初始化为6个0)。

  • ctrl_code (int) -- 控制码,默认为 0。

  • data_len (int) -- 数据域长度,默认为 0。

  • data (bytearray) -- 数据域内容,默认为空。

  • check_sum (int) -- 校验和,默认为 0。

  • end_flag (int) -- 结束标志,默认为 0。

property description: str

获取帧的描述信息。

解析控制码和数据标识,返回易读的操作描述。

返回:

描述字符串。

返回类型:

str

src.protocol.log module

src.protocol.protocol module

DLT645 协议实现模块。

本模块实现了 DLT645 协议的核心功能,包括: - 数据域编码/解码(±0x33H 转换) - 校验和计算 - 帧构建和解析

class src.protocol.protocol.DLT645Protocol[源代码]

基类:object

DLT645 协议实现类。

该类实现了 DLT645 协议的核心功能,包括数据编码/解码、校验和计算、 帧构建和解析等操作。所有方法均为类方法,可直接调用。

classmethod decode_data(data)[源代码]

数据域解码(-0x33H 转换)。

按照 DLT645 协议规定,对数据域进行解码处理, 每个字节减去 0x33H,并使用模 256 运算确保结果在 0-255 范围内。

参数:

data (bytes) -- 需要解码的数据字节。

返回:

解码后的原始数据。

返回类型:

bytes

classmethod calculate_checksum(data)[源代码]

校验和计算(模 256 求和)。

按照 DLT645 协议规定,计算数据的校验和, 对所有字节进行累加,然后对结果取模 256。

参数:

data (bytes) -- 需要计算校验和的数据字节。

返回:

计算得到的校验和值(0-255 范围)。

返回类型:

int

classmethod encode_data(data)[源代码]

数据域编码(+0x33H 转换)。

按照 DLT645 协议规定,对数据域进行编码处理, 每个字节加上 0x33H,并使用模 256 运算确保结果在 0-255 范围内。

参数:

data (bytes) -- 需要编码的原始数据字节。

返回:

编码后的数据。

返回类型:

bytes

classmethod build_frame(addr, ctrl_code, data)[源代码]

构建 DLT645 协议帧。

按照 DLT645 协议规定,构建完整的协议帧,包括前导字节、 地址域、控制码、数据域、校验和和结束标志。

参数:
  • addr (bytes) -- 设备地址(6字节)。

  • ctrl_code (int) -- 控制码。

  • data (bytes) -- 原始数据域(未编码)。

返回:

完整的 DLT645 协议帧。

返回类型:

bytearray

抛出:

ValueError -- 当地址长度不为6字节时抛出。

classmethod deserialize(raw)[源代码]

将字节数据反序列化为 Frame 对象。

从原始字节数据中解析出 DLT645 协议帧。如果无法找到完整的帧, 则抛出异常。

参数:

raw (bytes) -- 输入的原始字节数据。

返回:

解析出的 Frame 对象。

返回类型:

Optional[Frame]

抛出:

Exception -- 当无法找到完整帧时抛出。

classmethod deserialize_with_remaining(raw)[源代码]

将字节数据反序列化为 Frame 对象,并返回未解析的剩余数据。

从原始字节数据中解析出 DLT645 协议帧,并返回未解析的剩余数据。 如果数据不完整或无法解析,返回 (原始数据, None)。

参数:

raw (bytes) -- 输入的原始字节数据。

返回:

元组 (未解析的剩余数据, 解析出的帧)。 如果数据不完整或无法解析,返回 (原始数据, None)。

返回类型:

tuple[bytes, Optional[Frame]]

classmethod serialize(frame)[源代码]

将 Frame 对象序列化为字节数据。

按照 DLT645 协议规定,将 Frame 对象序列化为完整的协议帧字节。

参数:

frame (Frame) -- 需要序列化的 Frame 对象。

返回:

序列化后的协议帧字节。

返回类型:

Optional[bytes]

抛出:

Exception -- 当起始或结束标志无效时抛出。

Module contents