デジタルパワーメータ(PM5000シリーズ、PM8000シリーズ)から通信で値を読み出す際、
データ型が浮動小数32ビット(FLOAT32)型のレジスタの読み解き方について説明します。
FLOAT32の定義(IEEE754形式)に従って読み解きます。
例)
●「Voltage L-N Avg」(N相間電圧の3相平均)
●レジスタ番号:3036番(10進)
●FLOAT32型
●長さ:2ワード
のレジスタを読み出す場合。
読み出しリクエストのフレームは以下となります。このとき、読み出し開始アドレスは、1を引いた値
3036 - 1 = 3035(10進) = 0x0BDB
をフレームに入れます。
ファンクションコードは、「0x03:保持レジスタの読み出し」を使用します。
<読み出しフレーム>
・ファンクションコード:0x03
・読み出し開始アドレス:0x0BDB
・読み出しレジスタ数 :0x0002
この応答として、以下の応答フレームを受け取ったとします。
<応答フレーム>
・ファンクションコード:0x03
・読み出しバイト数 :0x04
・読み出したデータ :0x42d875b1
ここでは、
レジスタ番号:3036番
レジスタ番号:3037番
の2つのレジスタを読み出しましたが、応答では、レジスタ番号の
”若い番号の内容が先”
に格納されています。つまり、以下の内容となります。
レジスタ番号 3036番の内容:0x42d8
レジスタ番号 3037番の内容:0x75b1
・読み出したデータ :0x42d875b1
をFLOAT32の定義(IEEE754形式)に従って読み解きます。
16進:42 d8 75 b1
2進:01000010 11011000 01110101 10110001
これを、符号部(1ビット)、指数部(8ビット)、仮数部(23ビット)で分けると、上位ビットから区切り、
以下となります。
符号部(1ビット)、指数部(8ビット)、仮数部(23ビット)
「0」 「1000010 1」 「1011000 01110101 10110001」
つまり、以下の内容となります。
・符号部=0
・指数部=10000101(2進)=133(10進)
・仮数部は、整数部分が 1 であるような2進小数の小数部分を表し、この部分の計算は
下記「関連資料」をご参照下さい。 この例で計算すると、0.691091656684875 となります。
浮動小数32ビット(FLOAT32)型の値は
{(-1)^符号部} × {2^(指数部-127)} × (1+仮数部)
と表されるため、従って、
{(-1)^0} × {2^(133-127)} × (1+0.691091656684875)
=108.2298660278320
つまり、
約 108.23 V
となります。