Skip to content
RepoVersionStarsForks

解析码系统

解析码(Decode)定义了 Modbus 寄存器数据的解析方式,包括数据类型、字节序和位数。

解析码一览表

16位整数 (1个寄存器)

解析码名称说明字节序
0x20UINT16_BE16位无符号整数大端 (AB)
0x21INT16_BE16位有符号整数大端 (AB)
0xC0UINT16_LE16位无符号整数小端 (BA)
0xC1INT16_LE16位有符号整数小端 (BA)

32位整数/浮点 (2个寄存器)

解析码名称说明字节序
0x40UINT32_BE32位无符号整数大端 (ABCD)
0x41INT32_BE32位有符号整数大端 (ABCD)
0x42FLOAT_BE32位浮点数大端 (ABCD)
0xD0UINT32_LE32位无符号整数小端 (DCBA)
0xD1INT32_LE32位有符号整数小端 (DCBA)
0xD2FLOAT_LE32位浮点数小端 (DCBA)
0x43UINT32_BE_SWAP32位无符号整数大端字交换 (CDAB)
0x44INT32_BE_SWAP32位有符号整数大端字交换 (CDAB)
0x45FLOAT_BE_SWAP32位浮点数大端字交换 (CDAB)

64位整数/浮点 (4个寄存器)

解析码名称说明字节序
0x60UINT64_BE64位无符号整数大端
0x61INT64_BE64位有符号整数大端
0x62DOUBLE_BE64位双精度浮点大端
0xE0UINT64_LE64位无符号整数小端
0xE1INT64_LE64位有符号整数小端
0xE2DOUBLE_LE64位双精度浮点小端

字节序说明

以32位浮点数 1234.5 为例,其十六进制表示为 449A5000

字节序类型存储顺序说明
大端 (BE)44 9A 50 00高字节在前,标准网络字节序
小端 (LE)00 50 9A 44低字节在前,x86架构常用
大端字交换 (BE_SWAP)50 00 44 9A寄存器内大端,寄存器间交换
小端字交换 (LE_SWAP)9A 44 00 50寄存器内小端,寄存器间交换

代码使用示例

python
from src.enums.modbus_register import Decode, DecodeCode

# 使用解析码字符串
info = Decode.get_info("0x41")
print(f"寄存器数量: {info.register_cnt}")  # 2
print(f"是否有符号: {info.is_signed}")      # True
print(f"字节序: {info.endian}")             # >

# 使用枚举(推荐)
info = DecodeCode.FLOAT_BE.value
print(f"解析码: {info.code}")              # 0x42
print(f"描述: {info.description}")         # 32位浮点数(大端)

# 数据打包/解包
packed = Decode.pack_value(info.pack_format, 1234.5)
value = Decode.unpack_value(info.pack_format, packed)

真实值转换

遥测和遥调类型支持系数转换:

真实值 = 寄存器值 × 乘法系数 + 加法系数
寄存器值 = (真实值 - 加法系数) ÷ 乘法系数
属性说明默认值
mul_coe乘法系数1.0
add_coe加法系数0.0

Released under the Apache 2.0 License.