【Modelica】最小構成のMBD事例 第2章 その18【massモデル⑦】

【Modelica】最小構成のMBD事例 第2章 その18【massモデル⑦】 事例
【Modelica】最小構成のMBD事例 第2章 その18【massモデル⑦】

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

はじめに

前回、Modelicaコードにparameterキーワードを使って変数を追加してみた。
ソースコード上のパラメータ編集が楽になるなどの効能は当然あるが、
グラフィックエディタ上で即値を入れる労力と比較しても、ほぼ旨味はない。

実はモデルの編集時に楽できるというよりもシミュレーション時に・・・。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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コードを修正したわけだけど。

diff U3B masstest.mo masstest2.mo
--- masstest.mo
+++ masstest2.mo
@@ -1,9 +1,11 @@
-model masstest
+model masstest2
+  parameter Real Force1 = -1;
+  parameter Real Force2 = 2;
   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(
+  Modelica.Mechanics.Translational.Sources.ConstantForce constantForce2(f_constant = Force2)  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(
+  Modelica.Mechanics.Translational.Sources.ConstantForce constantForce1(f_constant = Force1) annotation(
     Placement(visible = true, transformation(origin = {-48, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
 equation
   connect(constantForce1.flange, mass.flange_a) annotation(
@@ -12,4 +14,4 @@
     Line(points = {{22, 0}, {0, 0}}, color = {0, 127, 0}));
   annotation(
     uses(Modelica(version = "3.2.3")));
-end masstest;
+end masstest2;
太郎くん
太郎くん

結局何が良くなるのかがさっぱりわからないんだけど。

フクさん
フクさん

まぁモデル修正に対しての効能じゃなくてシミュレーション時の効能だな。

太郎くん
太郎くん

シミュレーション時?

OpenModelicaのシミュレ―ションについて

フクさん
フクさん

OpenModelicaでシミュレーションする場合、
ModelicaからC言語のソースコードを生成してコンパイルしていたのを覚えてる?

太郎くん
太郎くん

あー確かにそういうのがあったねー。
ここでやったと思う。

フクさん
フクさん

これってシミュレーションするたびに実施されちゃうだよね。

太郎くん
太郎くん

え?そうなの?
まぁそこまで待たされることも無いから別にいいけど・・・。

フクさん
フクさん

現状の待ち時間がそれほど長くないのはモデル規模が最小レベルだからだね。
規模が増えてくるとモデル構成チェック、Cコード生成、コンパイルで2,3分待たされるってこともある
とんでもなく大きくなれば当然10分、20分もあり得るだろう。

太郎くん
太郎くん

え゛
そんなに待つのはちょっと・・・。

フクさん
フクさん

本当にモデルを修正するなら良いけど、
パラメータの微調整だけでも毎回待たされる。

parameterキーワードを使った場合の効能

フクさん
フクさん

ここで前回のparameterキーワードで作成した変数。
この変数はコンパイル後にも修正ができて、
コンパイルせずに再度シミュレーションができる。

太郎くん
太郎くん

え?そうなの?

フクさん
フクさん

よって、変数をちょっと変更して再度シミュレーションを繰り返すって作業が入る場合、積極的にparameterキーワードで変数を設置していった方がお得。
ってことになる。

太郎くん
太郎くん

なるほど。
それだったら変にコンパイル待ちとかしなくても良いから
試行回数が一気に増やせるのか。

フクさん
フクさん

そういうこと。
次回は実際に動かしてみよう。

まとめ

フクさん
フクさん

まとめだよ。

  • 「Modelicaのソースコードに変数を設置」の効能はモデル編集ではなくシミュ―ション時。
  • シミュレーションをするためには毎回モデル検査、Cコード生成、コンパイルが入る。
    • 規模が大きくなれと結構待たされる。
  • parameterキーワードで宣言した変数はコンパイル後にも修正可。
    • コンパイルせずに再シミュレーション可能。

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

コメント

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