OpenModelica(とJModelica)でBuildingsライブラリを学ぶ_その8

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。 SpaceCoolingのSystem2をやる。前回でモデルの設定は全部見たので今回は計算をまわしたい。
使用バージョン
-OpenModelica1.12.0
-JModelica2.2 → Modelica標準ライブラリ3.2?
-Buildings 5.0.1

JModelicaを使う

System2の計算を実行しようとOpenModelicaで実行したところコンパイルエラーが発生した。
f:id:kinonotofu:20180725222614p:plain
もともとBuildingsライブラリの動作検証はDymolaという商用ソフトとJModelicaというOSSソフトでしか行っていないのだった。そういうわけでJModelicaを使うことにした。Windows環境でのインストールは公式サイトからバイナリインストーラをダウンロードしてきて実行すればたぶん悩むことは無いと思う。
JModelicaはOMEditのようなGUIでモデルを設定するツールがないようだ。OMEditでモデルを作成して実行はJModelicaというのもありかもしれないし、ちょっとしたものならVSCode(Modelica用の拡張機能がある)などテキストエディタで書くのもよいかもしれない。
次に書くJModelicaの使い方はfinbackさんに教えて頂きました。ありがとうございます。

  • Buildingsライブライリを適当な作業場所へ置いてBuildingsライブライリのフォルダの名前をバージョン名抜きのBuildingsという名称にする。
  • JModelicaのIPythonを実行し、cdでBuildingsフォルダを置いた場所へ移動する。
  • 以下のコードを入力してSystem2のモデルをfmuファイルにコンパイルする。
from pymodelica import compile_fmu
fmufile = compile_fmu('Buildings.Examples.Tutorial.SpaceCooling.System2','Buildings')

f:id:kinonotofu:20180725230258p:plain
* これダメじゃないかと思うようなすごい勢いで「ファイルが見つかりません」を訴えかけてきてエラーを出しながらもBuildings_Examples_Tutorial_SpaceCooling_System2.fmuファイルが生成される。気にせず以下のコードを入力して生成されたfmuファイルを実行する。

from pyfmi import load_fmu
model = load_fmu('Buildings_Examples_Tutorial_SpaceCooling_System2.fmu')
model.simulate()
  • Buildings_Examples_Tutorial_SpaceCooling_System2_result.mat が出力されるのでJModelicaのplot-GUIで読み込む。

このmatファイルをOMEditで読み込むと温度は絶対温度でのみ見ることができる。System1ではOpenModelicaで実行して結果を読み込むと温度を摂氏と絶対温度と切り替え表示ができていたのでJModelicaで実行したときの仕様だと考えられる。

System2のおさらい

f:id:kinonotofu:20180606201749p:plain
System2の簡単なおさらいは以下の通り。
* 熱容量を持った室に発熱1000Wと熱貫流を熱流としてコネクタから与えている。
* さらに流体を与えるコネクタから冷気を給気して冷やしている。
* 室の熱貫流はテキストデータから読み取った外気温度から計算。
* 室にコイルで冷却した外気を給気。この外気温度もおなじテキストデータから読み取っている。
* 外気はファンの位置で質量流量固定。
* 室の排気は冷却コイルに入る前の外気と顕熱交換。
* コイルの冷水側は温度固定、流量固定

パラメータと各モデルの設定を以下の表に示す。

変数名 説明
V 室容積[m3] 6*10*3
eps 熱交換器の熱交換効率[-] 0.8
TASup_nominal 室の給気温度の公称値[K] 273.15+18
TRooSet 室の設定室温[K] 273.15+24
TOut_nominal 外気の設計温度[K] 273.15+30
THeaRecLvg 給気側の熱交換器出口温度[K]
=給気側のコイル入口温度[K]
TOut_nominal
-eps*(TOut_nominal-TRooSet)
QRooInt_flow 室の発熱[W] 1000
QRooC_flow_nominal 室の冷却負荷の公称値[W] -QRooInt_flow
-10E3/30*(TOut_nominal-TRooSet)
mA_flow_nominal 空気の質量流量の公称値[kg/s]
温度変化後を考慮して1.3倍?
1.3*QRooC_flow_nominal/1006
/(TASup_nominal-TRooSet)
dTFan ファンによる想定温度上昇[K] 2
QCoiC_flow_nominal 熱交換器と潜熱負荷を考慮にいれたコイルの冷却負荷[W] 4*(QRooC_flow_nominal
+mA_flow_nominal*(TASup_nominal
-THeaRecLvg-dTFan)*1006)
TWSup_nominal 水の往き温度?[K] 273.15+16
TWRet_nominal 水の還り温度?[K] 273.15+12
mW_flow_nominal 水の質量流量の公称値[kg/s] QCoiC_flow_nominal/(TWRet_nominal-TWSup_nominal)/4200
インスタンス 用途 設定
vol redeclare package Medium = MediumA
m_flow_nominal=mA_flow_nominal
V=V
nPorts=2
energyDynamics=
Modelica.Fluid.Types.Dynamics.FixedInitial
mSenFac=3
theCon 室の壁体の熱コンダクタンス G=10000/30
TOut 外気温 なし
preHea 室の発熱ソース Q_flow=QRooInt_flow
fan 給気ファン redeclare package Medium=MediumA
m_flow_nominal=mA_flow_nominal
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState)
hex 熱交換器 redeclare package Medium1=MediumA
redeclare package Medium2=MediumA
m1_flow_nominal=mA_flow_nominal
m2_flow_nominal=mA_flow_nominal
dp1_nominal=200
dp2_nominal=200
eps=eps
cooCoi 冷却コイル redeclare package Medium1=
MediumW
redeclare package Medium2=MediumA
m1_flow_nominal=mW_flow_nominal
m2_flow_nominal=mA_flow_nominal
dp1_nominal=6000
dp2_nominal=200
UA_nominal=-QCoiC_flow_nominal
/Buildings.Fluid.HeatExchangers.BaseClasses.lmtd(
T_a1=THeaRecLvg,T_b1=TASup_nominal
,T_a2=TWSup_nominal,T_b2=TWRet_nominal)
show_T=true
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial
out 外気 nPorts=2
redeclare package Medium=MediumA
souWat 冷水ポンプ
(流量ソース)
nPorts=1
redeclare package Medium=MediumW
use_m_flow_in=true
T=TWSup_nominal
sinWat 冷水の排出先 nPorts=1
redeclare package Medium=MediumW
weaDat 気象データ pAtmSou=Buildings.BoundaryConditions.Types.DataSource.Parameter
TDryBulSou=Buildings.BoundaryConditions.Types.DataSource.Parameter
TDryBul=TOut_nominal
filNam=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")
weaBus 気象データ用バス なし
mAir_flow 給気風量 k=mA_flow_nominal
mWat_flow 冷水流量 k=mW_flow_nominal
senTemHXOut 給気側熱交換器出口温度 redeclare package Medium=MediumA
m_flow_nominal=mA_flow_nominal
senTemSupAir 給気側コイル出口温度 redeclare package Medium=MediumA
m_flow_nominal=mA_flow_nominal

TWSup_nominalとTWRet_nominalはおそらく名前が逆である。
パラメータは直接数値を指定したものと数式で入力したデータがある。だいたい次のような流れでパラメータを数式で指定している。考え方を残しておくという意味で良いと思うし、パラメータは計算の途中で変更できない仕様なのでたぶんモデルを呼び出すたびに計算して遅くなるとかもないはず。
* 設定室温から室の負荷を求める。
* 室の負荷と給気温度から空気の風量を求める。
* 空気の風量とコイルの空気側の入口出口温度差からコイルの処理負荷を求める。
* コイルの処理負荷と水の入口出口温度差から水の流量を求める。

ここで空気の風量を1.3倍している理由がちょっとわかっていない。

System2の実行

ここで注目すべきは開ループ制御により室温vol.Tが設計温度273.15+24=297.15[K]になっているかである。ついでに熱交換器からの排気の影響が気になっていたので給気側外気条件の温度out.Tが273.15+30=303.15[K]になっているかを見る。 f:id:kinonotofu:20180725225019p:plain
外気のほうは排気の影響はなさそうだが、室温が少し低くなっている。風量1.3倍がよくないのではないかと思ったが公式のドキュメントでも室温が低くなっていて計算結果自体はだいたいあっていそうではある。念のために風量を1.3倍→1.0倍として計算してみた。CoocoiでShou_TをTrueにしていたのでそこの温度も表示してみる。Fluidportからは標準では温度がでないためこの設定により温度出力用のportができていた。
f:id:kinonotofu:20180725233030p:plain
JModelicaの結果表示からテキストデータでの書き出しがよく分からないのでOMEditのほうでCSVデータを書き出して計算終了時点の温度を見てみる。

名称 変数名 設計温度 計算温度
室温 vol.T 24℃ 23.758℃
空気側コイル出口温度 a1.T 16℃ 18℃
空気側コイル入口温度 a2.T 25.2℃ 25.038℃
水側コイル出口温度 b1.T 16℃ 17.818℃
水側コイル入口温度 b2.T 12℃ 16.648℃

風量を直すと室温はそれらしい値になった。ただ給気温度となるコイル出口温度が低いしコイルの水側にいたっては固定値のはずのコイル入口温度が全然違う。System2で想定される計算結果といえるのが風量1.3倍にしていたもののグラフしかなくて、それはまぁだいたいそれっぽくなってはいたけれど、どうにも不安になる結果である。まぁ細かい検証とかはまた別の機会にやりたいと思う。

おわりに

今回は結果を見るときにそんな変数あったっけっていうものまで並んでいたので表示したい変数を探すのが少し手間でした。なにかよい方法はないかなぁと。それから、慣れもあると思うけれどプレとかポストの処理はOpenModelicaがやっぱりやりやすくて、Buildingsライブラリを使うにしてもJModelicaと併用か、OpenModelicaで計算できるようにしたいなぁと思いました。JModelicaの計算もこれで大丈夫なのか不安なところもあるし、新たな課題が見つかったような感じです。
OpenModelicaで計算できなかったときはとても困ったけれどfinbackさんの助けによりなんとか計算ができました。本当に感謝しています。まだまだ知らない事だらけだけれどSystem2を通してまた少し理解が進みました。次はSystem3をやります。