【プラント】最小構成のMBD事例 第2章 その4【Modelica③】

【プラント】最小構成のMBD事例 第2章 その4【Modelica③】 事例
【プラント】最小構成のMBD事例 第2章 その4【Modelica③】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

Modelicaのプログラミング言語としての簡単な説明。
モデル定義についてさらに掘り下げる。

extends、partialなどのキーワードが使用されており、
オブジェクト指向的性質が垣間見れる。
剛体であれば、剛体モデルから派生。など。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

Modelicaのモデル定義の掘り下げ

フクさん
フクさん

前回Modelicaのモデル定義について説明したが、
もうちょっと説明しておこう。

太郎くん
太郎くん

まだなんかあるんか・・・。

フクさん
フクさん

前回のMassモデルをもう一回貼っておこう。

model Mass "Sliding mass with inertia"
  parameter SI.Mass m(min=0, start=1) "Mass of the sliding mass";
  parameter StateSelect stateSelect=StateSelect.default;
  extends Translational.Interfaces.PartialRigid(L=0,s(start=0, stateSelect=stateSelect));
  SI.Velocity v(start=0, stateSelect=stateSelect)
    "Absolute velocity of component";
  SI.Acceleration a(start=0) "Absolute acceleration of component";

equation
  v = der(s);
  a = der(v);
  m*a = flange_a.f + flange_b.f;
end Mass;
フクさん
フクさん

この中でextendsというキーワードがある。

太郎くん
太郎くん

ホントだ。

太郎くん
太郎くん

これはなに?

Modelicaのモデル定義のextends

フクさん
フクさん

extendsはいわゆる継承の機能になる。

太郎くん
太郎くん

いきなりオブジェクト指向プログラム的な用語が!!

フクさん
フクさん

まぁオブジェクト指向的な要素はどうしても入るね。
今回の場合は、Translational.Interfaces.PartialRigidってModelを継承している。
というわけでTranslational.Interfaces.PartialRigidの定義を見ると、

Modelicaのモデル定義のpartial

partial model PartialRigid
  "Rigid connection of two translational 1D flanges"
  SI.Position s
    "Absolute position of center of component (s = flange_a.s + L/2 = flange_b.s - L/2)";
  parameter SI.Length L(start=0)
    "Length of component, from left flange to right flange (= flange_b.s - flange_a.s)";
  Flange_a flange_a "Left flange of translational component" annotation (
      Placement(transformation(extent={{-110,-10},{-90,10}})));
  Flange_b flange_b "Right flange of translational component" annotation (
      Placement(transformation(extent={{90,-10},{110,10}})));
equation
  flange_a.s = s - L/2;
  flange_b.s = s + L/2;
end PartialRigid;
太郎くん
太郎くん

modelキーワードの前にpartialってキーワードがあるね?
これはなに?

フクさん
フクさん

partialは「部分的な」って意味なんだけど、
このModelは「部分的」で「不完全」なModelなんで、継承以外では使用できないよ。
って意味になる。

太郎くん
太郎くん

OOPの抽象クラスみたいなもんか。

フクさん
フクさん

そうそう。

太郎くん
太郎くん

で、このPartialRigidってなに?

フクさん
フクさん

Partialは先のPartialキーワード由来の名称で、
Rigidは多分「剛体」って意味だな。
つまり、剛体を定義する際に継承すべきModelってことになるね。

太郎くん
太郎くん

なるほどー。

フクさん
フクさん

あとは、Flange_a、Flange_bについての説明がいるのだけど、
それは次回だ。

まとめ

フクさん
フクさん

まとめだよ。

  • Massモデルの中にあるextendsは継承を示すキーワード。
  • PartialキーワードはModelの不完全性を示しており、継承以外の利用ができないよう制約を掛けている。
    • OOPの抽象class的なもの。
  • PartialRigidモデルは剛体モデル。
    • 直線運動する剛体モデルを作る際はこのモデルを継承すると吉。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました