このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
Simulink での MATLAB Function ブロックを使用した MATLAB 関数の実装
MATLAB Function ブロックでは、MATLAB® 言語を使用して Simulink® モデル内にカスタム関数を定義できます。MATLAB Function ブロックは、Simulink Coder™ および Embedded Coder® からの C/C++ コード生成をサポートしています。
これらのブロックは次のような場合に使用します。
カスタム機能をモデル化する既存の MATLAB 関数がある場合。または、こうした関数を容易に作成できる場合。
Simulink グラフィカル言語では取得されない、または取得できないカスタム機能がモデルに必要な場合。
Simulink ブロック線図を使うより MATLAB 関数を使う方がカスタム機能のモデル化が容易な場合。
モデル化するカスタム機能に連続状態または離散ダイナミクス状態が含まれない場合。動的状態をモデル化するには、S-Function を使用する。MATLAB S-Function の作成と構成を参照してください。
MATLAB Function ブロックによる平均と標準偏差の計算
この例は MATLAB Function ブロックを含むモデルから始まり、値のベクトルの平均と標準偏差を計算するためにブロックをカスタマイズする方法を順を追って説明していきます。
モデルを開く
モデル call_stats_block1
に、空の MATLAB Function ブロックとこの例に必要なブロックが含まれています。モデルを開きます。
MATLAB Function ブロックのプログラム
ベクトルの値から平均と標準偏差を計算するブロックをプログラムします。
MATLAB Function ブロック エディターを開くには、MATLAB Function ブロックをダブルクリックします。MATLAB Function ブロック エディターに、2 つの変数 (1 つの入力引数と 1 つの出力引数) をもつ既定の関数が表示されます。
関数宣言ステートメントを編集して関数の入力と出力を定義します。
function [mean, stdev] = stats(vals)
このステートメントは、
stats
という名前の、3 つの変数をもつ関数を定義します。このステートメントは、1 つの入力引数vals
と、2 つの出力引数mean
およびstdev
を定義します。関数宣言ステートメントの後の新しい行に、以下のコードを追加します。
% Calculates a statistical mean and a standard % deviation for the values in vals. len = length(vals); mean = avg(vals,len); stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len); plot(vals,"-+"); function mean = avg(array,size) mean = sum(array)/size;
ブロックを終了します。ブロックにより端子名が更新されます。関数の出力
mean
およびstdev
はブロックの出力端子 [mean] および [stdev] に対応し、関数の入力vals
はブロックの入力端子 [vals] に対応します。MATLAB Function ブロックへの接続を次のように実行します。
モデルを
call_stats_block2
という名前で保存します。
MATLAB Function ブロック変数のプロパティのチェック
MATLAB Function ブロック内の変数のプロパティをチェックして管理できます。MATLAB Function ブロックの変数の作成と定義を参照してください。この例では、入力引数 vals
がその型とサイズのプロパティを継承していることを検証します。
MATLAB Function ブロックをダブルクリックします。
[シンボル] ペインとプロパティ インスペクターを開きます。[関数] タブで、[データの編集] をクリックします。
[シンボル] ペインの [名前] 列に変数名が表示されます。[タイプ] 列により、関数の引数の端子の割り当てと、関数宣言ステートメントのどこに表示されるかが決まります。この例では、
vals
は入力端子に割り当てられます。mean
とstdev
は出力端子に割り当てられます。いずれかの変数の [タイプ] エントリを変更すると、関数宣言ステートメントも変化します。vals
のプロパティをチェックします。[シンボル] ペインで、vals
の行をクリックします。プロパティ インスペクターが更新され、vals
のプロパティが表示されます。[スコープ] プロパティは [タイプ] 列に一致しています。継承できるのは、一部のプロパティのみ、すなわち [サイズ]、[単位]、[実数/複素数]、[型] のみです。次のとき、変数はそのプロパティを継承していることを示します。[サイズ] は
-1
、[単位] はinherit
、[実数/複素数] は[Inherit]
、[型] は[Inherit: Same as Simulink]
に設定します。この例では、vals
は [サイズ] と [型] についてこれらの値を使用しています。
[シンボル] ペインでその他の MATLAB Function ブロック変数を選択し、チェックします。
既定では、新規定義された入力変数および出力変数は、そのサイズ、単位、実数/複素数、および型を継承します。変数で特定のサイズ、単位、または型を使用する場合、これらのプロパティを明示的に指定することもできます。たとえば、変数を 2-by-3
の行列として指定するには、[サイズ] プロパティに「[2 3]
」と入力します。詳細については、変数のデータ型の定義と変更およびMATLAB Function ブロック変数のサイズの指定を参照してください。
関数のビルド
MATLAB Function ブロックにコードを入力した後、コードにエラーがないかチェックし、関数をビルドできます。MATLAB Function ブロックのデバッグを参照してください。
モデルをビルドするとき、MATLAB はコンパイラを使用して MATLAB function ブロック コードをコンパイルします。システムに MATLAB でサポートされているコンパイラが複数インストールされている場合は、mex -setup
コマンドを使用して既定のコンパイラを変更できます。既定のコンパイラの変更を参照してください。サポートされるコンパイラのリストを確認するには、Supported and Compatible Compilers を開き、ご利用のオペレーティング システムに対応するタブをクリックし、[Simulink 製品ファミリ] テーブルの [For Model Referencing, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks] 列を参照してください。
Simulink で [実行] をクリックしてモデルのシミュレーションを実行します。ソフトウェアがモデルをビルドするとき、MATLAB Function ブロックをビルドし、関数のデータを 2 つの Display ブロックに出力します。
コード生成に向けたブロックの準備
MATLAB Function ブロックが含まれているモデルからスタンドアロン C/C++ コードを生成するには、Simulink Coder または Embedded Coder を使用します。
シミュレーションおよびコード生成ビルド対応のサポートされているコンパイラの選択
サポートされるコンパイラのリストを確認するには、Supported and Compatible Compilers を開き、ご利用のオペレーティング システムに対応するタブをクリックし、[Simulink 製品ファミリ] テーブルの [Simulink Coder] 列を参照してください。
MATLAB Function ブロックのコード生成
Simulink Coder または Embedded Coder のライセンスをお持ちの場合、モデルからコードを生成できます。コードを生成するには、次を行います。
call_stats_block2
モデルで MATLAB Function ブロックをダブルクリックします。Simulink Coder または Embedded Coder アプリを開きます。
[C コード] タブで [ビルド] を選択し、モデル例をコンパイルしてビルドします。
[可変ステップ]
ソルバーに関連するエラーが表示された場合、[コンフィギュレーション パラメーター] ウィンドウを開き、左側のペインで [ソルバー] をクリックしてください。[ソルバーの選択] で [タイプ] を[固定ステップ]
に設定し、コードをもう一度生成します。固定ステップと可変ステップのソルバーの違いに関する詳細については、固定ステップ ソルバーと可変ステップ ソルバーを参照してください。
参考
MATLAB Function | MATLAB Function ブロック エディター | add_block