SimulinkのMatlab functionで配列を保持する方法について

SimulinkでMatlab functionを使用し配列を計算。
その配列を次のステップでもMatlab functionで使用したいのですが、配列を保持する方法がわかりません。
Simulink で配列を保持する方法について教えていただきたいです。

 採用された回答

Toshinobu Shintai
Toshinobu Shintai 2020 年 3 月 15 日

0 投票

配列に限らず、Simulinkで変数を保持するためには「persistent」を使う必要があります。
関数の最初の方で以下のように記述します。
persistent a;
if isempty(a)
a = zeros(3,1);
end
この場合「a」がstatic変数扱いとなり、次の計算ステップまで値を保持するようになります。
「if isempty」のところは、aの初期化を行っています。ここで任意の値に初期化することができます。初期化は必ず行ってください。

4 件のコメント

Kenjirou Oomori
Kenjirou Oomori 2020 年 3 月 16 日
返信ありがとうございます。
早速Simulinkに上記のプログラムをコピー&ペーストしましたが、以下の様なエラーが出ました。
「MATLAB Function は、ブロックが連続サンプル時間を指定または継承するときに無効である構造を使用しています。無効な構造には、永続変数またはグローバル変数の使用、エクスポートした関数の呼び出し、または coder.extrinsic の使用が含まれます。」
なぜ無効な構造というのが発生しているのでしょうか?
よろしくお願いいたします。
Toshinobu Shintai
Toshinobu Shintai 2020 年 3 月 16 日
初めて見るエラーです。
私の方でR2019b、R2015a、R2011bで確認しましたが、全てエラーなく動作していましたので、バージョンの問題では無いと思います。ブロックは連続サンプル時間を継承しています。
コードの使い方をもう少し詳しく教えていただくか、モデルを貼っていただけませんでしょうか。
Kenjirou Oomori
Kenjirou Oomori 2020 年 3 月 16 日
お騒がせしてすみません。
新たにブロック線図を作り直したら、無事実行することができました。
ありがとうございました。
Toshinobu Shintai
Toshinobu Shintai 2020 年 3 月 16 日
安心しました。こちらこそありがとうございます。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeSimulink Function についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!