Main Content

MATLAB Function

組み込み C コードを生成する MATLAB コードをモデルに含める

  • ライブラリ:
  • Simulink / User-Defined Functions

    HDL Coder / User-Defined Functions

  • MATLAB Function block

説明

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 エンジンを使用した関数呼び出しの実行を参照してください。これらの関数呼び出しは、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 ブロックをスケジューリングする方法を指定します。

  • サンプル時間MATLAB Function ブロックのコードを同じレートで実行すべきか、異なるレートで実行できるかどうかを指定します。

  • 周期的分割MATLAB Function ブロック コードを周期的分割でスケジューリングします。分割の名前と、分割を実行するレートに対応するサンプル時間を指定します。

  • 非周期的分割MATLAB Function ブロック コードを非周期的分割でスケジューリングします。分割の名前を指定します。

プログラムでの使用

パラメーター: ScheduleAs
: string スカラーまたは文字ベクトル
: "SampleTime" | "DiscretePartition" | "UnconstrainedPartition"
既定の設定: "SampleTime"

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

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

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

プログラムでの使用

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

コード生成

これらのパラメーターを有効にするには、Simulink Coder または Embedded Coder® のライセンスが必要です。

ブロックが atomic (非バーチャル) サブシステムに対するコードの生成に使用するコードの形式を選択します。

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

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

  • 再利用できない関数Simulink Coder は個々の関数を個々のファイルに明示的に生成します。

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

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

詳細については、以下を参照してください。

ヒント

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

  • [再利用可能な関数][自動] のオプションは両方とも、MATLAB Function ブロックのインスタンスが複数存在するかどうかと、コードが再利用可能かどうかを判定しようとします。再利用が不可能な場合、以下のようにオプションの動作はそれぞれ異なります。

    • [自動] はインライン化されたコードを生成し、インライン化が禁止されている場合は、MATLAB Function ブロックのインスタンスごとに別の関数を生成します。

    • [再利用可能な関数] はモデル内の MATLAB Function ブロックのインスタンスごとに、引数をもつ別の関数を生成します。

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

プログラムでの使用

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

Simulink Coder がブロックに生成する関数に名前を付ける方法を選択します。

Embedded Coder ライセンスをお持ちの場合、コンフィギュレーション パラメーターの [コード生成][識別子] ペインのオプションで関数名を制御できます。

  • 自動 – 既定の命名規則 model_block() を使用して一意の関数名を割り当てます。ここで model はモデルの名前であり、block はブロックの名前 (または、コードが再使用される場合に同一のものの名前) です。

  • サブシステム名を使用MATLAB Function ブロック名を関数名として使用します。既定では、関数名は命名規則 model_block を使用します。

    メモ

    MATLAB Function ブロックがライブラリ ブロックにあり、[関数のパッケージ化] パラメーターが [再利用可能な関数] に設定されている場合、[サブシステム名を使用] オプションを設定すると、コード ジェネレーターはその関数名とファイル名に対してライブラリ ブロックの名前を使用します。

  • ユーザー指定[関数名] フィールドが有効になります。有効な C または C++ 関数名 (固有でなければならない) を入力します。

詳細については、サブシステム コードを別々の関数およびファイルとして生成 (Simulink Coder)を参照してください。

依存関係

このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] または [再利用可能な関数] に設定します。

プログラムでの使用

パラメーター: RTWFcnNameOpts
: string スカラーまたは文字ベクトル
: "Auto" | "Use subsystem name" | "User specified"
既定の設定: "Auto"

ブロック コードの関数の名前。

自動生成された名前またはブロック名を使用する代わりに、関数に特定の名前を付ける場合は、このパラメーターを使用します。詳細については、サブシステム コードを別々の関数およびファイルとして生成 (Simulink Coder)を参照してください。

依存関係

このパラメーターを有効にするには、[関数名オプション] パラメーターを [ユーザー指定] に設定します。

プログラムでの使用

パラメーター: RTWFcnName
: string スカラーまたは文字ベクトル
: "" | "<function name>"
既定の設定: ""

Simulink Coder がブロックに対して生成する関数の個々のファイルに名前を付ける方法。

  • 自動 – ブロックの構成およびモデルにあるインスタンスの数によって、[自動] は異なる結果を返します。

    • コード ジェネレーターがブロックに個別のファイルを生成 "しない" 場合、ブロックの親システムから生成されたコード モジュール内で、ブロック コードが生成されます。ブロックの親がモデル自体の場合、ブロック コードは model.c または model.cpp 内で生成されます。

    • [関数のパッケージ化] パラメーターに [再利用可能な関数] を選択し、生成コードがソース管理下にある場合、[ファイル名オプション]自動 以外の値を指定することを検討してください。これにより、関係のないモデル変更によって生成されたファイル名が変更されるのを防止できます。これは、ソース管理を使用して構成を管理する場合に問題となる点です。

    • [関数のパッケージ化] パラメーターに [再利用可能な関数] を選択し、モデル参照階層にブロックのインスタンスが複数ある場合、ブロックに対して再利用可能なコードを生成するには、[ファイル名オプション]自動 に設定しなければなりません。

  • サブシステム名を使用 – コード ジェネレーターは、ブロック名をファイル名として使用して、別のファイルを生成します。

    メモ

    [ファイル名オプション][サブシステム名を使用] に設定すると、モデルに Model ブロックが含まれている場合、またはモデルのモデル参照ターゲットが生成されている場合に、ブロックのファイルは変更されます。これらの状況で、MATLAB Function ブロックのファイル名はモデル名を前置したサブシステムの名前で構成されます。

  • 関数名を使用 – コード ジェネレーターは [関数名オプション] により指定される関数名をファイル名として使用します。

  • ユーザー指定 – このオプションは [ファイル名 (拡張子なし)] テキスト入力フィールドを有効にします。コード ジェネレーターは入力された名前をファイル名として使用します。任意のファイル名を入力しますが、.c.cpp (などの) 拡張子は含めないでください。このファイル名は、固有でなくても構いません。

    メモ

    MATLAB Function ブロックのソース ファイル名は固有でなくても構いませんが、循環依存状態となる非固有名を付けるのは避けなければなりません (sys_a.hsys_b.h を含み、sys_b.hsys_c.h を含み、sys_c.hsys_a.h を含むなど)。

依存関係

このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] または [再利用可能な関数] に設定します。

プログラムでの使用

パラメーター: RTWFileNameOpts
: string スカラーまたは文字ベクトル
: "Auto" | "Use subsystem name" | "Use function name" | "User specified"
既定の設定: "Auto"

生成されたファイルの名前。指定するファイル名は、一意である必要はありません。ただし、循環的な依存状態 (たとえば、sys_a.hsys_b.h を含み、sys_b.hsys_c.h を含み、sys_c.hsys_a.h を含む) になるような一意でない名前を付けることは避けてください。

詳細については、サブシステム コードを別々の関数およびファイルとして生成 (Simulink Coder)を参照してください。

依存関係

このパラメーターを有効にするには、[ファイル名オプション][ユーザー指定] に設定します。

プログラムでの使用

パラメーター: RTWFileName
: string スカラーまたは文字ベクトル
: "" | "<file name>"
既定の設定: ""

モデルの例

ブロックの特性

データ型

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

直接フィードスルー

はい

多次元信号

限定的a

可変サイズの信号

限定的a

ゼロクロッシング検出

いいえ

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

拡張機能

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

バージョン履歴

R2011a で導入