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

如何使用Javascript DataView和ArrayBuffer为多字节数据类型正确设置字节大小的MODBUS数据,javascript,modbus,modbus-tcp,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 =

我正在使用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)
我知道从寄存器返回的数据总是16位整数,除以两个8位字节值,因此我应该将视图中的两个字节设置为两个连续的整数,即使以后可能会从视图中检索为整数16或浮点32。这是正确的吗

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

view.setInt16(0, data[0])
view.setUint16(0, data[1])
第三:尽管需要设置适当的endianness,但在针对视图设置数据时使用哪种方法也很重要,因为视图中字节和位的顺序不受您针对哪种方法设置的影响,仅当您检索到该数据时才影响

当然,它似乎没有:

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
感谢您的健康检查