我正在使用 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
理智检查赞赏!