関数呼び出しサブシステム中での積分ブロック使用方法について
2 views (last 30 days)
Show older comments
Yudai Tanimura
on 4 Nov 2021
Answered: Toshinobu Shintai
on 4 Nov 2021
を参考に、Kalman Filterプログラムを作成しています。
状態方程式を扱うサブブロック内に離散積分ブロックを用いたいのですが、下記エラーにて停止します。
- このブロックが 2 つの連続する実行間で経過した時間を管理するサービスを必要とするため、ブロック 'calc_batt_20211104/batt_1/SOC_KF/BatteryStateFcn1/Discrete-Time Integrator' を含むことはできません。関数呼び出しサブシステムは t = 0 において複数回実行されるため、2 つの実行間の経過時間を適切に定義することができません。
- サブシステム 'calc_batt_20211104/batt_1/SOC_KF/BatteryStateFcn1' において、関数呼び出し入力端子要素 1 を呼び出す関数呼び出しの際に、時間 0.0 でエラーが発生しました
積分ブロックを用いる方法あるいは代替方法があればご教示ください。
0 Comments
Accepted Answer
Toshinobu Shintai
on 4 Nov 2021
状態方程式を計算するサブシステム内では、状態を含まない計算式のみを記述しなければなりません。積分器を使うということは、状態を新たに必要とする、ということですので、その状態は状態方程式に追加して組み込まなければなりません。
元のサンプルモデルの「Simulink Function - State Transition Function」というサブシステムの中に"x"や"xNext"というArgument Inport/Outport ブロックがあったはずです。それらの要素数を一つ増やした形で積分の計算を作ってください。
積分計算は、最もシンプルには
x[k] = x[k - 1] + ts * u[k]
と表現できますので、例えば以下のように構成することができます。
0 Comments
More Answers (0)
See Also
Categories
Find more on モデル コンポーネントのスケジュール in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!