Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

MATLAB Function ブロックの統合に関する考慮事項

MATLAB Function ブロックでの非直達の使用

Simulink® ブロックでは、"直達" はブロックの出力が入力端子信号の値によって直接制御されることを意味します。非直達では、出力信号の値は、シミュレーション中の少なくとも 1 つの関数の入力信号の値に依存しません。

既定の設定では、MATLAB Function ブロックで直達が有効になっています。直達を無効にすると、Simulink セマンティクスによって、出力が現在の状態にのみ依存することが確実になります。非直達を使用すると、フィードバック ループで MATLAB Function ブロックを使用し、代数ループを回避できます。

非直達を使用するには、次を行います。

  • 最上位関数の本体内で coder.inline を使用することで、MATLAB Function ブロックの関数のインライン化を有効にする。

  • MATLAB Function ブロックのプロパティを開き、[直達を許可] をオフにします。詳細については、MATLAB Function ブロック プロパティの指定を参照してください。

非直達の制限

入力または更新された永続変数に依存する出力をプログラムしないでください。たとえば、非直達ブロックでこのコードは使用しません。

counter = counter + 1;  	% update state
output = counter;       	% compute output based on updated state
代わりに、以下のコードを使用します。
output = counter;       	% compute output based on current state
counter = counter + 1;  	% update state
詳細については、MATLAB 関数での永続変数の初期化を参照してください。

カスタム コード関数の出力は現在の状態のみに依存するように強制できないため、[直達を許可] が無効になっている場合、MATLAB Function ブロックでカスタム コード関数を呼び出すことはできません。MATLAB Function ブロックでカスタム コード関数を呼び出すとエラーが発生します。

参考

関連するトピック