モデルをツール結合 FMU としてエクスポート
Simulink® コンポーネントをサードパーティ ソフトウェアに統合するには、Simulink モデルをツール結合 Functional Mockup Unit (FMU) としてエクスポートします。サードパーティ製ツールは FMU を実行する際に、必要なライセンスをチェックアウトし、Simulink のローカル インストールを開始してモデルを起動します。ツール結合 FMU は、FMU によってカプセル化される固定ステップ ソルバーと可変ステップ ソルバーをサポートします。
プロジェクトを使用して FMU をエクスポートします。モデルを開き、[新規] 、 [プロジェクト] 、 [このモデルからの新規プロジェクト] を選択してモデルからプロジェクトを作成します。この例では、vdp
モデルを使用します。
プロジェクトから FMU を対話的にエクスポートできます。
プロジェクトで、[共有]、[ツール結合 FMU] を選択します。
[Copyright]、[説明]、および [FMU アイコン] フィールドに入力します。[設定の保存と出力形式] をクリックし、名前を指定します。
生成された FMU には、モデルの実装と、エクスポート中に指定されたメタデータが含まれます。
<?xml version="1.0" encoding="utf-8"?> <fmiModelDescription author="" copyright="" description="" fmiVersion="2.0" generationDateAndTime="2018-08-16T15:51:48Z" generationTool="Simulink (R2018b)" guid="5bd096be-a08d-020e-fc96-847aa21def5b" license="" modelName="vdp" variableNamingConvention="structured" version="1.8">
次のようにして、プロジェクトを作成し、コマンド ラインから FMU にエクスポートすることもできます。
>> p = slproject.create('vdpProject') >> copyfile(which('vdp'), './vdpFMU.slx') >> p.addFile('./vdpFMU.slx') >> Simulink.fmuexport.ExportSimulinkProjectToFMU(p,'vdpFMU.slx','-fmuname','vdpFMU')
コマンド ラインからその他の FMU エクスポート オプションを示すには、以下を入力します。
help Simulink.fmuexport.ExportSimulinkProjectToFMU
モデルは、エクスポートについて以下の条件を満たさなければなりません。
モデルはノーマル モードまたはアクセラレータ シミュレーション モードでなければならない。
ルートの入力端子と出力端子は次のいずれかの数値データ型でなければならない。
double
int32
Boolean
すべての要素が
double
、int32
、またはBoolean
のいずれかであるSimulink.Bus
オブジェクト基本データ型が
double
、int32
、またはBoolean
のいずれかに解決されるSimulink.AliasType
オブジェクト
Simulink からエクスポートされたコシミュレーション コンポーネントである場合、FMU のローカルのサンプル時間は元のモデルのサンプル時間です。
ツール結合 FMU に調整可能なパラメーターを含める
調整可能なパラメーターを含めるには、以下を行います。
関連する Simulink プロジェクトからモデルを開きます。
Simulink モデルから、[モデル化] タブをクリックし、モデル エクスプローラーを起動します。
[モデル ワークスペース] を選択し、変数 MATLAB® または Simulink パラメーターを追加します。
追加する調整可能なパラメーターのそれぞれについて、[データ プロパティ] または [Simulink.Parameter] ペインで [引数] チェック ボックスをオンにします。
[適用] をクリックします。
モデル内の調整可能なパラメーターを参照します。
ツール結合 FMU をエクスポートします。
コンテンツを隠すための保護モデルの使用
エクスポートされたツール結合 FMU は zip パッケージで、このパッケージには元の Simulink プロジェクトとそのリソース フォルダー内のモデル ファイルが含まれています。知的所有権を保護し、モデルのコンテンツを隠すには、保護モデルを使用します。モデルを保護モデルとして保存するときは、シミュレーションなど、保護モデルでサポートする機能を選択します。Model ブロックをもつモデルを作成して SLXP ファイルを読み込みます。その後、ツール結合 FMU にエクスポートするときに、このモデルをメイン インターフェイス モデルとして使用します。詳細については、コンテンツを隠すためのモデルの保護 (Embedded Coder)を参照してください。
エクスポートされたツール結合 FMU の使用
エクスポートされた FMU には、Simulink のローカル インストールの実行が必要です。コシミュレーションに使用される MATLAB バージョンは、FMU がエクスポートされた MATLAB バージョンと同じでなければなりません。Windows® で、FMU を実行するアプリケーションは、必要なライセンスを自動的にチェックアウトできます。他のオペレーティング システムの場合は、以下の設定を適用します。
Linux® では、次のようにします。
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:<InstallationFolder>/bin/glnxa64:<InstallationFolder>/extern/bin/glnxa64 (csh/tcsh) export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:<InstallationFolder>/bin/glnxa64:<InstallationFolder>/extern/bin/glnxa64 (bash)
macOS では、次のようにします。
setenv DYLD_LIBRARY_PATH ${DYLD_LIBRARY_PATH}:<InstallationFolder>/bin/maci64:<InstallationFolder>/extern/bin/maci64 (csh/tcsh) export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:<InstallationFolder>/bin/maci64:<InstallationFolder>/extern/bin/maci64 (bash)
macOS の場合、システム整合性保護 (SIP) により、setenv
コマンドは、MATLAB などの新しいプロセスを開始するアプリケーションで機能しません。DYLD_LIBRARY_PATH
を <InstallationFolder>/bin/maci64:<InstallationFolder>/extern/bin/maci64
に設定するには、Append library path to "DYLD_LIBRARY_PATH" in MAC に従ってください。
FMU を実行する前に、オペレーティング システム コンソールから MATLAB セッションを設定しなければなりません。このセッションを設定してから、サードパーティ製アプリケーションを開始し、ツール結合 FMU をインポートします。各 FMU インスタンスには、新しい MATLAB セッションが必要です。
MATLAB からの専用セッションの開始
FMU をインポートするアプリケーションが FMU の単一インスタンスを実行する場合、MATLAB を使用してセッションを開始できます。
>> shareMATLABForFMUCoSim
shareMATLABForFMUCoSim
は、インポートされた FMU のコシミュレーションを実行するための外部ツールからの要求に利用可能な、現在の MATLAB セッション専用です。FMU がこのセッションに接続している場合、Simulink エディターおよび Simulink プロジェクトは読み込まれ、コシミュレーションは自動的に開始します。このセッションを使用して、コシミュレーションの一時停止、再開を行うことができるほか、コシミュレーションの実行中にコマンド ウィンドウからパラメーターを調整して信号をプロットできます。コシミュレーションが完了するか、ユーザーによって停止されるか、実行時エラーで中断される場合、MATLAB が閉じられ、Simulink エディターおよび Simulink プロジェクトがアンロードされて、モデルへの変更が破棄されます。エラーが発生すると、この FMU をインポートするシミュレーション ツールに表示されます。各セッションは、同時に 1 つの FMU インスタンスに接続できます。
オペレーティング システムからの専用セッションの開始
FMU をインポートするアプリケーションが複数の FMU インスタンスを起動する場合、オペレーティング システム コンソールを使用して専用の MATLAB セッションを開始します。MATLAB で matlabroot
を実行し、<matlabroot> を検出します。
その後、<matlabroot> を使用します。
Windows では、次の手順を実行します。
<matlabroot>\toolbox\shared\fmu_share\script\fmu-matlab-setup.cmd [NumberOfMATLABSessions]
Linux および macOS の場合:
<matlabroot>/toolbox/shared/fmu_share/script/fmu-matlab-setup [NumberOfMATLABSessions]
入力引数 NumberOfMATLABSessions
は、このスクリプトの開始時に起動される MATLAB セッションの数を表す整数です。NumberOfMATLABSessions
がない場合、MATLAB セッションは起動されません。その場合、プログラムはコマンド ライン インターフェイス モードになり、コマンドを待機します。
使用可能なコマンドを確認するには、次のように help
と入力します。
> help Command list: quit - Close all shared MATLABs and exit. list - List shared MATLABs. start NUMBER_OF_MATLABS - Start NUMBER_OF_MATLABS more MATLABs. stop NUMBER_OF_MATLABS - Stop NUMBER_OF_MATLABS MATLABs. ignore - Stop asking about the hardware core count when launching MATLABs. clean MATLAB_NUMBER - Clean up the MATLAB workspace for MATLAB #MATLAB_NUMBER. Use 0 for all MATLABs. help - Print the command list.
FMU ごとに 1 つのセッションを起動し、同時に実行します。1 つの FMU がある場合は、以下を入力します。
> start 1
同時に実行している FMU が 3 つある場合は、以下を入力します。
> start 3
1 台のマシンで 1 つの MATLAB 管理ツールのみ実行しなければなりません。