このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Stateflow チャート内への MATLAB 関数の統合
Stateflow® チャートで複雑なアルゴリズムを実装するには、MATLAB® 関数を使用します。MATLAB 関数を使用することで、MATLAB の数学的機能を Stateflow チャートに統合できます。MATLAB 関数の作成の詳細については、MATLAB 関数の定義による MATLAB コードの再利用を参照してください。
サポートされる関数のタイプ
Stateflow チャートでは次のタイプの MATLAB 関数を呼び出すことができます。
関数本体で定義するローカル関数。
グラフィカル関数、Simulink® 関数、真理値表関数。
コード生成をサポートする MATLAB 組み込み関数。
外部関数 (シミュレーションのみの実行用)。詳細については、Stateflow チャートでの外部 MATLAB 関数の呼び出しを参照してください。
Stateflow チャートへの MATLAB 関数の追加
この例では、2 つの MATLAB 関数を含むモデルを作成し、それらの関数を使用して、チャートに入力するデータの平均と標準偏差を計算します。
モデルの設定
新しい Simulink モデルを作成します。
モデルに次のブロックを追加します。
Chart ブロック
Constant ブロック
Display ブロック 2 つ
モデルを
call_stats_function_stateflow
という名前で保存します。
Stateflow チャートの構成
Chart ブロックを開きます。
MATLAB 関数のアイコン
を使用して MATLAB 関数を 2 つ追加します。
次のシグネチャを使って関数にラベルを付けます。
meanout = meanstats(vals)
stdevout = stdevstats(vals)
次の条件アクションをもつデフォルト遷移を終端ジャンクションに追加します。
{ mean = meanstats(invals); stdev = stdevstats(invals); }
関数シグネチャの引数がスカラーの場合は、関数呼び出しの入力と出力がスカラー拡張のルールに従っていることを確認してください。詳細については、行列のすべての要素への値の代入を参照してください。
データ要素の定義
[シンボル] ペインを開きます。
[タイプ] 列を使用して次のデータのデータ型を設定します。
invals
:入力データstdev
:出力データmean
:出力データ
標準偏差関数のプログラミング
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;
関数 sum
で stdevout
の値が計算されます。%#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
関数は、コード生成をサポートし、ベクトルの長さを返します。関数 avg
で meanout
の値が計算されます。plot
はコード生成ではサポートされていないため、外部として定義します。
モデルのシミュレーション
モデルをシミュレートするには、まず Simulink ブロックをチャートの入力端子と出力端子に接続します。
[実行] をクリックします。平均と標準偏差の数値が Display ブロックのウィンドウに表示されます。
コード生成の要件
コードを生成するには、すべての関数がコード生成をサポートしていなければなりません。いずれかの関数がコード生成をサポートしていない場合、coder.extrinsic
(Simulink) を使用して例外としてマークできます。MATLAB がコード生成でサポートする関数の一覧については、C/C++ コードの生成でサポートされている関数およびオブジェクト (MATLAB Coder)を参照してください。
参考
coder.extrinsic
(Simulink)