Hobby Lab 趣味のモノ作り実験のサイトです。
発電装置 太陽光 840W 充電器制御 ModBus
1.充電器遠隔監視開発開始
(1)充電器の購入理由
(2)PC接続資料を見つけた
2.接続(ハード)調査
(1)RJ45端子調査
(2)RS485でPCに接続方法
3.接続(ソフト)調査
(1)ModBusについて
(2)ソフト1
(3)ソフト2
4.ModBubデータ
(1)読み込み専用データ
(2)読み書き込みデータ

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

Pw:Solar 太陽光関係
PwS:装置
ソーラパネル
 ソーラーパネル
 ソーラーパネル用サーキットブレーカ
充電器
 充電器
 充電器用サーキットブレーカ
 充電器用電流計
蓄電池
 蓄電池用サーキットブレーカ
 蓄電池用電流計
 蓄電池
インバータ
 インバータ用サーキットブレーカ
 インバータ用電流計
 インバータ
PwS:保守
 パネルを洗う
PwS:旧品
 旧充電器
 旧充電器(ModBus)
Pw:MicroHydro 関係
PwMh:装置
Pw:Monitor 太陽光監視
PwMn:全般
PwMn:ハード
 システム図
 ラズパイ周辺回路
PwMn:プログラム
 Local1分周期プログラム
 Local状態表示プログラム
 遠隔情報伝送プログラム
 遠隔状態表示プログラム
Pw:Exciter 励磁器関係
PwEx:装置
 前置き
 自動電圧調整器概要1
 自動電圧調整器概要2
 ハードウェアー
 発電試験装置の製作試験
 サイリスタ制御他
 部品表
PwEx:プログラム
 プログラミング(準備)
 プログラミング(詳細)
 プログラム(ソース)

1.充電器遠隔監視開発開始


 (1)充電器の購入理由

 購入した充電器はJNGE Power Co.,Ltd の JN-MPPT-AL 40A。
この充電器を選んだ理由は、
 太陽光パネルが4枚、最大で840W、開放電圧が4枚直列接続で122.8(V)だった。
 充電器を調査してみるとほとんどがPV(太陽光パネル電圧)が100(V)である事が判り、途中太陽光パネルを2枚並列、 2枚直列接続で使用しなけれならないかと思っていました。
 このまま太陽光パネルを2枚並列でシステムを構築すると最大電流が18(A)になり、接続するケーブルも太くなるため、 PVが130(V)以上の物で、コストはケーブルの費用と比較して18千円程度までの物が無いか探していました。
時間が多少かかりましたが、24V蓄電池使用時PVが145(V)、しかも当時内容を判っていなかったのですが、購入前にインターネットで取得した 取扱い説明書に右図の様なシステム図が掲載されており、文書にもRJ45コネクターがありRS485でPC(パーソナルコンピュータ)に接続できると言う 記事が有ったので『太陽光発電システムの遠隔監視ができそうだ』とぬか喜びで今回の商品を購入しました。
 なお販売店のシリーズには電流値の違いしか無く、取扱い説明書のオプション品(PCと接続出来るアダプター、アプリケーション)など付属した物が無く、本体だけの購入でした。
 当時購入した価格や設定などは左メニュー[充電器]のページをご確認下さい。

 (2)PC接続資料を見つけた

 ぬか喜びから約2年間の時が過ぎて行きました。
 そしてついに最近インターネットで接続するための資料を探す事が出来ました。
 URLは https://github.com/syssi/esphome-jnge-mppt-controller です。
 そこにはRJ45の線種やRS485を使った信号がModBusである事が記載されていました。
 ModBusのアドレスとデータの内容なども記載されているPDFへのリンク先も記載されていました。
 しかし残念ながら当方が今回購入したものと多少違っていたので、以下に調査した内容や調査するために作成したプログラムを記載することにしました。
 接続方法など多少違っていたとしても、上記URLの資料により接続するための調査を進める事ができ、PCと接続出来たことは確かで、 上記URLに資料を掲載された方へ感謝したいと思います。
(ModBusである事のメーカーのPDFなどメーカーのサイトで探す事が出来なかったので、その資料を見た時は非常に驚きました。)
 注意が必要なのは『多少違っていた』ので同じ購入品の型番でも以下調査内容と違っていると思われるので、くれぐれもPCと接続してデータの読書をされる場合は調査を自己責任でしてください。




2.接続(ハード)調査


 (1)RJ45端子調査

 調査した結果を下表に示す。 同じ型式の製品で幾つかの取扱い説明書があるようで線種が下表の調査した内容と違っていたので、同じようなデータが記載された説明書を探しました。
調査した結果、下表と同じようなメーカーの資料が有りましたのでそれを右下に掲載します。
No 線色 電圧(V)
1 柿白 0.00
2 0.00
3 緑白 0.00
4 0.00
5 青白 1.68
6 1.62
7 茶白 14.02
8 gnd
 
 上記切り抜きのPDFは JN-MPPT-MINI AL BL CL に格納しました。
 No5をRS458のAにNo6をBに接続することにしました。

 (2)RS485でPCに接続方法

PCに接続するためにはRS458⇒USBにするアダプタの作成または購入で可能になりますが、コストが高いので今回は
 RS458 ⇒ [HW-0519] ⇒ RS232C ⇒ [CP2102] ⇒ USB で接続することにしました。
 接続状況は右の写真のとおりです。
 なお RS458の接続したアダプター(今回の物と違います)や CP2102については[部品][12.プロセッサ関係][(3)その他]を参照ください。
 各端子の接続は下表のとおりです
HW-0519 CP2102
GND GND
RX RX
TX TX
VCC 3U3
 ちなみにHW-0519のCP2102接続端子から線が2本でていますが、もう一方はオシロスコープを接続する線として引き出しました。




3.接続(ソフト)調査

 接続はModBusと言うことで、以前[計測器][3.電力量計][032_kWS-AC310][ModBus]でも記載しました。
 しかしそれともわずかですが違いが有るのでこの充電器のModBusについて判った事を記載する。

 (1)ModBusについて

a.マスターフレーム構造 フレーム構造は変更有りません。下表のとおりです。  
b.スレーブフレーム構造 スレーブの構造も変更ありません。下表のとおりです。  
※Data Rquantityは通常データの単位が2byteのため n は最低でも 2 となります。
nはマスターフレームのRegisterRquantityの値となります。 もう少し説明するとマスターフレームのデータとしてレジスタアドレスを0x1000、RegisterRquantityが0x05とした場合には、 スレーブフレームでは Data Rquantityは0x0Aとなり、データのアドレスは0x1000を開始アドレスとして 0x1004 の アドレスデータが Data で送られて来ます。
KWS-AC310では上記例のような複数のRegisterデータの最大数は0x11=17個です。
c.マスターフレーム ファンクションNo 0xFFアドレスの追加
ファンクションNo 0xFF、RegisterAddress 0x1030、RegisterRquantity 0x01で接続しているデバイスのアドレス値を返してくれる。 ただしこの時にスレーブデバイスの接続は1台だけです。
通常スレーブの返答は、
DeviceAddress 0x06 , RegisterData 0x06 と言う事だったが私の場合は DeviceAddress 0xFF , RegisterData 0x03 でした。 ソフト1の例を参考下さい。
d.ファンクションNo
充電器の出力電圧や電流のデータを読む場合のファンクションNoが 0x03 で説明されていたが、私のデバイスでは 0x04 だった。
他社のModBus仕様を見ると下表の様に記載が有った。 下表のとおり、私のデバイスアドレスの確認では 0x03 を使用し、デバイスアドレスの書込みでは 0x06 で書込む事が出来た。 (ややこしい値ですが私のデバイスアドレスを0x03⇒0x06に変更した)
FunctionNo 機能説明
0x03 保持レジスタの読出し
0x04 入力レジスタの読み出し
0x06 保持レジスタの書込み

 (2)ソフト1

プログラムは python を使用しています。 マスターフレームデータはソフト中の配列 txdh [ ] のデータを変更することにより、 ソフトでCRC値を生成付加してスレーブデバイスへ情報を送信します。
下記のプログラムリストは デバイスアドレスを確認するデータです。
ソフトはスレーブから送られてきた情報を示し、受信データのCRCを生成します。

スレーブデータ呼出しのマスターデータ変更付近のプログラム
def tx_modbus(self):
print( "Tx data=", end=" " )
txdh =[0xff,0x03,0x10,0x30,0x00,0x01]

上記プログラムをVisual Studio Codeで実行した状況を下記に添付します。

 (3)ソフト2

プログラムは python を使用しています。 マスターフレームデータはソフト中の配列 txdh [ ] のデータを変更することにより、 ソフトでCRC値を生成付加してスレーブデバイスへ情報を送信します。
下記のプログラムリストでは スレーブ側のレジスターアドレス0x1000~0x101Fの複数(32個)入力データを取得するものです。
ソフト2では複数のデータを表示するためにプログラムを修正しています。 ソフトはスレーブから送られてきた情報を示し、受信データのCRCを生成します。

スレーブデータ呼出しのマスターデータ変更付近のプログラム
def tx_modbus(self):
global stad
print( "Tx data =", end=" " )
txdh =[0x06,0x04,0x10,0x00,0x00,0x20]
上記プログラムをVisual Studio Codeで実行した状況を下記に添付します。
レジスタの内容が違っているようなので今後これを調査したいと思います。
その後、遠隔監視システムを完成したいと思います!




4.ModBusデータ

 現時点で判っているデータ名を記載(値は4月27日15時)

 (1)読み込み専用データ 0x04

AddressR/Wbytenemevalue1value1倍率・単位
0x1000R20x003ec1004
0x1001 0R2太陽光パネル電圧 0x03fb1019X0.1(V)
0x1002 2R2蓄電池電圧 0x0109265X0.1(V)
0x1003 4R20x00000
0x1004 6R20x00000
0x1005 8R2出力電流 0x003957X0.1(A)
0x1006 10R20x003452
0x1007 12R2出力電力 0x05e61510X0.1(W)
0x1008 14R20x00000
0x1009 16R20x003c60
0x100A 18R20x00011
0x100B 20R20x00011
0x100C 22R20x00000
0x100D 24R20x00000
0x100E 26R20x00000
0x100F 28R20x05521362
0x1010 30R20x00000
0x1011 32R2装置温度 0x001723X1(℃)
0x1012 34R2外温 0x001c28X1(℃)
0x1013 36R20x00000
0x1014 38R20x00011
0x1015 40R20x03f71015
0x1016R20x00066
0x1017R20x00022
0x1018R20x00044
0x1019R20x00011
0x101AR20x00000
0x101BR20x00000
0x101CR20x00011
0x101DR20x00000
0x101ER20x00000
0x101FR20x00000

 (2)読み書き込みデータ 読み込み 0x03 書き込み 0x06

X0.1(V)X0.1(V)
AddressR/Wbytenemevalue1value1倍率・単位
0x1024R/W2Uover0x0124292X0.1(V)
0x1025R/W20x012a298X0.1(V)
0x1026R/W2Rover0x011c284X0.1(V)
0x1027R/W2ECV0x0120288X0.1(V)
0x1028R/W2BCV0x0118280X0.1(V)
0x1029R/W20x0108264X0.1(V)
0x102AR/W2Float0x0110272
0x102BR/W2un0x00d8216X0.1(V)
0x102CR/W2under0x00f8248
0x102DR/W20x00d8216X0.1(V)
0x102ER/W20x00000
0x102FR/W20x00011
0x1030R/W20x00066
0x1031R/W20x00066
0x1032R/W20x003250
0x1033R/W20x003c60
0x1034R/W2Time0x001824
0x1035R/W20x00000
0x1036R/W20x00011
0x1037R/W20x00000
0x1038R/W20x00011
0x1039R/W20x00011
0x103AR/W20x00022
0x103BR/W20x00044
0x103CR/W20x00011
























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