以前,以下のようなModelicaに関する記事を書きました.
ModelicaのインストールとModelica Buildings Libraryのサンプルモデルの実行
その後,JModelicaとBuildingsライブラリを使ったモデル開発をしており,その状況をModelicaライブラリ勉強会で紹介させていただいたりしました.
しかし,JModelicaでは以下の点がモデル開発のネックとなっていました.
- JModelicaはオープンソースとしての開発が終了しており,無償での最新の開発環境が入手できない
- 最後のオープンソース版のJModelicaでは,今後Buildingsライブラリが更新された場合に動作するかわからない
- JModelica自体にはグラフィカルなモデル作成インターフェースがなく,モデル修正→実行→デバッグが手間
そんな折,finbackさんより,OpenModelicaでもBuildingsライブラリのうち実行できるモデルが増えているようだ,という情報をいただきました.具体的には,以下のOpenModelicaでのtest結果でSimulateできている項目が多くなっている,とのことです.
Buildings_latest test using OpenModelica
そこで,BuildingsライブラリのExamplesのうち代表的なものが,OpenModelicaでも実行できるか調査してみました.
また,私の場合は最終的には開発したモデルと他のアルゴリズム等の連携による適切な運転設定の探索などをしたいと考えているため,FMUの書き出し・実行ができるかも調査しました.
実行環境
- Windows 10 21H2
- OpenModelica v1.20.0-dev (Nightly build, 64-bit)
- Modelica Standard Library 4.0.0
- Modelica Buildings Library (master, 最終コミットFeb 16, 2022)
- Python 3.8.7 (FMPy実行用)
- FMPy 0.2.27
調査内容
- OpenModelica上でBuildingsライブラリモデルの動作を確認する
- OpenModelicaでFMU書き出し→FMPyでの実行を確認する
- FMU書き出し条件は以下
- バージョン:2.0
- Platforms: Native
- Model Description Filters: internal
- Include Modelica based resources via load Resourceにチェック
結果
調査結果は以下の表のようになりました.MEはModel Exchange, CSはCo-Simulationです.
モデル名 | OpenModelicaでの実行 | FMU書き出し | FMUの実行(CS) | FMUの実行(ME) |
---|---|---|---|---|
Buildings.Examples.Tutorial.Boiler.System1 | ○ | ○ | ○ | ○ |
Buildings.Examples.Tutorial.Boiler.System2 | ○ | ○ | × | ○ |
Buildings.Examples.Tutorial.Boiler.System3 | ○ | ○ | × | ○ |
Buildings.Examples.Tutorial.Boiler.System4 | ○ | ○ | × | ○ |
Buildings.Examples.Tutorial.Boiler.System5 | ○ | ○ | × | ○ |
Buildings.Examples.Tutorial.Boiler.System6 | ○ | ○ | × | ○ |
Buildings.Examples.Tutorial.Boiler.System7 | ○ | ○ | × | ○ |
Buildings.Examples.Tutorial. SpaceCooling.System1 | ○ | ○ | ○ | ○ |
Buildings.Examples.Tutorial. SpaceCooling.System2 | ○ | ○ | × | × |
Buildings.Examples.Tutorial. SpaceCooling.System3 | ○ | ○ | × | × |
Buildings.Examples.ChillerPlant. DataCenterContinuousTimeControl | ○ | × | - | - |
Buildings.Examples.ChillerPlant. DataCenterDiscreteTimeControl | ○ | × | - | - |
Buildings.Examples.ChillerPlant. DataCenterRenewables | ○ | × | - | - |
Buildings.Examples.VAVCO2. VAVSystemCTControl | ○ | ○ | × | × |
Buildings.Fluid.Chillers.Examples. ElectricEIR_AirCooled | ○ | ○ | × | ○ |
まず分かったのは,OpenModelica上でのシミュレーションは複雑なモデルでもかなりできるようになってきている,ということです. これは朗報で,Buildingsライブラリを使ったモデルの開発・検証自体はOpenModelicaでも十分やっていけそうだと感じます.
一方,モデルによってはFMU書き出しができない・FMU書き出しができてもFMPyでは実行できない条件があることもわかりました.
- CSではFMUとして書き出しできても実行できず,MEで書き出しすると実行できるものがありました. これは,OpenModelicaがFMUに埋め込んだソルバの実行条件がうまく設定されておらず,FMPy側のソルバならうまくいくのが要因のようです. ちなみに,FMPyのソルバはOpenModelicaが埋め込むものと同じCvodeが選択できます.CSとMEどちらも動いたモデルで見る限りは,実行結果に大きな差異は出ないようでした.
- Model Exchangeで書き出しをしても,モデルが実行できないものがありました. この場合,Output Intervalを整数としたり,ステップサイズをVariable-step→Fixed-stepとして長めにとったりすることで実行できるものがありました. 実際,BoilerモデルではOutput Intervalを300に,SpaceCoolingでは22にすることで実行できました.
- Buildingsライブラリでは気象データの取り込みにweaDatが多用されるのですが,この時気象データの指定パスを "modelica://"から始まるパスとすると正しくFMU書き出しできないため,絶対パスで"C:/hoge/huga.mos"などと指定する必要がありました.
- 理由が不明ですが,WetCoilやCoolingTowerの熱交換器モデルはFMU化すると実行できないようです. そのため,現状はこれらのモデルを使わないか,代替モデル(DryCoil系など)を使う必要があります.
いろいろ制約があるものの,ある程度のモデルはFMUとして書き出し・実行できていることから, 今後はJModelicaに代わってOpenModelica上でモデル開発を進めていこうと思います.