メインコンテンツ

Simulink 関数の概要

Simulink® 関数を使用して、Simulink モデルの階層構造でアクセスできる関数を定義できます。Simulink 関数は、与えられた入力と関数の実装された動作に基づいて一連の出力を計算します。Simulink 関数を使用して、次のことができます。

  • 関数名と入力引数および出力引数を含む関数プロトタイプを指定する (例 y = f(u))。

  • Simulink Function ブロック、Stateflow® チャートからエクスポートされた関数、または S-Function ブロックを使用して、Simulink 環境で関数の動作を実装する。

  • モデルの階層構造全体で関数を呼び出して再利用する。

関数プロトタイプの指定

MATLAB® の関数シグネチャや C++ の関数ヘッダーと同様に、Simulink 関数では関数プロトタイプを使用して入力引数と出力引数を指定し、関数とインターフェイスをとる方法を定義します。Simulink 関数の入力引数と出力引数は、モデルの階層構造内の信号、または関数に対してローカルに指定された引数にすることができます。関数プロトタイプは関数の実装とは切り離されています。関数を実装する方法や場所に関係なく、関数の呼び出し元は関数プロトコルを使用して関数の実行を呼び出します。ブロック上に表示されるテキストをダブルクリックすることで関数プロトタイプを編集できます。

たとえば、次の myFilter という名前の関数は、入力引数 inputSignal を受け取り、出力引数として filterSignal を返します。

filterSignal = myFilter(inputSignal)

A Simulink Function block with function prototype set to filterSignal equals myFilter of inputSignal.

この関数を呼び出すには、関数の呼び出し元から入力引数を介して信号を送り、関数を実行してから、出力引数を介して信号を返す必要があります。

関数の動作の実装

関数プロトタイプで指定された入力引数と出力引数のそれぞれを関数の実装で表す必要があります。Simulink 関数はいくつかの方法で定義して実装できます。

  • Simulink Function ブロック — Simulink ブロックを使用して関数を定義します。

  • エクスポートされた Stateflow 関数 — Stateflow チャート内でグラフィカル関数、MATLAB 関数、または Simulink 関数を定義し、Simulink モデルにエクスポートします。詳細については、再利用のための Stateflow 関数のエクスポート (Stateflow)を参照してください。

  • S-Function ブロック — S-function ブロックを使用して関数を定義します。ssDeclareSimulinkFunction を参照してください。

詳細については、モデルでの Simulink 関数の定義を参照してください。

Simulink 関数の呼び出し

関数の呼び出し元と関数プロトタイプを使用して、モデルの階層構造の任意の場所で関数を呼び出して実行できます。関数が呼び出されると、呼び出し元は入力引数を介して関数にデータを送り、出力引数を介して関数からデータを受け取ります。Simulink 関数はいくつかの方法で呼び出すことができます。

  • Function Caller ブロック — Simulink で定義された関数または Stateflow からエクスポートされた関数を呼び出します。

  • Chart (Stateflow) — Simulink で定義された関数または Stateflow からエクスポートされた関数を呼び出します。

  • MATLAB Function ブロック — MATLAB 言語スクリプトから関数を呼び出します。

  • MATLAB System ブロック — System object™ および MATLAB 言語を使用して関数を呼び出します。

  • S-Function ブロック — システム メソッドを使用して関数を呼び出します。ssDeclareFunctionCaller および ssCallSimulinkFunction を参照してください。

  • SimEvents® イベント アクション — SimEvents ブロックのイベント アクションから関数を呼び出します。Events and Event Actions (SimEvents)を参照してください。

詳細については、モデルからの Simulink 関数の呼び出しを参照してください。

関数のスコープの判定

関数の呼び出し元は、そのスコープに含まれる関数のみを呼び出すことができます。関数のスコープは、関数定義を含むサブシステムまたはモデルと関数の呼び出し元との関係で定義されます。関数は、スコープ内、グローバル、または端子スコープ内のいずれかになります。

  • スコープ内の関数は、その階層において表示されるようになります。関数と同じレベルまたは 1 つ以上低いレベルにある関数の呼び出し元が、その関数を参照できます。

  • グローバル関数は、モデルの階層全体において表示されます。この関数は、現在のモデルまたは親モデルの階層構造の任意の場所に配置された関数の呼び出し元から参照できます。

  • 端子スコープ内の関数は、現在のモデル内の特定のエクスポート関数の端子にのみ表示されます。この関数は、現在のモデルの外部に配置された関数の呼び出し元からエクスポート関数の端子を介して参照できます。

関数のスコープは関数の実装方法に依存します。Simulink Function ブロックで定義された関数は、スコープ内、グローバル、または端子スコープ内のいずれかになります。詳細については、スコープ内、グローバル、および端子スコープ内の Simulink Function ブロックの概要を参照してください。Stateflow チャートからエクスポートされた関数のスコープはグローバルになります。S-Function ブロックで定義された関数は、スコープ内またはグローバルのいずれかになります。

関数の実行の構成

関数の実行は、同期または非同期のいずれかになります。

  • "同期実行" では、呼び出し元が関数を呼び出すと、直ちに関数が実行され、呼び出し元に出力引数が返されます。

  • "非同期実行" では、呼び出し元が関数を呼び出すと、優先順位に基づいて関数が実行され、呼び出し元に出力引数が返されます。

    非同期関数呼び出しのスケジュールは、スケジュール エディターを使用して表示および編集できます。

Function Caller ブロックのブロック パラメーターで関数の実行を非同期として指定できます。

関数呼び出しの可視化とトレース

関数シーケンスの表示

Simulink 関数の呼び出しをシーケンス ビューアーで可視化できます。ビューアーには、呼び出しが行われたタイミングが引数および戻り値とともに表示されます。例については、Simulink 関数を使用した共有プリンターでのインク状態の監視を参照してください。

関連するブロックへの移動

Simulink Function ブロックまたは Function Caller ブロックを選択して、関連するブロックを強調表示できます。1 つ以上の関連するブロックがサブシステムまたは参照モデルに含まれている場合、関連するブロックに加え、その関連ブロックを含む Subsystem ブロックまたは Model ブロックも強調表示されます。

開いているブロック線図または新しいタブに関連するブロックを表示するには、Simulink Function ブロックまたは Function Caller ブロックの選択後に表示される省略記号をポイントします。その後、操作バーから [関連するブロック] を選択します。選択したブロックに複数のブロックが対応している場合は、関連するブロックのリストが開きます。リストはテキスト ボックスに検索語を入力してフィルターを適用できます。関連するブロックをリストから選択すると、関連するブロックが表示された開いているブロック線図または新しいタブにウィンドウのフォーカスが移ります。

Simulink 関数のトレース

Simulink 関数とその呼び出し元の間の接続を関数コネクタを使用して視覚的に表示できます。Simulink 関数には、関数定義を含むブロックの上部に関数コネクタが表示されます。関数の呼び出し元には、関数を呼び出すブロックの下部に関数コネクタが表示されます。関数の呼び出し元の下部に表示される関数リンクをクリックすることで、関数の呼び出し元から関数に移動できます。

トレース ラインを有効および無効にするには、次のようにします。

  1. [デバッグ] タブの [情報のオーバーレイ] [コネクタ] をクリックします。

  2. Simulink キャンバスに表示された [コネクタ] ペインで [関数コネクタ] オプションを選択します。

When a Function Caller block is contained in a subsystem, the line is connected to the Subsystem block.

モデルにイベント ブロックがある場合は、アニメーションを使用して関数呼び出しを強調表示できます。関数呼び出しを強調表示してアニメーション化するには、[デバッグ] タブの [イベント アニメーション] セクションで、アニメーション速度を [低速][中速]、または [高速] に設定します。

参考

| | (Stateflow) |

トピック