このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
サブシステムの作成
モデル サイズが大きくなり、複雑さが増しても、複数のブロックをサブシステムとしてグループ化することでモデルを読みやすくすることができます。サブシステムは、1 つの Subsystem ブロックにグループ化する一連のブロックです。
サブシステムを使用すると、次のことができます。
階層的なブロック線図を作成し、サブシステムを構成するブロックを Subsystem ブロックの層とは別の層に配置する。
機能的に関連したブロックを 1 つに集約する。
モデル ウィンドウに表示されるブロック数の削減に利用する。
入力と出力を使用してインターフェイスを作成する。
サブシステムのコピーを作成すると、そのコピーは元のサブシステムには依存しません。1 つのモデル全体で、またはモデル間でサブシステムのコンテンツを再利用するには、参照サブシステム、参照モデル、またはカスタム ライブラリのブロックにリンクされているサブシステムを検討してください。詳細については、モデル コンポーネントのタイプの選択を参照してください。
サブシステムのタイプ
サブシステムはバーチャルまたは非バーチャルのどちらでも構いません。"バーチャル サブシステム" はモデルにグラフィカルな階層を提供します。"非バーチャル サブシステム" はグラフィカルな階層を提供し、モデル内のユニットとして実行されます。
ヒント
コントローラーおよびその他のスタンドアロン コンポーネントに対して、非バーチャル サブシステムまたは参照モデルを使用して、関連するブロックを囲むハード境界を定義します。ハード境界を事前に定義することで、コンポーネント用のコードを生成するときに、コストのかかるリファクタリングを行わずに済みます。
Simulink® は非バーチャル サブシステムを次のような種類に分類します。
サブシステムのタイプ | 説明 |
---|---|
Atomic Subsystem | 単一ユニットとして実行されるサブシステム。 |
Enabled Subsystem | 外部入力によって実行がイネーブルになるサブシステム。 |
Triggered Subsystem | 外部入力により実行がトリガーされるサブシステム。 |
Function-Call Subsystem | 外部関数呼び出し入力により実行が制御されるサブシステム。 |
Enabled and Triggered Subsystem | 実行が外部入力によって有効化され、トリガーされるサブシステム。 |
Message Triggered Subsystem および Message Polling Subsystem | メッセージ入力により実行がトリガーされるサブシステム。 |
Resettable Subsystem | 外部トリガーでブロックの状態がリセットされるサブシステム。 |
If Action Subsystem | If ブロックで実行が有効化されるサブシステム。 |
Switch Case Action Subsystem | Switch Case ブロックで実行が制御されるサブシステム。 |
While Iterator Subsystem | シミュレーション タイム ステップ中に論理条件が true の間、実行を繰り返すサブシステム。 |
For Iterator Subsystem | シミュレーション タイム ステップ中に指定された反復回数だけ実行を繰り返すサブシステム。 |
For Each Subsystem | 入力信号の各要素またはサブ配列で実行を繰り返し、結果を連結するサブシステム。 |
サブシステムの作成
以下の方法でサブシステムを作成できます。
Simulink エディターで、ダブルクリックし、サブシステム タイプの入力を開始する。その後、対応するブロックをメニューから選択する。
Simulink エディターで、作成するサブシステムの外枠に選択ボックスをドラッグしてから、サブシステム タイプを選択する。
Subsystem ブロックをライブラリ ブラウザーからドラッグする。
モデルから Subsystem ブロックをコピーして貼り付ける。
選択ボックスからサブシステムを作成するときに、その選択は空であることも、モデルの 1 つの領域に複数のブロックが含まれていることもあります。
操作バーから、作成するサブシステムのタイプを選択します。
入力端子および出力端子に対応するブロックが選択に含まれている場合、新しいサブシステムにはそれらのブロックのコピーが含まれます。新しいサブシステムには、制御端子に対応するブロックのコピーが含まれません。
サブシステムのタイプは作成後に変更できます。
サブシステムを 1 つのユニットとして実行するようにするには、Subsystem ブロックをクリックします。[サブシステム] タブで [アトミックにする] を選択します。
サブシステムを条件付きで実行するようにするには、制御端子に対応するブロックを追加します。
サブシステムを無条件で実行するようにするには、制御端子に対応するブロックを削除します。
メモ
サブシステムの使用が不要になった場合は、サブシステムをその内容で置き換えることができます。詳細については、サブシステムの内容の展開を参照してください。
サブシステムへの端子の追加
Subsystem ブロック上の端子はサブシステム内のブロックに対応します。
たとえば、この Subsystem ブロックには 2 つの入力端子と 1 つの出力端子があります。
サブシステムには 2 つの Inport ブロック In1
および In2
と 1 つの Outport ブロック Out1
が含まれています。これらは、Subsystem ブロックの端子に対応します。
Subsystem ブロックに端子を自動で追加するには、以下を行います。
Subsystem ブロックの端をクリックしてから、作成する端子のタイプを選択します。
線を Subsystem ブロックの端までドラッグします。
対応する端子のブロックがサブシステム内に追加されます。
ヒント
自動端子作成の後は、すぐに編集できるように Subsystem ブロックの端子ラベルが有効になります。サブシステムの端子ラベルの編集を参照してください。
端子を手動で追加するには、Subsystem ブロックをダブルクリックしてサブシステムを開き、対応するブロックをサブシステムに追加します。
端子のタイプ | 対応するブロック |
---|---|
信号端子、入力 | Inport ブロック |
信号端子、出力 | Outport ブロック |
バス端子、入力 | In Bus Element ブロック |
バス端子、出力 | Out Bus Element ブロック |
制御端子、有効 | Enable ブロック |
制御端子、トリガー | Trigger ブロック |
制御端子、関数呼び出し | [トリガー タイプ] が [関数呼び出し] に設定された Trigger ブロック |
制御端子、リセット | Reset ブロック |
制御端子、アクション | Action Port ブロック |
接続端子 | Connection Port (Simscape) ブロック |
Subsystem ブロックでの端子の場所を変更するには、Subsystem ブロックの任意の側にある新しい場所に端子をドラッグします。
既定では、Simulink は Subsystem ブロックの端子にラベルを付けます。Simulink がサブシステムの端子にラベルを付ける方法を指定するには、以下を行います。
Subsystem ブロックを選択します。
Simulink ツールストリップの [書式設定] タブで、[端子ラベル] メニューからラベル付けオプションを 1 つ選択します。詳細については、端子ラベルを表示を参照してくださ。
サブシステムの端子ラベルの編集
以下のタイプのサブシステム ブロックでは端子ラベルを直接編集できます。
通常のサブシステム
マスクをもつサブシステム
バリアント サブシステム
チャート サブシステム
現在のモデルのサブシステム ブロックで端子ラベルを編集するには、次のようにします。
端子ラベルにカーソルを合わせます。対話型の "端子ラベル キュー" (端子ラベルを囲む青色のボックス) が表示されます。キューをクリックします。
あるいは、端子を選択して F2 キーを押します。キューが編集モードになります。
自動端子作成を使用して Subsystem ブロックに新しい端子を作成した場合も、すぐに編集できるように端子ラベル キューが有効になります。
端子ラベル キューの上に、編集中の端子ラベルの情報 (端子ブロック名、信号名、バス端子、または接続端子) を示す "端子セレクター キュー" が表示されます。信号端子の場合、端子ブロック名と端子信号名の両方を端子ラベルから編集できます。それぞれの値に切り替えるには、セレクター キューで対応するアイコンをクリックするか、キーボード ショートカット Ctrl + 1,2 を使用します。
端子ラベル キューで値を入力し、Enter キーまたは Esc キーを押すか、クリックします。
端子ラベルが編集されると、Simulink では、サブシステム内の関連する端子や信号の名前が自動的に更新されます。
ヒント
サブシステム ブロックで端子ラベルを連続して編集するには、次のようにします。
ブロックの端子を選択します。
端子ラベルを編集し、Enter キーを押します。このアクションにより、キーボードによる端子の選択が有効になります。
上矢印キーまたは下矢印キーを使用して隣接する端子を選択し、F2 キーを押してすぐに編集できます。
次の表に、サブシステム ブロックで定義される端子ラベルのタイプに応じた更新アクションを示します。
端子ラベルのタイプ アクション なし 編集はサポートされません。 端子アイコン 端子の [アイコン表示] パラメーターに応じてサブシステムの要素の名前を更新します。
たとえば、端子の [アイコン表示] パラメーターの値が
[信号名]
である場合、端子ブロックのアイコンとリンクされている信号の名前の両方が更新されます。メモ
このタイプの端子ラベルについて、編集後に端子ラベルに表示される情報は、セレクター キューを使用してラベルに対して最終的に実行された編集によって異なります。
最初の時点で端子ラベルに端子ブロック名が表示されていて、最終的に信号名に対する編集が行われた場合、基になる端子ブロックの [アイコン表示] パラメーターが自動的に
[信号名]
に更新されます。そのため、編集後の端子ラベルには既定では信号名が表示されます。最初の時点で端子ラベルに端子信号名が表示されていて、最終的に端子ブロック名に対する編集が行われた場合、基になる端子ブロックの [アイコン表示] パラメーターが自動的に
[端子番号]
に更新されます。そのため、編集後の端子ラベルには既定ではブロック名が表示されます。
端子ブロック名 サブシステム内の端子のブロック名を更新します。このタイプの端子ラベルについては、端子セレクター キューを使用して端子ブロック名のみを編集できます。 信号名 端子にリンクされている信号の名前を更新します。
メモ
Simulink では、Chart ブロックに対しては端子セレクター キューは表示されません。
マスク アイコンがある Subsystem ブロックの端子ラベルの編集はサポートされていません。
端子ラベルからの端子番号の編集はサポートされていません。ただし、端子ブロック名および信号名は端子ラベル キューを使用して編集できます。
端子ラベルからの伝播信号の名前の編集はサポートされていません。ただし、端子ブロック名および内部信号名は端子ラベル キューを使用して編集できます。キューをクリックした時点では、内部信号に名前がないため、端子信号名のフィールドは空になります。
次のすべての条件に当てはまる場合、サブシステムの端子ラベルに伝播信号の名前が表示されます。
基になる端子ブロックの [アイコン表示] パラメーターの値が
[信号名]
である。サブシステム内の内部信号が接続されているが名前がない。
伝播信号に名前がある。
サブシステムの設定
他のすべてのブロックと同じ方法で Subsystem ブロックの名前の変更やブロックの変更を行うことができます。たとえば、次のようなことができます。
ブロック マスクを適用してサブシステムのコンテンツを非表示にし、独自のアイコンとパラメーター ダイアログ ボックスをもつ Atomic ブロックとして表示されるようにします。詳細については、マスクの基礎を参照してください。
ブロックのコールバックを使用して、エラーの処理、サブシステム内のブロックまたは線の削除、サブシステムを閉じるなど、サブシステムのモデリング アクションに応じてアクションを実行します。コールバックなどのブロック プロパティの詳細については、ブロック プロパティの指定を参照してください。
サブシステムのアクセス制限
Subsystem ブロックの [読み取り/書き込みアクセス許可] パラメーターによって、サブシステムに許可されているアクセスのレベルが制御されます。
メモ
読み取りまたは書き込みアクセスを制限しても、アクセス制限の変更を防ぐことはできません。独自情報を非表示にするには、保護モデルの使用を検討してください。詳細については、保護モデルの機能の確認を参照してください。
サブシステムがカスタム ライブラリに格納されている場合、親ライブラリ ブロックで [読み取り/書き込みアクセス許可] パラメーターを使用して、ブロックのリンクされたインスタンスのアクセスを制御することができます。ライブラリ リンクがそのまま保持されている限り、モデル内での使用を引き続き許可しながら、アクセス制限によってユーザーによるサブシステム コンテンツの表示または変更を防ぐことができます。詳細については、リンク付きブロックを参照してください。
参考
Simulink.BlockDiagram.copyContentsToSubsystem