各種ソフトウェアを用いたFMU (Functional Mockup Unit)の作成方法、及び連成方法についてまとめていきます。
FMI(Functional Mockup Interface)の仕様、FMUの構成等の基本についてまとめていきます。
Xcosを用いたFMUの作成方法、及び連成方法についてまとめていきます。
Matlabを用いたFMUの作成方法、及び連成方法についてまとめていきます。
Pythonを用いたFMUの作成方法、及び連成方法についてまとめていきます。
OpenModelicaを用いたFMUの作成方法、及び連成方法についてまとめていきます。
準備中
Simulink Extras内のFMU Importブロックを用います。
まずは2A->Bとなるシンプルな2次反応モデルについて、Aの初期濃度1.0[mole frac]、Bの初期濃度0.0[mole frac]とし、反応速度定数kを入力情報としたFMUユニットを作成し、Simulinkで読み込んでみます。
SimulinkのFMUユニットはSimulink Extrasの下にあります。設定もGUIから簡単にできるようになっており、以下のように作成したFMUユニットを選択するだけです。
以下がFMUユニットへの入力k=1とした場合のA, Bの濃度変化になります。
Simulinkから入力情報である反応速度定数kを変化させていくことで、濃度変化がどのように推移するか確認することができます。
PyFMIはModelon社が開発していた(今は既に開発が止まっています)モジュールで、FMUとの入出力を簡単に行うことができます。
以下は、Matlabとの練成で使用したシンプルな2次反応のFMUを、PyFMIで読み込んだ例になります。
PyFMIを使ってFMUを読み込む場合は、load_FMU()を用います。
Simulinkの場合は、どこに結果が格納されているか意識せずにモデリングを行うことが可能ですが、Pythonからコントロールする場合は、出力結果がどこに保存されているかを確認する必要があります。
現在読み込みを行っているFMUは、CA、CBの情報をC1、C2として設定してありますので、シミュレーション結果であるresの中にあるc1、c2のデータを読み込み、プロットしてやると以下のようにSimulinkと同様の出力を得ることができます。
reac = load_fmu(FMU)
res = reac.simulate(final_time=simtime, input=input_object)
t = res["time"]
x1 = res["c1"]
x2 = res["c2"]
準備中
当サイトに不具合、ご意見等ございましたらCEsolutionにお知らせください。