参照モデルにおける Simulink Function ブロック
Simulink Function ブロックおよび関数の呼び出し元 (Function Caller ブロックや Stateflow® チャートなど) は参照モデル内に配置できますが、そのためには特別な考慮が必要になります。
参照モデルはエクスポート関数モデルのルールに従い、エクスポート関数モデルとして指定しなければなりません。エクスポート関数モデルの概要を参照してください。
Function Caller ブロックに引数データ型を明示的に定義しなければならない場合があります。
以下の例では、Function Caller ブロック、Simulink Function ブロック、および参照モデルの間の 4 つの関係について説明します。Simulink® 関数とその呼び出し元との間のラインによる接続を視覚的に表示するには、[デバッグ] タブにある [情報のオーバーレイ] で、[関数コネクタ] ボタンを選択します。
参照モデルにおける Simulink Function ブロック
この例では、Function Caller ブロックを含む親モデルと Simulink Function ブロックを含む参照モデルを示します。参照モデルはエクスポート関数モデルの要件に従わなければなりません。
ex_referenced_model_with_simulink_function_block
という名前のモデルを開きます。
Function Caller ブロックは関数の引数のデータ型を決定できます。Function Caller ブロックの [入力引数の仕様] パラメーターおよび [出力引数の仕様] パラメーターを定義する必要はありません。
既定では、Simulink Function ブロックのスコープはモデルです。そのため、関数名の呼び出しを Model ブロック名で修飾することが必要になります。
参照モデル ex_Model_B
を開きます。
Simulink Function ブロックを開きます。
入力に 2 を乗算する関数を定義する Simulink Function ブロックが参照モデル ex_Model_B
に含まれています。このモデルはエクスポート関数モデルの要件を満たしており、エクスポート関数モデルとして構成されています。詳細については、エクスポート関数モデルの概要を参照してください。
Simulink Function ブロック内の Trigger ブロックの [関数の可視性] ブロック パラメーターが [global]
に設定されている場合、Simulink Function ブロックを含むモデルをモデルの階層構造の任意の場所から参照できます。たとえば、モデル ex_Model_B
を参照する Model ブロックをサブシステムに配置できます。
参照モデル内の Function Caller ブロック
この例では、Simulink Function ブロックを含む親モデルと Function Caller ブロックを含む参照モデルを示します。このモデル化パターンを使用するには、Simulink Function ブロック内の Trigger ブロックの [関数の可視性] パラメーターを [global]
に設定しなければなりません。
ex_referenced_model_with_function_caller_block
という名前の親モデルを開きます。
親モデルでは、ソルバーのタイプを [Variable-step]
または [Fixed-step]
に設定します。
ex_Model_A
という名前の参照モデルには Function Caller ブロックが含まれています。
Function Caller ブロックで ex_Model_A
内の関数を見つけられるようにするには、Simulink Function ブロック内の Trigger ブロックの [関数の可視性] パラメーターを [global]
に設定し、Function Caller ブロックの引数パラメーターを指定しなければなりません。
入力引数の仕様: Simulink Function ブロックの入力引数のデータ型と一致するように指定します (たとえば
double(1.0)
)。出力引数の仕様: Simulink Function ブロックの出力引数のデータ型と一致するように指定します (たとえば
double(1.0)
)。
Simulink Function ブロックの引数の仕様は、Input Argument ブロックおよび Output Argument ブロックの [データ型] パラメーターで指定します。
個別の参照モデルにおける Function ブロックと Function Caller ブロック
この例では、2 つの参照モデルを含む親モデルを示します。一方の参照モデルには Function Caller ブロックが含まれ、もう一方の参照モデルにはグローバル関数を指定する Simulink Function ブロックが含まれています。
ex_referenced_model_with_simulink_function_and_function_caller
という名前の親モデルを開きます。
参照モデル ex_Model_B1
には Simulink Function ブロックが含まれています。
この Simulink Function ブロックでは、入力に 2 を乗算する timestwo
という名前のグローバル関数を定義しています。関数をグローバルとして指定するために、Simulink Function ブロック内の Trigger ブロックで [関数の可視性] が [global]
に設定されています。
参照モデル ex_Model_B1
はエクスポート関数モデルの要件を満たしており、エクスポート関数モデルとして構成されています。詳細については、エクスポート関数モデルの概要を参照してください。
参照モデル ex_Model_A1
には Function Caller ブロックが含まれています。
この Function Caller ブロックは、関数の呼び出しの修飾なしでグローバル関数 timestwo
を呼び出します。Function Caller ブロックで [関数プロトタイプ] が y = timestwo(u)
と指定されています。さらに、Function Caller ブロックで [入力引数の仕様] パラメーターおよび [出力引数の仕様] パラメーターが指定されています。
スコープが個別の参照モデルに設定された関数を呼び出すとします。たとえば、ex_Model_B1
で、Trigger ブロックの [関数の可視性] を [scoped]
に設定します。
関数のスコープが個別の参照モデルに設定されている場合、Function Caller ブロックでの関数の呼び出しを、ブロック名ではなく、関数の解決に必要なモデルのファイル名で修飾する必要があります。たとえば、Function Caller ブロックの [関数プロトタイプ] パラメーターを y = ex_Model_B1.timestwo(u)
に設定します。
関数の端子を使用して、参照モデル内の Simulink 関数を別の参照モデルから呼び出すこともできます。詳細については、Model Client and Server Components Using Function Portsを参照してください。
同じモデル内の関数と関数呼び出し
この例では、1 つの参照モデルを含む親モデルを示します。参照モデルには Function Caller ブロックとスコープ内 Simulink Function ブロックの両方が含まれています。
FunctionAndFunctionCaller
という名前のモデルを開きます。
ex_Model_C
という名前の参照モデルを開きます。
参照モデルをエクスポート関数モデルとして構成しない場合、エクスポート関数モデルのルールに従う必要はありません。エクスポート関数モデルのルールでは、Function Caller ブロックをエクスポート関数モデルの最上位に配置することは許可されません。詳細については、エクスポート関数モデルの概要を参照してください。
ex_Model_C
のように、Simulink Function ブロックでスコープ内の関数が指定されている場合、モデルの階層構造で参照モデルのインスタンスが複数サポートされます。
Simulink Function ブロックでグローバル関数が指定されている場合は、モデルの階層構造で参照モデルのインスタンスが 1 つしかサポートされません。それ以外の場合、複数の Model ブロックで同じ名前を使用して関数を定義しようとするため、エラーがスローされます。
参考
Simulink Function | Argument Inport | Argument Outport | Function Caller | MATLAB Function