1.概要
(1)目的
|
情報取得用ModBus関係のMppt充電器の取替えや直流電流、電圧検出の追加に伴いプログラムを見直しました。 このプログラムは太陽光発電装置の状態を取得して、データベースに記録するプログラムです。 このプログラムの周期は1分周期で実行されます。 この他に1分周期で実行するプログラムはインターネット上のレンタルサーバーへ情報を伝送するプログラムが有ります。 別のプログラムにしたのは、共に動作しなくなる事を防ぐためです。 |
2.I/Oの変数
(1)Modbus
|
ModBusの共通情報 シリアル通信の使用方法 ModBusを使用しているものは2つ有り a.充電器 DeviceAddress=0x01 FunctionNo=0x04 ・太陽光パネルの発電出力とバッテリー入力の間に設置している充電器の各情報 充電器ModBusデータ
b.電力計 DeviceAddress=0x02 FunctionNo=0x03 ・太陽光発電装置に接続している交流電源の電力計 電力計ModBusデータ
c.電流・電圧検出器(充電器) DeviceAddress=0x12 FunctionNo=0x04 ・充電器出力、インバータ入力の直流電流・電圧の検出 pzem-017 Modbusデータ
d.電流・電圧検出器(インバータ) DeviceAddress=0x13 FunctionNo=0x04 ・充電器出力、インバータ入力の直流電流・電圧の検出 pzem-017 Modbusデータ
|
(2)GPIO
|
電力の切り替え信号を取得して ・電源切替器の状態をMySQLへ記録します。※ ・交流電源の電力計の『電力量』、『動作時間』の値を読み込みMysqlに記録、値をリッセットします。 a.母線電圧電流計 ・外部I/Oにより、負荷電源供給箇所判定、インーバータ・電源切替器動作制御。 GPIOの使用方法 Ryドライバー(2SC1815)の使用方法
|
(3)I2C
|
a.蓄電池電圧電流計
・シャントCTによる蓄電池の電流測定と電圧を測定します。 I2C使用方法 INA226
非接触直流CT[ホール素子WCS] 増幅回路[オペアンプ全般] I2C使用方法 16bit A/D[ADS1115]
温度センサー 1-Wire[DS18B20] 使用方法
温度センサー 1-Wire[DS18B20] 使用方法
温度センサー 1-Wire[DS18B20] 使用方法
|
3.MySQLの変数
(1)概要
|
MySQLでは太陽光発電に伴う記録を蓄積し、表示器へそのデータを渡すために使用する。 現在は太陽光発電の状態表示用としてのデータの受け渡しをしている。 記録の周期は現在は1分としているが、出来だけ早い変化を確認したいので10秒程度にならないか確認をしていく。 将来的には、各報告(日報・月報・年報)を行う。 データベース名:sumstm |
(2)データベース内容
テーブル
テーブル名: 1mincycl
カラム数: 45
|
4.1分周期実行方法
(1)概要
|
時間周期的にプログラム実行する場合は cron と言う デーモンを使用する。 crontab ファイルに1分ごとに実行するプログラムのコマンドを記述する。 * * * * * /usr/bin/python3 /home/hobbylab/www/scpt/Local1MinuteCycleProgram.py
|
5.メインプログラムの概要
(1)メインルーチン
|
プログラムはPythonを使用します。 |
(2)サブルーチン一覧
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6.サブルーチン内容
(1)RaspberryPi I/O
| RaspberryPi I/O関係のサブルーチンです。 |
(1-1)init()
(1-2)RxIo()
(2)MODBUS
| MODBUS関係のサブルーチンです。 |
(2-1)CrcGen()
(2-2)class UART:共通
| class UART:共通関係のサブルーチンです。 |
(2-21)__init__()
| timeout=2は .read() 及び .readline()に入って2秒以上受信がなければその関数に値が無くても抜ける。 |
(2-22)mb_rx()
| 最初の2byteはマスター信号のオウム返し、3番めがデータの長さを示している。 |
(2-23)mb_rxrs()
|
リセット信号を受信したスレーブ信号は全てがマスターのオウム返しとなるため、mb_rx()が使用できないので、このサブルーチンを設けた。 また、AC301の後にPZEMをリセットした場合、タイムアウトする事が有ったので、この処理(ここではタイムアウトで 1 を返す事にした)を追加した。 |
(2-24)mb_tx()
(2-3)class UART:充電器
| class UART:充電器関係のサブルーチンです。 |
(2-31)RBZ60A_rx()
(2-32)RBZ60A_reset_now()
| リセットの動作は出来ない。※ただし自動的に1日1回リセットされる。 |
(2-33)RBZ60A_reset_all()
(2-4)class UART:測定器
| class UART:測定器関係のサブルーチンです。 |
(2-41)PZEM017c_rx()
(2-42)PZEM017i_rx()
2回もタイムアウトが出れば、errfile.log に記録する。
(2-43)PZEM_reset()
(2-5)class UART:負荷電力計
| class UART:負荷電力計関係のサブルーチンです。 |
(2-51)AC301_rx()
(2-52)AC301_reset()
|
AC301のリセットが出来ないため、ロックしてソフトで対応することにした。 |
(3)MySQL
| MySQL関係のサブルーチンです。 |
(3-1)1分更新DB
| 1分更新DB関係のサブルーチンです。 |
(3-11)db_re()
(3-12)db_in()
(3-13)db_up()
(3-14)db_de()
(3-2)10分更新DB
| 10分更新DB関係のサブルーチンです。 |
(3-21)db_m_re()
(3-22)db_m_in()
(3-23)db_m_up()
(3-24)db_m_de()
(3-3)1日更新DB
| 1日更新DB関係のサブルーチンです。 |
