4

工業用 modbus データを読み取る NodeJS サーバーベースのプロトタイプを構築する必要があります。


// eg transaction = [ 17007, -2621 ]2 つのエントリを持つ配列を提供する 2つの連続した 16 ビット 10 進レジスタを読み取っています。// eg transaction = [ 17007, 0000 ]

この値は、電気周波数に変換する必要があります。約 = ~60.00 (hz) (少なくとも、与えられたデータが正しい場合は変換する必要があります)

配列内の 2 つのレジスタ値を結合し、データを 32 ビット浮動小数点数に変換する必要があることは承知していますが、方法は次のとおりです。

a) キャストせずにそれらを結合する
方法 b) それらを 32 ビット float に変換する方法

私はいくつかのタイプを使用する必要があると思います-1parseInt()toString(10)の提案は、使用してそれぞれを16進数にparseInt(num, 10).toString(16)変換し、次にその結合された16進数を文字列または場合によっては浮動小数点数に変換することでしparseFloat()たが、最初に2つの別々の部分を結合する方法です。

驚くべきことに、これに対する解決策は見つかりませんでした。

4

1 に答える 1

3

ArrayBufferのDataViewを使用して、定義された型とエンディアンを使用して、バイナリ データを直接操作できます。レジスタ値を連続した 16 ビット整数として書き込み、その結果をビッグエンディアン ( ) 32 ビット浮動小数点数として解釈することで、探している結果が得られます。false

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);

于 2016-04-11T18:21:16.350 に答える