Hobby Lab 趣味のモノ作り実験のサイトです。
測定器・計器 032_KWS-AC301 Modbus
1.KWS-AC301概要
 (1)計測概要
 (2)情報通信
2.ModoBus内容
 (1)一般的な構造
 (2)フレーム構造
 (3)アドレス内容
 (4)ファンクション内容
 (5)データ内容
 (6)CRC内容
3.例1:ESP12->PC
 (1)プログラム
 (2)結果内容
4.例2:Python
 (1)プログラム
 (2)結果内容
5.Wh,Tiemのリセット
 (1)プログラム
 (2)結果内容

Mod Bus関係 プロトコル
 MODBUS
装置
 電力量計:KWS-AC301
 測定器(交流):pzem-016
 測定器(直流):pzem-017
 充電器(太陽光):BDZ 60A
 充電器(太陽光):AL40A

Ms:Measuring 計測器関係
Ms:オシロ
MSO5104
 操作全般
Ms:●Calibrator
CA100
 充電池変更
Ms:電力量計
KWS-AC301(AC Power)
 操作全般
 Modbus RS485
 RS232C信号絶縁化
PZEM(Modbus対応 測定器)
 交流(016)操作全般
 直流(017)操作全般
Ms:温度測定制御
STC-3008
 ケース取付
Ms:特性試験器
 DCCT試験器
 BHカーブトレーサ
Ms:交流電圧変換器
 RMSアンプ
Ms:振動計
 軸受振動とは
 軸受振動計の製作

1.KWS-AC301

 (1)計測項目

8つの機能:
 電流、電圧、電力、電力量、
 運用時間、温度、力率、周波数

 (2)情報通信

KWS-AC301の内部基板にxとRx端子がある。
この端子信号電圧が0-5(V)でその他はある程度RS232C(ANSI/EIA-232-E)の規格になっているようです。
通信速度は9600bps
スタートビット1ビット固定
ストップビット1ビット1 , 1.5 , 2 ビットから選択
データビット長8ビット8 , 7 bitから選択
パリティ
  チェック
NONEパリティチェック無し::NINE、偶数パリティチェック:EVEN、奇数パリティチェック:0DDから選択
 KWS-AC301Lは上記端子に子基板が付加されており、この基板はRS485(EIA-485)のインターフェース基板になっている。
 kWS-301LにはRS485のコネクターが横にあり、そこに接続する事により電力量他の情報を取得することが出来る。




2.ModoBus内容

 (1)一般的な構造

Start Address Function Data CRC Check End
null+null+null+nul 8bit 8bit 8bit×n 16bit null+null+null+null

 (2)フレーム構造

a.マスターフレーム構造 電圧値の要求の場合
 パソコン側のデータフレーム構造を言います。
message[ ] 0 (3) 1 (4) 2 (5) 3 (5) 4 (5) 5 (5) 6 (6) 7 (6)
項目説明 Address Function 上位
アドレス
下位
アドレス
上位
レジスター数
下位
レジスター数
下位
CRC
上位
CRC
0x02 0x03 0x00 0x0E 0x00 0x01 0xE5 0xFA

b.スレーブフレーム構造 電圧値を返答
 KWS-AC301のデータフレーム構造を言います。
message[ ] 0 (3) 1 (4) 2 (5) 4 (5) 5 (5) 6 (6) 7 (6)
項目説明 Address Function データ数 データ1 データ2 下位
CRC
上位
CRC
0x02 0x03 0x02 0x04 0x15 0x3F 0x4B

 (3)アドレス内容

同じ信号線に接続されているModbus機器を区別するため通常は装置毎に番号を付けれる様になっているが、KWS-AC301は
0x02 固定
になっているので、その他機器と信号線を並列接続する場合は重ならないように注意が必要。

 (4)ファンクション内容

読み込み時は 0x03 、書き込み時は 0x06又は0x10 を使用する。
項     目※B 概         要
Read Coil Status0x01× スレーブの DO(Discrete Output)の ON / OFF 状態を読出します。
Read Input Status0x02× スレーブの DI(Discrete Input)の ON / OFF 状態を読出します。
Read Holding Register0x03× スレーブの保持レジスタの内容を読出します。
Read Input Register0x04× スレーブの入力レジスタの内容を読出します。
Force Single Coil0x05 スレーブの DO(Discrete Output)の状態を ON / OFF のいずれかに変更(書込み)します。
Preset Single Register0x06 スレーブの保持レジスタの内容を変更(書込み)します。
Diagnostics0x08× マスターとスレーブ間の通信の診断やスレーブの機器の診断ファンクションです。
Fetch Communication Event Counter0x0B× スレーブの通信イベントカウンタからステータスワードとイベントカウンタを読出します。
Fetch Communication Event Log0x0C× スレーブの通信イベントログ(ステータスワード、イベントカウンタ、メッセージカウントおよびイ ベント)を読出します。
Force Multiple Coils0x0F スレーブの連続した複数の DO(Discrete Output)の状態を、ON / OFF のいずれかに変更(書込み) します。
Preset Multiple Registers0x10 スレーブの連続した複数の保持レジスタの内容を変更(書込み)します。
Report Slave ID0x11× スレーブのコントローラタイプや動作モードなどスレーブの情報を読出します。
※Bはブロードキャストに対応しているかを示す。

 (5)データ内容

一回に呼び出す事ができるデータ最大個数は17個です。 データは4月28日8時
a.読み込みデータ
AddressR/Wbytenemevalue1value1倍率・単位
0x0000R2パスワード0xaabbーーーー
0x0001R2定格電圧0x55f022000X0.01(V)
0x0002R2定格電流?0x13885000X0.001(A)
0x0003R20x157c5500
0x0004R20x25369526
0x0005R2ハード型番Lo0xbaee----
0x0006R2ハード型番Hi0x52f7----
0x0007R2ソフト型番Lo0xc4e7----
0x0008R2ソフト型番Hi0x7b3e----
0x0009R2プロトコル型番Lo0x03e9----
0x000AR2プロトコル型番Hi0x86e6----
0x000BR2モジュール種類0x10114113
0x000CR2通信ワード0x0203515
0x000DR2パルス定数0x320012800
0x000E 0R2電圧0x041d1053X0.1(V)
0x000F 2R2電流0x01d4468X0.001(A)
0x0010 4R20x00000X?(W)
0x0011 6R2有効電力0x014a330X0.1(W)
0x0012 8R20x0000
0x0013 10R20x370814088
0x0014 12R20x9bbc39868
0x0015 14R2皮相電力0x01fa506X0.1(VA)
0x0016 16R20x00000
0x0017 18R2電力量0x001e30X0.001(kWh)
0x0018 20R20x00000
0x0019 22R2動作時間0x00c2194X1(分)
0x001A 24R2外温0x001723X1(℃)
0x001B 26R20x599a22938
0x001C 28R20x00000
0x001D 30R2力率0x004165X1(%)
0x001E 32R2周波数0x0258600X0.1(Hz)
0x001FR20x938037760
b.読み書きできるデータ
アドレス0x0028〜0X002D
AddressR/Wbytenemevalue1value1倍率・単位
0x0028R/W20x00000x1(年)
0x0029R/W20x00011x1(月)
0x002AR/W20x00011x1(日)
0x002BR/W20x00033x1(時)
0x002CR/W20x003452x1(分)
0x002DR/W20x003a58x1(秒)
アドレス0x32〜0x3B しきい値:不明点有り、調査必要
AddressR/Wbytenemevalue1value1倍率・単位
0x0032R/W2温度0x00aa170
0x0033R/W2電圧0x0a612657
0x0034R/W2電流0x00000
0x0035R/W20x00000
0x0036R/W2電力0x00000
0x0037R/W20x00000
0x0038R/W2時間0x00000
0x0039R/W20x00000
0x003AR/W2電力0x00000
0x003BR/W20x00000
アドレス0x0154〜0x0158
AddressR/Wbytenemevalue1value1倍率・単位
0x0154W2電力量--------X0.001(kWh)
0x0155W2--------
0x0156W2--------
0x0157W2--------
0x0158W2動作時間----X1(分)

 (6)CRCチェック

CRCは16bit=2Byte(2バイト)のバイナリ値で構成されています。
CRCは送信側が計算し、受信側が受信データのCRCを計算し受信データのCRCと比較して違っていればエラーになります。




3.例1:ESP12->PC

参考 GitHub GitHub - SensorsIot/KWS-AC301

 (1)プログラム

  KWS-AC301 100A power meter read database write program.
  by ESP8266 E12F
  

 (2)結果表示  パソコンのシリアルモニター

   ■receive_Data(0);の場合
  
  ■receive_Data(1);の場合
  



4.例2:Python

 (1)プログラム

  KWS-AC301 100A power meter read database write program.
  by Python
  

 (2)結果表示 Viaual Studio Code 画面

  



5.Wh,Tiemのリセット

 WhとTimeのリセットが出来たので紹介します。
 ModBusのデータは下記のとおり
  Wh下位(CRCなし) 0x02,0x10,0x01,0x54,0x00,0x02,0x04,0x00,0x00,0x00,0x00
  wh上位(CRCなし) 0x02,0x10,0x01,0x56,0x00,0x02,0x04,0x00,0x00,0x00,0x00
  Time (CRCなし) 0x02,0x10,0x01,0x58,0x00,0x01,0x02,0x00,0x00
※連続で削除する場合受信はせず、間に time.sleep(1) を入れること。
また続けてデータを受信する場合は、リセット司令の最後に time.sleep(1) を入れて、入力バッファーのリセット
self.uartport.reset_input_buffer()
を入れること。

 (1)プログラム

 プログラムは太陽光の充電器(JN-MPPT-AL 40A)でも試験使用したプログラムにデータを追加して使用しました。
 

 (2)結果表示

  
   KWS-AC301の表示
  
















更新日 2025/12/05 16:26  管理者 平林 剛Hirabayashi Takeshi