Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

サブシステム参照

サブシステム参照では、サブシステムの内容を別の SLX ファイルに保存し、Subsystem Reference ブロックを使用してそれを参照できます。同一のサブシステム ファイルを参照する複数のインスタンスを作成できます。参照サブシステムの任意のインスタンスを編集すると、サブシステムが保存されているファイルとは別の SLX ファイルに変更が保存され、そのファイルの参照インスタンスのすべてが同期されます。

サブシステムを別のファイルに保存すると、同じサブシステム ファイルを参照している [サブシステム参照] ブロックを使用することで、複数回それを再利用できます。

Subsystem Reference ブロックは、ブロック アイコンの対角にある三角形で識別できます。

参照サブシステムは通常のサブシステムのセマンティクスすべてをサポートします。非参照サブシステムと比較すると、参照サブシステムは自身を親モデルのコンテキストに適応させて、同一の実行動作になります。

サブシステム ファイルの作成

サブシステム ファイルはサブシステムの内容を SLX ファイルに保存します。

サブシステム ファイルについて、次のとおりです。

  • シミュレートできません。

  • コンフィギュレーション セットがありません。

  • モデル ワークスペースがありません。

  • コード生成機能がありません。

サブシステム ファイルを作成するには、次を行います。

  1. Simulink® を開きます。

  2. スタート ページの Simulink 製品グループで、[空のサブシステム] をクリックします。

    あるいは、Simulink ツールストリップの [シミュレーション] タブで、[新規作成] を選択して [空のサブシステム] をクリックします。サブシステム ウィンドウが開きます。

  3. 内容を追加して [保存] をクリックします。

  4. [名前を付けて保存] ダイアログ ボックスでファイル名を指定します。このファイル名は、有効な MATLAB 名でなければなりません。

    これにより、新しいサブシステム ファイルが指定の場所に作成されます。

サブシステム ファイルをプログラムで作成するには、次のコマンドを使用します。

new_system(subsystemfilename,'subsystem')
サブシステム ファイルをプログラムで作成すると、MATLAB ファイル ブラウザーで次のように表示されます。

プログラムでのサブシステム ファイル制御の詳細については、プログラムでの参照サブシステムの制御を参照してください。

モデルでのサブシステム ファイルの参照

  1. サブシステム ファイルを参照するモデルを開きます。

  2. Simulink ライブラリ ブラウザーまたはクイック ブロック挿入メニューを使用して Subsystem Reference ブロックを追加します。空の Subsystem Reference ブロックが Simulink キャンバスに追加されます。

  3. Subsystem Reference ブロックをダブルクリックします。

  4. [ブロック パラメーター] ダイアログ ボックスで、サブシステム ファイルの名前を指定するか、[参照] をクリックして移動します。

  5. [OK] をクリックして変更を保存します。

既存のサブシステムから参照サブシステムへの変換

既存の Subsystem ブロックを Subsystem Reference ブロックに変換できます。

次のように、2 つの Subsystem ブロックがあるモデルを考えます。

このモデルには、2 つの Subsystem ブロックがあります。Controller サブシステムと Plant サブシステムです。Controller サブシステム ブロックを参照サブシステムに変換するには、次のようにします。

  1. [Subsystem ブロック] タブで Controller Subsystem ブロックを選択し、[変換] を選択して [サブシステム参照に変換] をクリックします。

  2. [サブシステム ファイル名] フィールドでサブシステム コンポーネントの名前を指定して [変換] をクリックします。名前は有効な MATLAB 名でなければなりません。変換により、現在のディレクトリにサブシステム ファイルが作成されます。特定の場所にファイルを作成するには、[参照] をクリックして保存する場所に移動します。

    Subsystem ブロックは、ブロック アイコンの上にサブシステム ファイルの名前が表示された Subsystem Reference ブロックに変更されます。

ヒント

リンク付きブロックを参照サブシステムに変換する際は、該当するリンク付きブロックの親ライブラリ ブロックで変換を実行してください。親ライブラリ ブロックを参照サブシステムに変換すると、そのリンク付きブロック インスタンスもすべて参照サブシステムに変換されます。

サブシステムが次の場合には、サブシステムを参照サブシステムに変換できません。

  • 関連付けられたテスト ハーネスがある

  • 読み取り/書き込み権限がない

  • 内容を変更しようとしているマスクがある

参照サブシステムの編集と保存

参照サブシステムの複数のインスタンスが含まれるモデルでは、任意のインスタンスを編集でき、変更を保存すると同時に、その更新がすべての参照インスタンスに伝播します。参照サブシステムのインスタンスの編集が進行中である場合、他のすべての参照インスタンスはロックされ、編集できません。

開いているサブシステム ファイルの左下角に、ファイルが編集可能かを示すバッジが表示されます。バッジは次の 2 つの状態を示します。

  • はサブシステム ファイルが編集可能であることを示します。バッジを右クリックすると対象サブシステムのすべてのアクティブ インスタンスを確認してそれぞれに移動できます。

  • は、別のインスタンスの編集が進行中のため、サブシステム ファイルが編集不可であることを示します。編集進行中のインスタンスを開くには、バッジを右クリックします。

モデルでインスタンスを編集すると、モデル ウィンドウの [シミュレーション] タブで [保存] オプションが有効になり、変更を保存できます。[すべて保存] ドロップダウンには、変更の保存について次の 2 つのオプションがあります。

  • [すべて保存] – 現在のモデルでの更新をすべて保存します。

  • [特定の参照ファイルを保存] – 複数のサブシステム ファイルを変更した場合に特定のサブシステム ファイルを保存します。

メモ

モデルで参照サブシステムのインスタンスを編集する場合は、モデルの更新やシミュレーションを行う前に変更を保存してください。参照インスタンスで保存されていない変更はシミュレーション中にエラーを発生させます。

サブシステム参照のモデル マスク追加

モデル マスクを使用してサブシステム ファイルをマスクできます。サブシステム ファイルのモデル マスクを作成する場合、すべての参照インスタンスが同じモデル マスクを共有します。

サブシステム ファイルをマスクするには、次のようにします。

  1. マスクするサブシステムを開きます。

  2. Simulink ツールストリップの [モデル化] タブで、[コンポーネント] ギャラリーの [モデル マスクの作成] をクリックします。あるいは、キャンバスの任意の場所で右クリックして [マスク] を選択し、[モデル マスクの作成] をクリックします。[マスク エディター] ダイアログが開きます。

  3. マスク パラメーターを追加して [OK] をクリックします。

メモ

Subsystem Reference ブロックを直接マスクすることはできません。Subsystem Reference ブロックをマスクするには、ブロックを右クリックして [マスク][ファイルを開いてマスクを作成] を選択します。この操作により、参照されるサブシステム ファイルが開き、そのマスクが作成されます。

モデル マスクの作成と編集の詳細については、モデルのマスクの紹介を参照してください。

サブシステム参照と以前のバージョンとの互換性

参照サブシステムを含むモデルを R2019b より前のバージョンにエクスポートする場合、すべての Subsystem Reference ブロックが独立した Subsystem ブロックに変換されます。

R2019b で作成されたサブシステム ファイルを以前のバージョンにエクスポートすることはできません。Simulink モデルを以前のバージョンにエクスポートする方法の詳細については、モデルを以前の Simulink バージョンにエクスポートするを参照してください。

プログラムでの参照サブシステムの制御

コマンド ライン インターフェイスを使用して、参照サブシステムの作成、モデルでの有効な参照サブシステムの検出、ブロックでの参照サブシステム ファイルの変更、SLX ファイルのブロック線図タイプの確認を行います。

参照サブシステムの作成

次のように new_system コマンドを使用して、参照サブシステムを作成できます。

new_system(subsystemfilename,'SubSystem')

モデルでのサブシステム参照の検出

次のように関数 Simulink.findBlocksOfType を使用して、モデルが参照サブシステムを含むかどうかを検出できます。

Simulink.findBlocksOfType(bdroot, 'SubSystem','ReferencedSubsystem','.',Simulink.FindOptions('RegExp',1))

また、find_system コマンドを使用することもできます。

find_system(bdroot, 'RegExp','on','BlockType','SubSystem','ReferencedSubsystem', '.')

いずれもモデル内の Subsystem Reference ブロック数を返します。既定では、find_system はサブシステム参照インスタンス内のすべての子ブロックをリストします。

find_system で参照サブシステム内が検索されないようにする場合は、LookInsideSubsystemReferenceoff に設定された find_system を使用します。既定では、LookInsideSubsystemReferenceon に設定されています。

サブシステムの参照ファイルの変更

コマンドライン インターフェイスで次のように set_param コマンドを使用して、Subsystem Reference ブロックで参照されているサブシステム ファイルを変更できます。

set_param(gcb, 'ReferencedSubsystem', '<subsystemfilename>')
このコマンドは Subsystem Reference ブロックによって現在参照されているファイルを指定の新しいサブシステム ファイルと置き換えて変更します。

SLX ファイルが Subsystem ブロック線図タイプであるかの確認

次のコマンドのいずれかを使用して、SLX ファイルが Subsystem Reference ブロックに配置できる Subsystem ブロック線図タイプであるかを確認できます。

bdIsSubsystem(bdname)
bdname.slx が Subsystem ブロック線図タイプである場合、このコマンドは logical 1 を返し、そうでない場合は logical 0 を返します。このコマンドの使用時には、bdname.slx が読み込まれていることを確認してください。

get_param(bdname,'BlockDiagramType')

bdname.slx が Subsystem ブロック線図タイプである場合、このコマンドは Subsystem を返します。このコマンドの使用時には、bdname.slx が読み込まれていることを確認してください。

Simulink.MDLInfo(bdname)

bdname.slx が Subsystem ブロック線図タイプである場合、このコマンドは BlockDiagramType プロパティが Subsystem であると示されるモデル全体の情報を提供します。

ベスト プラクティス

モデルで参照サブシステムを使用する条件は、次のとおりです。

  • 参照サブシステムをマスクするには、モデル マスクを使用する。

  • 参照ループが作成されるため、親サブシステムを参照しない。

  • Subsystem Reference ブロックによって参照できるのはサブシステム ファイル タイプのみ。

関連するトピック