グラフィカル関数の定義によるロジック パターンの再利用
Stateflow® チャートにおける "グラフィカル関数" とは、制御フロー ロジックと反復ループの再利用に役立つグラフィカルな要素です。グラフィカル関数は、コネクティブ ジャンクションと遷移を使用するフロー チャートで作成します。グラフィカル関数は、ステートと遷移のアクションで呼び出すことができます。グラフィカル関数では、次のことが可能です。
チャート内の任意の場所で呼び出すことのできる、モジュラー式の再利用可能なロジックを作成できます。
チャート アニメーションでシミュレーションの動作を視覚的に追跡できます。
グラフィカル関数は、チャート、ステート、またはサブチャート内の任意の場所に配置できます。関数の場所により、その関数を呼び出すことのできるステートと遷移の集合が判定されます。
ある特定のステート、またはサブチャートとそのサブステートの内部で関数を呼び出す場合は、グラフィカル関数を該当するステートまたはサブチャートに配置します。この関数は、そのステートまたはサブチャートの親や先祖に含まれる同じ名前の関数よりも優先されます。
関数をチャートの任意の部分から呼び出す場合は、グラフィカル関数をチャート レベルに配置します。
関数をモデル内の任意のチャートから呼び出す場合は、グラフィカル関数をチャート レベルに配置し、チャートレベルの関数のエクスポートを有効にします。詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。
メモ
グラフィカル関数は、Stateflow 階層で自分より上にあるチャートとステート データにアクセスできます。
たとえば、以下のグラフィカル関数は f1
という名前をもっています。3 つの引数 (a
、b
、c
) を取り、3 つの出力値 (x
、y
、z
) を返します。この関数には、3 つの異なる引数の積を計算するフロー チャートが含まれています。
グラフィカル関数の定義
オブジェクト パレットで、グラフィカル関数のアイコン をクリックします。
チャート キャンバスで、新しいグラフィカル関数の位置をクリックします。
関数のシグネチャ ラベルを入力します。
関数のシグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。シグネチャ ラベルの構文は以下のとおりです。
複数の戻り値と複数の入力引数を指定できます。戻り値と入力引数として、値のスカラー、ベクトル、または行列を指定できます。戻り値が 1 つのみの関数では、シグネチャ ラベルの大かっこを省略します。[return_val1,return_val2,...] = function_name(arg1,arg2,...)
引数と戻り値の両方に同じ変数名を使用できます。入力と出力で同じ変数を使用する場合は、"インプレース データ" を作成します。たとえば、以下のシグネチャ ラベルをもつ関数では、変数
y1
およびy2
を、入力と出力の両方として使用します。この関数を C コードにエクスポートすると、生成コードは[y1,y2,y3] = f(y1,u,y2)
y1
およびy2
を参照渡しされたインプレース引数として処理します。インプレース データを使用すると、生成コードが中間データをコピーする回数が減少するため、コードがより効率的になります。[シンボル] ペインおよびモデル エクスプローラーでは、関数に属するデータ項目として、関数シグネチャの引数と戻り値が表示されます。引数のスコープは
[入力]
です。戻り値のスコープは[出力]
です。データ プロパティの設定の説明に従って、各引数および戻り値のデータ プロパティを指定します。引数と戻り値が同じ名前である場合、引数のプロパティのみを編集できます。戻り値のプロパティは読み取り専用です。
関数をプログラミングするには、Stateflow でのフロー チャートの作成の説明に従って、関数ボックス内でフロー チャートを作成します。
グラフィカル関数を呼び出した場合は、その実行が完了しなければならないので、ステートは使用できません。コネクティブ ジャンクションと遷移は、グラフィカル関数で使用できる唯一のグラフィカル要素です。
メモ
グラフィカル関数内では、アクティブ ステートの変更が生じる可能性のあるイベントはブロードキャストしないでください。グラフィカル関数内では、イベントのブロードキャストのどのような動作がアクティブ ステートから出る原因となるかは予測できません。
関数に必要な追加のデータ項目を作成します。詳細については、モデル エクスプローラーによるデータの追加を参照してください。
関数からは、専用のデータや、親ステートまたはチャートに属しているデータにアクセスできます。関数内のデータ項目には、以下のいずれかのスコープを設定できます。
Constant
— すべての関数呼び出しで、その初期値を保持する定数データ。Parameter
— すべての関数呼び出しで、その初期値を保持するパラメーター データ。Local
— シミュレーション全体で関数呼び出しの間で維持されるローカル データ。C をアクション言語として使用するチャートでのみ有効です。Temporary
— 関数呼び出しが開始されるたびに初期化される一時データ。C をアクション言語として使用するチャートでのみ有効です。
C をアクション言語として使用するチャートでは、シミュレーション全体で関数呼び出しの間でデータ値を維持する場合、ローカル データを定義します。関数呼び出しが開始されるたびにデータ値を初期化する場合は、一時データを定義します。たとえば、関数の呼び出し回数を追跡する場合は、
[ローカル]
スコープを使用してカウンターを定義できます。一方、関数の完了後にカウンター値を維持する必要がない場合は、ループ カウンターが[一時的]
スコープをもつよう指定できます。MATLAB® をアクション言語として使用するチャートでは、グラフィカル関数内でローカル データまたは一時データを定義する必要はありません。代わりに、未定義の変数を使用して、関数呼び出しの残りの部分でのみアクセス可能な値を格納できます。関数の呼び出し全体で維持される値を格納するには、チャート レベルでローカル データを使用します。
ヒント
関数のローカル データと一時データは MATLAB ワークスペースから初期化できます。詳細については、MATLAB ベース ワークスペースからのデータの初期化を参照してください。
ステートと遷移におけるグラフィカル関数の呼び出し
グラフィカル関数は、任意のステートまたは遷移のアクション、または他の関数から呼び出すことができます。グラフィカル関数をエクスポートする場合は、モデル内の任意のチャートから呼び出すことができます。関数のエクスポートの詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。
グラフィカル関数を呼び出すには、関数シグネチャを使用し、関数シグネチャの各仮引数に実際の引数の値を設定します。
[return_val1,return_val2,...] = function_name(arg1,arg2,...)
実際の引数と仮引数のデータ型が異なる場合、関数は実際の引数を仮引数のデータ型にキャスト (変換) します。
サイズの大きいグラフィカル関数の管理
必要に応じたサイズを選択してグラフィカル関数を作成できます。関数のサイズが大きくなりすぎた場合は、関数ボックスの内側を右クリックし、コンテキスト メニューから [グループとサブチャート] 、 [サブチャート] を選択してコンテンツを非表示にできます。
グラフィカル関数ボックスを不透明にするには、関数を右クリックし、コンテキスト メニューから [コンテンツ プレビュー] プロパティをクリアします。
チャート ウィンドウ全体を関数のプログラミング専用にするには、関数ボックスをダブルクリックして、サブチャート化したグラフィカル関数内のフロー チャートにアクセスします。詳細については、サブチャートを使用したモーダル ロジックのカプセル化を参照してください。
グラフィカル関数のプロパティの指定
以下に示すプロパティは、グラフィカル関数が Stateflow チャート内の他のコンポーネントとどのように相互作用するかを指定します。これらのプロパティは、[プロパティ インスペクター]、モデル エクスプローラー、または [関数プロパティ] ダイアログ ボックスで変更できます。
[プロパティ インスペクター] を使用するには、次を行います。
[モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。
Stateflow エディターで、グラフィカル関数を選択します。
[プロパティ インスペクター] で、遷移のプロパティを編集します。
モデル エクスプローラーを使用するには、次を行います。
[モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。
[モデルの階層構造] ペインで、グラフィカル関数を選択します。
[ダイアログ] ペインで、グラフィカル関数のプロパティを編集します。
[関数プロパティ] ダイアログ ボックスを使用するには、次を行います。
Stateflow エディターで、グラフィカル関数を右クリックします。
[プロパティ] を選択します。
プロパティ ダイアログ ボックスで、グラフィカル関数のプロパティを編集します。
これらのプロパティは、Stateflow.Function
オブジェクトを使用してプログラムで変更することもできます。Stateflow プログラム インターフェイスの詳細については、Stateflow API の概要を参照してください。
名前
関数名。関数名のリンクをクリックすると、関数がネイティブ チャートの前面に表示されます。
関数インライン オプション
生成コード内の関数のインライン化を制御します。
自動
— 内部計算に基づいて関数をインライン化するかどうかを判定します。インライン化
— 他のチャートにエクスポートせず、反復処理の一部に含まれていない場合、関数はインライン化されます (反復処理が発生するのは、関数が自分自身を直接的に呼び出している場合や、他の関数呼び出しを介して間接的に呼び出している場合です)。関数
— 関数をインライン化しません。
このプロパティは、[プロパティ インスペクター] では使用できません。
ラベル
関数のシグネチャ ラベル。関数シグネチャ ラベルは、関数の名前と、その引数と戻り値の正式名称を指定します。このプロパティは、[プロパティ インスペクター] では使用できません。
説明
グラフィカル関数の説明。
ドキュメント リンク
グラフィカル関数のオンライン ドキュメンテーションへのリンク。HTML ファイルまたは MATLAB コマンド ウィンドウのテキストとしてドキュメンテーションを表示する、Web の URL アドレスまたは MATLAB コマンドを入力できます。[ドキュメント リンク] ハイパーリンクをクリックすると、Stateflow でリンクが評価され、ドキュメンテーションが表示されます。
参考
オブジェクト
ツール
- モデル エクスプローラー (Simulink)