メインコンテンツ

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

MATLAB Function

MATLAB コードを Simulink モデルに含める

  • MATLAB Function block icon.

ライブラリ:
Simulink / User-Defined Functions
HDL Coder / User-Defined Functions

説明

MATLAB Function ブロックでは、Simulink® モデルで実行される MATLAB® 関数を記述できます。MATLAB 関数はシミュレーション中に各タイム ステップで実行されます。Simulink モデルへの MATLAB コードの統合の詳細については、Simulink での MATLAB Function ブロックを使用した MATLAB 関数の実装を参照してください。Simulink Coder™ のライセンスがある場合は、MATLAB Function ブロックから Simulink Coder ターゲット用の C/C++ コードを生成することもできます。

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

[シンボル] ペインで、ブロック入力を端子ではなく Simulink パラメーターとして宣言できます。MATLAB Function ブロックは、入力、出力、およびパラメーターについて、タイプとサイズの継承もサポートします。それらのプロパティは明示的に指定できます。変数のデータ型の定義と変更MATLAB Function ブロック変数のサイズの指定、およびパラメーター変数の定義による複数の MATLAB Function ブロックでのデータの使用を参照してください。

MATLAB Function ブロックが含まれるモデルをシミュレートするときに、ソフトウェアはブロックからバイナリ コードまたは C/C++ MATLAB 実行可能 (MEX) コードを生成し、このコードをモデルに統合します。MATLAB Function ブロックでは、Simulink の外部にある MATLAB コードから C/C++ コードを生成するために使用する、MATLAB Coder と同じインフラストラクチャが使用されます。したがって、MATLAB Function ブロックのコードでは、コード生成でサポートされる MATLAB の表記法を使用する必要があります。MATLAB Function ブロックのコードと統合に関する制限を参照してください。

データの可視化をサポートするために、MATLAB Function ブロックは、シミュレーションについてのみ、MATLAB 関数の呼び出しをサポートします。MATLAB Function ブロックでの MATLAB エンジンを使用した関数呼び出しの実行を参照してください。Simulink Coder を使用してコードを生成する場合、Simulink の入力または出力に直接影響しない関数呼び出しは生成コードに表示されません。

すべて展開する

モデルに MATLAB Function を追加して入力信号を変更します。

  1. [シミュレーション] タブで [ライブラリ ブラウザー] をクリックします。[Simulink][User-Defined Functions] を選択します。MATLAB Function ブロックを Simulink キャンバスにドラッグします。

  2. ブロックをダブルクリックして MATLAB Function ブロック エディターを開きます。関数本体のコードを次のように置き換えます。

    y = 2*u;
  3. [親に移動] ボタン をクリックしてモデルに戻ります。Sine Wave ブロックを入力信号として追加し、Scope ブロックを追加して MATLAB Function ブロックの入力と出力を取得します。

    This shows the example model the instructions describe. It attaches a Sine Wave block and a Scope block to a MATLAB Function block you created.

  4. シミュレーションを実行し、Scope ブロックを開いてコードの効果を確認します。

拡張例

制限

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

  • MATLAB Function では、再帰呼び出しはできません。

端子

入力

すべて展開する

MATLAB 関数内の入力変数。実数値のスカラー、ベクトル、または行列として指定します。入力変数には、その変数の名前を使用した端子がそれぞれ関連付けられています。

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 関数内の出力変数。実数値のスカラー、ベクトル、または行列として指定します。出力変数には、その変数の名前を使用した端子がそれぞれ関連付けられています。

依存関係

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

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

パラメーター

すべて展開する

ブロック パラメーターを対話形式で編集するには、プロパティ インスペクターを使用します。Simulink ツールストリップから、[シミュレーション] タブの [準備] ギャラリーで [プロパティ インスペクター] を選択します。

メモ

MATLAB Function ブロックには Subsystem ブロックのパラメーターも含まれており、ブロックを右クリックして [ブロック パラメーター (Subsystem)] をクリックするとアクセスできます。ただし、それらのブロック パラメーターを更新することは推奨されません。

MATLAB Function ブロックをアクティブにする方法を次の値のいずれかとして指定します。

  • 継承 — Simulink モデルからの入力により MATLAB Function ブロックがアクティブになります。

    入力トリガーを定義すると、MATLAB Function ブロックはトリガー端子での Simulink 信号や関数呼び出しイベントに応じて実行されます。入力トリガーを定義しないでおくと、MATLAB Function ブロックはモデルから暗黙的にトリガーを継承します。これらの暗黙的なイベントは、ブロックに入力を提供する信号の離散または連続のサンプル時間です。

    データ入力を定義すると、MATLAB Function ブロックは最も速いデータ入力のレートでサンプリングします。データ入力を定義しないでおくと、MATLAB Function ブロックは親サブシステムの実行動作で定義されたレートでサンプリングします。

  • 離散 — ブロックの [サンプル時間] パラメーターで指定するレートを使用して MATLAB Function ブロックがアクティブになります。ブロックは指定されたレートに対応する一定の時間間隔で暗黙的イベントを生成します。モデルの他のブロックは異なるサンプル時間をもつことができます。

  • 連続 — メジャー タイム ステップ中にのみ MATLAB Function ブロックがアクティブになります。出力とローカル連続変数はメジャー タイム ステップ中とマイナー タイム ステップ中に計算されます。ブロックはゼロクロッシングを登録でき、状態の変化が発生するたびに Simulink モデルでブロックをサンプリングできます。ブロックはローカル連続変数の導関数を計算します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

MATLABFunctionConfiguration オブジェクトを使用する場合は、次のオプションを使用してプロパティを指定します。

パラメーター: UpdateMethod
値: "Inherited" (既定値) | "Continuous" | "Discrete"

Stateflow.EMChart オブジェクトを使用する場合は、次のオプションを使用してプロパティを指定します。

パラメーター: ChartUpdate
値: "INHERITED" (既定値) | "CONTINUOUS" | "DISCRETE"

シミュレーション中に MATLAB Function ブロックがアクティブになる時間間隔を指定します。既定値は、ブロックが Simulink からサンプル時間を継承することを示します。サンプル時間の指定の詳細については、サンプル時間の指定を参照してください。

Subsystem ブロックのパラメーターでは [サンプル時間] パラメーターは使用しないでください。代わりに、プロパティ インスペクターを使用してください。

依存関係

このパラメーターを有効にするには、[更新方法][離散] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

パラメーター: SampleTime
値: "-1" (既定値) | scalar | vector
データ型: string | char

詳細設定

MATLAB Function ブロック内のデータが整数オーバーフローで飽和するかどうかを次の値のいずれかとして指定します。

  • on — 整数をワード サイズが許容する最大の正または負の値に設定することにより飽和します。この設定は MATLAB の動作と同じです。

  • off — オーバーフロー状態の発生時にシミュレーション モードでランタイム エラーを生成します。Simulink Coder を使用してコードを生成するときの動作は、C 言語のコンパイラにより異なります。

ヒント

  • このパラメーターが on の場合、MATLAB は整数のオーバーフローやアンダーフローを検出するためのチェックをシミュレーション中に追加します。MATLAB Function ブロックのコードで整数のオーバーフローが発生しない場合は、このオプションを無効にした方が効率的です。

  • Simulink Coder で生成されたコードは整数のオーバーフローやアンダーフローをチェックしません。したがって、このパラメーターが off の場合、予期できない結果になる可能性があります。このような場合、オーバーフローとアンダーフローをテストするためのモデルのシミュレーションを実行してからコードを生成します。

  • このパラメーターの設定は整数の計算にしか影響しません。固定小数点や倍精度の計算には影響しません。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

パラメーター: SaturateOnIntegerOverflow
値: true or 1 (既定値) | false or 0
データ型: logical

MATLAB Function ブロックが、シミュレーション中に次元が変化する入力と出力のデータをサポートするかどうかを指定します。このパラメーターが on の場合、出力変数の [可変サイズ] プロパティを有効にして可変サイズの出力を定義できます。詳細については、可変サイズの MATLAB Function ブロック変数の宣言および可変サイズを参照してください。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

パラメーター: SupportVariableSizing
値: true or 1 (既定値) | false or 0
データ型: logical

MATLAB Function ブロックが直達セマンティクスをサポートし、そのためブロックの出力が入力の値によって直接制御されるかどうかを指定します。このパラメーターが off の場合、ブロックの出力はブロックの現在の状態のみに依存します。非直達を使用すると、フィードバック ループで MATLAB Function ブロックを使用し、代数ループを回避できます。詳細については、MATLAB Function ブロックでの非直達の使用を参照してください。

依存関係

このパラメーターを無効にするには、[更新方法][継承] または [離散] に設定する必要があります。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

パラメーター: AllowDirectFeedthrough
値: true or 1 (既定値) | false or 0
データ型: logical

R2021b 以降

MATLAB Function ブロックが長さ 1 の次元をもつ出力変数を固定サイズとして扱うかどうかを次の値のいずれかとして指定します。

  • off — 可変サイズをもつ変数として指定されているかどうかに関係なく、ブロックは少なくとも 1 つの次元の長さが 1 である出力変数を固定サイズとして扱います。

  • on — 可変サイズをもつ変数として指定されている場合、MATLAB Function ブロックはそれらの出力変数を可変サイズとして扱います。

詳細については、可変サイズを参照してください。

メモ

R2021b 以前のリリースでは、MATLAB Function ブロックは出力列ベクトルを常に 1 次元信号に変換します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

パラメーター: VectorOutputs1D
値: false or 0 (既定値) | true or 1
データ型: logical

R2023a 以降

少なくとも 1 つの次元の長さが 1 である変数が固定サイズかどうかを次の値のいずれかとして指定します。

  • on — 次元 1 の可変サイズの変数は固定サイズです。

  • off[可変サイズ] プロパティが有効になっているブロック内の変数は常に可変サイズです。

このパラメーターは、[可変サイズ] プロパティが有効になっている出力変数にのみ影響します。可変サイズを参照してください。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

パラメーター: TreatDimensionOfLengthOneAsFixedSize
値: true or 1 (既定値) | false or 0
データ型: logical

固定小数点プロパティ

継承される固定小数点と整数の信号を Fixed-Point Designer™ fi (Fixed-Point Designer) オブジェクトとして扱うかどうかを次の値のいずれかとして指定します。

  • Fixed-pointMATLAB Function ブロックはすべての固定小数点入力を Fixed-Point Designer の fi オブジェクトとして扱います。

  • Fixed-point & IntegerMATLAB Function ブロックはすべての固定小数点と整数入力を Fixed-Point Designer の fi オブジェクトとして扱います。

詳細については、fi オブジェクトの作成方法 (Fixed-Point Designer)を参照してください。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用してオブジェクトのプロパティを変更します。

パラメーター: TreatAsFi
値: "Fixed-point" (既定値) | "Fixed-point & Integer"

MATLAB Function ブロックに対する既定の fimath (Fixed-Point Designer) オブジェクト プロパティを次の値のいずれかとして指定します。

  • Same as MATLAB — ブロックは現在の既定の fimath オブジェクトと同じ fimath オブジェクト プロパティを使用します。テキスト ボックスが薄色表示され、現在のグローバル fimath オブジェクトが読み取り専用形式で表示されます。

  • Specify other — テキスト ボックス内で独自の fimath オブジェクトを指定します。これには 2 つの方法があります。

    • fimath オブジェクトをテキスト ボックス内で作成する。

    • fimath オブジェクトを MATLAB またはモデル ワークスペース内で作成して、その変数名をテキスト ボックスに入力する。このオプションを使用し、モデルを他のユーザーと共有する場合は、変数をモデル ワークスペースで定義します。

詳細については、fimath オブジェクトの作成 (Fixed-Point Designer)および固定小数点データ型と MATLAB Function ブロック (Fixed-Point Designer)を参照してください。

ヒント

  • MATLAB Function ブロックの fimath オブジェクトは、ブロックの内容に対する globalfimath (Fixed-Point Designer) オブジェクトとして動作します。ブロックは、このパラメーターの fimath オブジェクト プロパティを、fi オブジェクトとして扱うように選択した MATLAB Function ブロックに対するすべての固定小数点と整数の入力信号に関連付けます。MATLAB Function ブロックで fi オブジェクトを作成すると、その他の考慮事項が発生します。

    • fi オブジェクトの作成時に fimath オブジェクトがオブジェクトに関連付けられない場合、[MATLAB 関数 fimath] のプロパティに関係なく、fi コンストラクターは既定の fimath オブジェクト設定を使用します。fi オブジェクトの作成後にオブジェクトで操作を実行する場合、オブジェクトは [MATLAB 関数 fimath] のプロパティを採用します。

    • fi コンストラクターで fimath オブジェクトを指定する場合、fi コンストラクターは値を量子化するときにその fimath オブジェクトに従います。fi コンストラクターで指定されない fimath オブジェクト設定では、いずれも [MATLAB 関数 fimath] で指定されたプロパティが使用されます。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、ブロックの MATLABFunctionConfiguration オブジェクトまたは Stateflow.EMChart オブジェクトにアクセスし、ドット表記を使用して関連するオブジェクトのプロパティを変更します。

MATLABFunctionConfiguration オブジェクトを使用する場合は、次のオプションを使用してプロパティを指定します。

パラメーター: FimathMode
値: "SameAsMATLAB" (既定値) | "UserSpecified"

Stateflow.EMChart オブジェクトを使用する場合は、次のオプションを使用してプロパティを指定します。

パラメーター: EmlDefaultFimath
値: "Same as MATLAB Default" (既定値) | "Other:UserSpecified"

ブロックの特性

データ型

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

直達

はいa

多次元信号

はいa

可変サイズの信号

はいa

ゼロクロッシング検出

いいえ

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

ヒント

  • 以下で定義された関数を呼び出すことができます。

    • Simulink Function ブロック。

    • チャート内の Stateflow® 関数。チャート内の関数を呼び出すには、[チャート レベルの関数をエクスポート] プロパティと [エクスポートされた関数をグローバルに可視として扱う] プロパティを有効にします。

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

拡張機能

すべて展開する

バージョン履歴

R2011a で導入

すべて展開する