如何使用Javascript DataView和ArrayBuffer为多字节数据类型正确设置字节大小的MODBUS数据

时间:2017-12-26 01:23:35

标签: javascript modbus modbus-tcp

我正在使用jsmodbus npm库来使用readHoldingRegisters()函数检索16位寄存器。

// array of values returned by jsmodbus readHoldingRegisters for two 16 bit registers 
data = [ 17008, 28672 ] 

我正在使用ArrayBuffer和DataView来设置和获取所需格式的数据:

const buffer = new ArrayBuffer(4)
const view = new DataView(buffer)

我知道从寄存器返回的数据总是分成两个8位字节值的16位整数,因此我应该将两个字节设置为视图两个连续的整数,即使它可能稍后从视图中检索为Int16或Float32。这是对的吗?

其次,如果我希望以符号Int16或Float32的形式检索数据,是否需要将高字节设置为有符号,将低字节设置为无符号,如下所示:

view.setInt16(0, data[0])
view.setUint16(0, data[1])

第三:尽管需要设置正确的字节顺序,但是在对视图设置数据时使用哪种方法甚至是重要的,因为视图中的字节和位的顺序不受哪种方法的影响只有在您将数据检索回来时才设置?

当然,它似乎不会出现:

view.setInt16(0, data[0])
view.setInt16(1, data[1]) // notice: setInt16
val = view.getFloat32(0)
// val = 122.880859375

view.setInt16(0, data[0])
view.setUint16(1, data[1]) // notice: set*U*int16
val = view.getFloat32(0)
// val = 122.880859375

理智检查赞赏!

0 个答案:

没有答案