関数呼び出しサブシス​テム中での積分ブロッ​ク使用方法について

3 views (last 30 days)
Yudai Tanimura
Yudai Tanimura 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 でエラーが発生しました
積分ブロックを用いる方法あるいは代替方法があればご教示ください。

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 4 Nov 2021
状態方程式を計算するサブシステム内では、状態を含まない計算式のみを記述しなければなりません。積分器を使うということは、状態を新たに必要とする、ということですので、その状態は状態方程式に追加して組み込まなければなりません。
元のサンプルモデルの「Simulink Function - State Transition Function」というサブシステムの中に"x"や"xNext"というArgument Inport/Outport ブロックがあったはずです。それらの要素数を一つ増やした形で積分の計算を作ってください。
積分計算は、最もシンプルには
x[k] = x[k - 1] + ts * u[k]
と表現できますので、例えば以下のように構成することができます。

More Answers (0)

Categories

Find more on モデル コンポーネントのスケジュール in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!