このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
FMU ブロックの実装
ブロックを実装し、Functional Mockup Unit (FMU) をブロックに割り当てます。その後、ブロックを調べて FMU を確認できます。この例では、車両の FMU を備えた FMU ブロックを使用します。
モデルを作成し、FMU ブロックを追加します。
FMU のソース コードに現在のプラットフォーム用のバイナリがない場合は、関数
fmudialog.compileFMUSources
を使用して現在のプラットフォーム用のバイナリを生成できます。ブロックのダイアログ ボックスの [FMU 名] パラメーターに FMU ファイルのパス名を入力し、[OK] または [適用] をクリックします。ファイルの拡張子
.fmu
はオプションです。[OK] または [適用] の初回クリック時に、FMU に設定する FMU モード (コシミュレーションまたはモデル交換) がブロックによって特定されます。
また、ブロックによって
slprj/_fmu/fmu_name
フォルダーが作成され、FMU ファイルの内容がこのフォルダーにアンパックされます。このフォルダーには必要に応じて次を含めることができます。binaries
— FMU のバイナリ ファイルdocumentation
— FMU のドキュメンテーションの HTML ファイルresources
— FMU のソース ファイルsources
— FMU のソース ファイルブロック マスク ファイルや記述ファイルなど、その他のサポート ファイル
FMU ブロックのアイコンと端子ラベルは、対応する FMU のラベルに更新されます。ブロックを FMU に関連付けた後で FMU を変更する場合は、FMU ブロックを右クリックして [ブロック パラメーター] を選択し、[FMU 名] に新しい FMU 名を入力します。このトピックの節ではFMU Import ブロックによる構造化データのインターフェイスの簡略化の例からの FMU を使用します。
FMU ブロックの確認
ブロックをダブルクリックします。現在のフォルダーから fmuVehicAOB.fmu
という名前の FMU を入力したと仮定します。FMU ブロックのダイアログ ボックスには fmuVehicAOB.fmu
ファイルで定義された FMU パラメーターが反映されます。
[パラメーター] タブ
FMU ブロック パラメーターのリストが表示されます。必要に応じて値を編集します。ツリー ビューを展開して構造体パラメーターの要素を編集できます。
[入力] タブと [出力] タブ
これらの 2 つのタブには、ブロックが定義する入力端子と出力端子のリストが表示されます。バス型または列挙型の端子については、[Type オブジェクト] フィールドにバス オブジェクトまたは列挙クラスが示されます。FMU ブロックは、バス型および列挙型の端子の信号属性を modelDescription.xml
ファイル内のメタデータを使用して判別します。
列挙型の端子で下流および上流のブロックに信号データを継承できるようにするには、[入力] タブと [出力] タブの [Type オブジェクト] フィールドを [Inherit:Auto]
に設定します。
バス型の端子で下流のブロックに信号データを継承できるようにするには、[出力] タブの [Type オブジェクト] フィールドを [Auto generate]
に設定します。バス端子では逆方向の継承はサポートされません。バス型の入力端子をもつ FMU には、互換性があるバス型の入力信号を提供する必要があります。
FMU で使用されるバス オブジェクトをワークスペースで作成するには、関数 fmudialog.createBusType
を使用します。
fmudialog.createBusType(gcb)
FMU で使用される列挙クラスをワークスペースで作成するには、fmudialog.createEnumType
関数を使用します。
fmudialog.createEnumType(gcb)
[シミュレーション] タブ
シミュレーションに関連したカスタマイズを有効にします。
相対許容誤差を入力するには、[FMU 許容誤差の有効化] を選択し、それを設定します。
モデル内のブロックのサンプル時間を決定するには、[通信ステップ サイズ] を設定します。Simulink® ソルバーからステップ サイズを継承するには、
-1
に設定します。このオプションは、FMU がコシミュレーション FMU である場合のみ利用できます。イベント モードでシミュレートする場合は、[イベント モードを有効にする] オプションをオンにします。このオプションは、FMU がコシミュレーション モードで使用されていて、FMI 3.0 標準との互換性がある場合にのみ使用可能です。
ログ記録を有効にするには、[FMU のデバッグ ログを有効にする] を選択します。
[デバッグ ログのリダイレクト先] でログのリダイレクト先を選択します。
[ファイル]
。slprj\_fmu\_logs_
に保存されます。modelname
\modelname_blockname
.txt[Display]
。MATLAB® コマンド ウィンドウに表示されます。
[FMU のデバッグ ログを有効にする] チェック ボックスが選択されており、[デバッグ ログのリダイレクト先] パラメーターが
Display
に設定されている FMU ブロックは、コシミュレーションに利用できません。コシミュレーションと複数のコアの詳細については、複数のコアにおけるコシミュレーション コンポーネントの実行を参照してください。[戻りステータスでログをフィルター処理] で、希望する戻りステータスのチェック ボックスをオンにします。
[次を使用した FMU のシミュレーション] パラメーターを使用して、FMU シミュレーションのバイナリを指定します。64 ビット Windows バイナリの場合は [x86_64-windows]、32 ビット Windows バイナリの場合は [x86-windows] を指定します。Windows® 上に Linux® バイナリを含む FMU があり、その Linux バイナリをシミュレーションに使用する場合は、[次を使用した FMU のシミュレーション] パラメーターを [x86_64-linux] に設定します。詳細については、Simulate FMU with Linux Binary on Windows (Simulink Compiler)を参照してください。
[コード生成] タブ
FMU ブロックの生成されたコードの FMI API のソースを指定します。生成されたコードが、ソース コードからインライン化された FMU 関数を使用するか、関数ポインターを使用してコンパイルされたバイナリから FMI API を参照するかを指定します。入れ子にされた FMU、ERT ターゲット、GRT ターゲット、およびラピッド アクセラレータ シミュレーション モードでは、ソース コード ベースのコード生成が既定のオプションです。例については、Integrate FMI APIs in Generated Code Using FMU Source Code or Binaryを参照してください。
ブロックの入力、出力、パラメーター、および内部変数構造体の変更
FMU ブロックの入力端子、出力端子、およびパラメーターのレイアウトを以下のパラメーターを使用して変更できます。
パラメーター | アクション | 設定 |
---|---|---|
FMUInputMapping | 入力端子の階層を変更します。 |
|
FMUOutputMapping | 出力端子の階層を変更します。 |
|
FMUParamMapping | パラメーターの階層を変更します。 |
|
FMUInternalMapping | 内部変数の階層を変更します。 |
|
関数 get_param
と set_param
を使用して、これらの値を設定します。たとえば、以下のような構造体の構成を示す [ブロック パラメーター] タブがあると仮定します。
パラメーターは struct
に含まれています。パラメーターを個別にリストするには、FMUParamMapping
プロパティを 'Flat'
に設定します。
set_param(gcb,'FMUParamMapping', 'Flat')
タイミングに関する考慮事項
[通信ステップ サイズ] パラメーターで FMU ブロックのサンプル時間を設定できます。このブロックのサンプル時間設定 tC は、すべての Simulink ブロックと同様に、モデルのサンプル時間 tM の整数倍でなければなりません。Simulink では、通信ステップ サイズ tC がモデル ステップ サイズ tM の倍数でない場合エラーが発生します。
一方、FMU tL のローカル ステップ サイズは FMU 指定の一部で、FMU でのみ内部で認識されます。適切に動作させるために、通信ステップ サイズ tC は tL の整数倍でもなければなりません。モデルのサンプル時間 tM またはブロックのサンプル時間 tC が FMU ローカル ステップ サイズ tL と互換しない場合、FMU では、実装に応じて実行時にエラーが発生する場合としない場合があります。
FMU ブロックでは、時間ベースのクロックを使用する FMU のインポートがサポートされます。時間ベースのクロックの FMU 変数を使用して FMU の実行レートを制御できます。Simulink で時間ベースのクロックを使用する FMU のシミュレーションを実行する例については、Import and Simulate FMU with Time-Based Clocks in Simulinkを参照してください。
FMU のトラブルシューティング
FMU の使用に関して問題が発生した場合は、以下のことを行ってください。
FMU Check ツールを使用して FMU を検証する。
FMU ブロックの [シミュレーション] タブで [FMU のデバッグ ログを有効にする] チェック ボックスをオンにする。
FMU のサプライヤに問い合わせる。