Main Content

サブシステムのスコープ内の Simulink Function ブロック

Simulink® 関数のスコープは、モデルのコンテキスト内の親サブシステムで定義されます。任意の Subsystem ブロックに関数を配置した場合、その関数にモデルの外部からアクセスすることは既定では禁止されます。どちらの場合も、Trigger ブロックの [関数の可視性] パラメーターは [スコープ内] に設定されます。Simulink Function ブロックは次の場所に配置できます。

  • バーチャル サブシステム — 関数名を修飾することなく、含まれる Subsystem ブロックの階層内から関数を呼び出します。あるいは、サブシステム ブロック名を使用して関数名を修飾することで、サブシステムの外部から関数を呼び出します。

  • Atomic (非バーチャル) サブシステム — 関数名を修飾することなく、含まれる Subsystem ブロックの階層内から関数を呼び出します。サブシステムの外部から関数にアクセスすることは禁止されます。

関数の階層的な関連付け

スコープ内の Simulink Function ブロックを任意の Subsystem ブロック (バーチャルまたは Atomic) 内に配置すると関数へのアクセスが制限され、グローバルな名前空間から関数名が削除されます。関数の呼び出し元で関数を階層的に関連付ける際は、次のルールを使用して関数を探します。

  • 関連付けルール 1: スコープ内の Simulink Function ブロックが関数の呼び出し元を含む現在の Subsystem ブロック内にあるかどうか。

  • 関連付けルール 2: スコープ内の関数が現在のサブシステム内にない場合、スコープ内の Simulink Function ブロックが関数の呼び出し元より 1 つ以上高いレベルの親または親の親の Subsystem ブロック内、または親モデル内にあるかどうか。

関数の呼び出し元で関数が階層的に関連付けられていれば、関数名を修飾せずに関数を呼び出すことができます。

  • 関数の呼び出し元が関数と同じ階層レベルに配置されている場合。この場合、関数の呼び出し元では現在のサブシステム内からスコープ内の関数を見つけます (関連付けルール 1)。

  • 関数の呼び出し元が、Simulink Function ブロックの階層レベルよりも Subsystem ブロックのレベルが 1 つ以上低い Subsystem ブロックに配置されている場合。関数の呼び出し元でモデル参照の境界を越えることはできないため、関数の呼び出し元の階層に Model ブロックを含めることはできません。この例では、関数の呼び出し元は、現在のサブシステム内からはスコープ内の関数を見つけませんでしたが、親のサブシステム内から関数を見つけました (関連付けルール 2)。

    この場合、関数の呼び出し元では現在のサブシステム内からはスコープ内の関数が見つからず、親のモデル内から関数を見つけます (関連付けルール 2)。

  • Subsystem ブロック内の Simulink Function ブロックは、ブロック内の MATLAB Function ブロックまたは Stateflow® チャートからの修飾子を含めずに呼び出すこともできます。

関数の修飾による関連付け

Simulink Function ブロックをバーチャル Subsystem ブロックに配置すると、関数名はサブシステムの外部に表示されなくなります。ただし、関数名を Subsystem ブロック名で修飾することで関数を呼び出すことができます。関数の呼び出し元で修飾された関数を階層的に関連付ける際は、次のルールを使用して関数を含むバーチャル Subsystem ブロックを探します。

  • 関連付けルール 1: バーチャル Subsystem ブロックが関数の呼び出し元を含む現在のコンポーネント内にあるかどうか。コンポーネントは Subsystem ブロックまたはモデルのどちらかです。

  • 関連付けルール 2: バーチャル Subsystem ブロックが現在のコンポーネント内にない場合、バーチャル Subsystem ブロックが関数の呼び出し元より 1 つ以上高いレベルの親または親の親のコンポーネント内にあるかどうか。

関数の呼び出し元でスコープ内の関数を含むバーチャル Subsystem ブロックが関連付けられていれば、関数名を修飾せずに関数を呼び出すことができます。

  • 関数の呼び出し元が関数の階層レベルより 1 つ上のレベルのサブシステムの外部に配置されている場合。この場合、関数の呼び出し元では現在のモデル内からスコープ内の関数を含む Subsystem ブロックを見つけます (関連付けルール 1)。

  • 関数の階層レベルより 1 つ上のレベルのサブシステム外で Stateflow チャートから関数を呼び出した場合。この場合、関数の呼び出し元では現在のモデル内からスコープ内の関数を含む Subsystem ブロックを見つけます (関連付けルール 1)。

  • 関数の呼び出し元が関数と同じ階層レベルの他のサブシステム内にある場合。この場合、関数の呼び出し元では現在のサブシステム内からはスコープ内の関数を含む Subsystem ブロックが見つからず、親モデル内から Subsystem ブロックを見つけます (関連付けルール 2)。

  • 関数の呼び出し元が関数の階層レベルより 1 つ以上低いレベルの他のサブシステム内にある場合。この場合、関数の呼び出し元では現在のサブシステム内からはスコープ内の関数を含む Subsystem ブロックが見つからず、親の親のモデル内から Subsystem ブロックを見つけます (関連付けルール 2)。

    関数の呼び出し元でモデル参照の境界を越えることはできないため、関数の呼び出し元の階層に Model ブロックを含めることはできません。

参考

| | | | |

関連するトピック