このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
MATLAB 関数での永続変数の初期化
"永続変数" は、関数の呼び出し間でその値がメモリに保持される、MATLAB® 関数のローカル変数です。モデルからコードを生成する場合は、MATLAB 関数の永続変数を初期化する必要があります。詳細については、persistent
を参照してください。
永続変数を含む MATLAB 関数を Simulink® モデル内で使用するときには、以下のガイドラインに従う必要があります。
関数の永続変数の初期化は、定数へのアクセスのみで行う。
関数の制御フローが、初期化の有無に決して依存しないようにする。
これらのガイドラインに従わない場合、いくつかの条件で初期化エラーが発生します。
[直達を許可] プロパティがオフで、永続変数を含む MATLAB Function ブロック
[状態制御] が
[同期]
に設定されている State Control ブロックを含むモデル内にあり、永続変数を含む MATLAB Function ブロックMoore マシンのセマンティクスを実装し、永続変数を含む MATLAB 関数を使用する Stateflow® チャート
たとえば、以下の関数 fcn
は永続変数 n
を使用します。fcn
は両方のガイドラインに違反しています。n
の初期値は入力 u
に依存し、return
ステートメントが関数の通常の制御フローに割り込みを行います。したがって、前述の条件のいずれかがあてはまるモデルでこのコードを使用すると、エラーが発生します。
function y = fcn(u) persistent n if isempty(n) n = u; y = 1; return end y = n; n = n + u; end
エラーを防止するには、永続変数を定数値に設定して return
ステートメントを削除することにより、永続変数を初期化します。変更後のバージョンの fcn
は、エラーを発生せずに永続変数を初期化します。
function y = fcn(u) persistent n if isempty(n) n = 1; end y = n; n = n + u; end
直達のない MATLAB Function ブロック
このモデルには、前述した最初のバージョンの fcn
を使用する MATLAB Function ブロックが含まれます。MATLAB Function ブロックの入力は矩形波であり、Sign ブロックと Sine Wave ブロックから渡されます。MATLAB Function ブロックは、各タイム ステップで値 u
を永続変数 n
に加算します。
モデルのシミュレーションを実行します。以下の理由により、シミュレーションはエラーを返します。
永続変数
n
の初期値は入力u
に応じて異なります。return
ステートメントは、関数の通常の制御フローへの割り込みを行います。MATLAB Function ブロックの [直達を許可] プロパティがオフになっています。
修正バージョンの fcn
に示すように、MATLAB Function ブロック コードを変更します。モデルのシミュレーションを再び実行します。
同期モードの State Control ブロック
このモデルには、前述した最初のバージョンの fcn
を使用する MATLAB Function ブロックが含まれます。MATLAB Function ブロックの入力は矩形波であり、Sign ブロックと Sine Wave ブロックから渡されます。MATLAB Function ブロックは、各タイム ステップで値 u
を永続変数 n
に加算します。このモデルには State Control ブロックが含まれ、その [状態制御] は Synchronous
に設定されています。
モデルのシミュレーションを実行します。以下の理由により、シミュレーションはエラーを返します。
永続変数
n
の初期値は入力u
に応じて異なります。return
ステートメントは、関数の通常の制御フローへの割り込みを行います。このモデルには State Control ブロックが含まれ、その [状態制御] は
Synchronous
に設定されています。
修正バージョンの fcn
に示すように、MATLAB Function ブロック コードを変更します。モデルのシミュレーションを再び実行します。
Moore セマンティクスを実装する Stateflow チャート
このモデルの Stateflow チャートには、前述した最初のバージョンの fcn
を使用する MATLAB Function ブロックが含まれます。MATLAB Function ブロックは各タイム ステップで、アクティブ ステートによって決まる値 (1
または -1
) を永続変数 n
に加算します。
モデルのシミュレーションを実行します。以下の理由により、シミュレーションはエラーを返します。
永続変数
n
の初期値は入力u
に応じて異なります。return
ステートメントは、関数の通常の制御フローへの割り込みを行います。チャートは Moore セマンティクスを実装しています。
修正バージョンの fcn
に示すように、MATLAB 関数コードを変更します。モデルのシミュレーションを再び実行します。
参考
ブロック
- MATLAB Function (Simulink) | State Control (HDL Coder) | Chart
関数
関連するトピック
- MATLAB Function ブロックでの非直達の使用 (Simulink)
- State Control ブロックを使用する同期サブシステムの動作 (HDL Coder)
- Moore チャートを設計する際の注意事項