モデリングツールとしての「Modelica」(その3)1Dモデリングの勘所(15)(1/3 ページ)

「1Dモデリング」に関する連載。引き続き「Modelica」について説明する。連載第15回では、Modelicaのプログラミング上の特徴、構成を紹介するとともに、Modelica標準ライブラリ(MSL)の概要に触れ、その事例として1自由度振動系を作成する。併せて、Modelicaのプログラミング上の構成を示し、理解を深める。最後にModelicaの拡張機能を紹介する。

» 2023年01月16日 08時00分 公開

 今回は「Modelica」の最終回として、Modelicaのプログラミング上の特徴、構成について述べるとともに、Modelica標準ライブラリ(Modelica Standard Library:以下、MSL)の概要を紹介し、MSLの事例として連載第14回で扱った1自由度振動系をMSLで作成する。併せて、このモデル構成を示すことにより、Modelicaのプログラミング上の構成も理解する。最後に、Modelicaの拡張機能について取り上げる。

⇒連載バックナンバーはこちら

Modelicaのプログラミング上の特徴

 Modelicaは、C++などと同様のオブジェクト指向プログラミングの考え方を導入している。オブジェクト指向プログラミングには、以下のような特徴がある。

  • 全てのモデルは「クラス」として定義される
  • 基本となるベースクラスの定義を継承し、追加の定義を拡張して、上位クラスを定義する
  • ベースクラスの定義を変更すると、それを継承する全てのモデルが同時に変わる

 オブジェクト指向とは、コンピュータプログラムの設計についての考え方の1つで、互いに関連するデータと手続きを「オブジェクト」と呼ばれる1つのまとまりとして定義し、さまざまなオブジェクトを組み合わせて関連性や相互作用を記述していくことによりシステム全体を構築していく手法である。

 図1を用いて説明する。Modelicaでは、ベースクラスとして、部品の接点となるコネクターをいくつか持つものを設定しておき、それに必要なパラメータや方程式を追加して部品のモデル(クラス)を定義していく、という方法をとっている。電気系を例に説明すると、ベースクラスとして、2つの電気系のコネクターを持った2端子素子のベースクラスを作っておき、それを拡張して、抵抗器やコンデンサーのモデルを作る、というような流れとなる。

ベースクラスと上位クラスの関係 図1 ベースクラスと上位クラスの関係[クリックで拡大]

部分モデル(partial model)と継承(extends)

 電気系を例に、具体的に説明する。図1にのっとった抵抗器、コンデンサーのモデル作成のイメージを図2に示す。

部分モデル(partial model)と継承(extends) 図2 部分モデル(partial model)と継承(extends)[クリックで拡大]

 まず、コネクターの定義法について説明する。後述するMSLでは、電気系のコネクターは、以下のように定義されている。

connector Pin "Pin of an electrical component"
  SI.Voltage v "Potential at the pin";
  flow SI.Current i "Current flowing into the pin";
end Pin;

 “SI”というのは“Modelica.Units.SI”の短縮形で、SI単位系の物理型の定義を集めたものだ。一般に、短縮形を使うには、以下のようにimport宣言を行う必要がある。

import SI = Modelica.Units.SI;

 “Pin”という名前の電気系コネクターのクラスの要素として、Voltage型の変数vと、Current型の変数iがある。ここで、変数iの前に付けられた“flow”というキーワードは、この変数がフロー変数であることを示している。flow宣言のない変数vは、ポテンシャル変数になる。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.