このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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 ブロックの [直達を許可] プロパティがオフになっています。
MATLAB Function ブロック コードを、修正バージョンの fcn
に示すように変更します。モデルのシミュレーションを再度実行します。
同期モードの State Control ブロック
このモデルには、前述した最初のバージョンの fcn
を使用する MATLAB Function ブロックが含まれます。この MATLAB Function ブロックの入力は、Sign ブロックと Sine Wave ブロックによって指定される矩形波です。この MATLAB Function ブロックは、各タイム ステップで、u
の値を永続変数 n
に追加します。このモデルには、[状態制御] が [Synchronous]
に設定されている State Control ブロックが含まれます。
モデルのシミュレーションを実行します。このシミュレーションでは、次の理由によりエラーが返されます。
永続変数
n
の初期値が入力u
に応じて異なる。return
ステートメントは、関数の通常の制御フローへの割り込みを行います。このモデルには、[状態制御] が
[Synchronous]
に設定されている State Control ブロックが含まれます。
MATLAB Function ブロック コードを、修正バージョンの fcn
に示すように変更します。モデルのシミュレーションを再度実行します。
Moore セマンティクスを実装する Stateflow チャート
このモデルには、前述した最初のバージョンの fcn
を使用する MATLAB 関数をもつ Stateflow チャートが含まれます。この MATLAB 関数は、各タイム ステップで、アクティブ ステートによって特定された値 (1
または -1
) を永続変数 n
に追加します。
モデルのシミュレーションを実行します。このシミュレーションでは、次の理由によりエラーが返されます。
永続変数
n
の初期値が入力u
に応じて異なる。return
ステートメントが、関数の通常の制御フローへの割り込みを行う。このチャートが Moore セマンティクスを実装している。
MATLAB 関数コードを、修正バージョンの fcn
に示すように変更します。モデルのシミュレーションを再度実行します。
参考
persistent
| MATLAB Function | State Control | Chart (Stateflow)