リアルタイムデータ書き出しツール – Interactive Simulation用ツール –

InteractiveSimulation Library

この記事 に引き続き、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のウィンドウを前に持って来る。

PrintCSV_overwriting01_ex01_01

静止画だけ見ても面白く無いし、何が行われているかも掴み難いので、動作させた様子を収めた動画をご覧頂きたい(画質が悪いのはお許しを。。。)。

意図通り動作している。刻々と、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を気軽に実行できるようになる。

以上

コメント

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