Modelicaから少し離れて、pythonを用いたGUIツールのトピック。とは言っても、Modelicaでinteractive simulation を行うという野望には深く関わるもの。
例によって記事を通して言いたい事は冒頭、導入のすぐ後で述べる。
- Modelica でinteractive に入出力を行いながらシミュレーションを環境を作る1つとして、テキストデータの中身をGUIに表示し、データが更新されると即時表示GUIに反映されるように常時表示内容を更新するツールを作成した。
上述したように、当該ツールはModelica ではなく、python で作成した短いスクリプトだ。Modelica と容易に連携させられる別プログラム言語はCまたはFortranだ。なのでそのいずれかでプログラムを組むと連携・呼出しが容易なのだが、どちらもGUIを創ろうとすると非常に手間が掛かりそうなので、使わない事にした。その点、python はGUI関係も含めてライブラリが充実しており、学習コストが非常に小さい言語なので、かなり簡単に求めている処理を行うGUIアプリを創ることが出来ると見込めた。少し調べてみただけで、行いたい処理は「tkinter」というanaconda&spyterをインストールしたら既に使えるモジュールで可能そうと判った。
で、作成した表示ツールの外観は下図。
簡素・味気無い、列が2つ有るだけのもの。1列目にvariable名の文字列、2列目に値を表示するようにしている。行数は固定ではなく、読込み対象の.csvファイルの行数に応じて変わるようになっている。(*1行目は.csvの中身ではなく、pythonスクリプトを始動してからの経過時間を表示。)
静止画だけ見ても面白く無いし、何が行われているかも掴み難いので、動作させた様子を収めた動画をご覧頂きたい。
spyder IDEで当該スクリプトを開き、実行命令を下すと、上述したウィンドウがpop-upする。ウィンドウの表には読み取った.csvファイルの記載内容を表示する。そして、.csv読み取り・表示内容更新は一定の時間間隔で繰り返し実行され続けており、.csv上の記載内容が変更・上書き保存されると対応して表示内容も更新される。デジタル表示なので見難いが、動画からも判るだろう。なお、デフォルトでは読み取り・表示更新の時間間隔を20 [ms] に設定しているので、50 [fps] のフレームレートで動作し、.csv更新から表示更新までのタイムラグは人間の目で認識できる程のものではない。
完成品を見せておいて難だが、これだけ有っても恐らく何の役にも立たない(何か使い道有ります?)。
しかし感の良い方は、筆者がこの先何を行おうと企ててるか判ったのではないだろうか。本表示ツールに加えて、下記2つを達成出来れば、この記事で紹介しているツールとこの記事で紹介しているDeviceDeivers libraryを組み合わせて、テレビゲームのようにリアルタイムで入出力を行いながらのInteractive SimulationをModelicaツールから実行出来る筈だ。(Pythonスクリプトを実行可能な環境を持っている必要は有るが。)
- Simulation開始時に、Modelicaから本表示ツールを呼出し、実行させる。 -> Modelica standard libraryにコマンドを実行するfunctionが有る筈。
- Modelicaから、任意のvariableの値を逐次.csvファイルに上書き出力し続ける。 -> Modelica は外部のC言語ソースコードに比較的容易にインターフェイス出来る筈(C++はまだ未対応)。ファイルへの書き込み程度の処理ならC言語でも容易に書けるし、計算実行に支障が出るような重い処理ではない筈。
OpenModelicaで、ゲームのようなInteractive Simulationを実行する野望は、実現までの道はそう長くはない。今後の製作を乞うご期待。
[余談]
python はとても手軽に様々な事を行えて便利なプログラム言語だ。今回のようにGUIアプリを創るのも非常に手軽に可能だ。CAEの世界で生きる者でなくとも、ソフトウェア開発者でなくても、いつでも確実に使えるスキルとして習得しておくことを強く推奨したい。
ただ一方で筆者は、学習コストが低いという事は、余り深い理解や知識無しで必要な処理のコードを手軽にそれらしく書けてしまうという事を意味していると考えている。実際、筆者は「tkinter」の仕組みや中身を深く理解することなく、本記事のスクリプトを創り上げてる。殆ど勉強しなくても、深く理解しなくても、それなりの事が簡単に出来る、これがpythonの強みであり同時に難点。そのため、プログラムを生涯学習として学ぼうと言う方には、勉強ネタにpython は勧めない。がっちりと、C, Fortran, C++, Javaと言った”面倒な”言語をがっちり学ぶ事をお薦めする。これらの言語でガッチリとプロセス指向とオブジェクト指向の基本を押さえてしまえば、pythonは記法やライブラリの解説記事をチョット齧れば直ぐに武器として使いこなせる。
”物理モデルもpythonで作れば?”との声も出そうだ。確かにpythonで物理モデルを作ることは出来るだろうし、科学技術計算用のモジュールも充実している。しかし、それ用の言語ではない。下記に示す幾つかの理由から、やはり物理モデルは今後もmodelicaでライブラリ構築、モデリングを行っていく。
- 非因果モデリング非対応:何をおいてもこれが一番の理由。標準で代入文ではなく方程式を書けるのはModelicaの1番大きな特徴。モデルの作りては一般のプログラム言語で物理モデルを組むのと違って、処理の順序や数値計算法を殆ど意識する必要が無くなる。
- 多数の実用CAEソフトに使われている。商用・オープン含めて複数の1DCAEソフトウェアがModelica言語を用いている。(Modelica自体はオープンソースのソフト/プログラムではなく、オープン規格のモデリング特化言語)
- pythonはスクリプト言語であり、コンパイル言語ではない。故にどこかで処理速度がネックになり得る。一方Modelicaは、一度、最古に近い言語の1つ、Cに翻訳され、それをコンパイルして実行される。ちなみに、実行速度が理由なのか、pythonの数値計算用ライブラリの「Numpy」はpythonからCやらFortranで作られた実行ライブラリ呼出し実行している。
要は適材適所。Modelicaは柔軟に複合領域物理モデルを組み立てるのに、PythonはPre/Post処理やGUIユーティリティを作るのにそれぞれ非常に優秀な特徴を持っているので使い分けるだけの事だ。
コメント