Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

グラフィカル関数の定義によるロジック パターンの再利用

Stateflow® チャートにおける "グラフィカル関数" とは、制御フロー ロジックと反復ループの再利用に役立つグラフィカルな要素です。グラフィカル関数は、コネクティブ ジャンクションと遷移を使用するフロー チャートで作成します。グラフィカル関数は、ステートと遷移のアクションで呼び出すことができます。グラフィカル関数では、次のことが可能です。

  • チャート内の任意の場所で呼び出すことのできる、モジュラー式の再利用可能なロジックを作成できます。

  • チャート アニメーションでシミュレーションの動作を視覚的に追跡できます。

グラフィカル関数は、チャート、ステート、またはサブチャート内の任意の場所に配置できます。関数の場所により、その関数を呼び出すことのできるステートと遷移の集合が判定されます。

  • ある特定のステート、またはサブチャートとそのサブステートの内部で関数を呼び出す場合は、グラフィカル関数を該当するステートまたはサブチャートに配置します。この関数は、そのステートまたはサブチャートの親や先祖に含まれる同じ名前の関数よりも優先されます。

  • 関数をチャートの任意の部分から呼び出す場合は、グラフィカル関数をチャート レベルに配置します。

  • 関数をモデル内の任意のチャートから呼び出す場合は、グラフィカル関数をチャート レベルに配置し、チャートレベルの関数のエクスポートを有効にします。詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。

メモ

グラフィカル関数は、Stateflow 階層で自分より上にあるチャートとステート データにアクセスできます。

たとえば、以下のグラフィカル関数は f1 という名前をもっています。3 つの引数 (abc) を取り、3 つの出力値 (xyz) を返します。この関数には、3 つの異なる引数の積を計算するフロー チャートが含まれています。

グラフィカル関数の定義

  1. オブジェクト パレットで、グラフィカル関数のアイコン をクリックします。ポインターをチャート内の新しいグラフィカル関数の位置に移動します。

  2. 関数のシグネチャ ラベルを入力します。

    関数シグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。シグネチャ ラベルの構文は以下のとおりです。

    [return_val1,return_val2,...] = function_name(arg1,arg2,...)
    複数の戻り値と複数の入力引数を指定できます。戻り値と入力引数として、値のスカラー、ベクトル、または行列を指定できます。戻り値が 1 つのみの関数では、シグネチャ ラベルの大かっこを省略します。

    引数と戻り値の両方に同じ変数名を使用できます。たとえば、以下のシグネチャ ラベルをもつ関数では、変数 y1 および y2 を、入力と出力の両方として使用します。

    [y1,y2,y3] = f(y1,u,y2)
    この関数を C コードにエクスポートすると、y1 および y2 は参照によって (ポインターとして) 渡され、u は値によって渡されます。入力を参照によって渡すと、生成されたコードが中間データをコピーする回数が減少するため、コードがより最適化されます。

    メモ

    チャート シンボルの名前を関数の引数や戻り値として使用しないでください。たとえば、x または y がチャート データの場合、シグネチャ y = f(x) を使用して関数を定義するとランタイム エラーが発生します。

  3. 関数をプログラミングするには、Stateflow におけるフロー チャートの説明に従って、関数ボックス内でフロー チャートを作成します。

    グラフィカル関数を呼び出した場合は、その実行が完了しなければならないので、ステートは使用できません。コネクティブ ジャンクションと遷移は、グラフィカル関数で使用できる唯一のグラフィカル要素です。

    メモ

    グラフィカル関数内では、アクティブ ステートの変更が生じる可能性のあるイベントはブロードキャストしないでください。グラフィカル関数内では、イベントのブロードキャストのどのような動作がアクティブ ステートから出る原因となるかは予測できません。

  4. モデル エクスプローラーで、チャート オブジェクトを展開してグラフィカル関数を選択します。関数に属するデータ項目として、関数シグネチャの引数と戻り値が表示されます。引数のスコープは Input です。戻り値のスコープは Output です。

  5. データ プロパティの設定の説明に従って、各引数および戻り値の [データ] プロパティ ダイアログ ボックスで、データ プロパティを指定します。

  6. 関数に必要な追加のデータ項目を作成します。詳細については、モデル エクスプローラーによるデータの追加を参照してください。

    関数からは、専用のデータや、親ステートまたはチャートに属しているデータにアクセスできます。関数内のデータ項目には、以下のいずれかのスコープを設定できます。

    • Constant — すべての関数呼び出しで、その初期値を保持する定数データ。

    • Parameter — すべての関数呼び出しで、その初期値を保持するパラメーター データ。

    • Local — シミュレーション全体で関数呼び出しの間で維持されるローカル データ。C をアクション言語として使用するチャートでのみ有効です。

    • Temporary — 関数呼び出しが開始されるたびに初期化される一時データ。C をアクション言語として使用するチャートでのみ有効です。

    C をアクション言語として使用するチャートでは、シミュレーション全体で関数呼び出しの間でデータ値を維持する場合、ローカル データを定義します。関数呼び出しが開始されるたびにデータ値を初期化する場合は、一時データを定義します。たとえば、関数の呼び出し回数を追跡する場合は、[ローカル] スコープを使用してカウンターを定義できます。一方、関数の完了後にカウンター値を維持する必要がない場合は、ループ カウンターが [一時的] スコープをもつよう指定できます。

    MATLAB® をアクション言語として使用するチャートでは、ローカル データまたは一時的な関数データを定義する必要はありません。未定義の変数を使用すると、Stateflow は関数の残りの部分で使用可能な一時変数を作成します。関数の呼び出しの間で維持される値を格納するため、関数はチャート レベルでローカル データにアクセスできます。

    ヒント

    関数のローカル データと一時データは MATLAB ワークスペースから初期化できます。詳細については、MATLAB ベース ワークスペースからのデータの初期化を参照してください。

サイズの大きいグラフィカル関数の管理

必要に応じたサイズを選択してグラフィカル関数を作成できます。関数のサイズが大きくなりすぎた場合は、関数ボックスの内側を右クリックし、コンテキスト メニューから [グループとサブチャート][サブチャート] を選択してコンテンツを非表示にできます。

グラフィカル関数ボックスを不透明にするには、関数を右クリックし、コンテキスト メニューから [コンテンツ プレビュー] プロパティをクリアします。

チャート ウィンドウ全体を関数のプログラミング専用にするには、関数ボックスをダブルクリックして、サブチャート化したグラフィカル関数内のフロー チャートにアクセスします。

ステートと遷移におけるグラフィカル関数の呼び出し

グラフィカル関数は、任意のステートまたは遷移のアクションから呼び出すことが可能です。他の関数からグラフィカル関数を呼び出すこともできます。グラフィカル関数をエクスポートする場合は、モデル内の任意のチャートから呼び出すことができます。

グラフィカル関数を呼び出すには、関数シグネチャを使用し、関数シグネチャの各仮引数に実際の引数の値を設定します。実際の引数と仮引数のデータ型が異なる場合、関数は実際の引数を仮引数のデータ型にキャスト (変換) します。

グラフィカル関数のプロパティの指定

プロパティのダイアログ ボックスから、グラフィカル関数の一般的なプロパティを設定できます。関数のプロパティ ダイアログ ボックスを開くには、グラフィカル関数ボックスを右クリックし、コンテキスト メニューから [プロパティ] を選択します。

名前

関数名。関数名のリンクをクリックすると、関数がネイティブ チャートの前面に表示されます。

関数インライン オプション

生成コード内の関数のインライン化を制御します。

  • 自動 — 内部計算に基づいて関数をインライン化するかどうかを判定します。

  • インライン化 — 他のチャートにエクスポートせず、反復処理の一部に含まれていない場合、関数はインライン化されます (反復処理が発生するのは、関数が自分自身を直接的に呼び出している場合や、他の関数呼び出しを介して間接的に呼び出している場合です)。

  • 関数 — 関数をインライン化しません。

ラベル

関数のシグネチャ ラベル。関数シグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。

説明

関数の説明。階層内の関数について簡単な説明を入力できます。

ドキュメント リンク

関数のオンライン ドキュメンテーションへのリンク。適切なオンライン形式 (HTML ファイルや MATLAB コマンド ウィンドウのテキストなど) でドキュメンテーションを表示する、Web の URL アドレスまたは MATLAB コマンドを入力できます。[ドキュメント リンク] ハイパーリンクをクリックすると、Stateflow にドキュメンテーションが表示されます。

関連するトピック