チュートリアル:FMUのインポートとエクスポート

データ交換を目的としてFMU(Functional Mock-Up Unit)をモデルにインポートする方法と、連成シミュレーションを目的としてFMUをエクスポートする方法を学習します。

このチュートリアルのファイル

Controller.scmController_FMU.scmsb_controller_.fmu

チュートリアルで構築するモデルの完成版と、チュートリアルを完了するために必要なすべてのファイルは、次の場所にあります:<installation_directory>/tutorial_models/

FMIと要件について

Functional Mock-up Interface(FMI)は、XMLファイルとコンパイル済みCコードを組み合わせて動的モデルのモデル交換と連成シミュレーションの両方をサポートする、ツールに依存しない標準規格です。

  • Activateは、FMI 1.0のインポートプロセスと、FMI 2.0のインポートおよびエクスポートのプロセスをサポートしています。
  • Functional Mock-Up Unit(FMU)をひとつのブロックとしてActivateモデルにインポートできます。また、FMI標準をサポートしている他のツールとの間で交換および連成シミュレートするために、ActivateスーパーブロックをFMUとしてエクスポートできます。
  • Functional Mock-Up InterfaceをActivateで使用するには、ソルバーを選択し、コンパイラーをインストールする必要があります。

コンパイラー要件

Activate では、スーパーブロックをCコードにコンパイルするCコンパイラーとFMUが必要です。Activate は、お使いのシステムにMicrosoft Visual StudioまたはGCCがインストールされているかどうかを判断し、手動による操作を必要とせずにコンパイラーツールチェーンを自動的に起動します。

NoteColonSymbol TCCコンパイラーは、いくつかの制約があるためにFMUのエクスポートに使用することはできません。

サポートされているどのコンパイラーもインストールされていない場合は、チュートリアルのモデルファイルに付属する次のFMUを読み込むことで、チュートリアルを実行できます:<installation_directory>\tutorial_models\sb_controller.fmu。このファイルを読み込む場合は、FMUへのスーパーブロックのエクスポートセクションをスキップして、モデル交換を通じたFMUのインポートに進んでください。

Windowsプラットフォームでサポートされているコンパイラー

TCCはWindows用に提供されているデフォルトのコンパイラーです。使用環境によっては、サードパーティ製のコンパイラーをインストールする必要があります。Functional Mock-Up Interface(FMI)、Modelicaコンポーネント、およびCコード生成用にサポートされているコンパイラーは以下のとおりです。

コンパイラー FMIエクスポート Modelicaのサポート Cコード生成
Microsoft® Visual Studio 2019: Community, Professional はい はい はい
Microsoft® Visual Studio 2017:Express、Community、Professional はい はい はい
Microsoft® Visual Studio C++ Build Tools 2019; 2017; 2015
NoteColonSymbol Windows 10 SDK用オプションが選択されている必要があります。
はい はい はい
Microsoft® Visual Studio C++ 2015(VC 14.0 Community/Professional) はい はい はい
Microsoft® Visual Studio C++ 2013(VC EXPRESS/VC Pro 12.0) はい はい はい
Microsoft® Visual Studio C++ 2012(VC EXPRESS/VC Pro 11.0) はい いいえ はい
Microsoft® Visual Studio C++ VC 10.0(VC Pro 10.0) はい はい はい
Microsoft® Visual Studio C++ SDK 7.1(VC EXPRESS 10.0) はい いいえ はい
TCC(Activateのインストールに用意されているデフォルトのコンパイラー) いいえ いいえ はい

Linuxプラットフォームでサポートされているコンパイラー

コンパイラー FMIエクスポート Modelicaのサポート Cコード生成
GCC はい はい はい

FMU Export on Linux Platforms

FMU exporting on Linux requires ld version 2.27 or greater.

To export an FMU in Activate on Linux platforms, the compilation and linking of the C code requires ld version 2.27 or greater. You can ensure that you are working with a compatible version of ld by installing or updating Binutils with the command: yum install binutils.

Selecting a Solver

  1. On the ribbon, hover over the Simulate tool group , and click Setup .
  2. On the Simulation Parameters dialog that appears, select the Solvers tab.
  3. For solver, select: LSODA, and then click OK.
    NoteColonSymbol Before exporting a super block as an FMU, keep in mind that not all models can be exported as an FMU for Model Exchange. For example, implicit models containing implicit blocks, such as Constraint or Automaton, cannot be exported as an FMU for Model Exchange. All models, on the other hand, can be exported as an FMU for Co-Simulation.

モデル交換を通じたFMUのインポート

モデル交換オプションを使用してFMUをコントローラーモデルにインポートします。

  1. Palette Browser#menucascade-separatorActivate#menucascade-separatorCoSimulationからFMUブロックをモデリングウィンドウにドラッグ&ドロップします。
    このFMUブロックは、エクスポートされたFMUファイルをインポートして構成するためのインターフェースを提供します。
  2. FMUブロックをダブルクリックします。
  3. FMUブロックダイアログで、FMUファイル名としてをクリックし、直前のステップでエクスポートしたFMUファイルを参照します。代わりに、このチュートリアル用に提供されているサンプルFMUを使用するには、<installation_directory>\tutorial_models\sb_controller.fmuを参照します。
    一般的なパラメータ(General Parameters)タブのその他のパラメータはすべて自動的に入力されます。
  4. 入力の依存ベクトル入力ポートテーブルに0を入力します。
  5. OKをクリックします。
    入力の依存ベクトルは出力に直接影響を与えるような入力を設定します。ここでの入力は出力に影響を与えないため、値を0に設定します。
  6. FMUブロックのサイズを変更するには、このブロックを選択してその角をドラッグし、このブロックのすべてのラベルを表示できるサイズに拡大します。
    FMUブロックには1つの入力と5つの出力があります。入力と出力はすべてスカラー信号を伝達すること、およびFMI標準規格はベクトルや行列のデータを許容していないことにご注意ください。

    内部のContStateSpaceブロックとMatrixGainブロックを調べると、元のスーパーブロックコントローラーの入力と出力の寸法を導き出すことができます。入力サイズは1x1、1つ目の出力サイズは2x1、2つ目の出力サイズは3x1です。

  7. Palette Browserで、System#menucascade-separatorActivate#menucascade-separatorRoutingから、2つのMuxブロックをダイアグラムにドラッグします。
  8. いずれかのMuxブロックをダブルクリックします。
  9. ブロックダイアログで、入力数(Number of Inputs)に3を入力します。
  10. FMUブロックからスカラー出力を組み立て、ブロックが入出力(I/O)の観点から見て元のスーパーブロックに似たものになるようにします。
  11. FMUブロックとMuxブロックを1つのスーパーブロックに変換し、の一般で名前としてFMU MEを入力します。
  12. FMU MEスーパーブロックをダブルクリックします。
    このスーパーブロックのダイアグラムが表示されます。
  13. Palette Browser#menucascade-separatorActivate#menucascade-separatorPortsから、Inputブロックを1つ、Outputブロックを2つダイアグラムにドラッグします。
  14. 各ブロックを次のように接続します。
  15. メインダイアグラムを再表示するには、現在のダイアグラムの外側の空白スペースをダブルクリックします。
  16. メインダイアグラムを複製するには、メインダイアグラム全体を領域選択して、Ctrl+Cを押してから、Ctrl+Vを押します。
    複製されたダイアグラムがモデルに追加されます。
  17. FMUブロックが含まれたスーパーブロックFMU MEを選択してCtrl+Xを押します。スーパーブロックcontroller_1を選択してCtrl+Vを押します。
    スーパーブロックcontroller_1がFMU MEに置き換えられます。
  18. リボンのシミュレートツールグループでRunをクリックします。
    シミュレーションの実行中に2つのScopeブロックのScopeウィンドウを調べます。このウィンドウには、インポートされたFMUが残りのモデルと正常に連成シミュレートされていること、およびインポートされたFMUの挙動がFMUのエクスポート元である元のスーパーブロックと同じであることを示す同じ曲線が表示されます。
  19. リボンでSaveをクリックします。
  20. 名前を付けてモデルを保存ダイアログで、ファイル名にController_FMUと入力して、保存をクリックします。

連成シミュレーションを介したFMUのインポート

連成シミュレーションオプションを使用してFMUをコントローラーモデルにインポートします。

  1. スーパーブロックFMU MEが含まれたダイアグラムを領域選択して、Ctrl+Cを押します。
  2. そのダイアグラムの下の空白領域にカーソルを移動してCtrl+Vを押します。
    FMU MEスーパーブロックが含まれたダイアグラムが、比較用の3番目のモデルとして追加されます。

    以下のステップでは、シミュレーションタイプを連成シミュレーションに変更する方法を示しています。

  3. FMU ME_1というスーパーブロックを選択し、プロパティエディターでFMU CSという名前を入力します。
  4. FMUをCo-Simulationモードで実行するようにFMUブロックを設定します:FMU CSスーパーブロックを入力して、FMUブロックをダブルクリックします。
  5. 表示されたブロックダイアグラムでアドバンスト(Advanced)タブを選択し、両方のFMUタイプが指定されている場合、“モデル交換”として実行(Run as “Model Exchange” if both FMU types are provided)をオフにします。このチェックボックスを選択するとFMUはモデル交換モードで実行され、選択しないと連成シミュレーションモードで実行されます。
    モデルは次の図のようになります。
  6. リボンで Run をクリックします。
    シミュレーションが実行され、スコープウィンドウに次のプロットが生成されます。
  7. 3つのスコープウィンドウでシミュレーション結果を比較します。FMUへのスーパーブロックのエクスポートというトピックのステップでエクスポートしたFMUをインポートして戻し、モデル変換モードと連成シミュレーションモードの両方でシミュレートできること、およびFMUの結果がFMUの生成元である元のスーパーブロックと同じであることを裏付ける3本の同じ曲線が表示されるはずです。
  8. リボンでSaveをクリックします。
  9. 名前を付けてモデルを保存ダイアログで、ファイル名Controller_FMUと入力して、保存をクリックします。

FMUへのスーパーブロックのエクスポート

ControllerモデルをFMUとしてスーパーブロックをエクスポートします。

  1. リボンで開くを選択してController.scmにアクセスします。
    Controllerモデルが開いてそのメインダイアグラムが表示されます。
  2. メインダイアグラムでスーパーブロックであるcontrollerをダブルクリックします。
  3. 入力ブロックであるregular_in_portをダブルクリックします。
  4. ブロックダイアログが開きます。
    NoteColonSymbol

    Activateの以前のバージョンで適用した時間依存設定は不要となり、無視されます。

  5. ダイアグラムのすぐ外側の空白スペースを右クリックしてコンテキストを選択します。
  6. コンテキストダイアログで、次の変数定義を入力してOKをクリックします。
    TipColonSymbol これらの変数はルートダイアグラムコンテキストでも定義できます。そこから定義をコピーしてcontrollerダイアグラムコンテキストに貼り付けることができます。
    NoteColonSymbol このステップがFMUのエクスポートに必要な理由は、スーパーブロックで定義したすべてのコンテキスト変数を、FMUにエクスポートする前にローカルで定義する必要があるからです。エクスポートされるスーパーブロックは、現在のレベルでしか定義されていないコンテキスト変数を検索します。
  7. メインダイアグラムを再表示するには、controllerスーパーブロックダイアグラムの外側のスペースをダブルクリックします。
  8. メインダイアグラムでスーパーブロックであるcontrollerを選択します。
  9. メニューバーでツール#menucascade-separatorFMU 2.0#menucascade-separator連成シミュレートとモデル交換を選択します。
  10. 表示されたFile Browserで、生成されたFMUファイルsb_controller.fmuを保存するディレクトリを指定します。
    FMUが生成されます。このFMUを別のActivateモデルまたはFMIをサポートしている他のソフトウェア製品にインポートして、連成シミュレーションまたはモデル交換で実行できます。