Hobby Lab 趣味のモノ作り実験のサイトです。
発電装置 太陽光 840W 蓄電池充電器
1 充電器購入 (SF-14845A)
 1.1 購入経緯
 1.2 SF-14845A設定内容
 1.3 設置とモニター
2 SF-14845Aとの通信方法
 2.1 説明書に通信方法がなかった
 2.2 届いた protocol.pdf
 2.3 情報取得のプロトコル
3 プログラム内容
 3.1 Pythonによる例

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. 充電器購入 (SF-14845A)

1.1 購入経緯

SF-14845A
2025年5月に購入したBDZ60A(16,600円)の冷却ファン電源異常と思われるファン動作不良が発生しました。
装置の内部温度が60℃異常になったので、仮に外部に排気ファンをつけました。
ちょうど購入から1年経過し保証なども無いため、違う充電器ですが、購入しました。
しかし故障した装置の価格17,000円は約1年分の太陽光発電装置での発電電力なのでなんとも悔しい! いつかは自作して10年は故障しないものを作りたい!、今回の故障は新しいものと交換してから回路も含め調査したいと思います。
SOLAFANS の SF-14845A と言う 太陽光パネル最大電圧150V、45AのMPPT充電器でRS485で通信ができるもので、アマゾンで17,999円でした。

1.2 SF-14845A設定内容

充電に関係する設定内容は
項目詳細設定値
Battery Type Settingリチウム電池
Battery Rated Voltage24V
Charg Voltage SettingFloating Charge27.60V
Charg Current SettingMaximum Value45.00A
Set Limit Vaiue45.00A
Discharge Limit Vol.SetUV Recovery24.80V
UV Protection21.60V
OV Recovery28.40V
OV Protection30.00V

1.3 設置とモニター

(1)従来の装置内に無事組み込むことができました。
  スマートで無いのが恥ずかしい!


(2)モニターも若干プログラムの変更をしましたが動作させることができました。


2 SF-14845Aとの通信方法

2.1 説明書に通信方法がなかった

商品が届き説明書を確認したが、通信方法が不明だったので、販売者へ下記連絡を行いました。
 >I purchased a SOLAFANS 48V 45A MPPT.
 >
 >I would like to integrate this controller into my own system.Could you
 >please send the MODBUS register map (protocol specification PDF) for
 >RS485 communication to this email address?
 >Model: SOLAFANS 48V 45A
 >MPPT Order ID : [****************]
 >
 >Thank you for your support.

2.2 届いた protocol.pdf

30分後
連絡があり、 MPPT remote communication protocol.pdf が 届きました。
大変早い対応で驚きました。

通信プロトコルはMODBUSかと思っていましたが SOLAFANS 社独自のものでした。

添付していた PDF は大変解りやすく助かりました。

2.3 情報取得のプロトコル

ここでは電圧や電流などの状態変化を読み込むためのプロコトルを説明します。
a.マスター側
Byte数は 8 Byteで MODBUS に似ていますが、下表の通り
このデータを送信することにより、該当する DeviceAddress 番号から 37 Byteのデータが返される。
つまり、MODBUS では無いことが判ったが、DeviceAddressさえMODBUSの機器と違った番号をつければ、同じBUS上にスレーブ機器を接続できることが判り、一安心しました。
ByteNo項目名内容備考
0DeviceAddress0x01範囲 0x01~0xF0 最初は0x01
1指示タイプ0xB3
2コントロールコード0x01
3data 10x00
4data 20x00
5data 30x00
6data 40x00
7check Code0xB5sum(0~6) 下位8bit
 ByteNo 0 はMODBUSと同じ様ですが、0 はブロードキャストではなさそうです。
 ByteNo 1 はファンクションですが、MODBUSとは違います。
      ここで紹介のコード 0xB3 以外は下記項目『c.指示タイプ』を参照下さい。
 ByteNo 2 コントロールコードという MODBUS には無いコードですが、0x01 を記入することになっています。
 ByteMp 7 はcheck Code で ByteNo 0〜6 の合計で下位 8bit の値です。 MODBUS の CRC と違います。

b.スレーブ側
マスターからの要求によりスレーブから 37 Byteのデータが返されます。
ByteNo項目名内容備考
0DeviceAddress0x01範囲 0x01~0xF0 最初は0x01
1指示タイプ0xB3
2コントロールコード0x01
3operating status0xXX
4charging status0xXX
5Control status0xXX
6PV電圧(V=x /10)0xXXhigh byte
70xXXlow byte
8battery voltage(V=x /100)0xXXhigh byte
90xXXlow byte
10charging current(I=x /100)0xXXhigh byte
110xXXlow byte
12内部温度 e1(V=x /10)0xXXhigh byte
130xXXlow byte
14内部温度 e2(V=x /10)0x00実際には温度表示はなかった。
150x00
16外部温度 e1(V=x /10)0xXXhigh byte
170xXXlow byte
18Spare0x00
19Spare0x00
20日発電電力量0xXX合計電力データを追加しました(4バイト、上位バイトが先)。単位はワット時です。表示ボードがない場合、このデータは無効です。
210xXX
220xXX
230xXX
24全発電電力量0xXX同上
250xXX
260xXX
270xXX
28Spare0x00
29Spare0x00
30Spare0x00
31Spare0x00
32Spare0x00
33Spare0x00
34Spare0x00
35Spare0x00
36check Code0xXXsum(0~35) 下位8bit
MODBUSと違い『データアドレス』はありません。
ただしデータの並びを説明するため『ByteMo』という 1 Byte の番号 1 つに 1 Byte のデータが対応している。

c.指示タイプ
その他 指示タイプ として
0xB2:バッテリータイプや電圧、電流などの設定情報
0xB1:B3とB2が合わさなった情報
0xC0:6種類の制御
0xD0:20種類の設定入力
0xEE:スレーブからエラー応答
0xDE:ボーレートの設定
0xDF:リアルタイムの設定
となっているようです。
詳細はPDFを確認下さい。
時間に余裕が出れば、表形式で記載したいと思います。




3. プログラム内容

3.1 Pythonによる例

指示コード 0xB3 による状態データの取得プログラムの例を下記に示します。






































更新日 2026/06/10 15:11  管理者 平林 剛Hirabayashi Takeshi