このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
MATLAB Function
組み込み C コードを生成する MATLAB コードをモデルに含める
ライブラリ:
Simulink /
User-Defined Functions
HDL Coder /
User-Defined Functions
説明
MATLAB Function ブロックを使用すると、使用する MATLAB® 関数を Simulink® モデルで作成できます。MATLAB 関数は、シミュレーションのために実行されて、Simulink Coder™ ターゲット用のコードを生成します。Simulink および MATLAB 製品をはじめて使用する場合は、Simulink での MATLAB Function ブロックを使用した MATLAB 関数の実装の概要を参照してください。
MATLAB Function ブロックをダブルクリックして MATLAB Function ブロック エディターを開き、MATLAB 関数を記述します。Simulink での MATLAB Function ブロックを使用した MATLAB 関数の実装のモデル例 call_stats_block2
では、MATLAB Function ブロック エディターで次の関数を使用します。
function [mean,stdev] = stats(vals) % 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;
この関数は、入力および出力データを関数宣言ステートメントで引数および戻り値として指定します。前のサンプル関数の引数と戻り値は、call_stats_block2
モデルのブロックの入力および出力に相当します。
また、モデル エクスプローラーまたは [シンボル] ペインを使用して、変数の定義、入力トリガーの追加、および関数呼び出し出力の作成も実行できます。詳細については、MATLAB Function ブロックの変数の作成と定義、MATLAB Function ブロックの入力トリガーの管理およびMATLAB Function ブロックの関数呼び出しの出力の管理を参照してください。
MATLAB Function ブロックは、各変数のサイズ、クラスおよび実数/複素数を決定する解析に基づいて、効率の良い組み込み可能なコードを生成します。この分析によって次の制限が適用されます。
変数に対する最初の割り当てがサイズ、クラス、および実数/複素数を定義します。
C/C++ コード生成のための変数定義のベスト プラクティスを参照してください。
可変サイズ データを使用する場合またはコード内の変数を別の目的で再使用する場合を除き、初期割り当ての後に変数プロパティを再割り当てすることはできません。
変数プロパティの再代入を参照してください。
言語の制約に加えて、MATLAB Function ブロックは、MATLAB で使用可能な関数の一部をサポートしています。これらの関数には、次のような一般的カテゴリの関数が含まれます。
詳細については、C/C++ コードの生成でサポートされている関数およびオブジェクトを参照してください。
メモ
このブロックのコードは MATLAB とまったく同じ結果になるように試みますが、丸め誤差のために、結果が異なる場合があります。このような数値の差は、当初はわずかな関数 eps
でも、演算を繰り返すことによって拡大することがあります。nan
の動作に依存することはお勧めできません。同じ計算でも、異なる C コンパイラを使用すると、異なる結果になることがあります。
メモ
新しい MATLAB Function ブロックには %#codegen
命令は含まれませんが、含まれている場合と同様にエラーがチェックされます。MATLAB Function ブロックに %#codegen
命令を追加しても、エラー チェックには影響しません。詳細については、コンパイル命令 %#codegenを参照してください。
データの可視化をサポートするために、MATLAB Function ブロックは、シミュレーションについてのみ、MATLAB 関数の呼び出しをサポートします。この機能の制約と、このブロックにコード解析とこの機能を組み込む方法については、生成コードでの MATLAB エンジンを使用した関数呼び出しの実行を参照してください。これらの関数呼び出しは、Simulink の入力または出力に直接影響しない場合、Simulink Coder 生成コードには表示されません。
MATLAB Function ブロックから、Simulink Function ブロックで定義された関数を呼び出すこともできます。関数 Stateflow® は、[チャート プロパティ] ダイアログ ボックスで [チャート レベルの関数をエクスポート (グローバル)] および [エクスポートされた関数の Simulink による呼び出しを許可] をオンにして呼び出すことができます。
[シンボル] ペインで、ブロック入力を端子ではなく Simulink パラメーターとして宣言できます。MATLAB Function ブロックは、入力、出力、およびパラメーターについて、タイプとサイズの継承もサポートします。これらのプロパティを明示的に指定することもできます。MATLAB Function ブロックで使用する変数の詳細については、変数のデータ型の定義と変更、MATLAB Function ブロック変数のサイズの指定およびMATLAB Function ブロック パラメーター変数の設定を参照してください。
MATLAB Function では、再帰呼び出しはできません。
既定の設定では、MATLAB Function ブロックで直達が有効になっています。無効にするには、[直達を許可] プロパティをオフにします。非直達セマンティクスにより、出力が現在の状態に確実に依存するようになります。非直達を使用すると、フィードバック ループで MATLAB Function ブロックを使用し、代数ループを回避できます。詳細については、MATLAB Function ブロックでの非直達の使用を参照してください。