メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Stateflow チャート内への MATLAB 関数の統合

Stateflow® チャートで複雑なアルゴリズムを実装するには、MATLAB® 関数を使用します。MATLAB 関数を使用することで、MATLAB の数学的機能を Stateflow チャートに統合できます。MATLAB 関数の作成の詳細については、MATLAB 関数の定義による MATLAB コードの再利用を参照してください。

サポートされる関数のタイプ

Stateflow チャートでは次のタイプの MATLAB 関数を呼び出すことができます。

  • 関数本体で定義するローカル関数。

  • グラフィカル関数、Simulink® 関数、真理値表関数。

  • コード生成をサポートする MATLAB 組み込み関数。

  • 外部関数 (シミュレーションのみの実行用)。詳細については、Stateflow チャートでの外部 MATLAB 関数の呼び出しを参照してください。

Stateflow チャートへの MATLAB 関数の追加

この例では、2 つの MATLAB 関数を含むモデルを作成し、それらの関数を使用して、チャートに入力するデータの平均と標準偏差を計算します。

モデルの設定

  1. 新しい Simulink モデルを作成します。

  2. モデルに次のブロックを追加します。

    • Chart ブロック

    • Constant ブロック

    • Display ブロック 2 つ

  3. Simulink model that contains a Stateflow chart, a constant block, and two display blocks.

  4. モデルを call_stats_function_stateflow という名前で保存します。

Stateflow チャートの構成

  1. Chart ブロックを開きます。

  2. MATLAB 関数のアイコン を使用して MATLAB 関数を 2 つ追加します。

  3. 次のシグネチャを使って関数にラベルを付けます。

    • meanout = meanstats(vals)

    • stdevout = stdevstats(vals)

      Stateflow chart with two MATLAB functions called meanstats and stdevstats.

  4. 次の条件アクションをもつデフォルト遷移を終端ジャンクションに追加します。

    {
    mean = meanstats(invals);
    stdev = stdevstats(invals);
    }

    Stateflow chart with a transition that calls the two MATLAB functions.

    関数シグネチャの引数がスカラーの場合は、関数呼び出しの入力と出力がスカラー拡張のルールに従っていることを確認してください。詳細については、行列のすべての要素への値の代入を参照してください。

データ要素の定義

  1. [シンボル] ペインを開きます。

  2. [タイプ] 列を使用して次のデータのデータ型を設定します。

    • invals:入力データ

    • stdev:出力データ

    • mean:出力データ

    The data in the symbols pane.

標準偏差関数のプログラミング

stdevstats 関数を開き、次のコードを追加します。

function stdevout = stdevstats(vals)
%#codegen

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

function meanfcn = avg(inputArray,inputSize)
    meanfcn = sum(inputArray)/inputSize;

関数 sumstdevout の値が計算されます。%#codegen コンパイル命令を使用すると、コード生成でサポートされる MATLAB 関数の構文およびセマンティクスのコンパイル時違反を検出できます。

平均関数のプログラミング

meanstats 関数を開き、次のコードを追加します。

function meanout = meanstats(vals)
%#codegen

% Calculate statistical mean
len = length(vals);
meanout = avg(vals,len);

% Plot results (simulation only)
coder.extrinsic("plot");
plot(vals,"-+");

function meanfcn = avg(inputArray,inputSize)
    meanfcn = sum(inputArray)/inputSize;

length 関数は、コード生成をサポートし、ベクトルの長さを返します。関数 avgmeanout の値が計算されます。plot はコード生成ではサポートされていないため、外部として定義します。

モデルのシミュレーション

モデルをシミュレートするには、まず Simulink ブロックをチャートの入力端子と出力端子に接続します。

The Simulink model is connected to Stateflow.

[実行] をクリックします。平均と標準偏差の数値が Display ブロックのウィンドウに表示されます。

The Display blocks show the results of simulation.

コード生成の要件

コードを生成するには、すべての関数がコード生成をサポートしていなければなりません。いずれかの関数がコード生成をサポートしていない場合、coder.extrinsic (Simulink) を使用して例外としてマークできます。MATLAB がコード生成でサポートする関数の一覧については、C/C++ コードの生成でサポートされている関数およびオブジェクト (MATLAB Coder)を参照してください。

参考

(Simulink)

トピック