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

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

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

はじめに

Modelicaのプログラミング言語としての簡単な説明。
プログラミング言語として性質を知るためモデル定義確認してみる。

ある質量とある長さをもった完全剛体を1D(一次元)として両端に力を加えられるモデル。
一般的なプログラムと異なり代入式ではなく方程式を定義していく。
シーケンシャル且つ代入になる書き方もあるが一般的なプログラムのそれとは異なる。

ってあたりを察してもらう回。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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のプログラミング言語的性質を見ていくが、
まずはモデル定義からだな。

太郎くん
太郎くん

モデル定義と別に接続ってのがあるんだっけ?

フクさん
フクさん

接続はモデルが出来上がったあとに繋ぐって話なんで、まずはモデル定義ができないことには始まらないね。

フクさん
フクさん

とりあえず、超シンプルなモデル定義を見てみよう。

Modelicaの超シンプルなモデル概要(Massモデル)

フクさん
フクさん

Modelicaライブラリの中にMassってモデルがあるんで、それを参照してみよう。
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;
太郎くん
太郎くん

んー?
パラメータを先頭の方で定義して、
equationってところで何かしら演算してる感じか?

フクさん
フクさん

equationを演算と捉えるのはちょっと違うだよねぇ。
以下の方程式が定義されてるだけなんだよね。
(※ der()は時間微分)

$$ \vec{v}=\frac{d\vec{s}}{dt} … 速度と位置の方程式$$
$$ \vec{a}=\frac{d\vec{v}}{dt} … 加速度と速度の方程式$$
$$ m\vec{a} = \vec{F_a} + \vec{F_b} … 運動方程式(両端の力の合成) $$

太郎くん
太郎くん

でも、この式に合わせて計算されるだよね?

フクさん
フクさん

まぁ計算はされるけど、
一般的なプログラミング言語のように右辺の結果が左辺に代入ってわけじゃないんだよね。
あくまで方程式なんで。

太郎くん
太郎くん

?????

Massモデルの演算過程を紐解く

フクさん
フクさん

このモデルの入出力はflange_aとflange_bってもので、
入力としては「力」が使える。
質量が分かっているので両端に力が加わると以下の方程式より、加速度が求まる。
\(\displaystyle m\vec{a} = \vec{F_a} + \vec{F_b} … 運動方程式(両端の力の合成)\)
加速度がわかると、以下の方程式より速度が分かる。
\(\displaystyle \vec{a}=\frac{d\vec{v}}{dt} … 加速度と速度の方程式\)
速度が分かると以下の方程式から移動距離が分かる。
\(\displaystyle \vec{v}=\frac{d\vec{s}}{dt} … 速度と位置の方程式\)

太郎くん
太郎くん

あれ?!!!
確かに演算過程を見ると右辺の結果が左辺に入ってる感じじゃない!!
しかも、上から順番に処理されるわけでもないのか?!!!

フクさん
フクさん

そうだね。
方程式が列挙されてるだけなんで、上から処理される保証はないね。

太郎くん
太郎くん

これは確かに、一般的なプログラミング言語とは性質が違う!!

フクさん
フクさん

まぁ一般的なプログラムミングのように上から処理させる書き方もあって、
algorithmセクションってのをモデル内で定義すると掛ける。
といっても、一般的なプログラムミングと同等ってわけじゃなくて、以下の特性になるってだけだな。

  • シーケンシャルである(上から下へ)
  • 右辺の結果を左辺へ(代入)
太郎くん
太郎くん

これは別物と思った方が良いな。

フクさん
フクさん

そうだね。
それが妥当だろう。

まとめ

フクさん
フクさん

まとめだよ。

  • Modelicaのプログラミング言語として性質を知るためモデル定義確認。
    • Massモデルを参照。
    • ある質量とある長さをもった完全剛体を1Dとして両端に力を加えられるモデル。
  • 一般的なプログラムと異なり代入式ではなく方程式を定義していく。
    • シーケンシャル且つ代入になる書き方もあるが一般的なプログラムのそれとは異なる。

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

コメント

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