我试图通过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,但这对我来说更没有意义。