忘却の微分方程式(6) OpenModelica、触ってみる

JosephHalfmoon
JosephHalfmoon

前回、インストールしたOpenModelicaにいよいよ触ってみたいと思います。しかしね、どこから始めたら良いのか。OpenModelicaもまた、複数の峰々が並ぶ深い山塊に例えられるかもしれません。登り口次第で入りやすいところもあり、そうでないところもあり。

手元には以下のバージョンのOpenModelicaをインストールしてあります。

OpenModelica v1.14.1 Windows 64bit版

ちょっと触ってみただけでも、なかなか素晴らしいソフトウエアだ、ということは納得したのです。しかし、正直、この手のモデリングの素人な私には、あまりとっつきの良い感じではありませんでした。インストールすると、OpenModelicaのスタートメニューの中にはいくつかのソフトウエアの起動アイコンと関連文書を開くためのアイコンが並んでいました。まずは文書を読むべしと思って、上から文書を眺めていきます。

Metaprograming guide

”Meta”ね、名前からして上級者、本気でモデルを作る人向けだね、今はパスだね。次は、

Modelica Tutorial

チュートリアルですよ。まずはこの辺から読むべきか?しかし、アイコン押すと「リンクが切れてます」です。私が何かインストール時に変なところを触ってしまったのかどうかは、今となっては明らかでないのですが、ドキュメントを収めたフォルダの中を見てもそれらしいファイルはありません。ま、Web上を検索したら、該当ファイルは直ぐに見つかったので後でダウンロードはしたのですが、印象は悪い。ちゃんと開くドキュメントは無いかいな、ということで開くものを調べてみると、

Users Guide

これは開くことができます。377ページの立派なマニュアル(英文ですが。)これにもね、Introductionという章があり、とりあえずここから始めてもよかろう?

ここでは最初から出来合いの部品を使って簡単なモデルを作って走らせてみる、といった単刀直入なやり方はせず、OMShellという、Shellというか、REPLというかを使って、まずModelica言語から分け入っていくのです。


見ていただけば分かるとおりのコマンドウインドウ。これでやれということであります。まあ、MathworksのSimulinkを使う場合も、まずはMatlab言語の方を一通りやってからじゃん、最初から図で書くこともあるまいか。

x := 1:12

「代入」は、Pascal風の := を使うみたい。不平は言いますまい。私もPascalで育った古い世代ですから。ベクトルは : を使えば展開されるようでありがちか。ベクトルはこの世界では { と } で括られるらしい。ふむふむ。しかしね、最初に登場する例が

Example Session 1 敢えてエラーになるようなコードの例

普通はね、Hello Worldから始めるんだよ、素人相手には。簡単で結果が分かり易いもの。敢えて茨の道を歩ませようという愛のムチか?

ExampleSession 2 再び、敢えてエラーになるようなコードの例

この辺で挫折するような者は「帰れ」という感じ。さすがにその次のBubblesortはちゃんと動いて結果が出ますが。正直、このルートから登っていけば鍛えに鍛えられたエキスパートになれるのかも知れないですが、お手軽ではない。

方針転換

前回、電通さんの関連会社さんの日本語入門資料を参照させていただき、感銘を受けました。そちらの方法なら、ワン、ツー、スリーくらいで、とりあえずシミュレーションしてみれそう(リンクは前回のページにあり。)そこで、OMShellを閉じ、OMEditをば起動。こちらはGUIらしいGUI。

細かい設定などは、参照している資料をご覧いただくとして、資料どおりに作成したモデルはこちら。なお、参照資料から大分バージョンアップしているので、メニューの項目などはGUIの不一致は多いですが、まあ、なんとかなる。

1kgの錘にバネ定数100N/mのバネと、ダンパ(1Ns/m)を接続してある力学モデル。初期値としてバネを0.1mほど押し込んであります。シミュレーション開始すると、Scilab+Xcos上のModelicaモデル同様、裏側でCコンパイラ(MinGW上のgcc)が動作し、コードをコンパイルしているようです。ちょっと待てば、

こんな感じに、錘が減衰振動を始めます。なお、シミュレーションを開始してもプロットすべき変数を指定しないとプロット面は真っ白です。右側の変数ブラウザから、見たい項目にチェックを入れないとなりません。なお、モデリングモードととプロットモードなどは、GUIの右下のタブで切り替えられるようです。

なお、変数ブラウザからは、かなりいろいろな物理量をパラメータとして含んだ形でシミュレーションが行われていることが分かります。以下は、別なアナログ電子回路の(要はSpiceみたいな)シミュレーション・サンプル例から引っ張ってきた変数ブラウザのスクリーンショットです。R2という抵抗1個に対してこのような物理量がモデリングされていました。

なお、これを眺めていて、Scilab+Xcos上でModelicaモデルを使用した時からの疑問がほぼほぼ氷解。Modelicaモデルのポートには、黒の四角と白の四角があるのですが、黒がpositive、白がnegativeポートと呼ばれているようです。一応正負という意味みたいですが、抵抗などはどっちもどっち、「電流iと電圧vが現れる出入り口」として扱えるみたい。モデルによっては非対称なものもあるのかも知れませんが、変数ブラウザみればポートの意味が分かる。

GUIからライブラリの階層構造を追っていくと、各所にサンプルのモデルが配置されています。中々面白いので、もういっちょ、Sampleをやってみました。アイキャッチ画像に、モデルの画面キャプチャを貼り付けさせていただいた、熱伝導のモデルです。何か石ころのようなものがあり、片方が100℃、片方が0℃で、間のヒートパイプのような熱を電動するブロックにより熱が伝わるモデル。温度計がつけられていて、温度が分かるようになっています。これもシミュレーションGO!

温度が低い方が赤で、高い方が青になってしまったのは、私の設定がマズイからですが、こんな感じなのね、と納得。この辺の出来合いの「部品」つかって「物理学実験」しているだけでも遊べそう。。。

忘却の微分方程式(5) OpenModelica、インストールのついでに に戻る

忘却の微分方程式(7) OMNotebookでModelicaを学ぶ へ進む