在JavaScript

时间:2016-02-20 00:32:24

标签: javascript numbers modbus modbus-tcp

我需要构建一个基于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()浮动但是再次如何连接两个独立的部分。

令人惊讶的是,我没有找到解决方案。

1 个答案:

答案 0 :(得分:2)

您可以使用DataViewArrayBuffer直接操作二进制数据,使用已定义的类型和字节顺序。通过将寄存器值写为连续的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);