このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
参照モデルにおける Simulink Function ブロック
Simulink Function ブロックおよび関数の呼び出し元 (Function Caller ブロックや Stateflow® チャートなど) は参照モデル内に配置できますが、そのためには特別な考慮が必要になります。
参照モデルはエクスポート関数モデルのルールに従い、エクスポート関数モデルとして指定しなければなりません。エクスポート関数モデルの概要を参照してください。
Function Caller ブロックに引数データ型を明示的に定義しなければならない場合があります。
以下の例では、Function Caller ブロック、Simulink Function ブロック、および参照モデルの間の 4 つの関係について説明します。
参照モデルにおける Simulink Function ブロック
この例では、親モデルには Function Caller ブロックが含まれ、参照モデル Model_B
には Simulink Function ブロックが含まれます。Model_B
はエクスポート関数モデルのルールに従わなければなりません。
Function Caller ブロックは関数の引数のデータ型を決定できます。Function Caller ブロック内で [入力引数の仕様] パラメーターおよび [出力引数の仕様] パラメーターを定義する必要はありません。
ただし、既定では、Simulink Function ブロックのスコープはモデルであるため、関数名の呼び出しを Model ブロック名で修飾することが必要になります。
完成したモデルを開くには、ex_referenced_model_with_simulink_function_block
を参照してください。
入力に 2 を乗算する関数を定義する Simulink Function ブロックが Model_B
に含まれています。このモデルは Simulink Function ブロックのみを含むため、エクスポート関数モデルのルールを満たします。エクスポート関数モデルの概要を参照してください。
Model_B
について、エクスポート関数モデルのルールを満たすようにソルバーのコンフィギュレーション パラメーターを設定します。
タイプ:
固定ステップ
。ソルバー:
離散 (連続状態なし)
。
サブシステムに配置された参照モデルにおける Simulink Function ブロック
[関数の可視性] を [グローバル]
に設定して Simulink Function ブロックがグローバルであると識別されたら、参照モデルが配置される場所についての制限はありません。
たとえば、Model_B
を Simulink Function ブロックとともに Subsystem ブロックに配置できます。
参照モデル内の Function Caller ブロック
この例では、親モデルが Simulink Function ブロックを含み、参照モデル Model_A
が Function Caller ブロックを含んでいます。このモデル化パターンを使用する場合、Simulink Function ブロック内の Trigger Port ブロックの [関数の可視性] パラメーターを [グローバル]
に設定しなければなりません。
親モデルでは、ソルバーのタイプを [可変ステップ]
または [固定ステップ]
に設定します。
完成したモデルを開くには、ex_referenced_model_with_function_caller_block
を参照してください。
Model_A
には Function Caller ブロックが含まれます。
Function Caller ブロックが Model_A
内で関数を見つけられないため、Trigger ブロックの [関数の可視性] パラメーターを [グローバル]
に設定して Function Caller ブロック引数パラメーターを指定しなければなりません。
入力引数の仕様: Simulink Function ブロックの入力引数のデータ型と一致するように指定します (たとえば
double(1.0)
)。Simulink Function ブロックの引数の指定に、Input Argument ブロックおよび Output Argument ブロックの [データ型] パラメーターを指定します。
出力引数の仕様: Simulink Function ブロックの出力引数のデータ型と一致するように指定します (たとえば
double(1.0)
)。
個別の参照モデルにおける Function ブロックと Function Caller ブロック
個別の参照モデルにおける Function ブロックと Function Caller ブロック
この例では、2 つの参照モデルを含む親モデルを示します。Model_A は Function Caller ブロックを含む参照モデルです。Model_B はスコープ内 Simulink Function ブロックを含む参照モデルです。Simulink Function ブロックを含む Model_B のみ、エクスポート関数のルールに従わなければなりません。
参照モデルの内部
Model_A
について、参照モデル内の Function Caller ブロックの参照モデルと同様に引数の仕様を指定します。Model_B
について、参照モデルにおける Simulink Function ブロックの参照モデルと同様にパラメーターを指定します。
Model_A
には Function Caller ブロックが含まれます。関数が [グローバル]
に設定されている場合、[入力引数の仕様] パラメーターと [出力引数の仕様] パラメーターを定義します。関数が [スコープ内]
に設定されている場合は、ブロック名ではなく、関数の解決に必要なモデルのファイル名を y = Model_B.FunctionName(u)
の形式で指定します。
入力に 2 を乗算する関数を定義する Simulink Function ブロックが Model_B
に含まれています。このモデルは Simulink Function ブロックのみを含むため、エクスポート関数モデルのルールを満たします。エクスポート関数モデルの概要を参照してください。
関数の端子を使用して、参照モデル内の Simulink® 関数を別の参照モデルから呼び出すこともできます。Call Simulink Functions in Other Models Using Function Portsを参照してください。
同じモデル内の関数と関数呼び出し
この例では、親のモデルに 1 つの参照モデル Model_C
が含まれています。これは、Function Caller ブロックとスコープ内 Simulink Function ブロックの両方を含む参照モデルです。
Model_C
のインスタンスが 1 つのみで、コンフィギュレーション パラメーター [最上位モデルごとに可能なインスタンスの総数] が[1]
に設定されている場合、親モデルはエラーなしでシミュレーションされます。Model_C
では関数がエクスポートされないため、エクスポート関数ルールに従う必要はありません。コンフィギュレーション パラメーター [最上位モデルごとに可能なインスタンスの総数] が
[複数]
に設定されている場合、Model_C
では、モデルの単一のインスタンスと複数インスタンスのどちらがあるかに関係なく、関数がエクスポートされます。どちらの場合も、Simulink にエラーが表示されます。モデルはエクスポート関数ルールに従う必要がありますが、Function Caller ブロックはエクスポート関数モデルの最上位で許可されないため、このルールには従いません。
Model_C
には Function Caller ブロックとスコープ内 Simulink Function ブロックの両方が含まれます。このモデリング パターンを使用する場合、Model_C
の 1 つのインスタンスのみ親モデルで許可されます。
参考
Simulink Function | Argument Inport | Argument Outport | Function Caller | MATLAB Function