OpenModelicaを使って電気回路のシミュレーションをしてみる

マルチドメインモデリング環境である、OpenModelicaを使用した電気回路のシミュレーションの例を通して、その使用感や言語的側面に触れたいと思います。

想定読者としてはModelicaに触れたことがない人で、バックグラウンドとして回路シミュレーションに多少なりとも興味がある人、という感じでしょうか。ちょっとした使い方に関するチュートリアルも兼ねているかもしれません。

Modelicaとは

オブジェクト指向モデリング言語です。他分野に跨る複雑なシステムのモデリング(例えば、機械、電気、電子、油圧、熱、制御、等々)のシミュレーションを記述するのが得意で、微分方程式なども記述できます。

ざっくりいうと、常微分方程式で解けるくらいの数値解析のためのモデリングをするのに便利な言語です。また、適用分野ごとに使える標準ライブラリなども用意されており、手早くモデルを構築することができます。いろいろな分野の計算に使えるので、「マルチドメインモデリング言語」と言われることもあります。

Modelica言語の仕様は Modelica Association で策定されており、最近ではModelica 3.4が2017年5月にリリースされました。

Modelica言語を実装するシミュレータとしては下記のようなものがあります。(Wikipediaさんありがとう)

  • CATIA Systems
  • Dymola
  • LMS AMESim
  • JModelica
  • MapleSim
  • MathModelica
  • OpenModelica
  • SCICOS
  • SimulationX

メジャーなシミュレーションツールである、MATLABがこの中に入っていないところは注目すべき点かもしれません。

OpenModelicaとは

Open Source Modelica Consortium(OSMC)が開発を進めている、オープンソースのModelica処理系です。OSMC は Modelica Association と連携して規格を策定しているようです。

OSMCはこの他にFMI(Functional Mockup Interface)規格というのを策定していて、規格の異なるモデル間の協調動作を規定しています。相互運用性を高めてMATLABを食っちまおう!という意気込みを感じるような気もしますが、どうなんでしょうか。

さて、ソフトウェアとしてのOpenModelicaに話を戻して、OpenModelicaの構成等について説明します。

OpenModelicaに含まれるもの

OpenModelicaは概ね、下記のツールから成り立ちます。

  • OMEdit - モデルエディタです。この後、これを使用してモデリングを実施します。
  • OMPlot - プロッティングツールです。シミュレーション結果を表示します。
  • OMShell - Modelica言語のインタープリタを起動します。いわゆるREPLです。
  • OMNotebook - OpenModelicaのドキュメンテーションのために作られたツールのようです。立ち上げるとOpenModelicaのクイックツアーが出てきます。

まぁ、OMEditが本体かな、というところです。

ダウンロードやインストールの方法

OSMCのサイトにダウンロードのページがあるので読んでください。(すいません)

現時点の情報として、Windows/Macはバイナリあるようです。LinuxDebian系とRedHat系はパッケージがあります。その他はビルドするかVMイメージがあるからそれ使え、と書いていますね。(乱暴なのか丁寧なのか。)

早速モデルを作ってみる

まずは立ち上げる

OMEditを起動します。

f:id:dec9ue:20171113021348p:plain

左側のペインにパッケージがたくさん並んでいるのが見えます。

モデルを作る

とりあえず "New Modelica Class" とかやって、モデルを作ります。そして左側のペインからドラッグ&ドロップすると部品を落とし込めます。
f:id:dec9ue:20171113022224p:plain

部品のプロパティを設定できます。
f:id:dec9ue:20171113022831p:plain

出来上がったのがこちら。(3分クッキングかよ!)
f:id:dec9ue:20171113022803p:plain

昇圧チョッパー回路です。

感想としては、この手のツールのUIにしては使いやすい方です。

実行してみる。

とりあえず、実行。

とりあえず、何も考えずに一秒間、2000プロットくらいで試してみようと思います。

f:id:dec9ue:20171113023407p:plain

なにかエラーは出るが実行はされる。
f:id:dec9ue:20171113035639p:plain

適当に右側から項目を選ぶとプロットしてくれます。電圧を見てみます。
f:id:dec9ue:20171113024047p:plain

なんか、電圧跳ね上がってるし、落ち着いてないし、、、

電流も見てみます。
f:id:dec9ue:20171113024239p:plain

うーん、これはおそらくコンデンサのチャージ電流ですね。。。
f:id:dec9ue:20171113024404p:plain
(↑こいつのせいだ)

ほんのちょっとだけ、モデルをいじってみる。

というわけで、コンデンサの初期電圧をいじってみます。(早く終わらせたいだけちゃうん)
f:id:dec9ue:20171113024835p:plain

実行結果。
f:id:dec9ue:20171113025052p:plain

ここで設定したDuty比は50%で、こちらによると、{\displaystyle M\left({D}\right)=\frac{1}{1-D}} ということなので、昇圧比は2倍になります。(計算も記憶もダメな小僧なもので。ありがとうございます。)

電圧も跳ねなくなったし、だいたい、想定している昇圧率になりました。

なお、電流を見ると、、、
f:id:dec9ue:20171113025702p:plain

多少のチャージ電流が残っているのがわかるのと、LC共振しちゃっているのがわかります。まぁでも、この辺で。

モデルをしげしげと眺めてみる

Modelica言語との関係

よく考えたら、Modelica言語全然出てきてない、って思います。(思うよね?)
ここまで表示してきたモデルは実はDiagram Viewというもので表示していました。これをText Viewに切り替えると。。。

Modelica言語による表現が出てきます。
f:id:dec9ue:20171113030617p:plain
なんとなく、HDL系の言語に雰囲気が似ていますかね。

これまで、ドロップしてきた部品のリストが上の方に出ています。実はペインの左側からドロップするという行為は、クラスのインスタンス化宣言をするということだったようです。また、部品のパラメータを入れるという行為はインスタンスの定数値を決定するということだったようです。

また、結線を行っていたものは下の方にconnect()という式によって表現されています。

なるほど。。。つまり、ここまで私はOMEditを使用してビジュアルプログラミングをしていたということになりそうです。

なお、annotation...となっている部分は表示上省略されていますが、これは図面の見え方を規定している模様です。

なんでこれで回路シミュレーションができるのか

さて、モデルを再度しげしげと見てみましょう。感想として「回路図やん!」というのが出てくると思います。(え?)
f:id:dec9ue:20171113022803p:plain
どう見ても回路図。。。

マルチドメイン言語じゃないの?回路だけ特別なの?って思ったりします。電流とか、電圧とか、それぞれ計算ルールが違うやん、それなのに、なんでつなぐだけで計算できるん??

これ、ちょっとだけ説明しておこうと思います。

実は、電気部品はそれぞれでPinというコネクタをインスタンス化しています。Pinの定義は下記のようになっています。
f:id:dec9ue:20171113032939p:plain

VoltageとCurrentを持っているということです。あれ?Currentにはflowというキーワードが、、、

Modelicaの世界では通常、接続された物同士は等しい物として扱われます。PinコネクタにおけるVoltageでいうと、接続した点での電圧が等しいという制約を受けることになります。つまりこれはキルヒホッフの電圧則を表しているということになりますね。一方、flowを付与されて接続されたもの同士は和がゼロになるという制約を受けることになります。これは、、、キルヒホッフの電流則ですね。

こうやって接続された物同士に異なる制約を設けることによって電気回路の法則を表現しているわけです。

まとめ(個人の感想です)

OpenModelicaの特徴として下記が挙げられます。

  • その辺の簡単な回路シミュレーター位のことはやってのけてしまいます。
  • マルチドメインで異なるドメインをまたいだシミュレーションもできます。
  • ユーザーインタフェースは比較的使いやすいと思います。(圧倒的とは言わん)
  • 自分でModelica言語を書いて拡張することもできます。
  • オープンソースなので問題があったらフィードバックすることも、自分で修正することも可能です。
  • なにより、購入する手間もなく、ダウンロードしてすぐに使えます。

これは、使ってみない手はないのではないでしょうか。

おわび

スナップショットの撮り方が怠惰だったらしく、ウィンドウの影が残ってしまいました。ちょっと暗い四角が写り込んでいるように見えるのはそのせいです。すみません。