Activate で Modelica を使ってみる(その6) - Modelica 言語の初歩(第2回)
Activate で Modelica を使ってみる(その6)
Modelica 言語の初歩 – バネマスモデルを理解するために(第2回)
前回は Spring コンポーネントの Modelica コードについて少し詳しく紹介しましたが、そこで使用されている Modelica ステートメントについていくつか説明が必要な部分が残っていました。特に、Modelica 標準ライブラリ(MSL)の構成に依拠するコマンドについてはもう少し説明を追加する必要があり、今回はそれを中心に紹介します。
MSL の構成と Translational ライブラリ
MSL で使われている Modelica 構文の理解に必要となる MSL の階層構造の構成方法について、 Springコンポーネントを例にとって以下に紹介します(注:ここでは Activate 2021.1 がサポートしている Modelica 3.2.3 をベースに説明しています)。Spring コンポーネントは MSL のライブラリ構成の中で以下のような場所に置かれています(注:Activate で利用可能なライブラリのみ表示されています)。
Modelica では、階層構造を作るための専用のクラスである packageによるクラスのパッケージ化とフォルダー構造の階層化を併用してしてこの階層構造を規定しています。例えば、Mechanics フォルダー内にある Translational.mo ファイルでは Modelica コードが以下のように定義されています(注:関係のある部分のみを恣意的に抽出しています)。
この Translational.mo 内の Translational package クラスは、その中にまた package クラスを含んでいます。これは以下のように package クラスだけ抽出してみるとよく分かりますが、要するにネスティングされて使われていて、それにより階層構造が形成されているということが分かります。この Modelica コードは Activate でのライブラリの階層構造の表示に以下のように反映されています。
このpackage Translational の前に置かれている
within Modelica.Mechanics;
は、package Translational が Modelica.Mechanics の下部構造である(つまり、Mechanics フォルダーの下にある)ことを示しています。Modelica では1つの package が大きくなることを避けるために、また、プログラム構造を分かりやすくするために、ファイルを分けてプログラムを開発することが多くあります。この within コマンドを用いることによりフォルダーの階層構造とプログラムの階層構造を関係づけることができるようになっています。
例えば、上で示した package Translational は以下のように Translational.mo というファイル名で Mechanics フォルダーの中に置かれています。
この Mechanics フォルダー内の package.mo ファイルの内容は以下の通りです。
この within 文から Mechanics が Modelica フォルダー下に置かれていることが分かります。同じく、Mechanics フォルダー内にある package.order の内容は以下のようになっています。
このファイルはユーザーインターフェース上に表示されるライブラリの順序を決めています。
クラスの参照
Modelica ではこのようにライブラリが階層化されて定義されていますが、各 package 名を .(ドット)で順に結合することにより他のクラスを参照することができるようになっています。例えば、上述したTrlanslational.mo の 10 行目にある
extends Modelica.Icons.Package;
は、package Modelica に属する package Icon の中の package Package というクラスを継承していることを示しています(Modelica というのは最上位のpackage です)。また、同様に、18 行目の
extends Translational.Interfaces.PartialCompliant;
はpackage Translational に属する package Interfaces にある PartialCompliant という partial model クラスを継承していることを意味します。
このような参照関係の表示が長くなる場合は import コマンドを用いて省略形を定義しておくことができます。例えば、4 行目にある
import SI = Modelica.SIunits;
という文では SI という文字列が Modelica.SIunits と同じ意味であることを宣言しています。そのことによって 52 行目の
SI.Position s;
は Modelica.SIunits.Position というクラス(既に紹介したように、これは type というクラスです)を s という名称でインスタンスとして使用することを宣言しています。同じく、53 行目の
flow SI.Force f;
も f が Modelica.SIunits.Force のインスタンスであることを示しています。
前回と今回で、Spring コンポーネントでの Modelica コードの内容について紹介しました。次回は、バネマスモデルの他の構成コンポーネントである Mass、Damper、Fixed、Force を含めた全体モデルの Modelica コードがどのように処理されるかを紹介します。