問題タブ [jmodelica]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
416 参照

modelica - シミュレーション中に JModelica を一時停止し、増分入力を渡す

Modelica コミュニティの皆様、こんにちは。

JModelica で 2 つのモデルを並行して実行したいのですが、モデル間で変数を渡す方法がわかりません。1 つのモデルは Python モデルで、もう 1 つは EnergyPlusToFMU モデルです。

JModelica ドキュメントの例には、モデルのシミュレーション前に定義された完全なシミュレーション期間の入力が含まれています。FMU と協調シミュレーションの重要な機能である、入力のために一時停止するモデルを構成する方法がわかりません。

JModelica でこれを実装する方法を示す例またはコードを教えてもらえますか?

シミュレート コマンドをループに入れますか? もしそうなら、前のタイムステップでデータを失うことなくウォームアップ期間と初期化を処理するにはどうすればよいですか?

お時間をいただきありがとうございます。

ジャスティン

0 投票する
1 に答える
178 参照

annotations - Modelica モデルからの注釈の削除

私は Modelica ライブラリを開発しており、ソース コード リストを含むドキュメントを作成する必要があります。注釈なしで Modelica モデルのソースを含めることができるようにしたいと思います。

手動で編集することもできますが、より自動化された戦略を探しています。最も便利で簡単な方法は、何らかのツールを使用して.mo注釈なしでファイルを保存し、それらをドキュメントに含めることだと思います (私は\lstinputlistingLaTeX で使用しています)。

これを行うことは可能ですか?Dymola、OpenModelica、JModelica にアクセスできます。Dymolaは、自動的に生成されるドキュメント ([ファイル] > [エクスポート] > [HTML...]) にリストを含めることができるため、明らかにそのようなリストを作成できます。Dymola とOpenModelicaを使用したスクリプト作成を検討していますが、これを行う方法も見つかりませんでした。

JModelicaは良い選択肢のように思えますが、私は Python を使った経験がありません。これが可能で、誰かが私にいくつかの指針を与えるなら、私は喜んでそれを自分で調べます. 仕事をするかもしれない関数への言及を見つけましたが、prettyprintどこから始めればよいかわかりません。最新のドキュメントでその機能への参照さえ見つかりません。

また、Dymola/OpenModelica を使用して (UI を介して、またはスクリプトを使用して) それを行う方法を見つける方が便利です。私は何かを逃しましたか?

0 投票する
2 に答える
2198 参照

python - PyFMI を使用した感度分析 - for ループの FMU

主な目標

地域暖房ネットワークの感度分析。

アプローチ

  1. AixLib および BuildingSystem ライブラリを使用したシステムの Modelica モデル (Dymola 内)

  2. モデルを FMU コシミュレーションとしてエクスポート

  3. SALib (感度分析 Python ライブラリ) を使用してサンプルを定義します (パラメーター スイープ)

  4. PyFMI を使用して、個々のサンプルすべてに対して Python の for ループでモデルを実行します (複数のプロセッサでシミュレーションを実行するために、JobLib を使用して for ループを並列化します)。

  5. 分散ベースの感度分析を実行する SALib ( http://salib.readthedocs.io/en/latest/basics.html#an-example )

最初の一歩

石神関数のシンプルなモデリカモデル (時間に依存しない)。この関数は、感度分析方法をテストするためによく使用されます ( https://www.sfu.ca/~ssurjano/ishigami.html )。

Python コード (PyFMI とパラメーター スイープを使用した FMU の読み込みを含む) は正常に動作します。

問題

一定量のシミュレーションの後、エラーが発生します。エラー出力は常に同じに見えるとは限りません。時々私たちは得る

FMUException: バイナリのロード中にエラーが発生しました。DLL を読み込めませんでした: Eine DLL-Initialisierungsroutine ist fehlgeschlagen.

翻訳: DLL 初期化ルーチンが失敗しました。

そして時々私たちは得る:

FMUException: バイナリのロード中にエラーが発生しました。DLL をロードできませんでした: Für diesen Befehl ist nicht genügend Speicher verfügbar.

翻訳:このコマンドに使用できる十分なメモリがありません。

このエラーは、約 650 回のシミュレーション実行後に発生します。これは、シミュレーションが次々と再実行される小さなループ ブロックで実行されるか、またはすべてのシミュレーションで 1 つの for ループが実行されるかに依存しません。Python コンソール/プロセスを再起動すると、新しいシミュレーションを再度実行できます。

作業環境:

Windows 10、Python 2.7、pip (JModelica ではない) を使用してインストールされた PyFMI、Jupyther ノートブック (Mozilla Firefox) での Python コーディング

Python と PyFMI の基本的な知識しかなく、このエラーに本当に苦労しています。

付属品

以下に見つけることができます

  • Dymola からコシミュレーション FMU をエクスポートするために使用される Modelica モデル (CVode を使用)

  • py ファイルとしての Python コード

  • Python コードの散布図を出力します。

ファイルを直接ダウンロードできる JModelica フォーラムにも投稿しました (FMU、Jupyter ノートブックなど): http://www.jmodelica.org/27925

モデリカモデル

Python コード

Python スクリプトからプロットを出力する ここに画像の説明を入力

アップデート

さらにいくつかのテストを行ったところ、次のことがわかりました。

FMU が Dymola と JModelica のどちらからエクスポートされたかによって、動作が異なります。

Dymola からエクスポートされた FMU を使用する:

  • load_fmuforループから行を取り出すとうまくいくようです
  • load_fmuforループにない場合でも、クラッシュすることがあります
  • コマンドが正常に動作するように見えるmodel.reset()前に新しい行を追加するmodel.set(...)
  • ある場合とない場合でシミュレートすると結果が異なる model.reset() -> なぜ??
  • model.instantiate()の代わりにmodel.reset()-> は機能しません。タスク マネージャーのメモリ使用量は最大で約 350 MB になり、その後

    FMUException: モデルのインスタンス化に失敗しました。詳細については、ログを参照してください。

log_level=4 のログ ファイル:

JModelica からエクスポートされた FMU を使用する:

私の質問:

FMU モデルを異なるパラメーターで何度もシミュレートするループを実行する正しい理由は何ですか?

model.reset()を使用する場合と使用しない場合の違いは何model.instatiate()ですか?

付属品

model.reset()これは、for ループがある場合とない場合 の違いを示すプロットです。ここに画像の説明を入力

JModelica からエクスポートされた FMU (ライセンスは必要ありません) は、http ://www.jmodelica.org/27925#comment-6668 からダウンロードできます。