バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はconstantForceモデルとmassモデルのシンプルなModelicaモデルをシミュレーションにて、
加速度以外の速度、移動距離のパラメータも確認した。
ある意味OpenModelicaはローコード、ノーコードを実現してくれるプラットフォームと言える。
しかし、完全にコードを読まない弄らないというのも勿体ないので、
グラフィックエディタで作成したModelicaモデルのソースコードを確認してみる。
(ソースコード内にグラフィカル情報も記載されてる?)
登場人物
博識フクロウのフクさん

イラスト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自体は元々プログラミング言語なわけだが、
特にコードを弄るってことはしなかったよね?

あ!確かに!
コード弄らなくてもOKなのか?!

そうだね。
コードを弄らなくても結構やれることは多いね。

と言っても、
ある程度コードを見れる触れるくらいできた方が楽ができるのも事実。

うーん、弄らなくて良いなら弄らない方が良い気がするけど・・・。

ほら!
いま流行りのローコードとかノーコードとか。

まぁそういう使い方と割り切るのも悪くはないけど・・・。
ノーコードとまでは行かなくてもローコードくらいの認識で居た方がよいかな。

まぁその方がよいかー。
ローコード開発プラットフォーム (英: low-code development platform, LCDP) (ローコード(英: LowCode)とも言う)は、従来の手書きのコンピュータ・プログラミングの代わりに、グラフィカル・ユーザ・インタフェースと設定を通じてアプリケーション・ソフトウェアを作成するために使用される開発環境を提供するソフトウェアである。ローコードモデルにより、様々な経験レベルの開発者が、モデル駆動型ロジックと組み合わせたビジュアル・ユーザ・インタフェースを使用してアプリケーションを作成することが可能になる。このようなプラットフォームでは、完全に動作するアプリケーションを作成することもできるし、特定の状況のために追加のコーディングが必要となる場合もある。ローコード開発プラットフォームは、従来の手作業によるコーディングの量を減らし、ビジネス・アプリケーションの提供を加速する。共通の利点は、正式なプログラミングスキルを持つ人だけでなく、幅広い人々がアプリケーションの開発に貢献できるということである。LCDPは、セットアップ(設置)、トレーニング(訓練)、デプロイメント(展開)、およびメンテナンス(保守)の初期コストも削減できる。
Wikipediaより(https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E9%96%8B%E7%99%BA%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0)
ノーコード開発プラットフォーム (英: No-code development platform, NCDP) (NoCode(ノーコード)とも言う) は、プログラマーやノンプログラマーが、従来のコンピュータ・プログラミングの代わりに、グラフィカル・ユーザー・インタフェースや設定を通してアプリケーション・ソフトウェアを作成することを可能にする。ノーコード開発プラットフォームは、アプリケーション開発プロセスを迅速化するために設計されているため、ローコード開発プラットフォームと密接に関連している。これらのプラットフォームは、企業において、モバイル化が進行する労働力と、有能なソフトウェア開発者の供給が限られているという2つのトレンドに対処するために、人気が高まっている。プラットフォームはソフトウェアの開発基盤として、その機能、統合、市場ニッチが大きく異なる。データ収集やワークフローなどの特定のビジネス機能のみに特化したアプリケーションもあれば、エンタープライズ・リソース・プランニング (ERP)ツール全体をモバイル型機器 (mobile form factor) に統合しようとするアプリケーションもある。ノーコード開発プラットフォームは、コンピュータサイエンスではビジュアルプログラミング言語として知られている。
Wikipediaより(https://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E9%96%8B%E7%99%BA%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0)
massモデルのソースコード

見比べるようにグラフィカルエディタ上のアイコン配置も再掲。


今回使用したmassモデルのソースコードは以下。
OpenModelica Connection Editorが自動で生成したコードになる。
model masstest
Modelica.Mechanics.Translational.Components.Mass mass(L = 0.1, m = 1, s(fixed = true, start = 0), v(fixed = true, start = 0)) annotation(
Placement(visible = true, transformation(extent = {{-20, -10}, {0, 10}}, rotation = 0)));
Modelica.Mechanics.Translational.Sources.ConstantForce constantForce2(f_constant = 2) annotation(
Placement(visible = true, transformation(origin = {32, 0}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Mechanics.Translational.Sources.ConstantForce constantForce1(f_constant = -1) annotation(
Placement(visible = true, transformation(origin = {-48, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
connect(constantForce1.flange, mass.flange_a) annotation(
Line(points = {{-38, 0}, {-20, 0}}, color = {0, 127, 0}));
connect(constantForce2.flange, mass.flange_b) annotation(
Line(points = {{22, 0}, {0, 0}}, color = {0, 127, 0}));
annotation(
uses(Modelica(version = "3.2.3")));
end masstest;

先頭の方で、各モデルの実体を定義して、
equationで方程式を定義してるんだっけか?

うん。
その認識であってるが、
今回のequationは方程式というか、
「関係性を示している」
って感じだね。

関係性?
そういわれると、方程式じゃなくてconnectってキーワードが使われてるね?

なんとなく察したかもしれないけど、
OpenModelica Connection Editor上の線の接続関係をconnectキーワードで表現してる。

constantForce1.flangeとmass.flange_aを結んで、
constantForce2.flangeとmass.flange_bを結んでるのか。

flangeって確かconnecterキーワードで定義されたインターフェースだったね。

そうそう。

確かここで説明してた。
annotation?

あと、気になったところで、
モデルの実体定義とconnectの両方ともだけど、
annotationってキーワードがいるね?
これは何を表してるんだろう??

annotationは日本語訳すると「注釈」ってことになるんが、
グラフィカルな情報、シミュレーションの条件や使用するライブラリなどを記述するところだね。
今回に於いては、「グラフィカルな情報」に該当して、以下が表記されてる。
- 配置位置
- 線の開始/終点
- アイコンの反転や回転

ほー。
グラフィカルエディタの情報もModelicaコード上に記載されてたんだねー。

そうだね。
コード上に集約されるんで管理はし易いね。
その分コード量が肥大して読みにくくなることもあるが、
まぁ、「コード上に集約」の利点の方が大きいかな。
実際、この手のannotationはトップ階層の接続関係を占めるモデルでしか出てこないし。

なるほど。
確かにそれだったら影響範囲が絞られてるから利点の方が利きそうだ。
まとめ

まとめだよ。
- OpenModelicaはローコード、ノーコードの性質がある。
- しかし、コードの読み書きも出来ていた方が良い。
- massモデルのソースコードを確認。
- equationではconnectキーワードで接続と定義。
- annotationキーワードでグラフィカルな情報が追記されソースコード内で情報が完結している。
バックナンバーはこちら。
コメント