Main Content

イベントベースのサブシステムの線形化 (外部でスケジュールされたサブシステム)

イベントベースのサブシステムの線形化

イベントベースのサブシステム (Triggered Subsystem) と他のイベントベースのモデルでは、線形化のときに特別な処理方法が必要になります。

Triggered Subsystem の実行は、ゼロクロッシングなど以前の信号イベントに左右されます。ただし、線形化は特定の瞬間に時間内に実行されるので、トリガー イベントが発生することはありません。

イベントベースのサブシステムの一例としては、内燃 (IC) エンジンがあります。ピストン機関が圧縮行程の最上部に近づくと、火花によって燃焼が発生します。燃焼を発生させる火花のタイミングは、エンジンのクランク軸の速度と位置によって決まります。

scdspeed モデルで、ピストンが圧縮行程の最上部と最下部のどちらに達したときも、Triggered Subsystem によってイベントが発生します。このような Triggered Subsystem が存在する場合、線形化には意味がありません。

イベントベースのサブシステムの線形化の手法

シミュレーション動作を保持しながら Triggered Subsystem の線形化で意味のある結果を導くには、次のいずれかの手順に従ってください。

  • 時間とともにイベントべースの動作を近似する lumped average モデルとしてダイナミクスを再作成する。

  • ノーマル シミュレーション モードを使用した周期 Function-Call Subsystem としてダイナミクスを再作成する。

    周期 Function-Call Subsystem の場合、このサブシステムは、サブシステムが周期的に実行されるサンプリングに線形化されます。

    多くの制御アプリケーションでは、コントローラーは離散コントローラーとして実装されますが、コントローラーの実行は外部スケジューラーによって駆動されます。このような線形化プラント モデルは、コントローラー サブシステムが周期 Function-Call Subsystem である場合に使用してください。

イベントベースのダイナミクスを再作成しても線形化の結果が良好でない場合は、周波数応答推定を試してください。モデル線形化器を使用した周波数応答の推定を参照してください。

メモ

Triggered Subsystem が現在の操作条件で無効にされ、直接パススルーの I/O ペアを少なくとも 1 つもつ場合、サブシステムは線形化中に線形化パスを中断します。そのような場合、ブロック置換を指定するか、サブシステムがパススルー I/O ペアをもたないようにします。

曲線近似 (lumped average モデル) を使用したイベントベースのサブシステムの近似

以下の例では、曲線近似を使用してエンジンのイベントベースのダイナミクスを近似する方法を説明します。

scdspeed/Throttle & Manifold/Intake Manifold はイベントトリガー サブシステムなので、scdspeed モデルはゼロに線形化されます。

scdspeed/Throttle & Manifold/Intake Manifold サブシステムのイベントベースのダイナミクスの近似は、サブシステム内に Convert to mass charge ブロックを追加することで行えます。

Convert to mass charge ブロックは、空気充填量、マニホールド圧、エンジン速度の間の関係を 2 次多項式として近似します。

Air Charge = p1×Engine Speed + p2×Manifold Pressure + p3×(Manifold Pressure)2+ p4×Manifold Pressure×Engine Speed + p5

内部信号について測定されたデータを利用できない場合は、当初のモデルのシミュレーション データを使用し、最小二乗近似を使って不明なパラメーター p1p2p3p4、および p5 を計算します。

内部信号について測定されたデータがある場合は、Simulink® Design Optimization™ ソフトウェアを使用して不明なパラメーターを計算できます。モデル パラメーターの計算、この近似モデルの線形化、および線形モデルの制御されたフィードバックの設計の詳細については、Engine Speed Model Parameter Estimation (Simulink Design Optimization)を参照してください。

次の図は、当初のイベントベースのモデルと近似モデルのシミュレーションを比較したものです。それぞれのパルスは、エンジン速度のステップの変化に対応します。ステップの変化の規模は 1500 ~ 5500 です。したがって、この近似モデルを使用すると、1500 RPM ~ 5500 RPM の間でエンジンを正確にシミュレーションして線形化できます。

周期 Function-Call Subsystem を使用したイベントベースのダイナミクスの近似

以下の例では、周期 Function-Call Subsystem を使用して線形化のためにイベントベースのダイナミクスを近似する方法を説明します。

Simulink モデルを開きます。

mdl = 'scdPeriodicFcnCall';
open_system(mdl)

モデルの操作点でモデルを線形化します。

io = getlinio(mdl);
linsys = linearize(mdl,io)
linsys =
 
  D = 
                 Desired  Wat
   Water-Tank S             0
 
Static gain.

このサブシステムは周期関数呼び出しではないため、線形化はゼロになります。

Function-Call Subsystem ブロックである Externally Scheduled Controller ブロックを開きます。

function ブロックを開いて構成します。

  • [サンプル時間タイプ] パラメーターを [periodic] に設定します。

  • [サンプル時間] パラメーターを、コントローラーのサンプル時間である 0.01 に設定します。

あるいは、次のコードを使用して function ブロックをプログラムで構成できます。

block = 'scdPeriodicFcnCall/Externally Scheduled Controller/function';
set_param(block,'SampleTimeType','periodic')
set_param(block,'SampleTime','0.01')

モデルを線形化します。

linsys2 = linearize(mdl,io);
bode(linsys2)

Figure contains 2 axes objects. Axes object 1 with title From: Desired Water Level To: Water-Tank System contains an object of type line. This object represents linsys2. Axes object 2 contains an object of type line. This object represents linsys2.

線形化はゼロではなくなります。

関連するトピック