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

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

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

スポンサーリンク

はじめに

前回グラフィックエディタで作成した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のソースコード確認だけではちょっと勿体ない

フクさん
フクさん

さて、前回Modelicaモデルのソースコードを確認したわけだが、
確認ってだけじゃつまらなないよね?

太郎くん
太郎くん

いや、別にソースコード弄らなくてもいいんだけど・・・。

フクさん
フクさん

いろいろと効率化される可能性がある割には結構一撃なテクニックなんだけどなー。

太郎くん
太郎くん

え?
結構チョロいやつ?

フクさん
フクさん

チョロいチョロい。

太郎くん
太郎くん

じゃー教えてー!

フクさん
フクさん

(チョロいな)

スポンサーリンク

massモデルの修正

フクさん
フクさん

とりあえず、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;
太郎くん
太郎くん

パッと見の差分としては・・・。
parameterってのが増えて、
そこのparameterを元に作った変数なのかな?
Force1、Force2をconstantForceの引数に渡ってる感じ?

フクさん
フクさん

そうだね。
元々constantForce1とconstantForce2には-1と2の即値が入っていた。
それをparameterで定義した変数で渡すようにした。

太郎くん
太郎くん

うーん、これって意味あるの?
動作としては全く変わらないような・・・。

フクさん
フクさん

まぁこのままだと意味はないかもね。
間に変数を挟んだことで、ソースコードとしてのパラメータを調整し易くなったとかはあると思うけど。

太郎くん
太郎くん

うーん、Modelicaコードでパラメータを弄るのと
OpenModelica Connection Editorでパラメータを弄るのでは
どっちが楽ってのもなさそうだなー。

フクさん
フクさん

そうだろうね。
どっちもどっちって感じだ。

太郎くん
太郎くん

じゃー、意味ないじゃん!!

フクさん
フクさん

このparameterを間に挟んだ効能は・・・。

太郎くん
太郎くん

効能は?

フクさん
フクさん

次回説明だ!

太郎くん
太郎くん

(まじか・・・。)

スポンサーリンク

まとめ

フクさん
フクさん

まとめだよ。

  • Modelicaコードを弄ることでいろいろと効率化される可能性がある。
  • 実際にparameterキーワードを使って変数を定義。そして、それをconstantForceに設定。
    • 今のままでは動作は何も変わらない。
    • ソースコード上でパラメータ調整をし易くなったくらいの効能しかない。
    • 即値で調整するのでは労力に差はさなそう。

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

コメント

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