Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

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

  • 行列指向型の計算

  • データの解析と視覚化

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

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

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

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

  • 関数をモデル内の任意のチャートから呼び出す場合は、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. 関数の引数と戻り値の宣言の説明に従って、関数のシグネチャ ラベルを入力します。

  3. 関数をプログラミングするには、関数ボックスをダブルクリックして MATLAB エディターを開きます。詳細については、チャート内での MATLAB 関数のプログラミングを参照してください。

  4. エディターで、関数を実装する MATLAB コードを入力します。

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

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

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

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

    • Local — 関数呼び出し後、次回の関数呼び出しまで保持されるローカル データ。C チャートでのみ有効。

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

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

    • Temporary — 関数呼び出しが開始されるたびに初期化される一時データ。C チャートでのみ有効。

関数データの初期化

MATLAB ワークスペースから関数データ (引数と戻り値以外) を初期化できます。詳細については、MATLAB ベース ワークスペースからのデータの初期化を参照してください。

一時データの定義

C をアクション言語として使用するチャートで、関数の実行時にのみ有効なデータを使用する必要がある場合は、一時データを定義します。たとえば、関数の完了後にカウンター値が存在する必要がない場合は、[一時的] スコープにループ カウンターを指定できます。

MATLAB をアクション言語として使用するチャートでは、一時的な関数データを定義する必要はありません。未定義の変数を使用する場合は、Stateflow によって一時的な変数が作成されます。その変数は、その他の関数に利用できます。

列挙型および可変サイズのデータの使用

Simulink® モデルの Stateflow チャートでは、列挙型データおよび可変サイズ データを MATLAB 関数内で使用できます。詳細については、列挙型のコードの生成可変サイズ入出力の宣言を参照してください。

関数の引数と戻り値の宣言

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

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

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

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

ステートと遷移における 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 にドキュメンテーションが表示されます。

関連するトピック