Main Content

モデルのスコープ内の Simulink Function ブロック

Simulink® 関数のスコープは、モデルのコンテキストで定義されます。モデルのルート レベルに Simulink Function ブロックを配置した場合、その関数のスコープは既定ではモデルに制限されます。Trigger ブロックの [関数の可視性] パラメーターは [スコープ内] に設定されます。関数には次の場所に配置された関数の呼び出し元からアクセスできます。

  • 関数を含むモデル階層内。関数名の修飾なしで関数を呼び出します。

  • モデルの外部。モデル ファイル名ではなく Model ブロック インスタンス名で関数名を修飾して関数を呼び出します。

Simulink Function ブロックの [関数の可視性][グローバル] に設定すると、モデルまたは親モデルの任意の場所から関数にアクセスできます。そのため、グローバルに設定された Simulink Function ブロックを含むモデルは、関数名が一意でなければならないためマルチインスタンスにすることはできません。

関数の階層的な関連付け

スコープ内の Simulink Function ブロックをルート レベルのモデル内に配置すると関数へのアクセスが制限され、グローバルな名前空間から関数名が削除されます。

  • 現在のモデル内に配置された関数の呼び出し元。

  • 関数の呼び出し元を Model ブロック内に配置し、Simulink Function ブロックを親モデルに配置することはできません。

    関数の呼び出し元を Model ブロック内に配置すると、Simulink で次のエラーが表示されます。

    Block is unable to call the function with scope name because the function definition is not found.

    このエラーは、呼び出し元を含むモデルで関数の名前が不明なために発生します。関数の呼び出し元でモデル参照の境界を越えることはできません。

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

Simulink Function ブロックを Model ブロックに配置した場合、モデルの外部からは関数名にアクセスできません。ただし、関数名を Model ブロック名で修飾することで関数を呼び出すことができます。関数の呼び出し元で修飾された関数を階層的に関連付ける際は、次のルールを使用して関数を含む Model ブロックを探します。

  • 関連付けルール 1: Model ブロックが関数の呼び出し元を含む現在のモデル内にあるかどうか。

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

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

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

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

  • Simulink Function ブロックを Model ブロックに配置し、関数の呼び出し元を別の Model ブロックに配置することはできません。

    Simulink Function ブロックを参照モデルに配置し、関数の呼び出し元を別の参照モデルに配置すると、Simulink で次のエラーが表示されます。

    Block is unable to call the function with scope name because the function definition is not found.

    このエラーは、Model ブロックの名前で修飾された関数名が呼び出し元を含むモデルで認識されないために発生します。

このモデリング パターンを使用して関数にアクセスする場合は、トピック参照モデルにおける Simulink Function ブロックの「参照モデル内の Function Caller ブロック」および「別のモデル内の関数および関数呼び出し」の節を参照してください。

Simulink 関数によるマルチインスタンス モデリング

Simulink Function ブロックの [関数の可視性][スコープ内] に設定するとモデル内の関数がカプセル化され、モデルをマルチインスタンスにすることができます。関数名にモデル インスタンス名を追加して修飾することで、関数名が親モデル内で一意になります。

  1. Simulink Function ブロックを含むモデルを作成します。

    既定では、Simulink Function ブロック内の Trigger ブロックの [関数の可視性] パラメーターは [スコープ内] に設定されます。

  2. Simulink 関数を含むモデルを複数の Model ブロックから参照します。Function-Call Subsystem ブロックを追加して関数の呼び出しをスケジュールします。

  3. Function Caller ブロックを Function-Call Subsystem ブロックに追加します。別のモデル インスタンスで、関数名をブロック名で修飾して関数にアクセスします。

  4. [デバッグ] タブで [情報のオーバーレイ] を選択します。ドロップダウン ボックスから、[関数コネクタ] を選択します。

    関数の呼び出し元から関数にトレース ラインが描画されます。

Simulink Function ブロックを複数のインスタンスで使用する 1 つのモデルについては、複数インスタンス化された Simulink 関数を使用した再利用可能なコンポーネントのモデル化を参照してください。

参考

| | | |

関連するトピック