代码之家  ›  专栏  ›  技术社区  ›  ralphcom

Modbus请求的字节顺序

  •  0
  • ralphcom  · 技术社区  · 11 月前

    我试图通过TCP读取Modbus寄存器,它似乎工作正常,但响应和字节顺序对我来说没有意义。我使用JavaScript和jsModbus库来读取它。 根据文档,我正在读取的寄存器是Float32,是BigEndian。
    我期望的值是100。
    当我得到响应时,文字缓冲区是 [0,0,66,200] 在本地尝试一些东西时,顺序对我来说根本没有意义,我只是不明白到底发生了什么。
    我尝试在本地创建缓冲区,以查看和比较字节顺序。

    > let buffer = Buffer.alloc(4);
    undefined
    > buffer.writeFloatBE(100);
    4
    > console.log(buffer)
    <Buffer 42 c8 00 00>
    undefined
    > buffer.writeFloatLE(100);
    4
    > console.log(buffer)
    <Buffer 00 00 c8 42>
    undefined
    > let received = Buffer.from([0,0,66,200])
    undefined
    > console.log(received);
    <Buffer 00 00 42 c8>
    undefined
    > received.swap32()
    <Buffer c8 42 00 00>
    > received.readFloatBE()
    -198656
    

    我还尝试交换字节(32),因为根据Buffer文档,浮点数是32个字节,但这也给了我无效的结果。 我得到“有效”回应的唯一方法是先做swap16,然后再做swap32,但这对我来说更没有意义。

    0 回复  |  直到 11 月前