バックナンバーはこちら。
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として両端に力を加えられるモデル。
- 一般的なプログラムと異なり代入式ではなく方程式を定義していく。
- シーケンシャル且つ代入になる書き方もあるが一般的なプログラムのそれとは異なる。
バックナンバーはこちら。
コメント