Modelica

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Modelicaとは、オブジェクト指向のマルチドメイン・モデリング言語である。
他分野に跨る複雑なシステムのモデリング(例えば、機械、電気、電子、油圧、熱、制御、電力、プロセス指向のサブコンポーネントを含むシステム)に最適で、特に物理現象を表現するモデルの構築で使われています。
オープンソースである為、特定のツールに依存することなく資産の共有また開発が出来ます。
言語仕様やメンテナンスは非営利国際組織のModelica協会によって行われており、標準ライブラリとしてフリーに公開しています。


特徴[編集]

Modelicaはオブジェクト指向プログラミング言語(例えば、C++またはJava)と似ている点があるが、次の2点において顕著に異なる。

まず、Modelicaはプログラミング言語というよりはモデリング言語である。 Modelicaで作成されたモデルは、普通にコンパイルされるのではなく、シミュレーションエンジンで解釈できるよう翻訳される。つまりシミュレーションエンジンは実行の順序を決定する為に、式を操作する事がある(シンボリック処理)。

次にモデルの作成では、プログラミング言語に類似した予約語を含むアルゴリズムのコンポーネントが含まれているかもしれないが、主にモデルの表現においては方程式とのセットで構成される。

典型的な代入文は、以下のように表現する。 (下記式では、左辺(x)に右辺の式(2+y)から算出された値が代入される。)

x := 2+y;

次に方程式を表現するには、以下のように表現する。 (下記式では、左辺と右辺の式が等しいことを表現する。)

f = m * a;

歴史[編集]

Modelicaの構想・設計は1996年9月にHilding Elmqvist氏より考案され、1997年9月にModelica仕様ver1.0がリリースされた。 これをベースにプロトタイプ版の商用ソフトウェアDymolaに実装され、2000年にはModelica言語とフリーのModelica標準ライブラリの発展を管理する為に、非営利国際組織のModelica協会が設立された。

ライブラリ[編集]

Modelica協会では、Molelica標準ライブラリ(MSL:Modelica Standard Library)をはじめ、フリーのライブラリを公開しています。
その標準ライブラリやほとんどのフリーのライブラリは、Modelicaのライセンスに基づいて商用製品に使用することができます。

MSLバージョン一覧
バージョン リリース日 モデル数 関数の数
3.2 2010年10月 1280 910
3.1 2009年8月 922 615
3.0.1 2009年1月 781 553
3.0 2008年2月 777 549
2.2.2 2007年8月 740 540
2.2.1 2006年3月 690 510
2.2 2005年4月 640 470
2.1 2004年11月 580 200
1.6 2004年6月 290 40

実装[編集]

Modelicaをシミュレーションする環境ツール(商用・フリー)は、CATIA Systems,Dymola,LMS AMESim,JModelica,MapleSim,MathModelica,OpenModelica,SCICOS,SimulationXがある。


サンプル[編集]

下記に単純な\dot x = - c \cdot xシステムを表現したサンプルモデルを示す。

model FirstOrder
   parameter Real c=1 "Time constant";
   Real x "An unknown";
equation
   der(x) = -c*x "A first order differential equation";
end FirstOrder;


この例では、'parameter'修飾子を使用し変数が時不変であることを示し'der'演算子で変数の微分を表現する。

Modelicaは主に物理領域システムを表現する為に設計された。 以下に電気ドメインを例に基本構築概念を示す。

ユーザー定義の派生型[編集]

modelicaでは4つのタイプ(Real,Integer,Boolean,String)の組込み型を持っている。 ユーザー定義型は関連付ける物理量、単位、公称値とで他の属性を派生させられる。

type Voltage = Real(quantity="ElectricalPotential", unit="V");
type Current = Real(quantity="ElectricalCurrent", unit="A");
  ・・・

コネクタの定義[編集]

他のコンポーネントとコンポーネントの相互作用は、物理ポートと呼ばれるコネクタなどで定義されている。 例えば、電気端子の場合は以下のように定義される。

connector Pin "Electrical pin"
   Voltage      v "Potential at the pin";
   flow Current i "Current flowing into the component";
end Pin;

接頭辞に"flow"が定義されている変数(ここでは変数:i)はフロー変数と呼ばれ、コネクタ変数の合計値がゼロに定義される。


基本モデルコンポーネント[編集]

基本的なモデルコンポーネントは、モデルによって定義されており、コネクタ変数と関係を定義した方程式とで構成されている。 (※途中経過の計算式を記載する必要はない)

model Capacitor
   parameter Capacitance C;
   Voltage u "Voltage drop between pin_p and pin_n";
   Pin pin_p, pin_n;
equation
   0 = pin_p.i + pin_n.i;
   u = pin_p.v - pin_n.v;
   C * der(u) = pin_p.i;
end Capacitor;

関連項目[編集]

MUJ


外部リンク[編集]

Modelica協会
MUJ(Modelica Users group Japan)