Main Content

Function-Call Subsystem の使用

Function-Call Subsystem ブロックは、制御端子が関数呼び出しイベントを受信するたびに実行される条件付き実行サブシステムです。Stateflow® チャート、Function-Call Generator ブロック、MATLAB Function ブロック、S-Function ブロック、または Hit Crossing ブロックは関数呼び出しイベントを提供できます。

Function-Call Subsystem は手続きプログラミング言語の関数と同じです。Function-Call Subsystem を呼び出すと、サブシステム内のブロックの出力メソッドが実行順序で実行されます。Function-Call Subsystem ブロック パラメーターの説明については、Subsystem を参照してください。

Function-Call Subsystem の作成

Function-Call Subsystem を作成するには次を行います。

  1. Function-Call Subsystem ブロックをモデルに追加します。

  2. サブシステム ブロックを開きます。サブシステムが関数呼び出しイベントを受信するときに実行されるアルゴリズムを定義するブロック線図を追加します。

  3. Outport ブロックの初期値とディセーブルにされた値を設定します。条件付きサブシステムの初期出力値および条件付きサブシステムが無効な場合の出力値を参照してください。

  4. サブシステム実行時のサブシステムの状態を処理する方法を指定します。

    Subsystem ブロックを開き、Trigger ブロックのブロック パラメーター ダイアログ ボックスを開きます。[イネーブル時の状態] ドロップダウン リストから次のオプションを選択します。

    • 保持 — 状態は最新の値を保持します。

    • リセット — 状態を初期条件に設定します。

    • 継承 — 関数呼び出しを行った親サブシステムの [保持] または [リセット] 設定を使用します。

    入れ子にされたサブシステムの Function-Call Subsystem ブロックが異なるパラメーター設定をもつ場合、子サブシステムの設定は、親サブシステムから継承された設定をオーバーライドします。Trigger を参照してください。

  5. 関数呼び出しイニシエーターを関数呼び出し入力端子に接続します。

    Inport ブロックを接続する場合、ブロックを開き、[信号属性] タブを選択して、[関数呼び出しの出力] チェック ボックスをオンにします。

Function-Call Subsystem でのサンプル時間の伝播

Function-Call Subsystem ブロックを構成するには、その Trigger Port ブロックの [サンプル時間タイプ][トリガー] または [周期的] に設定します。

  • トリガーされた (非周期的) Function-Call Subsystem は 1 つのタイム ステップ中に 0 回、1 回または複数回実行できます。

    Function-Call Subsystem が離散サンプル時間をもつルートレベルの関数呼び出し Inport ブロックによって実行される場合、1 つのタイム ステップ中に複数の関数呼び出しは許可されません。複数の関数呼び出しを許可するには、[サンプル時間]-1 (継承) に設定し、Function-Call Subsystem のすべてのブロックのサンプル時間を -1 (継承) に設定します。

  • 周期的な Function-Call Subsystem は、関数呼び出し信号を受信すると各タイム ステップで 1 回実行され、関数呼び出し信号を受信しなければタイム ステップで実行されません。Function-Call Subsystem のすべてのブロックのサンプル時間を -1 (継承) に設定します。

メモ

範囲のチェック中には、Function-Call Subsystem がイネーブルでない場合でも、最小値と最大値のパラメーター設定は Function-Call Subsystem の実際のソース端子に逆伝播されます。

逆伝播を回避するために、次を行います。

  1. ソース端子の後に Signal Conversion ブロックと Signal Specification ブロックを追加します。

  2. Signal Conversion ブロックの [出力][信号のコピー] に設定します。

  3. ソース端子に指定する代わりに、Signal Specification ブロックの最小値と最大値を指定します。

Function-Call Subsystem のラッチされた入力データ

Function-Call Subsystem ブロック内の Inport ブロックの入力データをラッチしてデータの整合性を確保できます。入力データをラッチするには、Inport ブロック パラメーターで [Function-Call Subsystem 出力のフィードバック信号の入力をラッチする] を選択します。

以下のモデルでは、Function-Call Subsystem ReadDSAndCal1Inport ブロックの入力データがラッチされ (<Li> で示される)、サブシステムの実行中は変更できません。Data Store Read ブロックと Data Store Write ブロックは、各 Function-Call Subsystem 内で呼び出されます。1 回目と 2 回目の関数呼び出しでデータが書き込まれ、最後の関数呼び出しでデータが Data Store Memory ブロックに読み込まれます。

メモ

内部 Inport ブロックに接続されているルートレベルのデータ Inport ブロックも、ルートレベルのブロックに接続されているすべてのブロックがラッチされる場合、ラッチされます。詳細については、Function-Call Subsystem 出力のフィードバック信号の入力をラッチする, Latch input for feedback signals of function-call subsystem outputsFunction-Call Subsystem 出力のフィードバック信号の入力をラッチするLatch input for feedback signals of function-call subsystem outputsを参照してください。

メモ

既定では、データ転送信号は生成されるコードにおいて保護されません。カスタムのストレージ クラスを使用して、ターゲット環境内の現在のタスクのプリエンプションによる、これらの信号のデータ破損を防ぎます。

モデル例

参考

ブロック

関連する例

詳細