主要内容

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

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

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

  • 行列指向型の計算

  • データの解析と視覚化

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

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

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

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

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

メモ

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

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

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

函数stdevout = stdevstats (val)% # codegen%计算val的标准偏差len =长度(val);stdevout =√总和(vals-avg (vals, len)) ^ 2)) / len);函数均值= sum(array,size) /size;

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

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

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

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

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

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

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

    メモ

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

  3. 関数をプログラミングするには,関数ボックスをダブルクリックしてMATLABエディターを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

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

名前

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

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

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

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

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

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

ラベル

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

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

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

MATLAB関数fimath

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

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

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

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

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

説明

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

ドキュメントリンク

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

関連するトピック