>100 Views
February 01, 26
スライド概要
BouncingBallをOMPythonで動かしました.
オープンCAE勉強会@関西 OpenModelicaを Pythonで動かしたい 2026/01/31 bushdog
今日の内容 • OMPythonを使ってOpenModelicaを外部から動かす • -overrideや-overrideFileを使うことでパラメータを変更する
OpenModelicaをPythonで動かしたい OpenModelicaを外部から動かすには OMShell OMPython の二種類がある ⇒OMPythonで行う(タイトルの通り) OMPythonでも結局中でOMShellと同じことをしている OpenModelicaのPythonからの変数の変更とシミュレーション実行 - Yoshihiro Ohta’s blog を真似てやってみる
OMPythonのインストール pip install OMPython でインストールしても良いし OpenModelicaをインストールするときにOMPythonがついてきていれば cd <OMPythonPath> python -m pip install -U . でも良い OMPython · PyPI を参照のこと
インストールできてるかの確認 OMCSessionZMQを使う場合 from OMPython import OMCSessionZMQ omc = OMCSessionZMQ() print(omc.sendExpression("getVersion()")) ↑モデルに依らずOpenModelica Compilerとコマンドのやり取りをする ModelicaSystemを使う場合 from OMPython import ModelicaSystem mo_path = r"<BouncingBallのPath>" mod = ModelicaSystem(mo_path, "BouncingBall") print(mod.sendExpression("getVersion()")) ↑モデルに対する操作なのでモデルの指定が必要
BouncingBallを実行してみる サンプルモデルにある
BouncingBallを実行してみる
omc.sendExpression(cd'("./BouncingBall")')
omc.sendExpression('loadFile(getInstallationDirectoryPath() + "/share/doc/omc/testmodels/BouncingBall.mo")')
omc.sendExpression('simulate(BouncingBall, stopTime=3.0, outputFormat="csv")')
OpenModelica v1.25.1 (64-bit)
{'resultFile': '<結果ファイルのPath>',
'simulationOptions': "startTime = 0.0, stopTime = 3.0, numberOfIntervals = 500, tolerance = 1e-6, method =
'dassl', fileNamePrefix = 'BouncingBall', options = '', outputFormat = 'csv', variableFilter = '.*', cflags = '',
simflags = ''",
'messages': 'LOG_SUCCESS
method.¥nLOG_SUCCESS
| info
| The initialization finished successfully without homotopy
| info
| The simulation finished successfully.¥n',
'timeFrontend': 0.0216718,
'timeBackend': 0.0169607,
'timeSimCode': 0.0059578,
'timeTemplates': 0.0880962,
'timeCompile': 19.493648,
'timeSimulation': 1.5380054,
'timeTotal': 21.1659472}
BouncingBallを実行してみる omc.sendExpression('cd("./BouncingBall")') omc.sendExpression('loadFile(getInstallationDirectoryPath() + "/share/doc/omc/testmodels/BouncingBall.mo")') omc.sendExpression('simulate(BouncingBall, stopTime=3.0, outputFormat="csv")') sendExpression('cd("./BouncingBall")') シングルクォーテーションがおすすめ sendExpression("cd(¥"./BouncingBall¥")") ダブルクォーテーションの場合 エスケープシーケンス¥が必要になる outputFormat="csv" これでcsv形式で結果出力される
結果を描画してみる なんか出来てそう
パラメータを変えてみたい インターネットで見つかった情報によると 初期値のxmlファイルを書き換えて実行すると良いらしい OpenModelicaは1回コンパイルして実行するとexeファイルが出来る xmlファイルを書き換えてexeファイルを実行する (当然)初期値のxmlファイルを書き換えてexeファイルを実行すれば 毎回コンパイルしなくて良いので計算が早くて嬉しい しかし,今回は毎回モデルのパラメータを書き換えて毎回コンパイルする方法を試す
パラメータを変えてみたい omc.sendExpression('simulate(BouncingBall, stopTime=3.0, outputFormat="csv", simflags="-override=h=4")') OpenModelicaのユーザーズガイドの25章に simflags="-override=value"の使い方が載っている ボールの初期高さが変わる(h=1からh=4)
結果を描画してみる なんか出来てそう
もっとパラメータを変えてみたい omc.sendExpression('simulate(BouncingBall, (中略), simflags="-overrideFile=override.txt")') OpenModelicaのユーザーズガイドの25章に simflags="-overrideFile=Filename"の使い方が載っている ボールの初期高さと反発係数が変わる(h=1からh=5,e=0.7からe=0.5)
結果を描画してみる なんか出来てそう
まとめ • OMPythonを使ってOpenModelicaを外部から動かせた • -overrideや-overrideFileを使うことでパラメータを変更出来た
おまけ
パラメータを変えてみたい インターネットで見つかった情報によると 初期値のxmlファイルを書き換えて実行すると良いらしい OpenModelicaは1回コンパイルして実行するとexeファイルが出来る xmlファイルを書き換えてexeファイルを実行する (当然)初期値のxmlファイルを書き換えてexeファイルを実行すれば 毎回コンパイルしなくて良いので計算が早くて嬉しい しかし,今回は毎回モデルのパラメータを書き換えて毎回コンパイルする方法を試す どう考えてもこっちが良くない…?
exeを直接動かして結果はcsv出力 omc.sendExpression('system("BouncingBall.exe -override=outputFormat=csv")') パラメータを変えてみたい omc.sendExpression('system("BouncingBall.exe -override=outputFormat=csv,h=4")') もっとパラメータを変えてみたい omc.sendExpression('system("BouncingBall.exe -overrideFile=override.txt")')
結果を描画してみる なんか出来てそう