Main Content

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

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 モデルのブロックの入力および出力に相当します。

This shows connected signals between the blocks established in the previous image.

また、モデル エクスプローラーまたは [シンボル] ペインを使用して、変数の定義、入力トリガーの追加、および関数呼び出し出力の作成も実行できます。詳細については、MATLAB Function ブロックの変数の作成と定義MATLAB Function ブロックの入力トリガーの管理およびMATLAB Function ブロックの関数呼び出しの出力の管理を参照してください。

MATLAB Function ブロックは、各変数のサイズ、クラスおよび実数/複素数を決定する解析に基づいて、効率の良い組み込み可能なコードを生成します。この分析によって次の制限が適用されます。

言語の制約に加えて、MATLAB Function ブロックは、MATLAB で使用可能な関数の一部をサポートしています。これらの関数には、次のような一般的カテゴリの関数が含まれます。

詳細については、C/C++ コードの生成でサポートされている関数およびオブジェクトを参照してください。

メモ

このブロックのコードは MATLAB とまったく同じ結果になるように試みますが、丸め誤差のために、結果が異なる場合があります。このような数値の差は、当初はわずかな関数 eps でも、演算を繰り返すことによって拡大することがあります。nan の動作に依存することはお勧めできません。同じ計算でも、異なる C コンパイラを使用すると、異なる結果になることがあります。

メモ

新しい MATLAB Function ブロックには %#codegen 命令は含まれませんが、含まれている場合と同様にエラーがチェックされます。MATLAB Function ブロックに %#codegen 命令を追加しても、エラー チェックには影響しません。詳細については、コンパイル命令 %#codegenを参照してください。

データの可視化をサポートするために、MATLAB Function ブロックは、シミュレーションについてのみ、MATLAB 関数の呼び出しをサポートします。この機能の制約と、このブロックにコード解析とこの機能を組み込む方法については、MATLAB Function ブロックでの 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 ブロックでの非直達の使用を参照してください。

端子

入力

すべて展開する

入力端子。スカラー、ベクトル、または行列として指定します。作成する各入力変数には、対応する入力端子があります。

MATLAB でサポートされていても、Simulink でサポートされないデータ型については、Simulink モデルと MATLAB Function ブロック内の関数との間で受け渡しされない可能性があります。これらの型は MATLAB Function ブロック内で使用される場合があります。

このブロックの固定小数点サポートの詳細は、固定小数点データ型と MATLAB Function ブロック (Fixed-Point Designer)およびMATLAB Function ブロックを使用したデータ型オーバーライド (Fixed-Point Designer)を参照してください。

依存関係

入力端子を作成するには、ブロックを開き、[シンボル] ペインで入力変数を作成します。MATLAB Function ブロックの変数の作成と定義を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | string | fixed point | enumerated | bus

出力

すべて展開する

出力端子。スカラー、ベクトル、または行列として指定します。作成する各出力変数には、対応する出力端子があります。

依存関係

出力端子を作成するには、ブロックを開き、[シンボル] ペインで出力変数を作成します。MATLAB Function ブロックの変数の作成と定義を参照してください。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | string | fixed point | enumerated | bus

パラメーター

すべて展開する

メイン

MATLAB Function ブロック アイコンに端子ラベルを表示する方法を選択します。

  • なし – 端子ラベルを表示しません。

  • FromPortIcon – 入力変数と出力変数の名前を表示します。

  • FromPortBlockName – 入力変数と出力変数の名前を表示します。

  • SignalName – 端子に接続されている信号に名前が付いている場合、信号名を表示します。それ以外の場合は、変数の名前を表示します。

プログラムでの使用

パラメーター: ShowPortLabels
: string スカラーまたは文字ベクトル
: "none" | "FromPortIcon" | "FromPortBlockName" | "SignalName"
既定の設定: "FromPortIcon"

MATLAB Function ブロックの内容へのユーザー アクセスを制御します。

  • ReadWriteMATLAB Function ブロックの内容を開いて修正できます。

  • ReadOnlyMATLAB Function ブロックを開くことができます。

  • NoReadOrWriteMATLAB Function ブロックを開くことも修正することもできません。

メモ

[読み取り/書き込みアクセス許可] パラメーターが [NoReadOrWrite] である MATLAB Function ブロックの内容を表示しようとしても、ブロックは応答しません。たとえば、MATLAB Function ブロックをダブルクリックしても、Simulink は table の内容を開いたり、メッセージを表示したりしません。

プログラムでの使用

パラメーター: Permissions
: string スカラーまたは文字ベクトル
: "ReadWrite" | "ReadOnly" | "NoReadOrWrite"
既定の設定: "ReadWrite"

シミュレーション時にブロックが Atomic サブシステムを含む人為的な代数ループを削除しようとしているかどうか。

  • オフ – Atomic サブシステムを含むすべての人為的な代数ループを削除しようとしません。

  • オン – Atomic サブシステムを含むすべての人為的な代数ループを削除しようとします。

プログラムでの使用

パラメーター: MinAlgLoopOccurrences
: string スカラーまたは文字ベクトル
: "off" | "on"
既定の設定: "off"

このブロックの変数を同じレートで実行すべきか、異なるレートで実行できるかどうかを指定します。

  • MATLAB Function ブロック内の変数を異なるレートで実行できる場合、サンプル時間を継承 (-1) に指定します。

  • 変数を同じレートで実行しなければならない場合、このレートに相当するサンプル時間 Ts を指定します。

プログラムでの使用

パラメーター: SystemSampleTime
: string スカラーまたは文字ベクトル
: "-1" | "[Ts 0]"
既定の設定: "-1"

コード生成

ブロックで生成するコードの形式を選択します。

自動

Simulink Coder は、モデル内に存在する MATLAB Function ブロックのインスタンスのタイプと数に基づいてシステムに最適な形式を選択します。

インライン

Simulink Coder は、無条件に MATLAB Function ブロックをインライン化します。

再利用できない関数

Simulink Coder は、個々の関数を個々のファイルに明示的に生成します。このように設定された MATLAB Function ブロックは、コード生成[関数インターフェイス] パラメーターの設定に応じて引数をもつことがある関数を生成します。生成された関数とファイルは、コード生成からそれぞれ [関数名] パラメーターと [ファイル名 (拡張子なし)] パラメーターを使用して名前を付けることができます。これらの関数は再呼び出し可能ではありません。

再利用可能な関数

Simulink Coder は、モデルに MATLAB Function ブロックの複数のインスタンスが含まれる場合、MATLAB Function ブロックのコードの再利用を可能にする引数をもつ関数を生成します。

このオプションは、参照モデル全体にわたり MATLAB Function ブロックの複数のインスタンスを含むモデル参照階層の生成コードで、MATLAB Function ブロック コードの再利用を可能とする引数をもつ関数を生成します。この場合、MATLAB Function ブロックはライブラリに含まれていなければなりません。

ヒント

  • MATLAB Function ブロックの複数のインスタンスを 1 つの再利用可能な関数として表す場合、それぞれのインスタンスを [自動] または [再利用可能な関数] として指定できます。それらのどちらか一方を使用するのが最適です。両方を使用すると、各指定につき 1 つずつ、2 つの再利用可能な関数が作成されます。これらの選択の結果は、再利用が不可能な場合にのみ異なります。[自動] を選択しても、MATLAB Function ブロック コードの関数やファイル名は制御できません。

  • [再利用可能な関数][自動] のオプションは両方とも、MATLAB Function ブロックのインスタンスが複数存在するかどうかとコードが再利用可能かどうかを判定します。コードの再利用が不可能な場合、オプションの動作はそれぞれ異なります。この場合、[自動] はインライン化されたコードを生成し、インライン化が禁止されている場合はブロックのインスタンスごとに別の関数を生成します。

  • 生成コードがソース管理下にある場合に [再利用可能な関数] を選択する場合は、[ファイル名オプション]サブシステム名を使用[関数名を使用]ユーザー指定 のいずれかに設定してください。この設定を行わないと、モデルの変更時にコード ファイルの名前が変更され、ファイルのソース管理ができません。

依存関係

  • このパラメーターには Simulink Coder が必要です。

  • このパラメーターを [再利用できない関数] または [再利用可能な関数] に設定すると、次のパラメーターが有効になります。

    • 関数名オプション

    • ファイル名オプション

    • 初期化/終了関数のメモリ セクション (Embedded Coder® と ERT ベースのシステム ターゲット ファイルが必要)

    • 実行関数のメモリ セクション (Embedded Coder と ERT ベースのシステム ターゲット ファイルが必要)

  • このパラメーターを [再利用できない関数] に設定すると、[別々のデータをもつ関数] が有効になります (Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要)。

プログラムでの使用

パラメーター: RTWSystemCode
: string スカラーまたは文字ベクトル
: "Auto" | "Inline" | "Nonreusable function" | "Reusable function"
既定の設定: "Auto"

ブロックの特性

データ型

Booleana | busa | doublea | enumerateda | fixed pointa | halfa | integera | singlea | stringa

直達

はいa

多次元信号

はいa

可変サイズの信号

はいa

ゼロクロッシング検出

いいえ

a 実際のデータ型または機能のサポートは、ブロックの実装に依存します。

拡張機能

PLC コード生成
Simulink® PLC Coder™ を使用して構造化テキスト コードを生成します。

バージョン履歴

R2011a で導入

すべて展開する