我需要构建一个基于NodeJS服务器的原型来读取工业modbus数据。
我正在读两个连续的16位十进制寄存器,这些寄存器为我提供了一个包含两个条目的数组:
// eg transaction = [ 17007, -2621 ]
或// eg transaction = [ 17007, 0000 ]
此值应转换为电气频率,约= ~60.00(hz)(至少应该是我给出的数据是正确的)
我知道我需要在数组中组合两个寄存器值并将数据转换为32位浮点数..但是如何:
a)如何将它们组合而不是将它们作为它们不是的东西 b)如何将它们转换为32位浮点数
我想我需要使用某种类型的parseInt()
然后使用toString(10)
- 一个建议是使用parseInt(num, 10).toString(16)
将每个转换为十六进制,然后将连接的十六进制转换为字符串或可能使用parseFloat()
浮动但是再次如何连接两个独立的部分。
令人惊讶的是,我没有找到解决方案。
答案 0 :(得分:2)
您可以使用DataView的ArrayBuffer直接操作二进制数据,使用已定义的类型和字节顺序。通过将寄存器值写为连续的16位整数并将结果解释为big-endian(false
)32位浮点数,我们得到您正在寻找的结果:
var buffer = new ArrayBuffer(4);
var view = new DataView(buffer);
view.setInt16(0, 17007, false);
view.setInt16(2, -2621, false);
document.body.textContent = view.getFloat32(0, false);