OpenModelica(とJModelica)でBuildingsライブラリを学ぶ_その8
概要
OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。
SpaceCoolingのSystem2をやる。前回でモデルの設定は全部見たので今回は計算をまわしたい。
使用バージョン
-OpenModelica1.12.0
-JModelica2.2 → Modelica標準ライブラリ3.2?
-Buildings 5.0.1
JModelicaを使う
System2の計算を実行しようとOpenModelicaで実行したところコンパイルエラーが発生した。
もともと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')
* これダメじゃないかと思うようなすごい勢いで「ファイルが見つかりません」を訴えかけてきてエラーを出しながらも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のおさらい
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]になっているかを見る。
外気のほうは排気の影響はなさそうだが、室温が少し低くなっている。風量1.3倍がよくないのではないかと思ったが公式のドキュメントでも室温が低くなっていて計算結果自体はだいたいあっていそうではある。念のために風量を1.3倍→1.0倍として計算してみた。CoocoiでShou_TをTrueにしていたのでそこの温度も表示してみる。Fluidportからは標準では温度がでないためこの設定により温度出力用のportができていた。
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をやります。