Modbusの利用 (17) 電源の周波数を見る

 2022年、東京近辺は、電力が足りなくなる日々が続いています。東京電力は、リソースを巧みに制御しながら、供給を続けています。その様子をうかがい知る方法の一つに、周波数の変動があるようです。

電力量モニタKM-N1-FLK

   データシート(形KM-N1 ユーザーズマニュアル

 この器材では、AC100Vの電力ラインの、

  • 電圧
  • 電流
  • 力率
  • 周波数
  • 有効電力
  • 無効電力

などが測定できます。

 周波数は、測定範囲;45~65Hz、0.2Hzの分解能です。

接続

 KM-N1-FLKは、電流を検出するためのCTを四つつなげられます。ここではKM-NCT-5A/50Aを一つ接続しています。KM-N1-FLKは、本体にAC100Vにつなぐことで、電圧を取得します。

 PCとの接続は、USB-RS485変換ボードを利用します。アマゾンで入手しました。

  USB To RS485 485 コンバータ 変換 アダプタ win7 8 XP Vista Linux Mac OS を サポート

 ダウンロードしてインストールした【小型電力用モニタ/電力量モニタ】KM-Nシリーズ 設定ツールを使って、IDをデフォルトの1から9へ、デフォルトの同社のプロトコルからModbus/RTUへ、通信条件を、8ビットパリティなしXon/offなしストップ・ビット2に変更します。

 すごく操作がわかりずらいツールなので、何度かクリックしていると理解が進みます。

 パリティなしを選ぶと、ストップ・ビットは2以外が選べません。

プログラム

 Windows10のコマンド・プロンプトを起動します。Pythonは3.10.5です。二つ、モジュールを追加します。

pip install Pyserial

pip install modbus_tk

 PORT = 'COM21'は、USB To RS485 485 コンバータのCOMポートです。デバイスマネージャで確認できます。


import time
import serial
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu

PORT = 'COM21'
Address = 9

ser = serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=2, xonxoff=0)
master = modbus_rtu.RtuMaster(ser)
master.set_timeout(1.0)
master.set_verbose(True)
print("connected")
A1 = master.execute(Address, cst.READ_HOLDING_REGISTERS, 0x0000, 2)[1]
print(A1/10,'V')
A2 = master.execute(Address, cst.READ_HOLDING_REGISTERS, 0x0006, 2)[1]
print(A2,'mA')
A3 = master.execute(Address, cst.READ_HOLDING_REGISTERS, 0x000e, 2)[1]
print(A3/10,'Hz')

 READ_HOLDING_REGISTERSは、電圧や電流が保存されている領域で、0x0000や0x0006がアドレスです。

 実行例です。