この記事 に引き続き、Modelicaでinteractive simulation を行うための路をまた一歩進む。
例によって記事を通して言いたい事は冒頭、導入のすぐ後で述べる。
- Modelicaでsimulation中に、任意のvariableの値をテキストデータに書き出し、一定の時間間隔で書き出す値を逐次アップデートするコンポーネントを作成した。本コンポーネントと この記事 で紹介したシミュレーション時間の進行を実時間に合わせるコンポーネントと この記事 で作成したリアルタイム表示ツールを組み合わせることで、シミュレーション中にvariableの値をリアルタイムに表示させられる。
実は、上記の機能を実装するために、ModelicaとC言語のインターフェイスという手段を用いている(実際には”インターフェイシング”ではなく、指定したCコードを一緒にコンパイルしているらしい。)が、その詳細は本記事では触れない。別途、TIPSとして記事を設けようと思う。
作成したコンポーネントの外観は下図の通り。
インターフェイスはvariableを受け取るportが1つ有るのみ。複数のvariableを出力させるのに対応するために、portは単一のrealではなく、real vectorにしている。
受け取るvariableの数、書き出すcsvファイルの名前、csvファイルのパス、各variableの名前、値をアップデートする時間間隔をparametersから設定する。
なお、ファイル名はlibraryに用意したこれ専用のcsvファイルの名前が、csvのファイルパスはlibrary内の場所を相対パスで、それぞれデフォルト設定されているので、各々環境に合わせて設定し直す必要は無い。library内の相対パスから絶対パスを自動で取得する機能(このテクニックも需要があれば別途TIPS記事に出来ればと思う。)を搭載してある。
そして、下図が機能確認用のexampleモデル。使い方は、表示させたいvariableのreal信号をportに繋ぐだけ。尚、左上のsynchronizeRealtimeコンポーネント(DeviceDrivers library内のもの)とセットで使う事を前提としている。使う場合は、 この記事 で紹介したようにDeviceDrivers libraryもロードして使って頂きたい。
動作確認の様子(静止画)。先にspyderからpyConsole01.pyスクリプトを実行しておき、次にModelicaのシミュレーションを実行する(コンパイルに時間がかかるので、先にコンパイル・実行してからre-simulateした方がスムーズ)。そして、隠れてしまったpyConsoleのウィンドウを前に持って来る。
静止画だけ見ても面白く無いし、何が行われているかも掴み難いので、動作させた様子を収めた動画をご覧頂きたい(画質が悪いのはお許しを。。。)。
意図通り動作している。刻々と、2行目から4行目の、time(in Modelica), sin(time), cos(time)の値がシミュレーション進行と共に変化している。そして、シミュレーションが終わった後は、値の動きは止まる。 *表示の1列目はpyConsole実行開始からの経過時刻を表示しているもので、シミュレーションとは無関係のもの。
こうして完成品を見せておいて難だが、pyCosole01.py同様に、これだけ有っても恐らく何の役にも立たない(interactive simulation以外に何か使い道有ります??)。
本記事で用いたコンポーネント、動作確認用モデルの情報を載せておく。総てgithubにオープンソース公開しているので是非活用して欲しい。
- リアルタイムデータ書き出しコンポーネント: InteractiveSimulation.Output.PrintCSV_overwriting01
- 動作確認用モデル: InteractiveSimulation.Examples.Output.PrintCSV_overwriting01_ex01
- InteractiveSimulation library のgithubページ
かくして、interactive simulationに必要な最低限の機能の大部分が実現出来た(pythonスクリプトを実行可能な環境は必要だが)。最低限必要な機能を完備するのに必要なステップは残り一つ。
- ModelicaのSimulation開始時に、Modelicaから、spyderなどを使わずにpyConsoleスクリプトを起動する。
この機能は、Modelica standard libraryにコマンドを実行するfunctionが有る筈で、それを使いこなせれば実現可能な筈だ。実現出来れば、OpenModelicaからの操作だけでinteractive simulationを気軽に実行できるようになる。
コメント