首页 > 解决方案 > Python 3,打包的字节顺序/字顺序输出问题

问题描述

使用:Python 3、Endian、BinaryPayloadBuilder

编辑:这可能是 pyModbus 中的一个已知错误。我听说过有关 byteorder-wordorder 函数的类似问题。目前,我已经通过蛮力编码解决了这个问题,并且我的有效载荷工作正常。

我对 BinaryPayloadBuilder 输出有疑问。我正在尝试为 ModbusTCP 传输重现正确的字节顺序,但构建器给了我一个意想不到的结果。我使用 Wireshark 来嗅探正确的顺序,并尝试使用 python 构建相同的消息。根据嗅探,正确的结构似乎是 byteorder=Big.Endian, wordorder=Little.Endian 但将这些设置放入构建器不会改变输出。

from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadBuilder

def run_binary_payload_ex():
    print()
    builder = BinaryPayloadBuilder(byteorder=Endian.Big, wordorder=Endian.Little)
    bStrng = "<ID 30><CLR>"
    builder.add_string(bStrng)
    payload = builder.to_registers()
    print(payload)
    print("\n")
    payload = builder.build()
    print(payload)

if __name__ == "__main__":
    run_binary_payload_ex()

输出:

[15433, 17440, 13104, 15932, 17228, 21054]


[b'<I', b'D ', b'30', b'><', b'CL', b'R>']

但我期望:

18748,  8260,  12339,  15422,  19523,  15954

[b'I<',  b' D',  b'03',  b'<>',  b'LC',  b'<R']

应该为每一对交换位顺序。有人可以告诉我我做错了什么吗?

标签: pythonpymodbus

解决方案


推荐阅读