Skip to content

解析码系统 ​

解析码格式为 类型位数_字节顺序。字母表示数值按大端表示时的字节;后缀表示这些字节在 Modbus 寄存器中的实际顺序。例如 INT32_CDAB 把数值的 AB CD 两个寄存器按 CD AB 存储。8 位值存放在一个 16 位寄存器中,AB 取低字节,BA 取高字节。

可用类型 ​

类型字节顺序寄存器数
UINT8、INT8AB、BA1
UINT16、INT16AB、BA1
UINT32、INT32、FLOAT32ABCD、BADC、CDAB、DCBA2
UINT64、INT64ABCDEFGH、GHEFCDAB4
DOUBLEABCDEFGH、BADCFEHG、GHEFCDAB、HGFEDCBA4

DOUBLE 是 IEEE 754 64 位双精度浮点数。所有新配置均保存语义化解析码;读取旧配置或导入旧点表时仍接受下面的十六进制码。升级数据库时旧码按此表迁移。同义旧码会归并。

旧码迁移表 ​

旧码新解析码
0x10UINT8_AB
0x11INT8_AB
0x20UINT16_AB
0x21INT16_AB
0x22UINT16_AB
0xB0UINT16_AB
0xB1INT16_AB
0xC0UINT16_BA
0xC1INT16_BA
0x40UINT32_ABCD
0x41INT32_ABCD
0x42FLOAT32_ABCD
0x43UINT32_DCBA
0x44INT32_DCBA
0x45FLOAT32_DCBA
0xD0UINT32_CDAB
0xD1INT32_CDAB
0xD2FLOAT32_CDAB
0xD3FLOAT32_CDAB
0xD4UINT32_CDAB
0xD5INT32_CDAB
0x60UINT64_ABCDEFGH
0x61INT64_ABCDEFGH
0x62DOUBLE_ABCDEFGH
0xE0UINT64_GHEFCDAB
0xE1INT64_GHEFCDAB
0xE2DOUBLE_GHEFCDAB

这张表依据旧版 Modbus 客户端和服务端的实际寄存器读写顺序。部分旧版界面文字与实际行为不符,尤其是 0x22、0x43、0xD0 和 0xE2。0x10、0x11 的旧版 8 位范围处理不一致,升级后按真实 8 位数值处理。

代码示例 ​

python
from src.enums.modbus_register import Decode

registers = Decode.encode_registers("DOUBLE_HGFEDCBA", 1234.5)
value = Decode.decode_registers("DOUBLE_HGFEDCBA", registers)
assert value == 1234.5

# 旧码仍可作为输入,但 normalize 返回应保存的新名称。
assert Decode.normalize("0xE2") == "DOUBLE_GHEFCDAB"

遥测和遥调的工程值仍按 工程值 = 寄存器值 × 乘法系数 + 加法系数 计算。

评论与讨论

Released under the Apache 2.0 License.