このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Closed-Loop PID Autotuner ブロックを使用したゲイン スケジュール コントローラーの調整
この例では、Closed-Loop PID Autotuner ブロックを使用して 1 回のシミュレーションでゲイン スケジュール コントローラーを調整する方法を説明します。
Water-Tank System モデル
この例では、ゲイン スケジュール コントローラーを使用して非線形の Water-Tank System プラントの水位を制御します。Water-Tank System プラントは元々、watertank
Simulink® モデルの単一の PI コントローラーによって制御されています。非線形 Water-Tank System プラントの詳細については、watertank Simulink モデルを参照してください。
以下の節では、watertank
モデルを変更してゲイン スケジュール コントローラーを調整および検証する方法について説明します。あるいは、この例で用意されている watertank_gainscheduledcontrol
モデルを使用します。
Closed-Loop PID Autotuner ブロックとプラントおよびコントローラーの接続
以下のブロック線図に示すように、コントローラーとプラントの間に Closed-Loop PID Autotuner ブロックを挿入します。"start/stop" の信号によって閉ループ実験が開始および停止されます。実験が実行されていない場合、Closed-Loop PID Autotuner ブロックは 1 のゲインのブロックのように動作し、"u" の信号が "u+Δu" に直接渡されます。
調整されたゲインを保存するブロックの接続
ゲイン スケジュールを作成するために、自動調整されたゲインが各操作点で記録されます。この例では、Triggered Subsystem を使用して、自動調整器 "start/stop" 信号の立ち下がりエッジでワークスペースに対する基準の高さとコントローラー ゲインを記述します。このモデルをシミュレートすると、コントローラーをテストするためにダイナミック ルックアップ テーブルで簡単に使用できる調整されたゲインとブレークポイントの配列が生成されます。
ゲイン スケジュール コントローラーの性能の検証
ブレークポイントと調整されたゲインのセットを取得した後、調整されたゲイン スケジュール コントローラーを Water-Tank System プラントでテストします。そのためには、ブロック線図に示すように、自動調整器ブロックを削除し、PID Controller ブロックのソースを外部に変更して、Lookup Table Dynamicブロックを挿入します。
モデル例における調整とテスト両方の統合
この例では、ゲイン スケジュール コントローラーは Closed-Loop PID Autotuner ブロックを使用して調整され、その性能は同じモデルでテストされます。モデル例ではバリアント サブシステムを使用して調整ワークフローとテスト ワークフローを整理します。
調整モードとテスト モードを切り替えるには、Variant Subsystem ブロックをダブルクリックします。
単一の操作点でのコントローラーの調整
複数の操作点でゲイン スケジュール コントローラーを調整する前に、単一の操作点で調整すると、Closed-Loop PID Autotuner ブロックの構成に役立ちます。watertank
Simulink モデルで使用されるコントローラー ゲインをもつモデル例 watertank_gainscheduledcontrol
を開きます。
mdl = 'watertank_gainscheduledcontrol'; Kp = 1.599340; Ki = 0.079967; open_system(mdl); set_param([mdl,'/Variant Subsystem'],'SimMode','Tuning');
Closed-Loop PID Autotuner ブロックの構成
Closed-Loop PID Autotuner ブロックを Water-Tank System プラント モデルとPID Controllerブロックに接続したら、ブロック パラメーターを使用して調整と実験の設定を指定します。この例では、自動 PID 調整およびグラフィカルなボード設計法を使用した補償器の設計の例と同じ設計要件を使用します。これらの設計要件の形式は、閉ループ ステップ応答の特性です。
オーバーシュートが 5% 未満
立ち上がり時間が 5 秒未満
PID コントローラーを調整して前述の設計要件を満たすために、Closed-Loop PID Autotuner ブロックのパラメーターが事前に入力されます。[調整] タブには 3 つの主要な調整設定があります。
ターゲットの帯域幅 - コントローラーの望ましい応答速度を指定します。ターゲットの帯域幅は約 2/目的の立ち上がり時間です。目的の立ち上がり時間である 4 秒に対して、ターゲットの帯域幅を = 2/4 = 0.5 rad/s に設定します。
ターゲットの位相余裕 - コントローラーの望ましいロバスト性を指定します。この例では、既定値の 60 度から開始します。
実験のサンプル時間 - Autotuner ブロックによって実行される実験のサンプル時間。サンプル時間 = 0.02/0.5 = 0.04 秒に対して推奨されている 0.02/帯域幅を使用します。
[実験] タブには 3 つの主要な実験設定があります。
プラント タイプ - プラントが漸近的に安定か、または積分であるかを指定します。この例では、Water-Tank System プラントは積分です。
プラントの符号 - プラントが正と負のどちらの符号をもつかを指定します。定格操作点でのプラント入力における正の変化によって、プラントが新しい定常状態に達したときにプラント出力に正の変化が生じる場合、プラントの符号は正になります。この例では、Water-Tank System プラントの符号は正です。
正弦波振幅 - 挿入される正弦波摂動の振幅を指定します。この例では、0.3 の正弦波振幅を指定します。
1 つの操作点でのシミュレーション
実験を 140 秒で開始し、水位が必ず定常状態 に到達するようにします。推奨される実験持続時間は 200/帯域幅秒 = 200/0.4 = 500 秒です。開始時間が 140 秒の場合、終了時間は 640 秒です。完全な実験を取得するために、シミュレーション終了時間がさらに増加します。
set_param([mdl,'/Variant Subsystem/Tuning/Closed-Loop PID Autotuner1'],'TargetPM','60'); set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal_OnePoint'); simOut = sim(mdl,'StopTime','800'); simOut.Kp_tuned
ans = 1.8254
simOut.Ki_tuned
ans = 0.2037
watertank
Simulink モデルでは、初期 PI コントローラー ゲインは Kp = 1.599340 および Ki = 0.079967 です。調整後、コントローラー ゲインは Kp = 1.82567 および Ki = 0.20373 です。
調整結果のチェックおよび自動調整パラメーターの調整
コントローラー ゲインを自動調整された新しいゲインと置き換えて、設計要件を検証します。
Kp = simOut.Kp_tuned; Ki = simOut.Ki_tuned; simOut = sim(mdl,'StopTime','100'); figure; plot(simOut.ScopeDataGS.time,simOut.ScopeDataGS.signals.values); grid on title('Step Response of Controller Tuned with 60-Degree Target Phase Margin');
StepPerformance_OnePoint = stepinfo(simOut.ScopeDataGS.signals.values(:), ...
simOut.ScopeDataGS.time(:),10,1)
StepPerformance_OnePoint = struct with fields:
RiseTime: 3.6254
TransientTime: 22.5227
SettlingTime: 22.5227
SettlingMin: 9.1086
SettlingMax: 10.7822
Overshoot: 8.6912
Undershoot: 0
Peak: 9.7822
PeakTime: 9.5500
ステップ応答の立ち上がり時間は 3.6251 秒でオーバーシュートは 8.6895% です。オーバーシュートは目的より大きくなっています。ターゲットの位相余裕を 75 度に増加して閉ループの過渡応答を向上させます。
set_param([mdl,'/Variant Subsystem/Tuning/Closed-Loop PID Autotuner1'],'TargetPM','75');
シミュレーション結果を確認します。システムは実験開始時に定常状態であり、調整の完了後に定常状態を返します。コントローラーの調整性能の指標として、Closed-Loop PID Autotuner ブロックは推奨される 500 秒よりも早く 100% の収束レベルに到達します。結果として、実験持続時間を 300 秒に短縮します。これは、終了時間が 440 秒であることを意味します。したがって、シミュレーション終了時間を 800 秒から 500 秒に短縮します。
Kp = 1.599340; Ki = 0.079967; set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal_OnePointAdjusted'); simOut = sim(mdl,'StopTime','500'); simOut.Kp_tuned
ans = 1.9348
simOut.Ki_tuned
ans = 0.1142
新しい実験パラメーターでシミュレートすると、調整されたゲインの Kp = 1.93514 および Ki = 0.11415 が生成されます。増加されたターゲット位相余裕の値で調整されたゲインを使用してステップ応答を再び確認します。
Kp = simOut.Kp_tuned; Ki = simOut.Ki_tuned; simOut = sim(mdl,'StopTime','100'); figure; plot(simOut.ScopeDataGS.time,simOut.ScopeDataGS.signals.values); grid on title('Step Response of Controller Tuned with 75-Degree Target Phase Margin');
StepPerformance_OnePointAdjusted = stepinfo(simOut.ScopeDataGS.signals.values(:), ...
simOut.ScopeDataGS.time(:),10,1)
StepPerformance_OnePointAdjusted = struct with fields:
RiseTime: 4.1402
TransientTime: 21.4152
SettlingTime: 21.4152
SettlingMin: 9.1041
SettlingMax: 10.2832
Overshoot: 3.1463
Undershoot: 0
Peak: 9.2832
PeakTime: 12.1100
ステップ応答の立ち上がり時間は 4.1398 秒でオーバーシュートは 3.1438% です。どちらも設計要件を満たしています。
複数の操作点 = [5, 10, 15, 20] に対して調整されたゲインでモデルをシミュレートします。
set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal_SinglePID'); simOut_single = sim(mdl,'StopTime','2400');
複数の操作点でのゲイン スケジュール コントローラーの調整
調整されたゲインのセットは目的の応答を生成します。複数の操作点で調整を実行してゲイン スケジュール コントローラーを作成できるようになります。
入力調整信号の作成
1 から 20 のスケジューリング変数 の操作範囲は自動調整の操作点によってカバーされます。この例では、ゲイン スケジュール コントローラーのゲインは = [5, 10, 15, 20] を使用した 4 つの操作点で調整されます。複数の操作点で調整するには、Signal Editorブロックを使用して、基準の start/stop 信号と自動調整器の start/stop 信号を作成します。
複数の操作点のシミュレーション
入力信号を使用して、自動調整プロセス全体を通して watertank_gainscheduledcontrol
モデルをシミュレートします。シミュレーションの終了時に、調整されたゲインとブレークポイントの両方をベクトルとして MATLAB® ワークスペースに保存します。
Kp = 1.599340; Ki = 0.079967; set_param([mdl,'/Signal Editor'],'ActiveScenario','TuningSignal'); simOut = sim(mdl,'StopTime','2400'); Kp_tuned = simOut.Kp_tuned
Kp_tuned = 4×1
1.9279
1.9327
1.9358
1.9380
Ki_tuned = simOut.Ki_tuned
Ki_tuned = 4×1
0.1277
0.1183
0.1122
0.1078
breakpoints = simOut.breakpoints
breakpoints = 4×1
5
10
15
20
ゲイン スケジュール コントローラーの性能の向上
ゲイン スケジュール コントローラーの性能を確認するには、Variant Subsystem をテスト モードに設定してモデルをシミュレートします。
set_param([mdl,'/Variant Subsystem'],'SimMode','Testing'); simOut_GS = sim(mdl,'StopTime','2400');
ゲイン スケジュール コントローラーを使用すると、Water-Tank System プラントの水位のステップ応答は、watertank Simulink モデルで使用される調整されていないコントローラーよりもはるかに高速で、オーバーシュートが少なくなります。
compareControllers_watertank
スクリプトを使用して = 10 で調整された PID コントローラーと、ゲイン スケジュール コントローラーのステップ応答の特性を計算します。スクリプトにより 2 つのテーブルが生成されます。これには、ゲイン スケジュール コントローラーと単一のコントローラー ゲインのセットに対する立ち上がり時間 (秒単位) とオーバーシュートの割合が含まれます。
compareControllers_watertank
RiseTime=2×4 table
H = 1 to 5 H = 5 to 10 H = 10 to 15 H = 15 to 20
__________ ___________ ____________ ____________
Single PID 4.6725 3.7822 3.7154 3.683
Gain-Scheduled 4.5097 3.7557 3.7275 3.7208
Overshoot=2×4 table
H = 1 to 5 H = 5 to 10 H = 10 to 15 H = 15 to 20
__________ ___________ ____________ ____________
Single PID 0.69826 5.258 5.8907 6.2264
Gain-Scheduled 1.5212 5.5034 5.7731 5.8532
1 つの操作点で調整された単一のゲインのセットと比べて、ゲイン スケジュール コントローラーは次のようになります。
ステップ = 1 ~ 5 ではオーバーシュートが大きくなり、立ち上がり時間が速くなります。
単一のゲインのセットは = 10 で調整されているため、ステップ = 5 ~ 10 で同様のパフォーマンスを達成します。
ステップ = 10 ~ 15 および = 15 ~ 20 ではオーバーシュートが小さくなり、立ち上がり時間が遅くなります。
このワークフローは、Closed-Loop PID Autotuner ブロックを使ってゲイン スケジュール コントローラーを調整する場合に便利です。
モデルを閉じます。
close_system(mdl,0);
参考
Closed-Loop PID Autotuner | PID Controller | Signal Editor | Lookup Table Dynamic | Variant Subsystem, Variant Model