OpenModelicaのBuildingsライブラリを学ぶ_その5

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。 前回からチュートリアル SpaceCoolingのSystem2をやっている。全体像と気象データ廻りを見たので次はvolとfan廻りをみる。
使用バージョン
-OpenModelica1.12.0 →たぶんModelica標準ライブラリ3.2.2
-Buildings 5.0.1

チュートリアル SpaceCoolingのSystem2

f:id:kinonotofu:20180606201749p:plain
System2ではSystem1のvolにnPorts=2と設定してできたポートをつないでファンで機械換気している。volとfan廻りのコネクタは以下。

connect(fan.port_b, vol.ports[1]);
connect(vol.ports[2], hex.port_a2);
connect(fan.m_flow_in, mAir_flow.y);
connect(senTemSupAir.port_b, fan.port_a);

volのコネクタはfanと熱交換器につながっているので給気と熱回収用の排気をつないでいるのだろう。 fanはvol以外にもつながっていて流量や温度を受け取っていそうである。mAir_flow(Modelica.Blocks.Sources.Constant)はkにReal型の値をParameterとして設定してyというコネクタから出力するブロックのようである。ブロックというクラスはそのクラス内で宣言された変数はinputかoutputとせねばならないというものである。senTemSupAirはセンサーのモデルなのだがけっこうしっかりしているのでまた別の回に取り扱いたいと思う。

vol廻り

volの設定は以下。

Buildings.Fluid.MixingVolumes.MixingVolume vol(
    redeclare package Medium = MediumA,
    m_flow_nominal=mA_flow_nominal,
    V=V,
    nPorts=2,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    mSenFac=3);

volの設定でnPorts=2とすればvolにports[1]とports[2]ができるようである。System1との違いは本当にこれだけである。
これらのコネクタはModelica.Fluid.Vessels.Baseclasses.VesselFluidPorts_bクラスのコネクタなのだが、これは実質Modelica.Fluid.Interfaces.FluidPortである。内容は以下の通り。

connector FluidPort
  "Interface for quasi one-dimensional fluid flow in a piping network (incompressible or compressible, one or more phases, one or more substances)"

  replaceable package Medium = Modelica.Media.Interfaces.PartialMedium
    "Medium model" annotation (choicesAllMatching=true);

  flow Medium.MassFlowRate m_flow
    "Mass flow rate from the connection point into the component";
  Medium.AbsolutePressure p "Thermodynamic pressure in the connection point";
  stream Medium.SpecificEnthalpy h_outflow
    "Specific thermodynamic enthalpy close to the connection point if m_flow < 0";
  stream Medium.MassFraction Xi_outflow[Medium.nXi]
    "Independent mixture mass fractions m_i/m close to the connection point if m_flow < 0";
  stream Medium.ExtraProperty C_outflow[Medium.nC]
    "Properties c_i/m close to the connection point if m_flow < 0";
end FluidPort;

とりあえずMediumを値にもつコネクタをつなげばよさそう。Medium自体が流量と圧力と熱量(エンタルピ)を持ってくれているようだ。Medium自体ではなくMassFlowRate、AbsolutePressure、SpecificEnthalpy、MassFraction、ExtraPropertyの値ももつコネクタをつないでも大丈夫な気はする。いくつかの値だけもらいたいときにはそれでもいいのかもしれない。

fan廻り

fanの設定は以下

Buildings.Fluid.Movers.FlowControlled_m_flow fan(
    redeclare package Medium = MediumA,
    m_flow_nominal=mA_flow_nominal,
    energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) ;

fanの設定はシンプルでMediumとデフォルトの風量と計算モデルの種類を指定している。これはvolとfanでMediumAを共有してしまわないのだろうか。仕様はわかっていないが別のインスタンスとして扱ってくれるのだろう。
SteadyStateとFixedInitialのどちらも一定値を出し続けそうな気がするが、値を受け取る場合はSteadyStateとするという違いがあるのかもしれない。コネクタを見る限り、風量と温度を受け取って、volヘ媒体の状態(風量含む)を渡しているように思うのだがファン自体は何か計算をしているのだろうか。

fan.port_aはfan.port_b、aが入力、bが出力であることだけで実質どちらもModelica.Fluid.Interfaces.FluidPortクラスだった。要するにvolのコネクタと同じである。fan.m_flow_inはModelica.Blocks.Interfaces.RealInputクラスのコネクタだが一行で記述できるシンプルなものである。

connector RealInput = input Real "'input Real' as connector"

m_flow_inの定義部分は以下

Modelica.Blocks.Interfaces.RealInput m_flow_in(
    final unit="kg/s",
    nominal=m_flow_nominal) if
       inputType == Buildings.Fluid.Types.InputType.Continuous
    "Prescribed mass flow rate"

RealInputは何の値か分からないので使うときに単位を指定してある。if文がありモデル作成の際の入力データの種類の設定ができる。Continuous(コネクタから入力)の他にConstant(定数指定)とStages(段階の指定)がある。Stagesを使うと例えば風量の強弱の切り替えをしようとしたときに信号を受け取って1段回目が風量なし、2段回目が最大の0.6倍、3段階目が最大風量といったように切り替えることができるらしい。

さらにBuildings.Fluid.Movers.FlowControlled_m_flowのソースを読んでいこうとしたのだが例の如く大変なので詳細を追うのは断念した。Buildings.Fluid.Movers.UsersGuideというannotationだけのクラスがありこれを読めば分かるだろうと思ったのだが、細かいところを詳しく書いていて、分かったような分からないような感じになった。今回は風量指定としているが、P-Q曲線を使ったり、消費電力の計算ができたりと一通り気になる部分は計算できそうな様子だった。

OMEditの設定画面を示す。
f:id:kinonotofu:20180614035618p:plain
↑下のControlでインプットの種類を選択する。Parameterの設定でConstantやStageにしたときの流量を設定できる。 addPowerToMedeiumをtrueにすると機器の発熱を流体に加えることができるのだと思う。nominalValuesDefineDefaultPressureCurveをtrueにするとP-Q曲線のために流量と差圧を設定したときの警告がでなくなるらしい。規定値の外の値になると警告がでて計算がとまるのだろうか。
Initializationでは流量や差圧と体積流量の初期値を設定できる。保存則の関係からなのか流量は基本的に質量流量を設定しているが、 ここでは機器データとして得られる体積流量をいれられる。Nominalconditionでは差圧と流量の公称条件?の値を設定する。たぶんこの値でP-Q曲線の設定をするのではないかと思う。

f:id:kinonotofu:20180614035646p:plain
↑Equationsのところはエネルギーと物質の計算式の種類を選ぶところなのだがまだよくわかっていない。ここではSteadyStateになっている。NominalconditionやFilteredspeedのところはよくわからない。

f:id:kinonotofu:20180614035659p:plain
↑初期値と物質の濃度のデフォルト値。

f:id:kinonotofu:20180614035711p:plain
↑計算上逆流するとなった時の設定。逆流しないように強制力を働かせるわけではなさそうだがfalseで計算上逆流するとどうなるのだろう。

f:id:kinonotofu:20180614035724p:plain
↑show_Tをtrueにするとポートの実際の温度を計算するとのことだがおそらく流量の正負(流れ方向)が変わるとコネクタの温度の計算が安定しなくなるので、流量の絶対値がm_flow_small以下の流量ゼロ近傍のときに計算式を変えているのだと思う。

ファンの効率はデフォルト値で0.7になっているらしいのだがどこで設定するのだろうか。いろいろ設定できるよくできたモデルなんだろうけれど全部を把握するのは難しい。色々入出力をみながらいじるのがよさそうなのでもう少し学習が進んだらたくさん試したい。

おわりに

もうすこし浅い理解でどんどん触っていくほうがよいと思いながらも全然進まない。次は熱交換器、センサーをみていきたい。次の次にコイルとかポンプ廻りをみてその後さくっとSystem3へ進みたい。はやく熱源システム組んでみたいが、換気回路網計算のモデルもあるのでそっちも気になるところ。
ちょっとよさそうなサイトを見つけた。コードを読んでいてこれなんだっけと思ったときにマニュアルの該当箇所へ飛びやすくなると思う。http://modref.xogeny.com/
OpenModelicaの理解も深めないといけないしやることはたくさんあるけど楽しめるペースでやっていきます。