メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Simulink.SubSystem.convertToModelReference

サブシステムからモデルへの変換

説明

Simulink.SubSystem.convertToModelReference(blk,UseConversionAdvisor=true) は、blk で指定されたサブシステムに対してモデル参照変換アドバイザーを開きます。

この関数を使用する前に、サブシステムを含むモデルを読み込みます。

[t,h] = Simulink.SubSystem.convertToModelReference(blks,mdls) は、blks で指定された 1 つ以上のサブシステムを、mdls で指定された名前のモデルに変換します。

関数が変換するサブシステムごとに、関数は以下を行います。

  • モデルを作成する。

  • サブシステムの内容を新しいモデルにコピーする。

  • 元のサブシステムからのコンパイルされた属性を使用するように、新しいモデルのルートレベルの入力ブロックと出力ブロックを更新する。

  • 親モデルのコンフィギュレーション セットを新しいモデルにコピーするか、親モデルと同じコンフィギュレーション セットを参照する。変換によって新しいモデルの一部の構成設定を変更して、新しいモデルを参照モデルとして使用できるようにすることができます。

該当する場合、関数は以下も行います。

  • サブシステムによって使用されるモデル ワークスペースの内容を親モデルから新しいモデルにコピーする。

  • 親モデルで使用されるデータ ディクショナリを新しいモデルに適用する。

  • 新しいモデルに必要な Simulink.Bus オブジェクト、Simulink.Signal オブジェクト、および調整可能なパラメーターを作成する。

  • 元の Subsystem ブロックのブロック マスクに基づいて、新しいモデルのシステム マスクを作成する。システム マスクは、マスク初期化コードなどのブロック マスクの一部の機能をサポートしていません。詳細については、システム マスクの概要を参照してください。

  • Requirements Toolbox™ ソフトウェアで作成された要件リンクを、元の Subsystem ブロックから新しい Model ブロックにコピーする。

[t,h] = Simulink.SubSystem.convertToModelReference(blks,mdls,Name=Value) では、前の構文の入力引数に加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、自動修正を適用するには、AutoFixtrue に設定します。

すべて折りたたむ

sldemo_mdlref_conversion という名前のモデルを開いてコンパイルします。変換を成功させるには、サブシステムを含むモデルが正常にコンパイルされる必要があります。

mdl = "sldemo_mdlref_conversion";
open_system(mdl);
set_param(mdl,SimulationCommand="Update")

sldemo_mdlref_conversion model with Subsystem block named Bus Counter

モデルは警告やエラーなしでコンパイルされます。

Bus Counter という名前の Subsystem ブロックに対して、モデル参照変換アドバイザーを開きます。

blk = "sldemo_mdlref_conversion/Bus Counter";
Simulink.SubSystem.convertToModelReference(blk,...
    UseConversionAdvisor=true);
Updating Model Advisor cache...
Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.

モデル参照変換アドバイザーが開きます。

sldemo_mdlref_conversion という名前のモデルを開いてコンパイルします。変換を成功させるには、サブシステムを含むモデルが正常にコンパイルされる必要があります。

mdl = "sldemo_mdlref_conversion";
open_system(mdl);
set_param(mdl,SimulationCommand="Update")

sldemo_mdlref_conversion model with Subsystem block named Bus Counter

モデルは警告やエラーなしでコンパイルされます。

Bus Counter という名前の Subsystem ブロックに対して、モデル参照変換アドバイザーを開きます。

blk = "sldemo_mdlref_conversion/Bus Counter";
newmdl = "BusCounter";
Simulink.SubSystem.convertToModelReference(blk,newmdl);
### Successfully converted Subsystem block to Model block.

既定では、この関数は Subsystem ブロックを Model ブロックに置き換えません。代わりに、この関数は、新しいモデルを参照する Model ブロックを含む新しいウィンドウを開きます。

untitled model with Model block named Bus Counter

sldemo_mdlref_conversion という名前のモデル例を開いてコンパイルします。変換を成功させるには、サブシステムを含むモデルが正常にコンパイルされる必要があります。

mdl = "sldemo_mdlref_conversion";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

sldemo_mdlref_conversion model with Subsystem block named Bus Counter

モデルは警告やエラーなしでコンパイルされます。

以下のオプションを指定し、Bus Counter という名前の Subsystem ブロックの内容を BusCounter という名前の参照モデルに変換します。

  • できる限り問題を自動的に修正する。

  • 新しいモデルを参照する Model ブロックによって Subsystem ブロックを置き換える。

  • 変換前後のシミュレーション結果をチェックする。

subsys = "sldemo_mdlref_conversion/Bus Counter";
newmdl = "BusCounter";
Simulink.SubSystem.convertToModelReference(subsys,newmdl,...
   AutoFix=true,ReplaceSubsystem=true,CheckSimulationResults=true);
### Successfully converted Subsystem block to Model block.

sldemo_mdlref_conversion model with Model block named Bus Counter

Subsystem ブロックが、BusCounter という名前のモデルを参照する Model ブロックによって置き換えられます。

関数 Simulink.SubSystem.convertToModelReference を 1 回呼び出して、複数のサブシステムを参照モデルに変換できます。

f14 という名前のモデルを開いてコンパイルします。変換を成功させるには、サブシステムを含むモデルが正常にコンパイルされる必要があります。

mdl = "f14";
open_system(mdl)
set_param(mdl,SimulationCommand="Update")

f14 model with Subsystem blocks named Controller and Aircraft Dynamics Model

モデルは警告やエラーなしでコンパイルされます。

変換するモデルを準備して、変換中に特定される問題を排除するか、問題の数を減らします。

変換前後のシミュレーション結果が同等であることをチェックできるように、Dataset 形式を使用してモデルの出力をログに記録します。

set_param(mdl,SaveOutput="on",SaveFormat="Dataset")

新しい参照モデルは、そのコンフィギュレーション パラメーター設定を親モデルから継承します。信号の関連付けの推奨設定を使用するように f14 モデルを更新します。この設定では、Simulink.Signal オブジェクトに対して明示的に指定された信号の関連付けのみがサポートされます。

set_param(mdl,SignalResolutionControl="UseLocalSettings")

以下のオプションを指定し、Controller および Aircraft Dynamics Model という名前の Subsystem ブロックの内容を参照モデルに変換します。

  • 問題を自動的に修正する。

  • 新しいモデルを参照する Model ブロックによって Subsystem ブロックを置き換える。

  • 変換前後のシミュレーション結果をチェックする。

ss1 = "f14/Controller";
ss2 = "f14/Aircraft Dynamics Model";
mdl1 = "Controller";
mdl2 = "AircraftDynamics";
Simulink.SubSystem.convertToModelReference([ss1 ss2],[mdl1 mdl2],...
    AutoFix=true,ReplaceSubsystem=true,CheckSimulationResults=true)
### Successfully converted Subsystem block to Model block.

f14 model with Model blocks named Controller and Aircraft Dynamics Model

Controller および Aircraft Dynamics Model という名前の Subsystem ブロックが、それぞれ Controller および AircraftDynamics という名前のモデルを参照する Model ブロックによって置き換えられます。

入力引数

すべて折りたたむ

Subsystem ブロックのパスまたはハンドル。数値スカラー、文字ベクトル、または string スカラーとして指定します。

変換できるサブシステムの詳細については、参照モデルの条件付き実行を参照してください。

データ型: double | char | string

Subsystem ブロックのパスまたはハンドル。数値配列、文字ベクトル、文字ベクトルの cell 配列、または string 配列として指定します。

変換できるサブシステムの詳細については、参照モデルの条件付き実行を参照してください。

変換する複数のサブシステムを指定すると、変換プロセスは各サブシステムを変換しようとします。正常に変換されたサブシステムは、他のサブシステムの変換が失敗しても、参照モデルになります。

親サブシステムとそのサブシステムの子を同時に変換することはできません。

ヒント

変換する複数のサブシステムを 1 つのコマンドで指定すると、各サブシステムを個別に変換するのに比べ、時間が節約される可能性があります。複数のサブシステムの変換プロセスでは、モデルは 1 回だけコンパイルされます。

複数のサブシステムを指定する場合:

データ型: double | char | string | cell

新しいモデルの一意の名前。文字ベクトル、文字ベクトルの cell 配列、または string 配列として指定します。

有効なモデル ファイル名については、Choose Valid Model File Namesを参照してください。

変換するサブシステムを複数指定する場合は、モデル名の数と同じ数を指定します。各モデル名は、指定されたサブシステムに同じ順序で対応します。

データ型: char | string | cell

名前と値の引数

すべて展開する

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: Simulink.SubSystem.convertToModelReference(blk,mdl,AutoFix=true,ReplaceSubsystem=true)

変換

すべて展開する

変換の問題の自動修正。false または true として指定します。

AutoFixtrue に設定すると、アドバイザーは一部の変換の問題を自動的に修正します。アドバイザーが修正できない問題については、手動で対処する必要があります。

アドバイザーは、サブシステム境界を越える Goto ブロックや From ブロックなどの変換の問題を修正できます。自動修正に基づいて、新しいモデルは元のサブシステムよりも多くの端子をもつことがあります。

変換中に必要な修正の数を減らすには、変換するサブシステムの準備を参照してください。

依存関係

Forcetrue に設定すると、このオプションは無視されます。

データ型: logical

エラーをダウングレードする強制的な変換。false または true として指定します。

Forcetrue に設定すると、変換プロセスはエラーを警告として返し、AutoFixtrue に設定していてもエラーを修正しません。

Forcetrue に設定すると、関数を使用して変換の初期ステップを実行できます。その後、変換プロセスを自分で完了します。

データ型: logical

変換データ ファイルの一意の名前。文字ベクトルまたは string スカラーとして指定します。

変換データ ファイルには、変換中に作成された変数とオブジェクトが保存されます。

既定では、ファイル名は親モデル名で始まり、_conversion_data.mat で終わります。たとえば、mymodel という名前のモデル内のサブシステムの場合、既定の変換ファイル名は mymodel_conversion_data.mat です。

変換データは、MAT ファイル (.mat) またはスクリプト (.m) に保存できます。.m ファイル拡張子を指定すると、ファイルは変数をシリアル化します。

ファイルの保存先を制御するには、絶対パスまたは相対パスでファイル名を指定します。

依存関係

この引数を使用するには、親モデルでデータ ディクショナリを使用してはなりません。

データ型: char | string

モデルのインターフェイス

すべて展開する

親モデル レイアウトを保持するためのラッパー サブシステム。false または true として指定します。

サブシステムを参照モデルに変換する場合、変換プロセスでラッパー サブシステムを作成できます。ラッパー サブシステムには、変換からの Model ブロックが含まれます。

変換によってインターフェイスに端子が追加されると、ラッパー サブシステムが自動的に作成されます。たとえば、Goto ブロックと From ブロックがサブシステム境界を越えると、Model ブロックは元の Subsystem ブロックよりも多くの端子をもつことがあります。変換によって、元のサブシステムと同じ数の端子をもつラッパー サブシステムが作成されます。このラッパー サブシステムには、新しいモデルを参照する Model ブロックが含まれます。

データ型: logical

インターフェイス定義用の新しいバス オブジェクト。false または true として指定します。

サブシステムとは異なり、モデルには定義済みのインターフェイスが必要です。バーチャル バスを含むインターフェイスを定義するには、新しいモデルで以下のいずれかのオプションを使用する必要があります。

  • In Bus Element ブロックと Out Bus Element ブロック

  • Simulink.Bus オブジェクトを指定する Inport ブロックと Outport ブロック

既定では、変換によってバス オブジェクトは作成されません。代わりに、変換では、モデル インターフェイスでバーチャル バスをサポートするために、In Bus Element ブロックと Out Bus Element ブロックが使用されます。

CreateBusObjectsForAllBusestrue に設定すると、変換によって、サブシステムで使用される、サブシステムの入力端子または出力端子に接続された各バーチャル バス用のバス オブジェクトが作成されます。

親モデルでデータ ディクショナリが使用されている場合、新しいバス オブジェクトはそのデータ ディクショナリに格納されます。バス オブジェクトを保存するには、親モデルまたはデータ ディクショナリを保存します。親モデルでデータ ディクショナリが使用されていない場合、バス オブジェクトは DataFileName で指定されたファイルに保存されます。

データ型: logical

親モデルからコード マッピングをコピー。false または true として指定します。

CopyCodeMappingstrue に設定すると、関数は既存のコード マッピング構成を親モデルから新しいモデルにコピーします。

コード マッピング情報には、コード生成のためのモデル データ要素の設定が含まれます。この引数はシミュレーションに影響しません。

詳細については、サブシステムの参照モデルへの変換とコードの生成 (Simulink Coder)を参照してください。

データ型: logical

モデルの実装

すべて展開する

サブシステムを参照モデルに置換。false または true として指定します。

既定では、変換によって元のモデルは更新されません。元のモデルが開いている場合、変換によって、新しいモデルを参照する Model ブロックを含む新しいウィンドウが開きます。

ReplaceSubsystemtrue に設定すると、変換では、指定した各 Subsystem ブロックを、対応する新しいモデルを参照する Model ブロックに置き換えようとします。自動修正によってインターフェイスに端子が追加された場合、親モデルのレイアウトを維持するために、アドバイザーは元の Subsystem ブロックを、新しい Model ブロックを含む Subsystem ブロックに置き換えます。

ヒント

サブシステムを変換する前に元のモデルのバックアップを作成することを検討してください。変換を元に戻す場合、バックアップを作成しておくと元のモデルの復元に役立ちます。また、バックアップを使用すると、新しいシステム マスクと元の Subsystem ブロック マスクを比較できます。新しいモデルのシステム マスクは、元の Subsystem ブロックのブロック マスクとは異なる場合があります。たとえば、変換ではブロック マスクからシステム マスクにマスク初期化コードがコピーされません。詳細については、システム マスクの概要を参照してください。

データ型: logical

新しい Model ブロックのシミュレーション モード。"Normal""Accelerator""Software-in-the-loop (SIL)"、文字ベクトルの cell 配列、または string 配列として指定します。

Model ブロック シミュレーション モードは、参照モデルの対応するインスタンス用のシミュレーション モードを制御します。同じモデルを参照する別の Model ブロックでは、別のシミュレーション モードを指定できます。

  • "Normal" — 参照モデルをインタープリターで実行します。参照モデルは、親モデル内に直接実装された Atomic Subsystem であるかのように扱われます。

  • "Accelerator" — 参照モデルの MEX ファイルを作成します。その後、S-Function を実行して参照モデルを実行します。

  • "Software-in-the-loop (SIL)" — このオプションには Embedded Coder® のライセンスが必要です。Model ブロックの [コード インターフェイス] のパラメーター設定に基づき、量産コードを生成します。そのコードは、ホスト プラットフォーム用にコンパイルされてホスト プラットフォーム上で実行されます。

Model ブロックの角は、Model ブロックのシミュレーション モードを示しています。ノーマル モードでは、角に塗りつぶしなしの三角形が表示されます。アクセラレータ モードでは、角の三角形は塗りつぶされます。SIL モードでは、角は塗りつぶされ、ブロック アイコンに (SIL) という語が表示されます。

親モデルのシミュレーション モードが Model ブロックのシミュレーション モードをオーバーライドする場合があります。詳細については、モデルの階層構造内のシミュレーション モードの選択を参照してください。

変換するサブシステムを 1 つ指定する場合は、新しい Model ブロックのシミュレーション モードを、"Normal""Accelerator"、または "Software-in-the-loop (SIL)" として指定します。

例: Simulink.SubSystem.convertToModelReference(blk,mdl,ReplaceSubsystem=true,SimulationModes="Accelerator")

R2024b より前: SimulationModes の値は、cell 配列または string 配列で指定します。

変換するサブシステムを複数指定する場合は、新しい各 Model ブロックのシミュレーション モードを、string 配列または文字ベクトルの cell 配列で指定します。サブシステムと新しいモデル名の指定に使用したのと同じ順序で、Model ブロックのシミュレーション モードを指定します。

例: Simulink.SubSystem.convertToModelReference([blk1 blk2],[mdl1 mdl2],ReplaceSubsystem=true,SimulationModes=["Normal" "Accelerator"])

依存関係

この引数を使用するには、ReplaceSubsystemtrue に設定します。

データ型: char | string | cell

生成するモデル参照ターゲット。"Sim" または "Coder" として指定します。

  • "Sim" — モデル参照のシミュレーション ターゲットを生成します。

  • "Coder" — モデル参照のコード生成ターゲットを生成します。

シミュレーション結果の比較

すべて展開する

変換前後の最上位モデルのシミュレーション結果の比較。false または true として指定します。

シミュレーション結果間の差分が許容誤差レベルを超える場合、関数はエラー メッセージを表示します。

ヒント

変換を実行する前に以下のようにします。

  • SimulationModes を元のモデルで使用されるシミュレーション モードに設定する。作成する Model ブロックごとに、このシミュレーション モードを指定します。

  • StopTimeAbsoluteTolerance、および RelativeTolerance を設定する。

依存関係

この引数を使用するには、次のようにします。

  • 関心のあるサブシステム出力信号に対して信号のログを有効にする。

  • ReplaceSubsystemtrue に設定する。

データ型: logical

シミュレーション結果の比較の終了時間。数値スカラーとして指定します。

終了時間は、親モデルの開始時間以上の有限スカラーでなければなりません。詳細については、開始時間を参照してください。

依存関係

この引数を使用するには、CheckSimulationResultstrue に設定します。

データ型: double

比較のための信号の絶対許容誤差。数値スカラーとして指定します。

絶対許容誤差とは、測定された信号の値がゼロに近づくにつれた、ソルバーの最大許容誤差です。変換前のシミュレーション結果はベースラインを確立します。変換後のシミュレーション結果は許容誤差の範囲内である必要があります。

依存関係

この引数を使用するには、CheckSimulationResultstrue に設定します。

データ型: double

比較のための信号の相対許容誤差。数値スカラーとして指定します。

相対許容誤差とは、許容可能な最大のソルバー誤差を、タイム ステップごとの各信号のサイズとの相対値としたものです。変換前のシミュレーション結果はベースラインを確立します。変換後のシミュレーション結果は許容誤差の範囲内である必要があります。

既定値 (0.001) は、比較対象信号がベースライン信号の 0.1% 以内の精度であることを意味します。

依存関係

この引数を使用するには、CheckSimulationResultstrue に設定します。

データ型: double

出力引数

すべて折りたたむ

変換に成功したことを示す true の結果。データ型 logical1 として返されます。

Forcetrue に設定した場合、変換が完了すると関数は 1 の値を返します。ただし、変換後のシミュレーション結果は変換前のシミュレーション結果とは異なる場合があります。

作成された Model ブロックのハンドル。数値配列として返されます。

データ型: double

バージョン履歴

R2006a で導入

すべて展開する