Main Content

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

MATLAB 関数の定義による MATLAB コードの再利用

Stateflow® チャートにおける MATLAB® 関数は、アルゴリズム記述用のグラフィカル要素です。アルゴリズムは組み込みの MATLAB 関数を呼び出して簡単に実装できます。代表的な使用例は、以下のとおりです。

  • 行列指向型の計算

  • データの解析と視覚化

このタイプの関数は、グラフィカルな Stateflow 構造よりも MATLAB を使ったほうが簡単に記述できるアルゴリズムのコード作成に便利です。MATLAB 関数では、組み込みアプリケーションのための効率性の高い量産品質の C コードを生成するために、最適化も行われます。

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

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

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

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

メモ

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

たとえば、以下の MATLAB 関数の名前は stdevstats です。引数 vals を取り、出力値 stdevout を返します。

vals 内の値の標準偏差を計算するために、この関数は以下のコードを使用します。

function stdevout = stdevstats(vals)
%#codegen

% Calculates the standard deviation for vals

len = length(vals);
stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len);

function mean = avg(array,size)
mean = sum(array)/size;

チャート内での MATLAB 関数の定義

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

  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. 関数をプログラミングするには、関数ボックスをダブルクリックして MATLAB エディターを開きます。

  4. MATLAB エディターで、関数を実装する MATLAB コードを入力します。詳細については、チャート内での MATLAB 関数のプログラミングを参照してください。

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

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

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

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

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

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

    MATLAB 関数では、ローカル データまたは一時的な関数データを明示的に作成する必要はありません。未定義の変数を使用すると、Stateflow は関数の残りの部分で使用可能な一時変数を作成します。関数呼び出しの間で維持される値を格納するには、キーワード persistent を使用します。

ステートと遷移における MATLAB 関数の呼び出し

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

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

MATLAB 関数のプロパティの指定

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

名前

関数名。関数名のリンクをクリックして、MATLAB エディターで関数を開きます。

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

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

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

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

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

ラベル

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

整数オーバーフローで飽和

生成コードで整数オーバーフローが飽和するかどうかを指定します。詳細については、チャート データの整数オーバーフローの処理を参照してください。

MATLAB 関数 fimath

MATLAB 関数の fimath プロパティを定義します。指定される fimath プロパティは、MATLAB 関数で作成される fifimath のすべてのオブジェクトと関連しています。次のオプションのいずれかを選択します。

  • MATLAB と同じ — 関数は現在のグローバル fimath と同じ fimath プロパティを使用します。エディット ボックスが淡色表示され、現在のグローバル fimath が読み取り専用で表示されます。グローバル fimathfimath オブジェクトの詳細については、Fixed-Point Designer™ ドキュメンテーションを参照してください。

  • それ以外を指定 — 次のいずれかの方法により、独自の fimath オブジェクトを指定します。

    • fimath オブジェクトをエディット ボックス内で作成する。

    • fimath オブジェクトを MATLAB またはモデル ワークスペース内で作成して、その変数名をエディット ボックスに入力する。

説明

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

ドキュメント リンク

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

関連するトピック