FMUのインポートとエクスポート

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

重要: Available only with Twin Activate commercial edition.

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

Controller.scm; Controller_FMU.scm; controller.fmu

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

FMIと要件について

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

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

コンパイラー要件

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

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

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

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

コンパイラー FMIエクスポート Modelicaのサポート Cコード生成
Microsoft® Visual Studio 2022:Community, Professional Yes Yes Yes
Microsoft® Visual Studio 2019:Community, Professional Yes Yes Yes

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

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

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

Linuxプラットフォームに必要な開発ツール

LinuxプラットフォームでCコードをコンパイルするには、開発ツールのインストールが必要です。以下のコマンドで、GCCとG++に必要な開発ツールとビルドツールのインストールを行います。

Linuxプラットフォーム インストールコマンド
SUSE 15 SP 2
zypper install -t pattern “devel_basis”
RHEL/Oracle Linux 8.3
dnf group install "Development Tools"
or
yum group install "Development Tools"

LinuxプラットフォームでのFMUエクスポート

LinuxでFMUのエクスポートを行うには、ldバージョン2.27以上が必要です。

LinuxプラットフォームでFMUをTwin Activateにエクスポートするには、Cコードのコンパイルとリンクにldバージョン2.27以降が必要です。Binutilsをコマンドでインストールまたはアップデートすることにより、互換性のあるバージョンのldで作業していることを確認することができます。yum install binutils.

ソルバーの選択

  1. リボンで設定(Setup)を選択します。


  2. シミュレーションパラメーターダイアログが表示されたら、ソルバー(Solvers)タブを選択します。
  3. ソルバーとしてLSODAを選択し、OKをクリックします。
    注: スーパーブロックをFMUとしてエクスポートする前に、すべてのモデルがモデル変換のためにFMUとしてエクスポートできるわけではないことに留意してください。例えば、ConstraintやAutomatonなどの暗黙のブロックを含む暗黙のモデルは、モデル交換用のFMUとしてエクスポートすることができません。一方、すべてのモデルは、連成シミュレーション用のFMUとしてエクスポートすることができます。

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

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

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

    デフォルトでは、時間依存は選択されていません。時間依存を選択しない場合、Step 9のコードの生成とエクスポートダイアログボックスで、入力を常にアクティブにする チェックボックスを選択すると、エラーは発生しません。

  5. メインダイアグラムを再表示するにはcontrollerスーパーブロックダイアグラムの外側のスペースをダブルクリックします。
  6. FMUのパラメータを公開するには、スーパーブロックを右クリックしてマスク > 自動マスクをクリックします。
    スーパーブロックをダブルクリックすると、パラメータが表示されます。
  7. メインダイアグラムでスーパーブロックであるcontrollerを選択します。
  8. メニューバーからツール > コード生成とエクスポートを選択します。
  9. ダイアログボックスで、ターゲットとしてFMUを選択し、Generateをクリックします。
    FMUが生成されます。このFMUを別のTwin ActivateモデルまたはFMIをサポートしている他のソフトウェア製品にインポートして、連成シミュレーションまたはモデル交換で実行できます。

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

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

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

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

  7. Paletteブラウザで、System > Activate > Routingから、2つのMuxブロックをダイアグラムにドラッグします。
  8. いずれかのMuxブロックをダブルクリックします。
  9. ブロックダイアログで、入力数(Number of Inputs)に3を入力します。
  10. FMUブロックからスカラー出力を組み立て、ブロックが入出力(I/O)の観点から見て元のスーパーブロックに似たものになるようにします。
  11. FMUブロックとMuxブロックを1つのスーパーブロックに変換し、Property Editorの一般で名前としてFMU MEを入力します。
  12. FMU MEスーパーブロックをダブルクリックします。
    このスーパーブロックのダイアグラムが表示されます。
  13. Paletteブラウザ > Activate > Portsから、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と入力して、保存をクリックします。