Control: FMU

Model ElementFMU(Functional Mock-up Unit)は、MotionSolveで汎用モデリング要素を定義する抽象モデリングエンティティです。

説明

標準的な、ツールに依存しないインターフェースであるファンクショナルモックアップインターフェース(FMI)は、FMUのデータにアクセスしたり、これにデータを配置するためのインターフェースを定義します。MotionSolveは、FMIを使用して1つ以上のFMUをシステムモデルにインポートし、それらを他のモデリングコンポーネントに結合して、解析用に組み合わせたモデルを生成します。

フォーマット

<FMU
     id                         = integer
     label                      = string
     full_label                 = string
     type                       = string
     path                       = string
     x_array_id                 = integer
     y_array_id                 = integer
     u_array_id                 = integer
     ic_array_id                = integer
     num_state                  = integer
     num_output                 = integer 
     is_static_hold             = Boolean
     error_tol_factor           = real
     usrsub_dll_name            = string
     usrsub_fnc_name            = string
     var_name                   = string
     var_ic                     = string
     ip_address                 = string
     fmu_communication_interval = real
     start_time                 = real
/>

属性

id
要素識別番号。この番号は、すべてのFMUの中で一意です。
  • Integer > 0
label
FMU要素の“短い”名前。
  • 文字列
full_label
FMU要素のフルネーム(通常はMotionViewシステム名)。
  • 文字列
type
FMUのタイプ。オプションには、“CoSimulation”と“ModelExchange”があります。
  • 文字列
  • デフォルト:“ModelExchange
x_array_id
このFMUの連続状態xを格納するために使用するReference_ArrayのIDを指定します。
  • 整数
  • デフォルト:None
このIDを持つARYVAL()関数を使用することで、MotionSolveの式のこの状態にアクセスすることができます。また、SYSFNCおよびSYSARYでこのIDを使用することで、ユーザーサブルーチンの出力値にアクセスすることもできます。
y_array_id
このFMUの出力yを格納するために使用するReference_ArrayのIDを指定します。
  • 整数
  • デフォルト:None
このIDを持つARYVAL()関数を使用することで、MotionSolveの式の出力にアクセスすることができます。また、SYSFNCSYSARYでこのIDを使用することで、ユーザーサブルーチンの出力値にアクセスすることもできます。
u_array_id
このFMUの入力uを格納するために使用するReference_ArrayのIDを指定します。
  • 整数
  • デフォルト:None
このIDを持つARYVAL()関数を使用することで、MotionSolveの式の入力にアクセスすることができます。また、SYSFNCおよびSYSARYでこのIDを使用することで、ユーザーサブルーチンの入力値にアクセスすることもできます。
ic_array_id
このFMUの連続状態xの初期条件を格納するために使用するReference_ArrayのIDを指定します。
  • 整数
  • デフォルト:None
このIDを持つARYVAL()関数を使用することで、MotionSolveの式のIC値にアクセスすることができます。また、SYSFNCおよびSYSARYでこのIDを使用することで、ユーザーサブルーチンのIC値にアクセスすることもできます。
is_static_hold
動的状態の値が静的または擬似静的シミュレーションで一定に保たれるかどうかを示すフラグ。
  • ブール
  • デフォルト:FALSE
  • モデル交換FMUにのみ適用可能
詳細については、コメント8をご参照ください。
error_tol_factor
type = ModelExchangeのFMUでの連続状態の積分誤差トレランススケールファクター。
  • Real > 0
  • デフォルト:1.0
  • モデル交換FMUにのみ適用可能
詳細については、コメント9をご参照ください。
num_state
FMUでの連続状態の数。
  • Integer > 0
  • モデル交換FMUにのみ適用可能。
num_output
FMUからの出力の数。
  • Integer > 0
usrsub_dll_name
FMUを読み込むために使用するDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンを読み込みます。
  • 文字列
  • デフォルト:“nugsefmu”
usrsub_fnc_name
FMU用のDLL内のユーザーサブルーチンの名前を指定します。
  • 文字列
  • デフォルト: “GSESUB”
var_name
値を割り当て可能なFMU内の各変数の名前をリストした文字列。
  • 文字列
  • “;”(セミコロン)で区切られた値
  • デフォルト:None
var_ic
ユーザーが設定する必要がある“var_name”によって定義された各変数の値をリストした文字列。
  • 文字列
  • “;”(セミコロン)で区切られた値
  • デフォルト:None
ip_address
MotionSolveに結合するFMUのIPアドレス。
  • 文字列
  • デフォルト:“PIPE”
パイプは、MotionSolveとFMUが同じマシン上に存在する場合にプロセス間通信用の手段として使用されます。MotionSolveとFMUが別のマシン上に存在する場合は、実際のIPアドレスを文字列として指定します。
詳細については、コメント6をご参照ください。
fmu_communication _interval
type = CoSimulationのFMUとの連続する通信間の時間間隔。他のすべての呼び出しでは、FMU出力が補間されます。
  • 実数
  • デフォルト:HMAX、シミュレーション制御パラメータによってシミュレーション用に定義された最大ステップサイズ。
start_time
連成シミュレーションの開始時刻。MotionSolveがT0(開始時刻)からT(連成時刻)までtype = CoSimulationのFMUを使用せずにシステムをシミュレートすることを意味します。
  • 実数
  • デフォルト:0
  • 連成シミュレーションFMUにのみ適用可能。

例1 - モデル交換タイプのFMU

この例では、MotionSolve解析でタイプ“ModelExchange”のFMUを使用します。このFMUには、12個の入力、3つの状態、および6つの出力があります。MotionSolveとFMUの両方が同じマシン上で動作しています。

<!--Define the FMU below →
<FMU
     id                  = "1000"
     path                = "/staff/jwitt/work/Active_Damper_ME.fmu"
     type                = "ModelExchange"
     x_array_id          = "100"
     y_array_id          = "200"
     u_array_id          = "300"
     ic_array_id         = "400"
     error_tol_factor    = "0.8"     
/>
<!--Define the FMU States as a solver Array of type X →
<Reference_Array
     id                  = "100"
     label               = "FMU States"
     type                = "X"
     num_element         = "3"
/>
<!--Define the FMU Output as a solver Array of type Y →
<Reference_Array
     id                  = "200"
     label               = "FMU Outputs"
     type                = "Y"
     num_element         = "6"
/>
<!--Define the FMU inputs as a solver Array of type U →
<Reference_Array
     id                  = "300"
     label               = "FMU Inputs"
     type                = "U"
     num_element         = "12">
     501 601 701 801 901 1001 1101 1201 1301 1401 1501 1601
</Reference_Array>
<!--Define the ICs for the FMU states in a solver Array →
<Reference_Array
     id                  = "400"
     label               = "FMU Initial Conditions"
     type                = "IC"
     num_element         = "3">
     1.456  0.8264  234.321
</Reference_Array>

例2:連成シミュレーションタイプのFMU

この例では、タイプ“CoSimulation”のFMUを示します。6つの入力を取り、18個の出力を提供します。これらは、それぞれ、タイプUとタイプYの配列で定義されます。MotionSolveは、IPアドレスが172.16.0.8のマシン上で実行されています。

<!-- Define the FMU below -->
<FMU
     id                  = "1000"
     path                = "/staff/jwitt/work/Active_Damper_CS.fmu"
     type                = " CoSimulation"
     y_array_id          = "200"
     u_array_id          = "300"
     ip_address          = "172.16.0.8"
/>
<!--Define the FMU Output as a solver Array of type Y-->
<Reference_Array
     id                  = "200"
     label               = "FMU Outputs"
     type                = "Y"
     num_element         = "18"
/>
<!-- Define the FMU inputs as a solver Array of type U-->
<Reference_Array
     id                  = "300"
     label               = "FMU Inputs"
     type                = "U"
     num_element         = "6">
     501 601 701 801 901 1001
</Reference_Array>

コメント

  1. ファンクショナルモックアップインターフェース

    ファンクショナルモックアップインターフェース(FMI)は、XMLファイルとコンパイルされたCコードの組み合わせを使用したモデルをサポートするためのツールに依存しない標準です。

    FMIは、FMUと呼ばれる実行ファイルによって実装されるインターフェースを定義します。FMI内の関数は、MotionViewMotionSolveでFMUのインスタンスを作成するために使用されます。MotionSolve内のFMUは、一連の微分方程式と代数方程式で記述される汎用エンティティです。実行時に、MotionSolveがこれらの方程式または偏導関数を評価する必要がある場合、MotionSolve内のFMUインスタンスはFMI内で定義された関数を介してFMUオブジェクトとやり取りします。これらの関数は、MotionSolveから必要な値を入力として“取得”し、FMUから必要な値をMotionSolveへの出力として“返し”ます。これは、下の図に示すとおりです。



    図 1. MotionViewMotionSolve、およびFMU間の相互作用

    現在は、FMI 1.0とFMI 2.0の2つのバージョンのFMIが使用されています。MotionSolveはFMI 2.0のみをサポートしています。

  2. FMUの内容
    FMUは、通常、拡張子が.fmuのzipファイルで配布されます。このzipファイルは次のような構造となっています:
    modelDescription.xml
    これは、FMIモデル記述ファイルです。FMUに関するすべての静的情報がこのテキストファイルXMLフォーマットで格納されます。入力および出力信号の数、パラメータの数などの数量と、名前、単位、デフォルト初期値などの属性がこのファイルに格納されます。
    model.png
    FMUアイコンのオプションイメージファイル。
    sources
    すべてのCソースを含むオプションディレクトリ。FMUをコンパイルしてリンクするために必要なすべてのCソースファイルとCヘッダーファイルがこのディレクトリに含まれます。
    binaries
    バイナリを含むディレクトリ。バイナリは、一般的に、FMUプロバイダが機密情報や知識を保護するためにソースコードを非公開にしたい場合に提供されます。サポートされているプラットフォームごとに異なるサブディレクトリが提供されます。バイナリは、通常、ダイナミックリンクライブラリ(Windowsでは.dllLinuxでは.so)の形式です。
    resources
    FMUが読み取り方法を認識しているFMU固有のファイルフォーマットで追加のFMUデータ(テーブル、マップ、データファイルなど)を含むオプションディレクトリ。
  3. モデル交換FMU(ME-FMU)

    このタイプのFMUは、関数評価に通常必要な方程式とその他の数量を定義するのみです。FMUの応答は計算しません。その代わり、FMUの方程式がMotionSolveの解析方式に組み込まれており、MotionSolveはシミュレーションの進捗に伴うFMUの進展の時刻歴を同時に計算します。これは完全連成解析です。FMUには、常微分方程式、代数方程式、および離散差分方程式の任意の組み合わせを含めることができます。MotionSolveは3つすべてのタイプの方程式を処理できます。

    ME-FMUの構造とそれがシステムモデルにどのように含まれているかを以下に示します。
    • システムモデルがシミュレートされています。これは灰色のボックスとして示されています。
    • システムモデルは、提供される入力に対するモデルの応答を計算するソルバーとやり取りします。ソルバーは黄色のボックスとして示されています。
    • 1つ以上のFMUがシステムモデルに含まれています。これは、灰色のボックス内の青色のボックスとして示されています。
    • システムモデルは以下を実行します:
      • 1回目の呼び出しで、ユーザー指定の開始時刻t0とt0の時点で既知のユーザー指定の変数のリストvstartを取得します。
      • ソルバーから現在のシミュレーション時間tとFMUの連続状態xcを取得します(t0の時点で、ソルバーはFMUから提供された初期値を返します)。
      • 状態依存入力uを計算します。
      • 上記入力が与えられると、FMUは以下を実行します:
        • 必要なローカル変数wを計算します。
        • イベントインジケーターzを計算します。
        • その出力yを計算し、それをシステムモデルに返します。
    FMUの構造を以下に示します。


    図 2. FMUの構造
  4. 連成シミュレーションFMU(CS-FMU)
    連成シミュレーション用のFMIは、シミュレーターによってエクスポートされたサブシステムモデルと連成するように設計されています。FMIは次のように使用できます:
    • FMUソルバーはFMUに埋め込まれます。
    • FMIは外部ソルバーとのやり取りの方法を認識している単なるラッパーです。
    下の図は、2つのバリエーションをまとめたものです。
    図 3. 生成されたコードを使用した連成シミュレーション
    図 4. ツール連成を使用した連成シミュレーション

    MotionSolveは、FMUに必要な入力を提供し、FMU(その埋め込みソルバー)に、指定された期間の応答を計算するように要求します。実装に応じて、MotionSolve入力が内挿または外挿され、FMUソルバーに必要なさまざまな時点の入力信号値が提供されます。埋め込みソルバーは、FMUの内部状態とそれ以降の必要な出力を計算します。その名が示すとおり、これが連成シミュレーションアプローチです。

    FMUには、常微分方程式、代数方程式、および離散差分方程式の任意の組み合わせを含めることができます。これらはすべて、MotionSolveで表示されることはなく、出力のみがMotionSolveに提供されます。

  5. FMUによって参照されるソルバー配列
    モデル交換FMUには、4つのタイプのソルバー配列(X、U、Y、IC(オプション))への参照が含まれています。連成シミュレーションFMUには、2つのタイプのソルバー配列(U、Y)への参照が含まれています。これらについて以下に説明します。
    状態配列(X):
    ソルバー配列には、モデル交換FMUの連続状態が格納されます。FMU内で、状態Xが次の形式の連立常微分方程式のセットを介して定義されます。
    X ˙ ( t ) = f ( X ( t ) , u ( t ) ) ,   X ( 0 ) = X 0 MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbdfgBPj MCPbctPDgA0bqefqvATv2CG4uz3bIuV1wyUbqedmvETj2BSbqefm0B 1jxALjhiov2DaebbnrfifHhDYfgasaacH8rrps0lbbf9q8WrFfeuY= Hhbbf9v8qqaqFr0xc9pk0xbba9q8WqFfea0=yr0RYxir=Jbba9q8aq 0=yq=He9q8qqQ8frFve9Fve9Ff0dmeaacaGacmGadaWaaiqacaabai aafaaakeaaceWGybGbaiaadaqadaqaaiaadshaaiaawIcacaGLPaaa cqGH9aqpcaWGMbGaaiikaiaadIfacaGGOaGaamiDaiaacMcacaGGSa GaamyDaiaacIcacaWG0bGaaiykaiaacMcacaGGSaGaaeiiaiaadIfa caGGOaGaaGimaiaacMcacqGH9aqpcaWGybWaaSbaaSqaaiaaicdaae qaaaaa@4FBE@
    入力配列(U):
    ソルバー配列には、FMUからの入力が格納されます。システムモデルが、FMUへの必要な入力を時間とその独自の内部状態の関数として計算します。入力Uが次の形式の連立代数方程式のセットを介して定義されます:
    u ( t ) = h ( q ( t ) ) MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbdfgBPj MCPbctPDgA0bqefqvATv2CG4uz3bIuV1wyUbqedmvETj2BSbqefm0B 1jxALjhiov2DaebbnrfifHhDYfgasaacH8rrps0lbbf9q8WrFfeuY= Hhbbf9v8qqaqFr0xc9pk0xbba9q8WqFfea0=yr0RYxir=Jbba9q8aq 0=yq=He9q8qqQ8frFve9Fve9Ff0dmeaacaGacmGadaWaaiqacaabai aafaaakeaacaWG1bWaaeWaaeaacaWG0baacaGLOaGaayzkaaGaeyyp a0JaamiAaiaacIcacaWGXbGaaiikaiaadshacaGGPaGaaiykaaaa@44E5@ ここで、 q ( t ) MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbdfgBPj MCPbctPDgA0bqefqvATv2CG4uz3bIuV1wyUbqedmvETj2BSbqefm0B 1jxALjhiov2DaebbnrfifHhDYfgasaacH8rrps0lbbf9q8WrFfeuY= Hhbbf9v8qqaqFr0xc9pk0xbba9q8WqFfea0=yr0RYxir=Jbba9q8aq 0=yq=He9q8qqQ8frFve9Fve9Ff0dmeaacaGacmGadaWaaiqacaabai aafaaakeaacaWGXbGaaiikaiaadshacaGGPaaaaa@3E1D@ はモデル状態を表します。
    出力配列(Y):
    ソルバー配列には、FMUからの出力が格納されます。FMU内で、出力Yが次の形式の連立代数方程式のセットを介して定義されます。
    Y ( t ) = g ( X ( t ) , u ( t ) ) MathType@MTEF@5@5@+= feaagKart1ev2aqatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbdfgBPj MCPbctPDgA0bqefqvATv2CG4uz3bIuV1wyUbqedmvETj2BSbqefm0B 1jxALjhiov2DaebbnrfifHhDYfgasaacH8rrps0lbbf9q8WrFfeuY= Hhbbf9v8qqaqFr0xc9pk0xbba9q8WqFfea0=yr0RYxir=Jbba9q8aq 0=yq=He9q8qqQ8frFve9Fve9Ff0dmeaacaGacmGadaWaaiqacaabai aafaaakeaacaWGzbWaaeWaaeaacaWG0baacaGLOaGaayzkaaGaeyyp a0Jaam4zaiaacIcacaWGybGaaiikaiaadshacaGGPaGaaiilaiaadw hacaGGOaGaamiDaiaacMcacaGGPaaaaa@48AB@
    初期条件配列(IC):
    ソルバー配列には、FMU状態の初期条件X0が格納されます。MotionSolveとFMUは、同じコンピューター上で実行することも、別々のマシン上で実行することもできます。これを指定するには、ip_address属性が使用されます。MotionSolveは、とにかく、プロセス間通信プロトコルを使用して、FMUとデータを交換します。
  6. ip_address属性

    MotionSolveとFMUが同じマシン上で動作している場合は、ip_address = “PIPE”がデフォルトです。これは、FMUとMotionSolve間の通信媒体として機能する名前付きパイプを指定します。

    MotionSolveとFMUが異なるマシン上で動作している場合は、MotionSolveを実行しているマシンのIPアドレスがFMUに渡され、これによってFMUはMotionSolveとやり取りすることができます(例えば、ip_address = “172.16.254.1”)。

    この場合は、TCP/IP(Transmission Control Protocol/Internet Protocol)が使用されます。TCP/IPは、インターネット上で異種のネットワークデバイスを接続するために使用されるスイートメソッドです。TCP/IPは、プライベートネットワーク内の通信プロトコルとしても使用できます。このシナリオでは、FMUは別のコンピューター上に存在し、MotionSolveと通信します。2つのコンピューターは、地理的に異なる場所に設置できます。次の2つのシナリオが考えられ、両方がサポートされます:
    • MotionSolveとFMUが同じタイプのマシン上に存在する(両方がWin64上で動作している場合など)
    • MotionSolveとFMUが異なるタイプのマシン上に存在する(MotionSolveがWIN64上で動作し、FMUがLINUX64上で動作している場合やその逆の場合など)
  7. MotionSolveでのFMU解析サポート

    MotionSolveのFMUの解析サポートは、FMUのタイプによって異なります。解析サポートの概要を下の表に示します。サポートされていない解析モードはサーモンピンクで表示されています。



    図 5. MotionSolveでのFMUの解析サポート
  8. is_static_hold属性

    静解析時と擬似静解析時のFMUに関連付けられた動的状態の挙動は、属性is_static_holdによって決まります。

    is_static_hold = "TRUE"

    時間T=0で解析が行われる場合、状態は、IC配列によって指定された値で固定されたままです。動解析の後に解析が行われる場合、値は動的シミュレーションから取得された最後の値で固定されたままです。

    FMUの連続状態を定義する方程式は、以下に置き換えられます:x(t*) = x*。ここで、x*は定数です。

    注: 動的状態が固定されたままの場合、その時間導関数は、静的平衡または擬似静的ステップの最後でゼロにはならなくなります。入力値uは、この時点で変化しています。この結果、その後に動解析が実行される場合、その解析で過渡応答が生じる可能性があります。

    is_static_hold = "FALSE"

    解析プロセスの間、状態は一定に保たれず、システム全体のコンフィギュレーションの変化に従って変えることができます。これがどのように実現されるかを以下に示します:
    • 静解析および擬似静解析では、動的状態の導関数はゼロに設定されます。これにより、FMUがこれら2つの解析の一連の代数方程式に変換されます。
    • 平衡解析では、システムのコンフィギュレーションが変化すると、平衡条件を満たすように入力uが変化します。上記の式が解かれ、現在のuの値に対するxが計算されます。
    • この方法により、静解析や擬似静解析の終了時に、動的状態の時間導関数が確実にゼロになり、後続の動解析が滑らかになります。
  9. error_tol_factor属性

    error_tolerance_factor属性は、FMU type = “ModelExchange”の場合にのみ使用されます。

    error_tol_factorは、FMUの連続状態の精度を制御するために使用されます。変位積分誤差トレランスにこの係数を掛けて、FMUの連続状態の積分誤差トレランスが計算されます。

    error_tol_factor = 0.5は、FMUの状態の誤差トレランスが、モデル内の変位状態に関する誤差トレランスの2倍厳格であることを意味します。

    同様に、error_tol_factor = 2.0は、FMUの状態の誤差トレランスが、モデル内の変位状態に関する誤差トレランスの2倍寛容であることを意味します。