2

我正在使用 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 位字节值,所以我应该将视图中的两个字节设置为两个连续的整数,即使它稍后可能会从视图中检索为 Int16 或浮动32。这个对吗?

其次,如果我希望将数据检索为带符号的 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

理智检查赞赏!

4

0 回答 0