BuildingsPyを使う
概要
今回はJupyter上でJModelicaを動かしながらBuildingsPyを使ってみる。JModelicaはバージョン2.14でOSSでの開発は終了したが、まだOpenModelicaでは動かない時も多いので今後もしばらく使うことになる。バージョン2.14のリリースノートに次はpython3系にすると書いてたけれどpython2系のままになってしまったのが残念。
BuildingsPyは以下の事ができる。今回は上の3つを使ってみる。
- FMUの変数間の依存関係の集計。
- matファイルの読み込み。Dymolaでなくても一応読めている。
- matファイルのデータから箱ひげ図のプロット。matplotlibのboxplotの設定をしている。
- Dymolaでの計算の実行。他の環境は対応していない。
- 開発用のリファクタリングやリグレッションテスト、moファイルのhtmlのチェックなど。
実行環境
- Windows10 Pro 64bit
- JModelica 2.14 →Modelica標準ライブラリ(MSL) 3.2.2
- Buildings 6.0.0
準備
ファイルやフォルダの位置は参考位置なので個人の好きなところでもよいと思われるが、名前にスペースを入れるのは避けた方が無難。
JModelicaの用意
JModelicaをJupyter上で実行できる環境を用意する。finbackさんがJupyterでのJModelica実行について書いてくださっているので、実行環境の準備はこれを見れば問題ない。また、UedaさんがJupyterでのOpenModelicaの実行も書いてくださっているのでOpenModelica派の人はこちらもよいと思う。
BuildingsPyのインストール
JModelicaをJupyterで立ち上げて以下を入力して実行。
!pip install buildingspy
pandasなども入れてなければ入れる。
Buildingsライブラリの用意
まずBuildingsライブラリをダウンロードして解凍し、%USERPROFILE%\JModelica\lib
におく。%USERPROFILE%は'C:\Users\ユーザー名'の事である。 フォルダ名のスペースが気になるので、フォルダ名からバージョン番号を抜いておく。
ライブラリのパスの設定として、JModelicaのJupyterの起動用のbatファイルの
"%PYTHONHOME%\python.exe" -m jupyter notebook %*
の前に以下の一行を加えて保存する。
set MODELICAPATH=C:\JModelica.org-2.14\install\ThirdParty\MSL;%USERPROFILE%\JModelica\lib
計算ファイル
計算ファイルはBuildingsライブラリのサンプルファイルをそのまま使う。%USERPROFILE%\JModelica\lib\Buildings\Examples\Tutorial\SpaceCooling\System3.mo
を作業フォルダにコピーしてくる。このままだと動かないので適当なテキストエディタなどでファイルを開いて113行と120行のBoundaryConditionsの前にBuildings.をつける。さらに後から気象データを入れ替えたいときにデフォルトの記述のままだとどうもうまくできなかったので116行を以下のように直接ファイル名を指定するように書き換えて保存。
filNam="C:/Users/Simulation/JModelica/lib/Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos",
気象データ
気象データとしてepwファイルをダウンロードし、%USERPROFILE%\Documents\JModelica\work\lib\Buildings\Resources\weatherdata
におく。
以下のようにしてepwファイルをmosファイルに変換する。Javaのパス廻りはすでにJavaが入っていて設定できている人には不要かもしれない。
cd %USERPROFILE%\JModelica\lib\Buildings\Resources\weatherdata set PATH=%PATH%;C:\JModelica.org-2.14\Java\jdk-11.0.2\bin set JAVA_HOME=C:\JModelica.org-2.14\Java\jdk-11.0.2 java -jar ../bin/ConvertWeatherData.jar JPN_Nagoya.476350_IWEC.epw
JPN_Nagoya.476350_IWEC.mosファイルができる。
計算の内容
以下の2つのファイルが用意できているはず。
%USERPROFILE%\JModelica\lib\Buildings\Resources\weatherdata\JPN_Nagoya.476350_IWEC.mos
%USERPROFILE%\JModelica\work\buildingspy\System3.mo
System3.moの内容は以下の通り。
- 単室の室温の計算。
- 壁や天井など外皮は定常計算モデルとし、1枚にまとめている。
- 日射や長波放射は無視。
- 室内の空気に一定発熱を与えている。
- 熱回収した外気を冷水コイルで冷却してオンオフ制御で空調。
実行時には以下の2点をデフォルトから変更する。
- 読み取る外気の気象データを名古屋のものに変更。
- 計算は30日分を1分刻みで計算するよう変更。
Jupyter notebookの内容は以下の通り。変数の数が多くて読みづらくなってしまった。
- 計算の実行
- 通常通りグラフの描画
- Buildingspyの操作の確認
- matファイルのデータをcsvで出力
Buildingspyの操作について
せっかく計算時間を長くしてみたのだけれど、箱ひげ図のプロットがどうも上手くいかなかった。普通に読み込んだmatファイルのデータをmatplotlibでグラフを書けばよいのだと思う。一応以下の事は出来た。痒い所をちょっぴり補助してくれるといった印象。
- fmuファイルの変数間の依存関係の一覧化(使いどころがまだ良く分からない)
- matファイルの変数名を正規表現で検索して表示
- matファイルのデータの時間積分(合計)、時間平均、最大、最小の表示
- 時間間隔を変更してmatファイルのデータを抽出or線形補間
- matファイルのデータをcsvで出力
まとめ
BuildingsPyは正規表現での変数名の検索とmatファイルのデータを任意の時間で取り出せるのが使いやすくて便利だと感じた。matファイルはJModelicaのPlot-GUIやOpenModelicaで結果の確認をしても良いのだけれど、今回のやり方だとpythonでそのまま加工できスクリプトの流用も簡単で良いと感じた。DyMatというライブラリもありそれはfinbackさんの記事で使い方を紹介してくれているのでそちらを使っても良いとは思う。
Jupyterでの実行が気に入ったので少しずついろいろ動かしていきたい。