ModelicaのインストールとModelica Buildings Libraryのサンプルモデルの実行

私は研究でビルシミュレーションを行うため,EnergyPlusというソフトウエアを利用していました.
EnergyPlusはビル全体のエネルギーや室内環境をシミュレーション可能で,テキストファイルで入出力をするシンプルな構成だったのですが,建物モデル作成が煩雑であったり,特殊な制御ロジックのシミュレーションが困難でした.

ところで,マルチドメインの物理シミュレーションが可能なモデリング言語として,Modelicaというものがあります. Modelicaのライブラリの1つである,Modelica Buildings Library(MBL)を使うと,建物の水配管や室などのモデルをMATLABSimulinkライクにグラフィカルに接続してシステムモデルが作成できるほか,制御ロジックのカスタムとシミュレーションも可能なようです.
今回はModelicaを使ってMBLを実行する環境を構築し,サンプルモデルを実際に実行してみます.

1. ModelicaとMBL

1.1 Modelica

Modelicaでは,微分代数方程式のような形で物理モデルを記述してモデリングし,そのモデルの実行・シミュレートができます.また,作成したモデルをモジュールとして扱い,モデル同士を接続してグラフィカルにシステムをモデリングすることも可能です.Modelica自体はオープンソースソフトウエアで,開発環境としては,有償・無償のものがそれぞれ存在します.無償のものとしてはOpenModelicaがよく用いられるようです.

Modelicaの基本的な操作は以下によくまとまっています.
OpenModelicaのチュートリアル資料

その他のOpenModelicaに関する日本語の資料として,以下の勉強会のアーカイブが参考になります.
Modelicaライブラリ勉強会 - connpass

1.2 Modelica Buildings Library(MBL)

MBLは米国ローレンスバークレー国立研究所(LBNL)の開発するオープンソースのModelicaライブラリです.MBLについては,以下の資料が詳しいです.
Modelica Buildings Library の紹介

この資料にも記載があるのですが,MBLは,有償のDymolaという開発環境と無償のJModelicaという2つでしかテストされていないようで,残念ながらOpenModelicaでは使えない部分があります.
以下のページに,テストによるエラー・警告発生とシミュレーション結果ログが記載されています.
Buildings_latest test using OpenModelica

Tutorialは一応OpenModelicaでシミュレーション可能となっていますが,私の環境では実行できないものがありました.そこで,JModelicaを使います.

1.3 JModelica

JModelicaについて,以下の記事が詳しいです.
JModelica.org 使い方メモ | Finback

JModelicaはModelon社の開発したソフトです.元々オープンソースだったようですが,オープンソースとしての開発が終了しています.最後のオープンソース版のJModelicaソースコードおよびバイナリがHPからダウンロード可能です.

しかし,JModelicaにはOpenModelicaにあるようなグラフィカルなモデル作成インターフェースがないようです.そこで,モデル作成はOpenModelicaで行い,JModelicaでFMU(Functional Mock-up Unit)化し,他のシミュレータからでも呼び出し可能な形にして実行します.
実行には,フリーのFMUシミュレーション用PythonライブラリであるFMPyを使うことにします.

2. 開発環境の構築

2.1 バージョン

  • Windows 10 20H2
  • OpenModelica v1.17.0 (64-bit)
  • JModelica 2.14
  • Modelica Standard Library 3.2.2 (JModelica付属)
  • Modelica Buildings Library 6.0.0
  • Python 3.8.7 (FMPy実行用)
  • Python 2.7.13 (JModelica付属)

2.2 インストール

  • OpenModelicaを以下からダウンロード・インストールします.
    https://openmodelica.org
  • JModelicaを以下よりダウンロードしてインストールします.
    https://jmodelica.org
  • FMPyの公式HPの通りインストールします.
    python -m pip install fmpy
    ただし,私の環境ではそのままでは動作せず,別途PyQt5, pyqtgraphもインストールが必要でした.
    python -m pip install PyQt5 pyqtgraph

2.3 Modelicaライブラリのフォルダパス

  • MBLは,Modelicaの標準ライブラリである,Modelica Standard Library(MSL)に依存しています.JModelicaのインストールディレクトリ\install\ThirdParty\MSLに,MSLが格納されています.今回はこちらを用います.
  • MBLは,OpenModelicaのインストールディレクトリ\lib\omlibraryに格納されています.
    OpenModelica v1.17には6.0.0と7.0.0の2つが付属していましたが,今回は6.0.0を使います.(JModelica付属のMSLは古いようで,Buildingsライブラリも最新だと動かないようです.)
    同じディレクトリに2つのBuildingsライブラリが混在しているとJModelica側のパス設定が大変なので,Buildings 6.0.0フォルダをJModelicaのインストールディレクトリ\install\ThirdPartyに移動しておきます.

3. サンプルモデルの実行

3.1 モデルの確認

  • OpenModelica Connection Editor(OMEdit)を開きます.自動でMSLの最新版(3.2.3)と付属ライブラリ(Modelica ,ModelicaServices, Complex)がロードされますが,アンロードしておきます.
    ファイル→ライブラリのロードから,JModelicaのMSLとMBL 6.0.0をロードします.
  • MBLに付属するサンプルモデルを開きます.今回は,Buildings.Examples.Tutorial.Boiler.System6を用います.

f:id:ohtayo:20210425215752p:plain
OpenModelica Connection Editorで表示したBoiler.System6のモデル

このモデルは,ボイラ,熱交換器,空調対象室が1つずつあり,以下の制御が含まれています.
- 室温および外気温に応じたボイラ・熱交換器のポンプ発停制御
- 室温を一定にするための熱交換器入口温度制御
- ボイラ安定運転のためのボイラ入口温度制御
また,外気温データを外部ファイルから読み込み,それを用いて室温変動と制御シミュレーションを行います.

  • このモデルを変更する際は,System6モデルを右クリック→複製して使用します.Buildingsライブラリ以外の場所においた場合,weaDat, TOut, TSetSupのBuildingsというプレフィックスが省略されているので,コードに付け足す必要があります.

3.2 JModelicaによるFMUの作成

  • モデルを確認,あるいは変更したら,これをJModelicaでFMU化します. 以下の様なPythonスクリプトを作成して,JModelicaインストールフォルダにあるIPython64.batで実行します.
# coding: utf-8
# Modelicaライブラリのパスを追加
import os
os.environ['MODELICAPATH'] = r'C:\JModelica.org-2.14\install\ThirdParty\MSL;C:\JModelica.org-2.14\install\ThirdParty'
# FMU化
from pymodelica import compile_fmu
fmu = compile_fmu('Buildings.Examples.Tutorial.Boiler.System6',
                  version='2.0',
                  target='cs',
                  compile_to="Buildings_Examples_Tutorial_Boiler6_v20_cs.fmu",
                  compiler_log_level='w,i:log.txt')

すると,指定したファイル名の.fmuファイルが作成されます.

3.3 FMUの実行

  • Python3環境でFMPyを実行します.
    python -m fmpy.gui
  • 現れたGUIに,さきほど作成したFMUファイルをドラッグドロップします.

f:id:ohtayo:20210425215924p:plain
FMPyのモデルロード結果

  • 右三角のStart Simulationボタンを押すとシミュレーションを実行します.
    例えば,熱交換器入口温度設定値TSetSup.y, 熱交換器入口温度計測値temSup.T, 室温vol.T, 熱交換器温度制御用三方弁開度valRad.yにそれぞれチェックをつけると,以下のグラフが見れます.

f:id:ohtayo:20210425215929p:plain
熱交換器入口温度の制御結果グラフ

外気温に依存して設定値が変動し,それに応じてバルブ開度が変わって熱交換器入口温度計測値と室温が変化していることがわかります.

4. まとめ

OpenModelica, JModelicaとModelica Buildings Libraryを使って,ビル熱源系のサンプルモデルのシミュレーションを実行しました.
ModelicaはMATLAB/Simulinkに使い慣れている私からするとすこしクセがありますが,MBLだけでなくMSLにも豊富な各ドメインのライブラリがあり,非常に有用だと感じました.Examplesもそれなりにあるので,これらを参照しながらいくつかモデル作成をこなしていけば使い方には慣れてくるのではないかと思います.
また,FMPyではFMUモデルの入力を変更しながら1ステップずつ実行などができるようなので,このあたりも試してみたいと思います.