この記事 に引き続き、Modelicaでinteractive simulationのお題。今回で大きな一区切りが着いた。
例によって記事を通して言いたい事は冒頭、導入のすぐ後で述べる。
- OpenModelicaのみの操作でリアルタイムにシミュレーション中の値を表示するコンポーネントが完成した。本コンポーネントと この記事 で紹介したコンポーネントを組み合わせることで、テレビゲームの様にoutputを見ながらinuptの値を操作するinteractive simulationを行うことが出来る。
尚、実行環境としてはWindows10にAnaconda3をインストールしたPC+OpenModelicaを使うことを想定している。他OSでもコードの大部分は変わらない筈だが、未対応・未試験。必要な改修/追記箇所は、Modelicaからコマンドを実行する部分だと思う。いづれは対応させようと考えている。
作成したコンポーネントの外観は下図の通り。
この記事 のリアルタイムデータ出力ツールと見た目は変わらない。インターフェイスとしてvariableを受け取るportが1つ有るのみ。そして、複数のvariableを出力させるのに対応するために、portは単一のrealではなく、real vectorにしている。
pythonインタプリタがインストールされているパス、受け取るvariableの数、variableの値を一時的に書き出すcsvファイルの名前、csvファイルのパス、各variableの名前、値をアップデートする時間間隔をparametersから設定する。
尚、csvファイルのパス、csvファイルの名前は、特に必要なければデフォルトのままで良い。pythonインタプリタのパスだが、こちらも、最もメジャーなAnaconda3をデフォルト設定でインストールしていれば変更なく使える筈だ。
そして、下図が機能確認用のexampleモデル。 この記事 で紹介した DeviceDrivers library のコンポーネントを組み合わせ、リアルタイムに variable をモニターしながら input の値をキーボード操作で変化させる例としている。
動作確認の様子(静止画)。simulation をスタートすれば pyConsole のウィンドウが自動で立ち上がり、そのままシームレスにシミュレーションが行われる。 前回 と違い、 ユーザーが OpenModelica と別に python スクリプトを実行する手間を無くしている。(simulation 終了後は、pyConsole のウィンドウを手動で閉じる必要が有るがクリック1つで済むものなので手間ではない筈。)
尚、pyConsole立ち上げ時にコマンドウィンドウも現れて目障りだが、pyConsoleが自動で手前に現れ、pyConsoleを閉じると自動で消えることから利用上の実害は生じない。
静止画だけ見ても面白く無いし、何が行われているかも掴み難いので、動作させた様子を収めた動画をご覧頂きたい(画質が悪いのはお許しを。。。)。
意図通り動作している。2行目の time[s] が刻々と現実の時間と同じ速さで変化し, 3から6行目の u, 2*u, sin(u), cos(u) の値が、キーボードからの入力操作に応じて変化している。シミュレーション終了後は、pyConsole ウィンドウを閉じると OpenModelica のシミュレーション実行が完全に終了となり、plot表示モードへと移行する。
*表示の1列目は pyConsole 実行開始からの経過時刻を表示しているもので、シミュレーションとは無関係のもの。
地味・シンプルなツールだが、これだけでもこれまでより面白いシミュレーションが行えるモデルが数多有るのではないだろうか?過渡応答を伴うモデルや制御が入ったモデルは確実に事前入力のシミュレーションより面白くなる事と思う。
本記事で用いたコンポーネント、動作確認用モデルの情報を載せておく。総て github にオープンソース公開しているので是非活用して欲しい。
- リアルタイムデータ表示コンポーネント: InteractiveSimulation.Output.dispVarPyConsole02_00
- 動作確認用モデル: InteractiveSimulation.Examples.Output.dispVarPyConsole02_00_ex01
かくして、interactive simulation 用ツールの雛形が完成した( python スクリプトを実行可能な環境は必要だが。)。今後は、本ライブラリに関しては下記の取り組みを進めてゆく予定だ。
- よりユーザーフレンドリーな表示ツール( python スクリプトもしくはCのUIプログラム)の開発。例えば、デジタルで数値表示するのではなく、レンジを設定してメーター型で表示するツール。
- 一時csvファイルを介さない、より高速なGUIツールへのデータ受け渡しを行うプログラムの開発。
コメント