カスタムブロックでモデル化を行う(C++、OML、Modelica)

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee
edited May 2023 in 質問と回答 (Q&A)

Altair ActivateはC++、OML(Altair Compose / Matlab)、Modelica言語のほか、バージョン2019からはSpice言語のブロックを提供しています。

今回は、C++、OML、Modelica言語の3つの使い方を紹介します。

題材は1Dモデリング&システムシミュレーション入門で作成したDCモータとします。

先の例題では、DCモータをシグナルブロック、Modelicaブロック、Modelicaブロック+MotionSolveの3通りでモデル化しましたが、

今回は、さらにカスタムブロックの言語3通りでモデル化したいと思います。

まずは、Altair ComposeやMatlabで採用されているOMLでモデル化します。

高次の微分はすべて一階微分に変換し、微分項をすべて左辺に整理します。

微分項の数=状態変数の数となり、この状態変数を数値積分することで、解を得ます。

資料、モデルのダウンロードはこちら

使用製品:Altair Activate

よくあるエンジニアからの質問はこちら

Answers

  • Kosuke_IKEDA
    Kosuke_IKEDA
    Altair Employee
    edited May 2023

    つづいて、C++になります。

    OMLとほとんど同じなので、作業は割愛しています。

     

  • Kosuke_IKEDA
    Kosuke_IKEDA
    Altair Employee
    edited May 2023

    最後に、Modelica言語を用いたカスタムブロックの作成方法を紹介します。

    Modelica言語の特徴は、A=Bが代入式ではなく、等式として扱われる点です。

    したがって、A=Bと書いても、B=Aと書いても、同じ結果が得られます。

    OMLやC++のように微分項を左辺に整理する必要はありません。

    みなさまが立てた微分方程式をそのまま記述するだけで、解が得られます。状態変数も気にする必要はありません。

    ただし、高次微分の演算式はありませんので、一階微分にだけは変換してください。