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
- y_array_id
- このFMUの出力yを格納するために使用するReference_ArrayのIDを指定します。
- 整数
- デフォルト:None
- u_array_id
- このFMUの入力uを格納するために使用するReference_ArrayのIDを指定します。
- 整数
- デフォルト:None
- ic_array_id
- このFMUの連続状態xの初期条件を格納するために使用するReference_ArrayのIDを指定します。
- 整数
- デフォルト:None
- is_static_hold
- 動的状態の値が静的または擬似静的シミュレーションで一定に保たれるかどうかを示すフラグ。
- ブール
- デフォルト:FALSE
- モデル交換FMUにのみ適用可能
- error_tol_factor
- type = ModelExchangeのFMUでの連続状態の積分誤差トレランススケールファクター。
- Real > 0
- デフォルト:1.0
- モデル交換FMUにのみ適用可能
- 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”
- 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>
コメント
- ファンクショナルモックアップインターフェース
ファンクショナルモックアップインターフェース(FMI)は、XMLファイルとコンパイルされたCコードの組み合わせを使用したモデルをサポートするためのツールに依存しない標準です。
FMIは、FMUと呼ばれる実行ファイルによって実装されるインターフェースを定義します。FMI内の関数は、MotionViewがMotionSolveでFMUのインスタンスを作成するために使用されます。MotionSolve内のFMUは、一連の微分方程式と代数方程式で記述される汎用エンティティです。実行時に、MotionSolveがこれらの方程式または偏導関数を評価する必要がある場合、MotionSolve内のFMUインスタンスはFMI内で定義された関数を介してFMUオブジェクトとやり取りします。これらの関数は、MotionSolveから必要な値を入力として“取得”し、FMUから必要な値をMotionSolveへの出力として“返し”ます。これは、下の図に示すとおりです。
図 1. MotionView、MotionSolve、およびFMU間の相互作用現在は、FMI 1.0とFMI 2.0の2つのバージョンのFMIが使用されています。MotionSolveはFMI 2.0のみをサポートしています。
- FMUの内容FMUは、通常、拡張子が.fmuのzipファイルで配布されます。このzipファイルは次のような構造となっています:
- modelDescription.xml
- これは、FMIモデル記述ファイルです。FMUに関するすべての静的情報がこのテキストファイルXMLフォーマットで格納されます。入力および出力信号の数、パラメータの数などの数量と、名前、単位、デフォルト初期値などの属性がこのファイルに格納されます。
- model.png
- FMUアイコンのオプションイメージファイル。
- sources
- すべてのCソースを含むオプションディレクトリ。FMUをコンパイルしてリンクするために必要なすべてのCソースファイルとCヘッダーファイルがこのディレクトリに含まれます。
- binaries
- バイナリを含むディレクトリ。バイナリは、一般的に、FMUプロバイダが機密情報や知識を保護するためにソースコードを非公開にしたい場合に提供されます。サポートされているプラットフォームごとに異なるサブディレクトリが提供されます。バイナリは、通常、ダイナミックリンクライブラリ(Windowsでは.dll、Linuxでは.so)の形式です。
- resources
- FMUが読み取り方法を認識しているFMU固有のファイルフォーマットで追加のFMUデータ(テーブル、マップ、データファイルなど)を含むオプションディレクトリ。
- モデル交換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を計算し、それをシステムモデルに返します。
図 2. FMUの構造 - 連成シミュレーションFMU(CS-FMU)連成シミュレーション用のFMIは、シミュレーターによってエクスポートされたサブシステムモデルと連成するように設計されています。FMIは次のように使用できます:
- FMUソルバーはFMUに埋め込まれます。
- FMIは外部ソルバーとのやり取りの方法を認識している単なるラッパーです。
図 3. 生成されたコードを使用した連成シミュレーション
図 4. ツール連成を使用した連成シミュレーション
MotionSolveは、FMUに必要な入力を提供し、FMU(その埋め込みソルバー)に、指定された期間の応答を計算するように要求します。実装に応じて、MotionSolve入力が内挿または外挿され、FMUソルバーに必要なさまざまな時点の入力信号値が提供されます。埋め込みソルバーは、FMUの内部状態とそれ以降の必要な出力を計算します。その名が示すとおり、これが連成シミュレーションアプローチです。
FMUには、常微分方程式、代数方程式、および離散差分方程式の任意の組み合わせを含めることができます。これらはすべて、MotionSolveで表示されることはなく、出力のみがMotionSolveに提供されます。
- FMUによって参照されるソルバー配列モデル交換FMUには、4つのタイプのソルバー配列(X、U、Y、IC(オプション))への参照が含まれています。連成シミュレーションFMUには、2つのタイプのソルバー配列(U、Y)への参照が含まれています。これらについて以下に説明します。
- 状態配列(X):
- ソルバー配列には、モデル交換FMUの連続状態が格納されます。FMU内で、状態Xが次の形式の連立常微分方程式のセットを介して定義されます。
- 入力配列(U):
- ソルバー配列には、FMUからの入力が格納されます。システムモデルが、FMUへの必要な入力を時間とその独自の内部状態の関数として計算します。入力Uが次の形式の連立代数方程式のセットを介して定義されます:
- 出力配列(Y):
- ソルバー配列には、FMUからの出力が格納されます。FMU内で、出力Yが次の形式の連立代数方程式のセットを介して定義されます。
- 初期条件配列(IC):
- ソルバー配列には、FMU状態の初期条件X0が格納されます。MotionSolveとFMUは、同じコンピューター上で実行することも、別々のマシン上で実行することもできます。これを指定するには、ip_address属性が使用されます。MotionSolveは、とにかく、プロセス間通信プロトコルを使用して、FMUとデータを交換します。
- 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上で動作している場合やその逆の場合など)
- MotionSolveでのFMU解析サポート
MotionSolveのFMUの解析サポートは、FMUのタイプによって異なります。解析サポートの概要を下の表に示します。サポートされていない解析モードはサーモンピンクで表示されています。
図 5. MotionSolveでのFMUの解析サポート - 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が計算されます。
- この方法により、静解析や擬似静解析の終了時に、動的状態の時間導関数が確実にゼロになり、後続の動解析が滑らかになります。
- 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倍寛容であることを意味します。