Activate で Modelica を使ってみる(その7) - Modelica 言語の初歩(第3回)
Activate で Modelica を使ってみる(その7)
Modelica 言語の初歩 – バネマスモデルを理解するために(第3回)
前の2回で Spring コンポーネントの Modelica コードの内容について紹介しましたが、今回は、バネマスモデルのその他の構成コンポーネントである Mass、Damper、Fixed、Force を含めたモデル全体で定義されている方程式と変数の数に着目します。
Spring コンポーネントの方程式と変数の数
まず、以下に再掲した Spring コンポーネントの Modelica コードに含まれる方程式と変数の数を考えます。
前に説明しましたが、
Flange_a flange_a
Flange_b flange_b
は Connector を表しており、それぞれアクロス変数(s)とスルー変数(f)の2つの変数を含んでいます。このことから、Spring コンポーネントには変数が6つ(flange_a.s、flange_a.f、flange_b.s、flange_b.f、s_rel、f)と方程式が4つ含まれていることが分かります。当然ながら、 Spring 単独では方程式の数が不足しているためこの連立方程式は解けません。
Spring 以外のコンポーネントの Modelica コード
次に同様な手順で得られた Mass、Damper、Fixed、Force の各コンポーネントの Modelica コードを以下にそれぞれ示します(定数の定義は省略しています)。
Mass コンポーネント
ここで、der は微分を表しています。例えば、11 行目は、変数 s(変位)の微分は変数 v(速度)に等しいということを示しています。
Damper コンポーネント
この Damper コンポーネントでは減衰による発熱量(コード中の lossPower)を出力するポートをオプションで設けることができ、伝熱系のライブラリと連成シミュレーションを行うことができますが、ここではその部分は割愛しています。
Fixed コンポーネント
Force コンポーネント
この Force コンポーネントでもオプションが設定されており、ポートをもうひとつ設定してそこから Mechanical-Translational ライブラリの別のコンポーネントに接続することが可能ですが、やはりここではその部分は割愛しています。また、入力である f は変数としてはカウントしていません。
以上の Modelica コードから各コンポーネントの変数の数は以下のように合計 26 であることが分かります。
Spring(6:flange_a.s、flange_a.f、flange_b.s、flange_b.f、s_rel、f)
Mass(7:flange_a.s、flange_a.f、flange_b.s、flange_b.f、s、v、a)
Damper(8:flange_a.s、flange_a.f、flange_b.s、flange_b.f、s_rel、v_rel、f、lossPower)
Fixed(2:flange.s、flange.f)
Force(3:flange.s、flange.f、s)
また、方程式の数は、 Spring(4)、Mass(5)、Damper(6)、Fixed(1)、Force(2)の計18となることも分かりました。
全体モデルの拘束方程式
“その2” の回で紹介したように、方程式はコンポーネント間の3つの結合点(下図参照)でも、力の合計がゼロ(各結合点で一つずつ)で変位は等置(結合点1ではひとつ、2と3では2つずつ)という合計8つの方程式(拘束式)が生成されます。それにより方程式の数は、個々のコンポーネントから生成される方程式と合わせて計26となり、変数の数と方程式の数が一致して連立方程式が解けることになります。、
上述のような処理は Activate に内蔵されている Modelica のコンパイラが行いますが、実際には効率よく処理するためにもっと複雑な過程を経て連立方程式を解いています。詳しくは ”その1” の回で紹介した参考文献を参照してください。
Activate では、Modelica 部分(すなわち、シグナルベースブロック以外全部)をまとめてから Modelica コンパイラが処理し、最終的に C++ のコードに変換します。Activate はこれをひとつの FMU(Function Mockup Unit)として扱うことにより最終的にはシグナルベースダイアグラムの中で1つのブロックとして処理しています。これが、”その4” の回で結果ビューアを説明したときに、Modelica の結果ファイル名が FMU_su_1 となっていた理由です。
次回は、ここまでで紹介した Modelica の知識を使って Modelica ユーザー定義ブロック(MoCustomComponent)について、バネ定数が変位依存となる非線形バネコンポーネントを例にとって紹介します。