ブロックを積みながら(211) Scilab/Xcos、Modelicaプログラミングへ?

Joseph Halfmoon

前回、Scilab/Xcos内のModelicaブロックで出来ることはやっておくべし、と「配管」のデモを鑑賞。いよいよModelicaのコードを記述して走らせることに入りたいと思います。といっても「最初の1行」、Hello World的なやつ。Modelica自体クセ強なのに、それをXcos内で扱うのは何が何やら?

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはWindows 11の パソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。

    Scilab 2024.0.0

Modelica

Modelicaというのは何か特定のツールではなく「言語」であるようです。また言語仕様そのものは「オープン」(ライセンスについては以下のホームページをごらんくだされ。)そこで「ツール」としての実装は複数あり、無料でオープンな環境もあれば、有償の環境もあり、と。御本家ホームページが以下に。

https://modelica.org/

コンピュータ言語は数あれど、結構、独特な「立ち位置」におられる言語でないかと思います。多くの言語が「上から順に」シーケンシャルに実行されることが前提なのに対して、「そうでない」ところはハードウエア記述言語のVerilogやVHDLなどと双璧のユニークさではないかと。まあ、素人老人がごたくを並べてもせんないので、例によってGoogleの生成AI、Gemini 2.5 Flash様におまとめいただきました。geminiModelicaEC

端的にいうと「=」は代入ではなかったです。方程式書くときの「=」らしいです。なお、代入もあることはあるらしくて、それは古式ゆかしい「:=」みたい。

常微分方程式ODE系、微分代数方程式DAE系など「素のまま」モデル化すれば、解いてくれるみたい。ホントか?

ただし、今のところは「旧態以前とした手順を記述する」Scilab/Xcosのフローの中のブロックとしてのModelica運用なので、それとのインタフェースに起因する制約もあるような、ないような。その辺を確かめていきたいと思います。

最初のModelicaソース

今回、以下のドキュメントを参照させていただいております。

参照といっても実質一行のコードを書くためなのでチラ見。ちゃんと読めておりません。

Scilab/Xcos(Scicos)の中でModelicaのソースを記述するために用意したのは以下の入れものです。modelicaSimpleModel

Modelicaブロックから出力(Explicit)される値をXcosブロックで時系列グラフ化するもの。

さて、上記のModelicaブロックの中身が以下に。mblockSetting

Xcosとのインタフェースは、入力なし、出力は1個だけ、それもE指定(フツーのXcosの接続。)パラメータは無。関数名はFO2とな。

ここでOK押すと、ソースコードが自動生成されて現れます。こんな感じ。modelicaSRC

自動生成時には equation 配下にはコメントが書かれていて実体がありませぬ。そこに、「xを(時間)微分したら2-x」という「微分方程式1個」を記入したところが上記です。

黄色のマーカ引いた通り、上の部分は勝手にいじるなよ、ということです。まあ弄ってみましたが。

何もしないとゼロになってしまう初期値を意図的に変更すべく、Real xにつづけて「(start=0.4)」などと書き加えてみました。実際、その状態でOKしてシミュレーションすると、ちゃんと初期値0.4が反映されてます。しかし、やったね、と喜ぶのはまだ早いです。しかし、何か変更しようとして再び、上記の編集画面を呼び出してしまうと、「ヘッダ」部分は再生成されてしまうらしく元の木阿弥っす。一方、equation以下の記述は維持されてます。

Scilab/Xcos内で運用するためのコマケー話がいろいろあるみたい。

ともあれ上記モデルのシミュレーションは出来。こんな感じ。simResult

ModelicaのHello World的な?

ブロックを積みながら(210) Scilab/Xcos、Modelica配管シミュレーション へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です